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

Side by Side Diff: chrome/browser/printing/print_job.cc

Issue 2633573002: Add Postscript Printing (Closed)
Patch Set: Rebase 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/printing/print_job.h" 5 #include "chrome/browser/printing/print_job.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 std::unique_ptr<PdfConverter> converter) 229 std::unique_ptr<PdfConverter> converter)
230 : page_count_(0), 230 : page_count_(0),
231 current_page_(0), 231 current_page_(0),
232 pages_in_progress_(0), 232 pages_in_progress_(0),
233 page_size_(page_size), 233 page_size_(page_size),
234 content_area_(content_area), 234 content_area_(content_area),
235 converter_(std::move(converter)) {} 235 converter_(std::move(converter)) {}
236 236
237 void Start(const scoped_refptr<base::RefCountedMemory>& data, 237 void Start(const scoped_refptr<base::RefCountedMemory>& data,
238 const PdfRenderSettings& conversion_settings, 238 const PdfRenderSettings& conversion_settings,
239 bool print_text_with_gdi,
240 const PdfConverter::StartCallback& start_callback) { 239 const PdfConverter::StartCallback& start_callback) {
241 converter_->Start(data, conversion_settings, print_text_with_gdi, 240 converter_->Start(data, conversion_settings, start_callback);
242 start_callback);
243 } 241 }
244 242
245 void GetMorePages(const PdfConverter::GetPageCallback& get_page_callback) { 243 void GetMorePages(const PdfConverter::GetPageCallback& get_page_callback) {
246 const int kMaxNumberOfTempFilesPerDocument = 3; 244 const int kMaxNumberOfTempFilesPerDocument = 3;
247 while (pages_in_progress_ < kMaxNumberOfTempFilesPerDocument && 245 while (pages_in_progress_ < kMaxNumberOfTempFilesPerDocument &&
248 current_page_ < page_count_) { 246 current_page_ < page_count_) {
249 ++pages_in_progress_; 247 ++pages_in_progress_;
250 converter_->GetPage(current_page_++, get_page_callback); 248 converter_->GetPage(current_page_++, get_page_callback);
251 } 249 }
252 } 250 }
(...skipping 22 matching lines...) Expand all
275 void PrintJob::AppendPrintedPage(int page_number) { 273 void PrintJob::AppendPrintedPage(int page_number) {
276 pdf_page_mapping_.push_back(page_number); 274 pdf_page_mapping_.push_back(page_number);
277 } 275 }
278 276
279 void PrintJob::StartPdfToEmfConversion( 277 void PrintJob::StartPdfToEmfConversion(
280 const scoped_refptr<base::RefCountedMemory>& bytes, 278 const scoped_refptr<base::RefCountedMemory>& bytes,
281 const gfx::Size& page_size, 279 const gfx::Size& page_size,
282 const gfx::Rect& content_area, 280 const gfx::Rect& content_area,
283 bool print_text_with_gdi) { 281 bool print_text_with_gdi) {
284 DCHECK(!pdf_conversion_state_); 282 DCHECK(!pdf_conversion_state_);
283
285 pdf_conversion_state_ = 284 pdf_conversion_state_ =
286 base::MakeUnique<PdfConversionState>(page_size, content_area, 285 base::MakeUnique<PdfConversionState>(page_size, content_area,
287 PdfConverter::CreatePdfToEmfConverter()); 286 PdfConverter::CreatePdfToEmfConverter());
287 is_postscript_ = false;
288 const int kPrinterDpi = settings().dpi(); 288 const int kPrinterDpi = settings().dpi();
289 PdfRenderSettings settings(content_area, kPrinterDpi, true /* autorotate? */); 289 PdfRenderSettings settings(
290 content_area, gfx::Point(0, 0), kPrinterDpi, true /* autorotate? */,
291 print_text_with_gdi ? PdfRenderSettings::Mode::GDI_TEXT
292 : PdfRenderSettings::Mode::NORMAL);
290 pdf_conversion_state_->Start( 293 pdf_conversion_state_->Start(
291 bytes, settings, print_text_with_gdi, 294 bytes, settings, base::Bind(&PrintJob::OnPdfConversionStarted, this));
292 base::Bind(&PrintJob::OnPdfConversionStarted, this));
293 } 295 }
294 296
295 void PrintJob::OnPdfConversionStarted(int page_count) { 297 void PrintJob::OnPdfConversionStarted(int page_count) {
296 if (page_count <= 0) { 298 if (page_count <= 0) {
297 pdf_conversion_state_.reset(); 299 pdf_conversion_state_.reset();
298 Cancel(); 300 Cancel();
299 return; 301 return;
300 } 302 }
301 pdf_conversion_state_->set_page_count(page_count); 303 pdf_conversion_state_->set_page_count(page_count);
302 pdf_conversion_state_->GetMorePages( 304 pdf_conversion_state_->GetMorePages(
303 base::Bind(&PrintJob::OnPdfPageConverted, this)); 305 base::Bind(&PrintJob::OnPdfPageConverted, this));
304 } 306 }
305 307
306 void PrintJob::OnPdfPageConverted(int page_number, 308 void PrintJob::OnPdfPageConverted(int page_number,
307 float scale_factor, 309 float scale_factor,
308 std::unique_ptr<MetafilePlayer> metafile) { 310 std::unique_ptr<MetafilePlayer> metafile) {
309 DCHECK(pdf_conversion_state_); 311 DCHECK(pdf_conversion_state_);
310 if (!document_.get() || !metafile || page_number < 0 || 312 if (!document_.get() || !metafile || page_number < 0 ||
311 static_cast<size_t>(page_number) >= pdf_page_mapping_.size()) { 313 static_cast<size_t>(page_number) >= pdf_page_mapping_.size()) {
312 pdf_conversion_state_.reset(); 314 pdf_conversion_state_.reset();
313 Cancel(); 315 Cancel();
314 return; 316 return;
315 } 317 }
316 318
317 // Update the rendered document. It will send notifications to the listener. 319 // Update the rendered document. It will send notifications to the listener.
318 document_->SetPage(pdf_page_mapping_[page_number], std::move(metafile), 320 document_->SetPage(
319 scale_factor, pdf_conversion_state_->page_size(), 321 pdf_page_mapping_[page_number], std::move(metafile),
320 pdf_conversion_state_->content_area()); 322 is_postscript_ ? 0.0f : scale_factor,
Vitaly Buka (NO REVIEWS) 2017/01/27 00:38:49 I guess better to remove conditiond and just use s
rbpotter 2017/01/27 16:37:21 Done.
323 is_postscript_ ? gfx::Size() : pdf_conversion_state_->page_size(),
324 is_postscript_ ? gfx::Rect() : pdf_conversion_state_->content_area());
Vitaly Buka (NO REVIEWS) 2017/01/27 00:38:49 why do you need condition here? PdfConversionState
rbpotter 2017/01/27 16:37:21 Done.
321 325
322 pdf_conversion_state_->GetMorePages( 326 pdf_conversion_state_->GetMorePages(
323 base::Bind(&PrintJob::OnPdfPageConverted, this)); 327 base::Bind(&PrintJob::OnPdfPageConverted, this));
324 } 328 }
329
330 void PrintJob::StartPdfToPostScriptConversion(
331 const scoped_refptr<base::RefCountedMemory>& bytes,
332 const gfx::Rect& content_area,
333 const gfx::Point& physical_offsets,
334 bool ps_level2) {
335 DCHECK(!pdf_conversion_state_);
336 pdf_conversion_state_ = base::MakeUnique<PdfConversionState>(
337 gfx::Size(), gfx::Rect(), PdfConverter::CreatePdfToPostScriptConverter());
338 is_postscript_ = true;
Vitaly Buka (NO REVIEWS) 2017/01/27 00:38:49 looks like is_postscript_ can be removed
rbpotter 2017/01/27 16:37:21 Done.
339 const int kPrinterDpi = settings().dpi();
340 PdfRenderSettings settings(
341 content_area, physical_offsets, kPrinterDpi, true /* autorotate? */,
342 ps_level2 ? PdfRenderSettings::Mode::POSTSCRIPT_LEVEL2
343 : PdfRenderSettings::Mode::POSTSCRIPT_LEVEL3);
344 pdf_conversion_state_->Start(
345 bytes, settings, base::Bind(&PrintJob::OnPdfConversionStarted, this));
346 }
325 #endif // defined(OS_WIN) 347 #endif // defined(OS_WIN)
326 348
327 void PrintJob::UpdatePrintedDocument(PrintedDocument* new_document) { 349 void PrintJob::UpdatePrintedDocument(PrintedDocument* new_document) {
328 if (document_.get() == new_document) 350 if (document_.get() == new_document)
329 return; 351 return;
330 352
331 document_ = new_document; 353 document_ = new_document;
332 354
333 if (document_.get()) 355 if (document_.get())
334 settings_ = document_->settings(); 356 settings_ = document_->settings();
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 } 482 }
461 483
462 JobEventDetails::~JobEventDetails() { 484 JobEventDetails::~JobEventDetails() {
463 } 485 }
464 486
465 PrintedDocument* JobEventDetails::document() const { return document_.get(); } 487 PrintedDocument* JobEventDetails::document() const { return document_.get(); }
466 488
467 PrintedPage* JobEventDetails::page() const { return page_.get(); } 489 PrintedPage* JobEventDetails::page() const { return page_.get(); }
468 490
469 } // namespace printing 491 } // namespace printing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698