summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorAshod Nakashian <ashod.nakashian@collabora.co.uk>2018-04-15 21:56:49 -0400
committerJan Holesovsky <kendy@collabora.com>2018-06-07 10:45:28 +0200
commit3ac5ec542031e08996768918d8793b5da3648fda (patch)
treea6ee6903933ba4e578f2079c5671da085dafdd6f /svx
parent81dfcf9b251192841f5049b028d4039d17133b5a (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.cxx70
-rw-r--r--svx/source/svdraw/svdpdf.hxx7
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();