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 |