| 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
|
|
|