diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2020-06-28 12:34:19 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2020-06-29 23:38:31 +0200 |
commit | f5124552d87e84b5b6d6707c30b5f8a5defed69e (patch) | |
tree | 26dcb8ac5938cd80fa6b61f1f361b53f911ed561 /svx | |
parent | 64b7feb7f0e0d3f29625c73e9790b2f152e34c09 (diff) |
pdf: support PDF Form object and getMatrix
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97365
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
(cherry picked from commit b5b8da80439419a2daa6a80c9d3979173fe2887a)
Change-Id: I61f2004df7f9c9ac37959e0b50ea1ff83387c77a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97450
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.hxx | 7 | ||||
-rw-r--r-- | svx/source/svdraw/svdpdf.cxx | 29 |
2 files changed, 20 insertions, 16 deletions
diff --git a/svx/source/inc/svdpdf.hxx b/svx/source/inc/svdpdf.hxx index 896b84783d30..49c8d3e1b3c2 100644 --- a/svx/source/inc/svdpdf.hxx +++ b/svx/source/inc/svdpdf.hxx @@ -112,9 +112,12 @@ class SVXCORE_DLLPUBLIC ImpSdrPdfImport final void checkClip(); bool isClip() const; - void ImportPdfObject(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE pTextPage, + void ImportPdfObject(std::unique_ptr<vcl::pdf::PDFiumPageObject> const& pPageObject, + std::unique_ptr<vcl::pdf::PDFiumTextPage> const& pTextPage, int nPageObjectIndex); - void ImportForm(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE pTextPage, int nPageObjectIndex); + void ImportForm(std::unique_ptr<vcl::pdf::PDFiumPageObject> const& pPageObject, + std::unique_ptr<vcl::pdf::PDFiumTextPage> const& pTextPage, + int nPageObjectIndex); void ImportImage(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex); void ImportPath(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex); void ImportText(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE pTextPage, int nPageObjectIndex); diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx index 50e94a6f983b..066c77f0798f 100644 --- a/svx/source/svdraw/svdpdf.cxx +++ b/svx/source/svdraw/svdpdf.cxx @@ -185,7 +185,7 @@ void ImpSdrPdfImport::DoObjects(SvdProgressInfo* pProgrInfo, sal_uInt32* pAction for (int nPageObjectIndex = 0; nPageObjectIndex < nPageObjectCount; ++nPageObjectIndex) { auto pPageObject = pPdfPage->getObject(nPageObjectIndex); - ImportPdfObject(pPageObject->getPointer(), pTextPage->getPointer(), nPageObjectIndex); + ImportPdfObject(pPageObject, pTextPage, nPageObjectIndex); if (pProgrInfo && pActionsToReport) { (*pActionsToReport)++; @@ -683,23 +683,24 @@ void ImpSdrPdfImport::checkClip() } bool ImpSdrPdfImport::isClip() const { return !maClip.getB2DRange().isEmpty(); } -void ImpSdrPdfImport::ImportPdfObject(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE pTextPage, - int nPageObjectIndex) +void ImpSdrPdfImport::ImportPdfObject( + std::unique_ptr<vcl::pdf::PDFiumPageObject> const& pPageObject, + std::unique_ptr<vcl::pdf::PDFiumTextPage> const& pTextPage, int nPageObjectIndex) { - if (pPageObject == nullptr) + if (!pPageObject) return; - const int nPageObjectType = FPDFPageObj_GetType(pPageObject); + const int nPageObjectType = pPageObject->getType(); switch (nPageObjectType) { case FPDF_PAGEOBJ_TEXT: - ImportText(pPageObject, pTextPage, nPageObjectIndex); + ImportText(pPageObject->getPointer(), pTextPage->getPointer(), nPageObjectIndex); break; case FPDF_PAGEOBJ_PATH: - ImportPath(pPageObject, nPageObjectIndex); + ImportPath(pPageObject->getPointer(), nPageObjectIndex); break; case FPDF_PAGEOBJ_IMAGE: - ImportImage(pPageObject, nPageObjectIndex); + ImportImage(pPageObject->getPointer(), nPageObjectIndex); break; case FPDF_PAGEOBJ_SHADING: SAL_WARN("sd.filter", "Got page object SHADING: " << nPageObjectIndex); @@ -714,20 +715,20 @@ void ImpSdrPdfImport::ImportPdfObject(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE } } -void ImpSdrPdfImport::ImportForm(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE pTextPage, +void ImpSdrPdfImport::ImportForm(std::unique_ptr<vcl::pdf::PDFiumPageObject> const& pPageObject, + std::unique_ptr<vcl::pdf::PDFiumTextPage> const& pTextPage, int /*nPageObjectIndex*/) { // Get the form matrix to perform correct translation/scaling of the form sub-objects. const basegfx::B2DHomMatrix aOldMatrix = maCurrentMatrix; - double a, b, c, d, e, f; - FPDFTextObj_GetMatrix(pPageObject, &a, &b, &c, &d, &e, &f); - maCurrentMatrix = basegfx::B2DHomMatrix::abcdef(a, b, c, d, e, f); + maCurrentMatrix = pPageObject->getMatrix(); - const int nCount = FPDFFormObj_CountObjects(pPageObject); + const int nCount = pPageObject->getFormObjectCount(); for (int nIndex = 0; nIndex < nCount; ++nIndex) { - FPDF_PAGEOBJECT pFormObject = FPDFFormObj_GetObject(pPageObject, nIndex); + auto pFormObject = pPageObject->getFormObject(nIndex); + ImportPdfObject(pFormObject, pTextPage, -1); } |