diff options
author | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2018-04-15 21:56:49 -0400 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2018-06-07 10:45:28 +0200 |
commit | 3ac5ec542031e08996768918d8793b5da3648fda (patch) | |
tree | a6ee6903933ba4e578f2079c5671da085dafdd6f /svx | |
parent | 81dfcf9b251192841f5049b028d4039d17133b5a (diff) |
svx: support importing forms from PDFs
Still missing the context matrix transformations.
Change-Id: Id9457c6475463127d3bc444f36fa373a6ec8fcb6
(cherry picked from commit 08e2c68e99151c70d06581261bbc137f80967d9e)
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/svdraw/svdpdf.cxx | 70 | ||||
-rw-r--r-- | svx/source/svdraw/svdpdf.hxx | 7 |
2 files changed, 48 insertions, 29 deletions
diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx index b3e1f51730ed..acb85166bfd7 100644 --- a/svx/source/svdraw/svdpdf.cxx +++ b/svx/source/svdraw/svdpdf.cxx @@ -229,32 +229,7 @@ void ImpSdrPdfImport::DoLoopActions(SvdProgressInfo* pProgrInfo, sal_uInt32* pAc for (int nPageObjectIndex = 0; nPageObjectIndex < nPageObjectCount; ++nPageObjectIndex) { FPDF_PAGEOBJECT pPageObject = FPDFPage_GetObject(pPdfPage, nPageObjectIndex); - if (pPageObject == nullptr) - continue; - - const int nPageObjectType = FPDFPageObj_GetType(pPageObject); - switch (nPageObjectType) - { - case FPDF_PAGEOBJ_TEXT: - ImportText(pPageObject, nPageObjectIndex); - break; - case FPDF_PAGEOBJ_PATH: - ImportPath(pPageObject, nPageObjectIndex); - break; - case FPDF_PAGEOBJ_IMAGE: - ImportImage(pPageObject, nPageObjectIndex); - break; - case FPDF_PAGEOBJ_SHADING: - SAL_WARN("sd.filter", "Got page object SHADING: " << nPageObjectIndex); - break; - case FPDF_PAGEOBJ_FORM: - SAL_WARN("sd.filter", "Got page object FORM: " << nPageObjectIndex); - break; - default: - SAL_WARN("sd.filter", "Unknown PDF page object type: " - << nPageObjectType << ": " << nPageObjectIndex); - break; - } + ImportPdfObject(pPageObject, nPageObjectIndex); } #if 0 @@ -1015,6 +990,49 @@ void ImpSdrPdfImport::checkClip() } bool ImpSdrPdfImport::isClip() const { return !maClip.getB2DRange().isEmpty(); } + +void ImpSdrPdfImport::ImportPdfObject(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex) +{ + if (pPageObject == nullptr) + return; + + const int nPageObjectType = FPDFPageObj_GetType(pPageObject); + switch (nPageObjectType) + { + case FPDF_PAGEOBJ_TEXT: + ImportText(pPageObject, nPageObjectIndex); + break; + case FPDF_PAGEOBJ_PATH: + ImportPath(pPageObject, nPageObjectIndex); + break; + case FPDF_PAGEOBJ_IMAGE: + ImportImage(pPageObject, nPageObjectIndex); + break; + case FPDF_PAGEOBJ_SHADING: + SAL_WARN("sd.filter", "Got page object SHADING: " << nPageObjectIndex); + break; + case FPDF_PAGEOBJ_FORM: + ImportForm(pPageObject, nPageObjectIndex); + break; + default: + SAL_WARN("sd.filter", "Unknown PDF page object #" << nPageObjectIndex + << " of type: " << nPageObjectType); + break; + } +} + +void ImpSdrPdfImport::ImportForm(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex) +{ + SAL_WARN("sd.filter", "Got page object FORM: " << nPageObjectIndex); + + const int nCount = FPDFFormObj_CountSubObjects(pPageObject); + for (int nIndex = 0; nIndex < nCount; ++nIndex) + { + FPDF_PAGEOBJECT pFormObject = FPDFFormObj_GetSubObject(pPageObject, nIndex); + ImportPdfObject(pFormObject, -1); + } +} + void ImpSdrPdfImport::ImportText(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex) { SAL_WARN("sd.filter", "Got page object TEXT: " << nPageObjectIndex); diff --git a/svx/source/svdraw/svdpdf.hxx b/svx/source/svdraw/svdpdf.hxx index 2063788290d9..d98f97d8cd09 100644 --- a/svx/source/svdraw/svdpdf.hxx +++ b/svx/source/svdraw/svdpdf.hxx @@ -100,13 +100,14 @@ class ImpSdrPdfImport final void checkClip(); bool isClip() const; + void ImportPdfObject(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex); + void ImportForm(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex); void ImportImage(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex); - void SetupPageScale(const double dPageWidth, const double dPageHeight); - void ImportPath(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex); - void ImportText(FPDF_PAGEOBJECT pPageObject, int nPageObjectIndex); void ImportText(const Point& rPos, const Size& rSize, const OUString& rStr); + + void SetupPageScale(const double dPageWidth, const double dPageHeight); void SetAttributes(SdrObject* pObj, bool bForceTextAttr = false); void InsertObj(SdrObject* pObj, bool bScale = true); void MapScaling(); |