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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/print_web_view_helper.h" 5 #include "chrome/renderer/print_web_view_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 preview_params.expected_pages_count = 853 preview_params.expected_pages_count =
854 print_preview_context_.total_page_count(); 854 print_preview_context_.total_page_count();
855 preview_params.modifiable = print_preview_context_.IsModifiable(); 855 preview_params.modifiable = print_preview_context_.IsModifiable();
856 preview_params.preview_request_id = 856 preview_params.preview_request_id =
857 print_pages_params_->params.preview_request_id; 857 print_pages_params_->params.preview_request_id;
858 858
859 Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), 859 Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(),
860 preview_params)); 860 preview_params));
861 return; 861 return;
862 } 862 }
863
864 // If we are previewing a pdf and the print scaling is disabled, send a
865 // message to browser.
866 if (!print_preview_context_.IsModifiable() &&
867 print_pages_params_->params.is_first_request &&
868 print_preview_context_.frame()->isPrintScalingDisabledForPlugin(
869 print_preview_context_.node())) {
870 Send(new PrintHostMsg_PrintPreviewScalingDisabled(routing_id()));
871 }
872
863 // Always clear |old_print_pages_params_| before rendering the pages. 873 // Always clear |old_print_pages_params_| before rendering the pages.
864 old_print_pages_params_.reset(); 874 old_print_pages_params_.reset();
865 is_print_ready_metafile_sent_ = false; 875 is_print_ready_metafile_sent_ = false;
866 876
867 // PDF printer device supports alpha blending. 877 // PDF printer device supports alpha blending.
868 print_pages_params_->params.supports_alpha_blend = true; 878 print_pages_params_->params.supports_alpha_blend = true;
869 879
870 bool generate_draft_pages = false; 880 bool generate_draft_pages = false;
871 if (!settings.GetBoolean(printing::kSettingGenerateDraftData, 881 if (!settings.GetBoolean(printing::kSettingGenerateDraftData,
872 &generate_draft_pages)) { 882 &generate_draft_pages)) {
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 } 1312 }
1303 } else { 1313 } else {
1304 source_is_html = !PrintingNodeOrPdfFrame(frame, node); 1314 source_is_html = !PrintingNodeOrPdfFrame(frame, node);
1305 } 1315 }
1306 1316
1307 if (print_for_preview_ || !source_is_html) { 1317 if (print_for_preview_ || !source_is_html) {
1308 modified_job_settings.MergeDictionary(job_settings); 1318 modified_job_settings.MergeDictionary(job_settings);
1309 modified_job_settings.SetBoolean(printing::kSettingHeaderFooterEnabled, 1319 modified_job_settings.SetBoolean(printing::kSettingHeaderFooterEnabled,
1310 false); 1320 false);
1311 1321
1312 // - On Windows, we don't add a margin until we turn it into an EMF when
1313 // printing for print preview (We could add it in the plugin).
1314 // - On Mac with Skia, we don't add a margin until we send it to the printer
1315 // using the CG PDF class (We could add it in the plugin).
1316 // - On Mac with CG, we can add a margin when generating the preview.
1317 // - On Linux, we never add a margin (We Could add it in the plugin).
1318 #if defined(OS_MACOSX) && !defined(USE_SKIA)
1319 bool get_margins_from_pdf = !source_is_html && !print_for_preview_;
1320 #elif defined(OS_WIN) || defined(OS_MACOSX)
1321 bool get_margins_from_pdf = !source_is_html && print_for_preview_;
1322 #else
1323 bool get_margins_from_pdf = false;
1324 #endif
1325
1326 printing::MarginType margin_type = printing::NO_MARGINS; 1322 printing::MarginType margin_type = printing::NO_MARGINS;
1327 if (get_margins_from_pdf)
1328 margin_type = GetMarginsForPdf(frame, node);
1329 modified_job_settings.SetInteger(printing::kSettingMarginsType, 1323 modified_job_settings.SetInteger(printing::kSettingMarginsType,
1330 margin_type); 1324 margin_type);
1331 job_settings = &modified_job_settings; 1325 job_settings = &modified_job_settings;
1332 } 1326 }
1333 1327
1334 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when 1328 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when
1335 // possible. 1329 // possible.
1336 int cookie = print_pages_params_.get() ? 1330 int cookie = print_pages_params_.get() ?
1337 print_pages_params_->params.document_cookie : 0; 1331 print_pages_params_->params.document_cookie : 0;
1338 PrintMsg_PrintPages_Params settings; 1332 PrintMsg_PrintPages_Params settings;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 &(settings.params.preview_request_id)) || 1366 &(settings.params.preview_request_id)) ||
1373 !job_settings->GetBoolean(printing::kIsFirstRequest, 1367 !job_settings->GetBoolean(printing::kIsFirstRequest,
1374 &(settings.params.is_first_request))) { 1368 &(settings.params.is_first_request))) {
1375 NOTREACHED(); 1369 NOTREACHED();
1376 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); 1370 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING);
1377 return false; 1371 return false;
1378 } 1372 }
1379 1373
1380 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings); 1374 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings);
1381 UpdateFrameMarginsCssInfo(*job_settings); 1375 UpdateFrameMarginsCssInfo(*job_settings);
1382 fit_to_page_ = source_is_html && !IsPrintToPdfRequested(*job_settings); 1376
1377 // Source is PDF (Fit to page)
1378 bool print_to_pdf_requested = IsPrintToPdfRequested(*job_settings);
1379 bool fit_pdf_page_to_paper_size = false;
1380 bool reset_fit_to_page_option = true;
1381 if (!print_for_preview_ && !source_is_html && !print_to_pdf_requested) {
1382 if (settings.params.is_first_request) {
1383 // If print scaling is disabled, do not fit to paper size.
1384 fit_pdf_page_to_paper_size = !print_preview_context_.frame()->
1385 isPrintScalingDisabledForPlugin(print_preview_context_.node());
1386 } else {
1387 reset_fit_to_page_option = false;
1388 }
1389 }
1390
1391 if (reset_fit_to_page_option) {
1392 settings.params.fit_pdf_page_to_paper_size = fit_pdf_page_to_paper_size;
1393 } else if (!job_settings->GetBoolean(printing::kSettingFitToPageEnabled,
1394 &(settings.params.fit_pdf_page_to_paper_size))) {
1395 NOTREACHED();
1396 }
1397
1398 // Source is HTML (Fit to Page)
1399 fit_to_page_ = source_is_html && !print_to_pdf_requested;
1383 1400
1384 // Header/Footer: Set |header_footer_info_|. 1401 // Header/Footer: Set |header_footer_info_|.
1385 if (settings.params.display_header_footer) { 1402 if (settings.params.display_header_footer) {
1386 header_footer_info_.reset(new DictionaryValue()); 1403 header_footer_info_.reset(new DictionaryValue());
1387 header_footer_info_->SetString(printing::kSettingHeaderFooterDate, 1404 header_footer_info_->SetString(printing::kSettingHeaderFooterDate,
1388 settings.params.date); 1405 settings.params.date);
1389 header_footer_info_->SetString(printing::kSettingHeaderFooterURL, 1406 header_footer_info_->SetString(printing::kSettingHeaderFooterURL,
1390 settings.params.url); 1407 settings.params.url);
1391 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle, 1408 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle,
1392 settings.params.title); 1409 settings.params.title);
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
1818 DCHECK(IsRendering()); 1835 DCHECK(IsRendering());
1819 return prep_frame_view_->GetPrintCanvasSize(); 1836 return prep_frame_view_->GetPrintCanvasSize();
1820 } 1837 }
1821 1838
1822 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1839 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1823 prep_frame_view_.reset(); 1840 prep_frame_view_.reset();
1824 metafile_.reset(); 1841 metafile_.reset();
1825 pages_to_render_.clear(); 1842 pages_to_render_.clear();
1826 error_ = PREVIEW_ERROR_NONE; 1843 error_ = PREVIEW_ERROR_NONE;
1827 } 1844 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698