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

Unified Diff: chrome/utility/printing_handler.cc

Issue 2633573002: Add Postscript Printing (Closed)
Patch Set: Fix clang 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
« no previous file with comments | « chrome/utility/printing_handler.h ('k') | components/printing/common/print_messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/utility/printing_handler.h ('k') | components/printing/common/print_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698