Chromium Code Reviews| Index: chrome/utility/printing_handler.cc |
| diff --git a/chrome/utility/printing_handler.cc b/chrome/utility/printing_handler.cc |
| index 390cd39b2f6b26e023c3e1418966cfba17c690a7..35dc231ea1d7948d5a827f3a05ac9896e43a1fc4 100644 |
| --- a/chrome/utility/printing_handler.cc |
| +++ b/chrome/utility/printing_handler.cc |
| @@ -89,8 +89,16 @@ void PrintingHandler::OnRenderPDFPagesToMetafile( |
| IPC::PlatformFileForTransit pdf_transit, |
| const PdfRenderSettings& settings) { |
| pdf_rendering_settings_ = settings; |
| + chrome_pdf::SetPDFPostscriptPrintingLevel(0); // Not using postscript. |
| chrome_pdf::SetPDFUseGDIPrinting(pdf_rendering_settings_.mode == |
| PdfRenderSettings::Mode::GDI_TEXT); |
| + if (pdf_rendering_settings_.mode == |
| + PdfRenderSettings::Mode::POSTSCRIPT_LEVEL2) { |
| + chrome_pdf::SetPDFPostscriptPrintingLevel(2); |
| + } else if (pdf_rendering_settings_.mode == |
| + PdfRenderSettings::Mode::POSTSCRIPT_LEVEL3) { |
| + chrome_pdf::SetPDFPostscriptPrintingLevel(3); |
| + } |
| base::File pdf_file = IPC::PlatformFileForTransitToFile(pdf_transit); |
| int page_count = LoadPDF(std::move(pdf_file)); |
| Send( |
| @@ -102,8 +110,17 @@ void PrintingHandler::OnRenderPDFPagesToMetafileGetPage( |
| IPC::PlatformFileForTransit output_file) { |
| base::File emf_file = IPC::PlatformFileForTransitToFile(output_file); |
| float scale_factor = 1.0f; |
| - bool success = |
| - RenderPdfPageToMetafile(page_number, std::move(emf_file), &scale_factor); |
| + bool success = false; |
| + if (pdf_rendering_settings_.mode == |
| + PdfRenderSettings::Mode::POSTSCRIPT_LEVEL2 || |
| + pdf_rendering_settings_.mode == |
| + PdfRenderSettings::Mode::POSTSCRIPT_LEVEL3) { |
| + success = RenderPdfPageToPostScript(page_number, std::move(emf_file)); |
|
Nico
2017/01/31 20:17:42
add comment why scale factor of 1 is always right
rbpotter
2017/02/01 01:09:00
Done.
|
| + } else { |
| + success = RenderPdfPageToMetafile(page_number, std::move(emf_file), |
| + &scale_factor); |
| + } |
| + |
| Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageDone( |
| success, scale_factor)); |
| } |
| @@ -112,7 +129,7 @@ void PrintingHandler::OnRenderPDFPagesToMetafileStop() { |
| ReleaseProcessIfNeeded(); |
| } |
| -#endif // OS_WIN |
| +#endif // defined(OS_WIN) |
| #if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
| void PrintingHandler::OnRenderPDFPagesToPWGRaster( |
| @@ -130,7 +147,7 @@ void PrintingHandler::OnRenderPDFPagesToPWGRaster( |
| } |
| ReleaseProcessIfNeeded(); |
| } |
| -#endif // ENABLE_PRINT_PREVIEW |
| +#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) |
| #if defined(OS_WIN) |
| int PrintingHandler::LoadPDF(base::File pdf_file) { |
| @@ -185,6 +202,30 @@ bool PrintingHandler::RenderPdfPageToMetafile(int page_number, |
| metafile.FinishDocument(); |
| return metafile.SaveTo(&output_file); |
| } |
| + |
| +bool PrintingHandler::RenderPdfPageToPostScript(int page_number, |
| + base::File output_file) { |
| + Emf metafile; |
| + metafile.Init(); |
|
Nico
2017/01/31 20:17:41
this function looks identical to RenderPdfPageToMe
rbpotter
2017/02/01 01:09:00
I merged these two to eliminate the duplication.
T
|
| + |
| + // The underlying metafile is of type Emf and ignores the arguments passed |
| + // to StartPage. |
| + metafile.StartPage(gfx::Size(), gfx::Rect(), 1); |
| + if (!chrome_pdf::RenderPDFPageToDC( |
| + &pdf_data_.front(), pdf_data_.size(), page_number, metafile.context(), |
| + pdf_rendering_settings_.dpi, pdf_rendering_settings_.area.x() - |
| + pdf_rendering_settings_.offsets.x(), |
| + pdf_rendering_settings_.area.y() - |
| + pdf_rendering_settings_.offsets.y(), |
| + pdf_rendering_settings_.area.width(), |
| + pdf_rendering_settings_.area.height(), true, false, true, true, |
| + pdf_rendering_settings_.autorotate)) { |
| + return false; |
| + } |
| + metafile.FinishPage(); |
| + metafile.FinishDocument(); |
| + return metafile.SaveTo(&output_file); |
| +} |
| #endif // defined(OS_WIN) |
| #if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
| @@ -309,6 +350,6 @@ void PrintingHandler::OnGetPrinterSemanticCapsAndDefaults( |
| } |
| ReleaseProcessIfNeeded(); |
| } |
| -#endif // ENABLE_PRINT_PREVIEW |
| +#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) |
| } // namespace printing |