Index: pdf/pdfium/pdfium_engine.cc |
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc |
index 0853d79beb294ae9a103eb0e065615401ec53148..80f1fd6d9d709c33a890fb8064226b5e6979e3f1 100644 |
--- a/pdf/pdfium/pdfium_engine.cc |
+++ b/pdf/pdfium/pdfium_engine.cc |
@@ -4007,17 +4007,19 @@ PDFEngineExports* PDFEngineExports::Get() { |
} |
#if defined(OS_WIN) |
-bool PDFiumEngineExports::RenderPDFPageToDC(void* pdf_handle, |
+bool PDFiumEngineExports::RenderPDFPageToDC(const void* pdf_buffer, |
+ int buffer_size, |
int page_number, |
const RenderingSettings& settings, |
HDC dc) { |
- FPDF_DOCUMENT doc = pdf_handle; |
+ FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, buffer_size, nullptr); |
if (!doc) |
return false; |
FPDF_PAGE page = FPDF_LoadPage(doc, page_number); |
- if (!page) |
+ if (!page) { |
+ FPDF_CloseDocument(doc); |
return false; |
- |
+ } |
RenderingSettings new_settings = settings; |
// calculate the page size |
if (new_settings.dpi_x == -1) |
@@ -4071,6 +4073,7 @@ bool PDFiumEngineExports::RenderPDFPageToDC(void* pdf_handle, |
} |
RestoreDC(dc, save_state); |
FPDF_ClosePage(page); |
+ FPDF_CloseDocument(doc); |
return true; |
} |
@@ -4086,16 +4089,20 @@ void PDFiumEngineExports::SetPDFUseGDIPrinting(bool enable) { |
#endif // defined(OS_WIN) |
bool PDFiumEngineExports::RenderPDFPageToBitmap( |
- void* pdf_handle, |
+ const void* pdf_buffer, |
+ int pdf_buffer_size, |
int page_number, |
const RenderingSettings& settings, |
void* bitmap_buffer) { |
- FPDF_DOCUMENT doc = pdf_handle; |
+ FPDF_DOCUMENT doc = |
+ FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); |
if (!doc) |
return false; |
FPDF_PAGE page = FPDF_LoadPage(doc, page_number); |
- if (!page) |
+ if (!page) { |
+ FPDF_CloseDocument(doc); |
return false; |
+ } |
pp::Rect dest; |
int rotate = CalculatePosition(page, settings, &dest); |
@@ -4114,49 +4121,48 @@ 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, |
- void** pdf_handle) { |
+ double* max_page_width) { |
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); |
- *max_page_width = std::max(*max_page_width, page_width); |
+ if (page_width > *max_page_width) { |
+ *max_page_width = page_width; |
+ } |
} |
} |
- |
- if (pdf_handle) |
- *pdf_handle = doc; // Caller takes ownership. |
- else |
- FPDF_CloseDocument(pdf_handle); |
+ FPDF_CloseDocument(doc); |
return true; |
} |
-void PDFiumEngineExports::ReleasePDFHandle(void* pdf_handle) { |
- FPDF_CloseDocument(pdf_handle); |
-} |
- |
-bool PDFiumEngineExports::GetPDFPageSizeByIndex(void* pdf_handle, |
+bool PDFiumEngineExports::GetPDFPageSizeByIndex(const void* pdf_buffer, |
+ int pdf_buffer_size, |
int page_number, |
double* width, |
double* height) { |
- FPDF_DOCUMENT doc = pdf_handle; |
- return doc && FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; |
+ 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; |
} |
} // namespace chrome_pdf |