Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8834)

Unified Diff: chrome/renderer/print_web_view_helper.cc

Issue 10083060: [Print Preview]: Added code to support pdf fit to page functionality. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/print_web_view_helper.cc
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index b31cd851cfe5213c2219515b3dde4681cd01e5f7..75dc9c21093e7f7f5fd3bb91afb98d0287c186c7 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -341,6 +341,15 @@ printing::MarginType GetMarginsForPdf(WebFrame* frame, const WebNode& node) {
return printing::PRINTABLE_AREA_MARGINS;
}
+bool FitToPageEnabled(const DictionaryValue& job_settings) {
+ bool fit_to_paper_size = false;
+ if (!job_settings.GetBoolean(printing::kSettingFitToPageEnabled,
+ &fit_to_paper_size)) {
+ NOTREACHED();
+ }
+ return fit_to_paper_size;
+}
+
// Get the (x, y) coordinate from where printing of the current text should
// start depending on the horizontal alignment (LEFT, RIGHT, CENTER) and
// vertical alignment (TOP, BOTTOM).
@@ -833,6 +842,43 @@ bool PrintWebViewHelper::IsPrintToPdfRequested(
return print_to_pdf;
}
+void PrintWebViewHelper::UpdateFitToPageInfo(
+ WebKit::WebFrame* frame, const WebKit::WebNode& node,
+ const DictionaryValue& job_settings, PrintMsg_PrintPages_Params* settings) {
+ bool source_is_html = true;
+ if (print_for_preview_) {
+ if (!job_settings.GetBoolean(printing::kSettingPreviewModifiable,
+ &source_is_html)) {
+ NOTREACHED();
+ }
+ } else {
+ source_is_html = !PrintingNodeOrFrame(frame, node);
+ }
+
+ settings->params.fit_to_paper_size = true;
+ if (print_for_preview_ || settings->params.print_to_pdf) {
+ // Do not fit to paper size when the user is printing the preview data or
+ // saving the print contents as pdf.
+ settings->params.fit_to_paper_size = false;
+ } else if (!source_is_html) {
+ // PDF in initiator renderer. Get the print scaling option for the initiator
+ // renderer pdf.
+ bool print_scaling_disabled = frame->isPrintScalingDisabledForPlugin(node);
+
+ // If this is the first preview request, UI doesn't know about the print
+ // scaling option of the plugin. Therefore, check the print scaling option
+ // and update the print params accordingly.
+ //
+ // If this is not the first preview request, update print params based on
+ // preview job settings.
+ if ((settings.params.is_first_request &&
+ print_scaling_disabled_for_plugin) ||
+ !FitToPageEnabled(job_settings)) {
+ settings->params.fit_to_paper_size = false;
+ }
+ }
+}
+
void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
DCHECK(is_preview_enabled_);
print_preview_context_.OnPrintPreview();
@@ -867,6 +913,16 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
preview_params));
return;
}
+
+ // If we are previewing a pdf and the print scaling is disabled, send a
+ // message to browser.
+ if (!print_preview_context_.IsModifiable() &&
+ print_pages_params_->params.is_first_request &&
+ print_preview_context_.frame()->isPrintScalingDisabledForPlugin(
+ print_preview_context_.node())) {
+ Send(new PrintHostMsg_PrintPreviewScalingDisabled(routing_id()));
+ }
+
// Always clear |old_print_pages_params_| before rendering the pages.
old_print_pages_params_.reset();
is_print_ready_metafile_sent_ = false;
@@ -1310,23 +1366,7 @@ bool PrintWebViewHelper::UpdatePrintSettings(
modified_job_settings.SetBoolean(printing::kSettingHeaderFooterEnabled,
false);
- // - On Windows, we don't add a margin until we turn it into an EMF when
- // printing for print preview (We could add it in the plugin).
- // - On Mac with Skia, we don't add a margin until we send it to the printer
- // using the CG PDF class (We could add it in the plugin).
- // - On Mac with CG, we can add a margin when generating the preview.
- // - On Linux, we never add a margin (We Could add it in the plugin).
-#if defined(OS_MACOSX) && !defined(USE_SKIA)
- bool get_margins_from_pdf = !source_is_html && !print_for_preview_;
-#elif defined(OS_WIN) || defined(OS_MACOSX)
- bool get_margins_from_pdf = !source_is_html && print_for_preview_;
-#else
- bool get_margins_from_pdf = false;
-#endif
-
printing::MarginType margin_type = printing::NO_MARGINS;
- if (get_margins_from_pdf)
- margin_type = GetMarginsForPdf(frame, node);
modified_job_settings.SetInteger(printing::kSettingMarginsType,
margin_type);
job_settings = &modified_job_settings;
@@ -1380,10 +1420,7 @@ bool PrintWebViewHelper::UpdatePrintSettings(
settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings);
UpdateFrameMarginsCssInfo(*job_settings);
-
- // Fit to paper size.
- settings.params.fit_to_paper_size = source_is_html &&
- !IsPrintToPdfRequested(*job_settings);
+ UpdateFitToPageInfo(frame, node, job_settings, &settings);
// Header/Footer: Set |header_footer_info_|.
if (settings.params.display_header_footer) {

Powered by Google App Engine
This is Rietveld 408576698