Index: chrome/renderer/print_web_view_helper_win.cc |
diff --git a/chrome/renderer/print_web_view_helper_win.cc b/chrome/renderer/print_web_view_helper_win.cc |
index 075ed6bca5fe7554adeb4fefaec58580579d22ed..59b8cf1c1e7619b68724412f0f26e7e4ac911847 100644 |
--- a/chrome/renderer/print_web_view_helper_win.cc |
+++ b/chrome/renderer/print_web_view_helper_win.cc |
@@ -162,13 +162,28 @@ void PrintWebViewHelper::RenderPage( |
} |
float webkit_page_shrink_factor = frame->getPrintPageShrink(page_number); |
+ float scale_factor = css_scale_factor * webkit_page_shrink_factor; |
+ |
+ gfx::Rect canvas_area = |
+ params.display_header_footer ? gfx::Rect(page_size) : content_area; |
+ |
SkDevice* device = metafile->StartPageForVectorCanvas( |
- page_size, content_area, css_scale_factor * webkit_page_shrink_factor); |
+ page_size, canvas_area, scale_factor); |
DCHECK(device); |
// The printPage method may take a reference to the canvas we pass down, so it |
// can't be a stack object. |
SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device); |
canvas->unref(); // SkRefPtr and new both took a reference. |
+ |
+ if (params.display_header_footer) { |
+ // |page_number| is 0-based, so 1 is added. |
+ PrintHeaderAndFooter(canvas.get(), page_number + 1, |
+ print_preview_context_.total_page_count(), scale_factor, |
+ page_layout_in_points, *header_footer_info_, params); |
+ } |
+ |
+ canvas->translate((content_area.x() - canvas_area.x()) / scale_factor, |
+ (content_area.y() - canvas_area.y()) / scale_factor); |
if (is_preview) { |
printing::MetafileSkiaWrapper::SetMetafileOnCanvas(*canvas, metafile); |
skia::SetIsDraftMode(*canvas, is_print_ready_metafile_sent_); |
@@ -177,14 +192,6 @@ void PrintWebViewHelper::RenderPage( |
float webkit_scale_factor = frame->printPage(page_number, canvas.get()); |
- if (params.display_header_footer) { |
- // |page_number| is 0-based, so 1 is added. |
- PrintHeaderAndFooter(canvas.get(), page_number + 1, |
- print_preview_context_.total_page_count(), |
- css_scale_factor * webkit_page_shrink_factor, |
- page_layout_in_points, *header_footer_info_, params); |
- } |
- |
if (*actual_shrink <= 0 || webkit_scale_factor <= 0) { |
NOTREACHED() << "Printing page " << page_number << " failed."; |
} else { |