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

Unified Diff: chrome/utility/printing_handler.cc

Issue 2633573002: Add Postscript Printing (Closed)
Patch Set: Fix Linux compile error Created 3 years, 11 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/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

Powered by Google App Engine
This is Rietveld 408576698