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

Unified Diff: pdf/pdfium/pdfium_engine.cc

Issue 2508563003: Printing: Load the source PDF only once. (Closed)
Patch Set: More renaming Created 4 years, 1 month 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 | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pdf/pdfium/pdfium_engine.cc
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index 25ebd6887f021d5cdc885614e311e4cfd674d21a..28a07565310de19e526b9a87653380e6f3a64bf6 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -4001,19 +4001,17 @@ PDFEngineExports* PDFEngineExports::Get() {
}
#if defined(OS_WIN)
-bool PDFiumEngineExports::RenderPDFPageToDC(const void* pdf_buffer,
- int buffer_size,
+bool PDFiumEngineExports::RenderPDFPageToDC(void* pdf_handle,
int page_number,
const RenderingSettings& settings,
HDC dc) {
- FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, buffer_size, nullptr);
+ FPDF_DOCUMENT doc = pdf_handle;
if (!doc)
return false;
FPDF_PAGE page = FPDF_LoadPage(doc, page_number);
- if (!page) {
- FPDF_CloseDocument(doc);
+ if (!page)
return false;
- }
+
RenderingSettings new_settings = settings;
// calculate the page size
if (new_settings.dpi_x == -1)
@@ -4067,7 +4065,6 @@ bool PDFiumEngineExports::RenderPDFPageToDC(const void* pdf_buffer,
}
RestoreDC(dc, save_state);
FPDF_ClosePage(page);
- FPDF_CloseDocument(doc);
return true;
}
@@ -4083,20 +4080,16 @@ void PDFiumEngineExports::SetPDFUseGDIPrinting(bool enable) {
#endif // defined(OS_WIN)
bool PDFiumEngineExports::RenderPDFPageToBitmap(
- const void* pdf_buffer,
- int pdf_buffer_size,
+ void* pdf_handle,
int page_number,
const RenderingSettings& settings,
void* bitmap_buffer) {
- FPDF_DOCUMENT doc =
- FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr);
+ FPDF_DOCUMENT doc = pdf_handle;
if (!doc)
return false;
FPDF_PAGE page = FPDF_LoadPage(doc, page_number);
- if (!page) {
- FPDF_CloseDocument(doc);
+ if (!page)
return false;
- }
pp::Rect dest;
int rotate = CalculatePosition(page, settings, &dest);
@@ -4115,49 +4108,49 @@ bool PDFiumEngineExports::RenderPDFPageToBitmap(
FPDF_ANNOT | FPDF_PRINTING | FPDF_NO_CATCH);
FPDFBitmap_Destroy(bitmap);
FPDF_ClosePage(page);
- FPDF_CloseDocument(doc);
return true;
}
bool PDFiumEngineExports::GetPDFDocInfo(const void* pdf_buffer,
int buffer_size,
int* page_count,
- double* max_page_width) {
+ double* max_page_width,
+ void** pdf_handle) {
FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, buffer_size, nullptr);
if (!doc)
return false;
+
int page_count_local = FPDF_GetPageCount(doc);
- if (page_count) {
+ if (page_count)
*page_count = page_count_local;
- }
+
if (max_page_width) {
*max_page_width = 0;
for (int page_number = 0; page_number < page_count_local; page_number++) {
double page_width = 0;
double page_height = 0;
FPDF_GetPageSizeByIndex(doc, page_number, &page_width, &page_height);
- if (page_width > *max_page_width) {
- *max_page_width = page_width;
- }
+ *max_page_width = std::max(*max_page_width, page_width);
}
}
- FPDF_CloseDocument(doc);
+
+ if (pdf_handle)
+ *pdf_handle = doc; // Caller takes ownership.
+ else
+ FPDF_CloseDocument(pdf_handle);
return true;
}
-bool PDFiumEngineExports::GetPDFPageSizeByIndex(
- const void* pdf_buffer,
- int pdf_buffer_size,
- int page_number,
- double* width,
- double* height) {
- FPDF_DOCUMENT doc =
- FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr);
- if (!doc)
- return false;
- bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
- FPDF_CloseDocument(doc);
- return success;
+void PDFiumEngineExports::ReleasePDFHandle(void* pdf_handle) {
+ FPDF_CloseDocument(pdf_handle);
+}
+
+bool PDFiumEngineExports::GetPDFPageSizeByIndex(void* pdf_handle,
+ int page_number,
+ double* width,
+ double* height) {
+ FPDF_DOCUMENT doc = pdf_handle;
+ return doc && FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
}
} // namespace chrome_pdf
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698