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

Side by Side Diff: chrome/utility/printing_handler.cc

Issue 2633573002: Add Postscript Printing (Closed)
Patch Set: Fix clang compile error Created 3 years, 10 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/utility/printing_handler.h" 5 #include "chrome/utility/printing_handler.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 IPC_MESSAGE_UNHANDLED(handled = false) 82 IPC_MESSAGE_UNHANDLED(handled = false)
83 IPC_END_MESSAGE_MAP() 83 IPC_END_MESSAGE_MAP()
84 return handled; 84 return handled;
85 } 85 }
86 86
87 #if defined(OS_WIN) 87 #if defined(OS_WIN)
88 void PrintingHandler::OnRenderPDFPagesToMetafile( 88 void PrintingHandler::OnRenderPDFPagesToMetafile(
89 IPC::PlatformFileForTransit pdf_transit, 89 IPC::PlatformFileForTransit pdf_transit,
90 const PdfRenderSettings& settings) { 90 const PdfRenderSettings& settings) {
91 pdf_rendering_settings_ = settings; 91 pdf_rendering_settings_ = settings;
92 chrome_pdf::SetPDFPostscriptPrintingLevel(0); // Not using postscript.
92 chrome_pdf::SetPDFUseGDIPrinting(pdf_rendering_settings_.mode == 93 chrome_pdf::SetPDFUseGDIPrinting(pdf_rendering_settings_.mode ==
93 PdfRenderSettings::Mode::GDI_TEXT); 94 PdfRenderSettings::Mode::GDI_TEXT);
95 if (pdf_rendering_settings_.mode ==
96 PdfRenderSettings::Mode::POSTSCRIPT_LEVEL2) {
97 chrome_pdf::SetPDFPostscriptPrintingLevel(2);
98 } else if (pdf_rendering_settings_.mode ==
99 PdfRenderSettings::Mode::POSTSCRIPT_LEVEL3) {
100 chrome_pdf::SetPDFPostscriptPrintingLevel(3);
101 }
94 base::File pdf_file = IPC::PlatformFileForTransitToFile(pdf_transit); 102 base::File pdf_file = IPC::PlatformFileForTransitToFile(pdf_transit);
95 int page_count = LoadPDF(std::move(pdf_file)); 103 int page_count = LoadPDF(std::move(pdf_file));
96 Send( 104 Send(
97 new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageCount(page_count)); 105 new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageCount(page_count));
98 } 106 }
99 107
100 void PrintingHandler::OnRenderPDFPagesToMetafileGetPage( 108 void PrintingHandler::OnRenderPDFPagesToMetafileGetPage(
101 int page_number, 109 int page_number,
102 IPC::PlatformFileForTransit output_file) { 110 IPC::PlatformFileForTransit output_file) {
103 base::File emf_file = IPC::PlatformFileForTransitToFile(output_file); 111 base::File emf_file = IPC::PlatformFileForTransitToFile(output_file);
104 float scale_factor = 1.0f; 112 float scale_factor = 1.0f;
105 bool success = 113 bool success = false;
106 RenderPdfPageToMetafile(page_number, std::move(emf_file), &scale_factor); 114 if (pdf_rendering_settings_.mode ==
115 PdfRenderSettings::Mode::POSTSCRIPT_LEVEL2 ||
116 pdf_rendering_settings_.mode ==
117 PdfRenderSettings::Mode::POSTSCRIPT_LEVEL3) {
118 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.
119 } else {
120 success = RenderPdfPageToMetafile(page_number, std::move(emf_file),
121 &scale_factor);
122 }
123
107 Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageDone( 124 Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageDone(
108 success, scale_factor)); 125 success, scale_factor));
109 } 126 }
110 127
111 void PrintingHandler::OnRenderPDFPagesToMetafileStop() { 128 void PrintingHandler::OnRenderPDFPagesToMetafileStop() {
112 ReleaseProcessIfNeeded(); 129 ReleaseProcessIfNeeded();
113 } 130 }
114 131
115 #endif // OS_WIN 132 #endif // defined(OS_WIN)
116 133
117 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) 134 #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
118 void PrintingHandler::OnRenderPDFPagesToPWGRaster( 135 void PrintingHandler::OnRenderPDFPagesToPWGRaster(
119 IPC::PlatformFileForTransit pdf_transit, 136 IPC::PlatformFileForTransit pdf_transit,
120 const PdfRenderSettings& settings, 137 const PdfRenderSettings& settings,
121 const PwgRasterSettings& bitmap_settings, 138 const PwgRasterSettings& bitmap_settings,
122 IPC::PlatformFileForTransit bitmap_transit) { 139 IPC::PlatformFileForTransit bitmap_transit) {
123 base::File pdf = IPC::PlatformFileForTransitToFile(pdf_transit); 140 base::File pdf = IPC::PlatformFileForTransitToFile(pdf_transit);
124 base::File bitmap = IPC::PlatformFileForTransitToFile(bitmap_transit); 141 base::File bitmap = IPC::PlatformFileForTransitToFile(bitmap_transit);
125 if (RenderPDFPagesToPWGRaster(std::move(pdf), settings, bitmap_settings, 142 if (RenderPDFPagesToPWGRaster(std::move(pdf), settings, bitmap_settings,
126 std::move(bitmap))) { 143 std::move(bitmap))) {
127 Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Succeeded()); 144 Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Succeeded());
128 } else { 145 } else {
129 Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Failed()); 146 Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Failed());
130 } 147 }
131 ReleaseProcessIfNeeded(); 148 ReleaseProcessIfNeeded();
132 } 149 }
133 #endif // ENABLE_PRINT_PREVIEW 150 #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
134 151
135 #if defined(OS_WIN) 152 #if defined(OS_WIN)
136 int PrintingHandler::LoadPDF(base::File pdf_file) { 153 int PrintingHandler::LoadPDF(base::File pdf_file) {
137 int64_t length64 = pdf_file.GetLength(); 154 int64_t length64 = pdf_file.GetLength();
138 if (length64 <= 0 || length64 > std::numeric_limits<int>::max()) 155 if (length64 <= 0 || length64 > std::numeric_limits<int>::max())
139 return 0; 156 return 0;
140 int length = static_cast<int>(length64); 157 int length = static_cast<int>(length64);
141 158
142 pdf_data_.resize(length); 159 pdf_data_.resize(length);
143 if (length != pdf_file.Read(0, pdf_data_.data(), pdf_data_.size())) 160 if (length != pdf_file.Read(0, pdf_data_.data(), pdf_data_.size()))
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 pdf_rendering_settings_.area.y(), 195 pdf_rendering_settings_.area.y(),
179 pdf_rendering_settings_.area.width(), 196 pdf_rendering_settings_.area.width(),
180 pdf_rendering_settings_.area.height(), true, false, true, true, 197 pdf_rendering_settings_.area.height(), true, false, true, true,
181 pdf_rendering_settings_.autorotate)) { 198 pdf_rendering_settings_.autorotate)) {
182 return false; 199 return false;
183 } 200 }
184 metafile.FinishPage(); 201 metafile.FinishPage();
185 metafile.FinishDocument(); 202 metafile.FinishDocument();
186 return metafile.SaveTo(&output_file); 203 return metafile.SaveTo(&output_file);
187 } 204 }
205
206 bool PrintingHandler::RenderPdfPageToPostScript(int page_number,
207 base::File output_file) {
208 Emf metafile;
209 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
210
211 // The underlying metafile is of type Emf and ignores the arguments passed
212 // to StartPage.
213 metafile.StartPage(gfx::Size(), gfx::Rect(), 1);
214 if (!chrome_pdf::RenderPDFPageToDC(
215 &pdf_data_.front(), pdf_data_.size(), page_number, metafile.context(),
216 pdf_rendering_settings_.dpi, pdf_rendering_settings_.area.x() -
217 pdf_rendering_settings_.offsets.x(),
218 pdf_rendering_settings_.area.y() -
219 pdf_rendering_settings_.offsets.y(),
220 pdf_rendering_settings_.area.width(),
221 pdf_rendering_settings_.area.height(), true, false, true, true,
222 pdf_rendering_settings_.autorotate)) {
223 return false;
224 }
225 metafile.FinishPage();
226 metafile.FinishDocument();
227 return metafile.SaveTo(&output_file);
228 }
188 #endif // defined(OS_WIN) 229 #endif // defined(OS_WIN)
189 230
190 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) 231 #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
191 bool PrintingHandler::RenderPDFPagesToPWGRaster( 232 bool PrintingHandler::RenderPDFPagesToPWGRaster(
192 base::File pdf_file, 233 base::File pdf_file,
193 const PdfRenderSettings& settings, 234 const PdfRenderSettings& settings,
194 const PwgRasterSettings& bitmap_settings, 235 const PwgRasterSettings& bitmap_settings,
195 base::File bitmap_file) { 236 base::File bitmap_file) {
196 base::File::Info info; 237 base::File::Info info;
197 if (!pdf_file.GetInfo(&info) || info.size <= 0 || 238 if (!pdf_file.GetInfo(&info) || info.size <= 0 ||
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 if (print_backend->GetPrinterSemanticCapsAndDefaults(printer_name, 343 if (print_backend->GetPrinterSemanticCapsAndDefaults(printer_name,
303 &printer_info)) { 344 &printer_info)) {
304 Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Succeeded( 345 Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Succeeded(
305 printer_name, printer_info)); 346 printer_name, printer_info));
306 } else { 347 } else {
307 Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Failed( 348 Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Failed(
308 printer_name)); 349 printer_name));
309 } 350 }
310 ReleaseProcessIfNeeded(); 351 ReleaseProcessIfNeeded();
311 } 352 }
312 #endif // ENABLE_PRINT_PREVIEW 353 #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
313 354
314 } // namespace printing 355 } // namespace printing
OLDNEW
« 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