| Index: chrome/utility/printing_handler.cc
|
| diff --git a/chrome/utility/printing_handler.cc b/chrome/utility/printing_handler.cc
|
| index 7dbae1a132df5b38ba8e615c28545bf39148fbd2..e7171b4815bc6ba59e23111aa4e75f75b18109d0 100644
|
| --- a/chrome/utility/printing_handler.cc
|
| +++ b/chrome/utility/printing_handler.cc
|
| @@ -70,6 +70,12 @@ bool PrintingHandler::OnMessageReceived(const IPC::Message& message) {
|
| OnRenderPDFPagesToMetafileGetPage)
|
| IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafiles_Stop,
|
| OnRenderPDFPagesToMetafileStop)
|
| + IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToPostScript_Start,
|
| + OnRenderPDFPagesToPostScriptStart)
|
| + IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToPostScript_GetPage,
|
| + OnRenderPDFPagesToPostScriptGetPage)
|
| + IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToPostScript_Stop,
|
| + OnRenderPDFPagesToPostScriptStop)
|
| #endif // OS_WIN
|
| #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
|
| IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToPWGRaster,
|
| @@ -87,10 +93,12 @@ bool PrintingHandler::OnMessageReceived(const IPC::Message& message) {
|
| #if defined(OS_WIN)
|
| void PrintingHandler::OnRenderPDFPagesToMetafile(
|
| IPC::PlatformFileForTransit pdf_transit,
|
| - const PdfRenderSettings& settings,
|
| - bool print_text_with_gdi) {
|
| + const PdfRenderSettings& settings) {
|
| pdf_rendering_settings_ = settings;
|
| - chrome_pdf::SetPDFUseGDIPrinting(print_text_with_gdi);
|
| + chrome_pdf::SetPDFPostscriptPrintingLevel(0); // Not using postscript.
|
| + chrome_pdf::SetPDFUseGDIPrinting(pdf_rendering_settings_.mode ==
|
| + PdfRenderSettings::Mode::GDI_TEXT);
|
| +
|
| base::File pdf_file = IPC::PlatformFileForTransitToFile(pdf_transit);
|
| int page_count = LoadPDF(std::move(pdf_file));
|
| Send(
|
| @@ -112,7 +120,36 @@ void PrintingHandler::OnRenderPDFPagesToMetafileStop() {
|
| ReleaseProcessIfNeeded();
|
| }
|
|
|
| -#endif // OS_WIN
|
| +void PrintingHandler::OnRenderPDFPagesToPostScriptStart(
|
| + IPC::PlatformFileForTransit pdf_transit,
|
| + const PdfRenderSettings& settings) {
|
| + pdf_rendering_settings_ = settings;
|
| + 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(new ChromeUtilityHostMsg_RenderPDFPagesToPostScript_PageCount(
|
| + page_count));
|
| +}
|
| +
|
| +void PrintingHandler::OnRenderPDFPagesToPostScriptGetPage(
|
| + int page_number,
|
| + IPC::PlatformFileForTransit output_file) {
|
| + base::File ps_file = IPC::PlatformFileForTransitToFile(output_file);
|
| + bool success = RenderPdfPageToPostScript(page_number, std::move(ps_file));
|
| + Send(new ChromeUtilityHostMsg_RenderPDFPagesToPostScript_PageDone(success));
|
| +}
|
| +
|
| +void PrintingHandler::OnRenderPDFPagesToPostScriptStop() {
|
| + ReleaseProcessIfNeeded();
|
| +}
|
| +#endif // defined(OS_WIN)
|
|
|
| #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
|
| void PrintingHandler::OnRenderPDFPagesToPWGRaster(
|
| @@ -130,7 +167,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 +222,31 @@ 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();
|
| +
|
| + // 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 +371,6 @@ void PrintingHandler::OnGetPrinterSemanticCapsAndDefaults(
|
| }
|
| ReleaseProcessIfNeeded();
|
| }
|
| -#endif // ENABLE_PRINT_PREVIEW
|
| +#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
|
|
|
| } // namespace printing
|
|
|