summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2020-06-28 09:11:09 +0200
committerTomaž Vajngerl <quikee@gmail.com>2020-06-29 22:04:33 +0200
commit9cc54e9bc1219fcaea87ca35eb93b0e79325a7ac (patch)
treea397b3b1670c18392b1faee19d96cf4c0767632f /svx
parentf1cfba09f2aedc20fc7c3e2bc841d74ae2d58325 (diff)
use PDFium wrapper in ImpSdrPdfImport (partially)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97363 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> (cherry picked from commit 34745b022d0c58e262c7ad3bfd103e769b2cdd18) Change-Id: If13bcaa6a256354aceb2e1998521644041c03b7b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97448 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/inc/svdpdf.hxx2
-rw-r--r--svx/source/svdraw/svdpdf.cxx55
2 files changed, 18 insertions, 39 deletions
diff --git a/svx/source/inc/svdpdf.hxx b/svx/source/inc/svdpdf.hxx
index 3765f8a59577..896b84783d30 100644
--- a/svx/source/inc/svdpdf.hxx
+++ b/svx/source/inc/svdpdf.hxx
@@ -92,7 +92,7 @@ class SVXCORE_DLLPUBLIC ImpSdrPdfImport final
// clipregion
basegfx::B2DPolyPolygon maClip;
- FPDF_DOCUMENT mpPdfDocument;
+ std::unique_ptr<vcl::pdf::PDFiumDocument> mpPdfDocument;
int mnPageCount;
double mdPageWidthPts;
double mdPageHeightPts;
diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx
index f539d56ca355..ca8226b68ce5 100644
--- a/svx/source/svdraw/svdpdf.cxx
+++ b/svx/source/svdraw/svdpdf.cxx
@@ -127,7 +127,6 @@ ImpSdrPdfImport::ImpSdrPdfImport(SdrModel& rModel, SdrLayerID nLay, const tools:
, mbNoLine(false)
, mbNoFill(false)
, maClip()
- , mpPdfDocument(nullptr)
, mnPageCount(0)
, mdPageWidthPts(0)
, mdPageHeightPts(0)
@@ -147,65 +146,46 @@ ImpSdrPdfImport::ImpSdrPdfImport(SdrModel& rModel, SdrLayerID nLay, const tools:
// Load the buffer using pdfium.
auto const& rVectorGraphicData = mrGraphic.getVectorGraphicData();
- mpPdfDocument = FPDF_LoadMemDocument(
- rVectorGraphicData->getVectorGraphicDataArray().getConstArray(),
- rVectorGraphicData->getVectorGraphicDataArrayLength(), /*password=*/nullptr);
+ auto* pData = rVectorGraphicData->getVectorGraphicDataArray().getConstArray();
+ sal_Int32 nSize = rVectorGraphicData->getVectorGraphicDataArrayLength();
+ mpPdfDocument = mpPDFium->openDocument(pData, nSize);
if (!mpPdfDocument)
- {
- //TODO: Handle failure to load.
- switch (FPDF_GetLastError())
- {
- case FPDF_ERR_SUCCESS:
- break;
- case FPDF_ERR_UNKNOWN:
- break;
- case FPDF_ERR_FILE:
- break;
- case FPDF_ERR_FORMAT:
- break;
- case FPDF_ERR_PASSWORD:
- break;
- case FPDF_ERR_SECURITY:
- break;
- case FPDF_ERR_PAGE:
- break;
- default:
- break;
- }
-
return;
- }
- mnPageCount = FPDF_GetPageCount(mpPdfDocument);
+ mnPageCount = mpPdfDocument->getPageCount();
}
-ImpSdrPdfImport::~ImpSdrPdfImport() { FPDF_CloseDocument(mpPdfDocument); }
+ImpSdrPdfImport::~ImpSdrPdfImport() = default;
void ImpSdrPdfImport::DoObjects(SvdProgressInfo* pProgrInfo, sal_uInt32* pActionsToReport,
int nPageIndex)
{
- const int nPageCount = FPDF_GetPageCount(mpPdfDocument);
+ const int nPageCount = mpPdfDocument->getPageCount();
if (nPageCount > 0 && nPageIndex >= 0 && nPageIndex < nPageCount)
{
// Render next page.
- FPDF_PAGE pPdfPage = FPDF_LoadPage(mpPdfDocument, nPageIndex);
- if (pPdfPage == nullptr)
+ auto pPdfPage = mpPdfDocument->openPage(nPageIndex);
+ if (!pPdfPage)
return;
- const double dPageWidth = FPDF_GetPageWidth(pPdfPage);
- const double dPageHeight = FPDF_GetPageHeight(pPdfPage);
+ basegfx::B2DSize dPageSize = mpPdfDocument->getPageSize(nPageIndex);
+
+ const double dPageWidth = dPageSize.getX();
+ const double dPageHeight = dPageSize.getY();
+
SetupPageScale(dPageWidth, dPageHeight);
// Load the page text to extract it when we get text elements.
- FPDF_TEXTPAGE pTextPage = FPDFText_LoadPage(pPdfPage);
+ FPDF_TEXTPAGE pTextPage = FPDFText_LoadPage(pPdfPage->getPointer());
- const int nPageObjectCount = FPDFPage_CountObjects(pPdfPage);
+ const int nPageObjectCount = FPDFPage_CountObjects(pPdfPage->getPointer());
if (pProgrInfo)
pProgrInfo->SetActionCount(nPageObjectCount);
for (int nPageObjectIndex = 0; nPageObjectIndex < nPageObjectCount; ++nPageObjectIndex)
{
- FPDF_PAGEOBJECT pPageObject = FPDFPage_GetObject(pPdfPage, nPageObjectIndex);
+ FPDF_PAGEOBJECT pPageObject
+ = FPDFPage_GetObject(pPdfPage->getPointer(), nPageObjectIndex);
ImportPdfObject(pPageObject, pTextPage, nPageObjectIndex);
if (pProgrInfo && pActionsToReport)
{
@@ -222,7 +202,6 @@ void ImpSdrPdfImport::DoObjects(SvdProgressInfo* pProgrInfo, sal_uInt32* pAction
}
FPDFText_ClosePage(pTextPage);
- FPDF_ClosePage(pPdfPage);
}
}