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 |