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

Side by Side Diff: pdf/pdfium/pdfium_engine.cc

Issue 1559713002: Remove a "temporary" hack from when ChromeOS generated PDFs with Cairo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "pdf/pdfium/pdfium_engine.h" 5 #include "pdf/pdfium/pdfium_engine.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 3867 matching lines...) Expand 10 before | Expand all | Expand 10 after
3878 int rotate = CalculatePosition(page, new_settings, &dest); 3878 int rotate = CalculatePosition(page, new_settings, &dest);
3879 3879
3880 int save_state = SaveDC(dc); 3880 int save_state = SaveDC(dc);
3881 // The caller wanted all drawing to happen within the bounds specified. 3881 // The caller wanted all drawing to happen within the bounds specified.
3882 // Based on scale calculations, our destination rect might be larger 3882 // Based on scale calculations, our destination rect might be larger
3883 // than the bounds. Set the clip rect to the bounds. 3883 // than the bounds. Set the clip rect to the bounds.
3884 IntersectClipRect(dc, settings.bounds.x(), settings.bounds.y(), 3884 IntersectClipRect(dc, settings.bounds.x(), settings.bounds.y(),
3885 settings.bounds.x() + settings.bounds.width(), 3885 settings.bounds.x() + settings.bounds.width(),
3886 settings.bounds.y() + settings.bounds.height()); 3886 settings.bounds.y() + settings.bounds.height());
3887 3887
3888 // A temporary hack. PDFs generated by Cairo (used by Chrome OS to generate 3888 // A "temporary" hack. Some PDFs seems to render very slowly if
3889 // a PDF output from a webpage) result in very large metafiles and the 3889 // FPDF_RenderPage() is directly used on a printer DC. I suspect it is
3890 // rendering using FPDF_RenderPage is incorrect. In this case, render as a
3891 // bitmap. Note that this code does not kick in for PDFs printed from Chrome
3892 // because in that case we create a temp PDF first before printing and this
3893 // temp PDF does not have a creator string that starts with "cairo".
3894 bool use_bitmap = false;
3895 if (base::StartsWith(GetDocumentMetadata(doc, "Creator"), "cairo",
3896 base::CompareCase::INSENSITIVE_ASCII)) {
3897 use_bitmap = true;
3898 }
3899
3900 // Another temporary hack. Some PDFs seems to render very slowly if
3901 // FPDF_RenderPage is directly used on a printer DC. I suspect it is
3902 // because of the code to talk Postscript directly to the printer if 3890 // because of the code to talk Postscript directly to the printer if
3903 // the printer supports this. Need to discuss this with PDFium. For now, 3891 // the printer supports this. Need to discuss this with PDFium. For now,
3904 // render to a bitmap and then blit the bitmap to the DC if we have been 3892 // render to a bitmap and then blit the bitmap to the DC if we have been
3905 // supplied a printer DC. 3893 // supplied a printer DC.
3906 int device_type = GetDeviceCaps(dc, TECHNOLOGY); 3894 int device_type = GetDeviceCaps(dc, TECHNOLOGY);
3907 if (use_bitmap || 3895 if (device_type == DT_RASPRINTER || device_type == DT_PLOTTER) {
3908 (device_type == DT_RASPRINTER) || (device_type == DT_PLOTTER)) {
3909 FPDF_BITMAP bitmap = FPDFBitmap_Create(dest.width(), dest.height(), 3896 FPDF_BITMAP bitmap = FPDFBitmap_Create(dest.width(), dest.height(),
3910 FPDFBitmap_BGRx); 3897 FPDFBitmap_BGRx);
3911 // Clear the bitmap 3898 // Clear the bitmap
3912 FPDFBitmap_FillRect(bitmap, 0, 0, dest.width(), dest.height(), 0xFFFFFFFF); 3899 FPDFBitmap_FillRect(bitmap, 0, 0, dest.width(), dest.height(), 0xFFFFFFFF);
3913 FPDF_RenderPageBitmap( 3900 FPDF_RenderPageBitmap(
3914 bitmap, page, 0, 0, dest.width(), dest.height(), rotate, 3901 bitmap, page, 0, 0, dest.width(), dest.height(), rotate,
3915 FPDF_ANNOT | FPDF_PRINTING | FPDF_NO_CATCH); 3902 FPDF_ANNOT | FPDF_PRINTING | FPDF_NO_CATCH);
3916 int stride = FPDFBitmap_GetStride(bitmap); 3903 int stride = FPDFBitmap_GetStride(bitmap);
3917 BITMAPINFO bmi; 3904 BITMAPINFO bmi;
3918 memset(&bmi, 0, sizeof(bmi)); 3905 memset(&bmi, 0, sizeof(bmi));
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
4008 double* height) { 3995 double* height) {
4009 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); 3996 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL);
4010 if (!doc) 3997 if (!doc)
4011 return false; 3998 return false;
4012 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; 3999 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
4013 FPDF_CloseDocument(doc); 4000 FPDF_CloseDocument(doc);
4014 return success; 4001 return success;
4015 } 4002 }
4016 4003
4017 } // namespace chrome_pdf 4004 } // namespace chrome_pdf
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698