download.lst | 4 external/pdfium/0002-svx-more-accurate-PDF-text-importing.patch.2 | 82 + external/pdfium/0003-svx-import-PDF-images-as-BGRA.patch.2 | 58 external/pdfium/0004-svx-support-PDF-text-color.patch.2 | 119 + external/pdfium/0009-svx-support-color-text-for-imported-PDFs.patch.2 | 100 + external/pdfium/0010-svx-support-importing-forms-from-PDFs.patch.2 | 94 + external/pdfium/0011-svx-correctly-possition-form-objects-from-PDF.patch.2 | 75 external/pdfium/0012-svx-import-processed-PDF-text.patch.2 | 148 + external/pdfium/0014-svx-update-PDFium-patch-and-code.patch.2 | 83 + external/pdfium/0015-svx-set-the-font-name-of-imported-PDF-text.patch.2 | 77 + external/pdfium/Library_pdfium.mk | 4 external/pdfium/UnpackedTarball_pdfium.mk | 11 external/pdfium/build.patch.1 | 53 external/pdfium/edit.patch.1 | 757 ---------- external/pdfium/icu.patch.1 | 13 svx/source/svdraw/svdpdf.cxx | 4 16 files changed, 891 insertions(+), 791 deletions(-)
New commits: commit 3465490b8bcc9606596b1011a530f4955daf8d0a Author: Miklos Vajna <vmik...@collabora.co.uk> AuthorDate: Tue Jul 17 21:23:40 2018 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Dec 17 10:02:22 2020 +0100 pdfium: update to 3471 Allows dropping 4 API patches + the one that allows building against system ICU. (cherry picked from commit 1445d84cdc906fabf6cc7a59f3c94b4049477701) Conflicts: external/pdfium/0002-svx-more-accurate-PDF-text-importing.patch.2 external/pdfium/UnpackedTarball_pdfium.mk [ Also split up edit.patch.1 which as done when forward-porting from cp-6.0 to cp-6.2, so not something that could be backported explicitly. ] Change-Id: Ib5c63ba7daf51b320c07b24486f7398bf71bcfbf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107340 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/download.lst b/download.lst index 98c5a6ed32c2..37c69be838d2 100644 --- a/download.lst +++ b/download.lst @@ -214,8 +214,8 @@ export OWNCLOUD_ANDROID_LIB_SHA256SUM := b18b3e3ef7fae6a79b62f2bb43cc47a5346b633 export OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz export PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d export PAGEMAKER_TARBALL := libpagemaker-0.0.4.tar.xz -export PDFIUM_SHA256SUM := 80331b48166501a192d65476932f17044eeb5f10faa6ea50f4f175169475c957 -export PDFIUM_TARBALL := pdfium-3426.tar.bz2 +export PDFIUM_SHA256SUM := 4acbc905fee1743e96169ca155347a81fb2b0f381281109c1860aa4408ec6c4f +export PDFIUM_TARBALL := pdfium-3471.tar.bz2 export PIXMAN_SHA256SUM := 21b6b249b51c6800dc9553b65106e1e37d0e25df942c90531d4c3997aa20a88e export PIXMAN_TARBALL := e80ebae4da01e77f68744319f01d52a3-pixman-0.34.0.tar.gz export LIBPNG_SHA256SUM := 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca diff --git a/external/pdfium/0002-svx-more-accurate-PDF-text-importing.patch.2 b/external/pdfium/0002-svx-more-accurate-PDF-text-importing.patch.2 new file mode 100644 index 000000000000..ef6649b5f4cb --- /dev/null +++ b/external/pdfium/0002-svx-more-accurate-PDF-text-importing.patch.2 @@ -0,0 +1,82 @@ +From 5f83d0a3fac4f8ccef457c03b74433ffd7b12e2a Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 11:28:30 +0200 +Subject: [PATCH 02/14] svx: more accurate PDF text importing + +--- + pdfium/fpdfsdk/fpdf_editpage.cpp | 84 ++++++++++++++++++++++++++++++++++++++++ + pdfium/public/fpdf_edit.h | 36 +++++++++++++++++ + 2 files changed, 120 insertions(+) + +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index 912df63..3244943 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -13,6 +13,7 @@ + + #include "constants/page_object.h" + #include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h" ++#include "core/fpdfapi/font/cpdf_font.h" + #include "core/fpdfapi/page/cpdf_form.h" + #include "core/fpdfapi/page/cpdf_formobject.h" + #include "core/fpdfapi/page/cpdf_imageobject.h" +@@ -440,6 +441,26 @@ FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object, + pPageObj->Transform(matrix); + } + ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_CountChars(FPDF_PAGEOBJECT text_object) ++{ ++ if (!text_object) ++ return 0; ++ ++ CPDF_TextObject* pTxtObj = static_cast<CPDF_TextObject*>(text_object); ++ return pTxtObj->CountChars(); ++} ++ ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object) ++{ ++ if (!text_object) ++ return 0; ++ ++ CPDF_TextObject* pTxtObj = static_cast<CPDF_TextObject*>(text_object); ++ return pTxtObj->GetFontSize(); ++} ++ + FPDF_EXPORT void FPDF_CALLCONV + FPDFPageObj_SetBlendMode(FPDF_PAGEOBJECT page_object, + FPDF_BYTESTRING blend_mode) { +diff --git a/pdfium/public/fpdf_edit.h b/pdfium/public/fpdf_edit.h +--- a/pdfium/public/fpdf_edit.h ++++ b/pdfium/public/fpdf_edit.h +@@ -1107,6 +1107,26 @@ FPDFPageObj_CreateTextObj(FPDF_DOCUMENT document, + FPDF_FONT font, + float font_size); + ++// Get the number of characters from a text object. ++// ++// text_object - Handle of text object returned by FPDFPageObj_NewTextObj ++// or FPDFPageObj_NewTextObjEx. ++// Return Value: ++// A character count in the text object. ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_CountChars(FPDF_PAGEOBJECT text_object); ++ ++ ++// Get the font size of a text object. ++// ++// text_object - Handle of text object returned by FPDFPageObj_NewTextObj ++// or FPDFPageObj_NewTextObjEx. ++// ++// Return Value: ++// The value of the font size ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object); ++ + #ifdef __cplusplus + } // extern "C" + #endif // __cplusplus +-- +2.16.3 + diff --git a/external/pdfium/0003-svx-import-PDF-images-as-BGRA.patch.2 b/external/pdfium/0003-svx-import-PDF-images-as-BGRA.patch.2 new file mode 100644 index 000000000000..21c3d007fb3d --- /dev/null +++ b/external/pdfium/0003-svx-import-PDF-images-as-BGRA.patch.2 @@ -0,0 +1,58 @@ +From faeac63865eeb791501d7535f1e7a7c7fc807b04 Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 11:29:15 +0200 +Subject: [PATCH 03/14] svx: import PDF images as BGRA + +--- + pdfium/fpdfsdk/fpdf_editimg.cpp | 20 ++++++++++++++++++++ + pdfium/public/fpdfview.h | 3 +++ + 2 files changed, 23 insertions(+) + +diff --git a/pdfium/fpdfsdk/fpdf_editimg.cpp b/pdfium/fpdfsdk/fpdf_editimg.cpp +index fed1581..3f400c7 100644 +--- a/pdfium/fpdfsdk/fpdf_editimg.cpp ++++ b/pdfium/fpdfsdk/fpdf_editimg.cpp +@@ -186,6 +186,26 @@ FPDFImageObj_GetBitmap(FPDF_PAGEOBJECT image_object) { + return FPDFBitmapFromCFXDIBitmap(pBitmap.Leak()); + } + ++FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV ++FPDFImageObj_GetBitmapBgra(FPDF_PAGEOBJECT image_object) { ++ CPDF_PageObject* pObj = CPDFPageObjectFromFPDFPageObject(image_object); ++ if (!pObj || !pObj->IsImage()) ++ return nullptr; ++ ++ RetainPtr<CPDF_Image> pImg = pObj->AsImage()->GetImage(); ++ if (!pImg) ++ return nullptr; ++ ++ RetainPtr<CFX_DIBSource> pSource = pImg->LoadDIBSource(); ++ if (!pSource) ++ return nullptr; ++ ++ RetainPtr<CFX_DIBitmap> pBitmap; ++ pBitmap = pSource->CloneConvert(FXDIB_Argb); ++ ++ return pBitmap.Leak(); ++} ++ + FPDF_EXPORT unsigned long FPDF_CALLCONV + FPDFImageObj_GetImageDataDecoded(FPDF_PAGEOBJECT image_object, + void* buffer, +diff --git a/pdfium/public/fpdfview.h b/pdfium/public/fpdfview.h +index 0ccd140..b451b9c 100644 +--- a/pdfium/public/fpdfview.h ++++ b/pdfium/public/fpdfview.h +@@ -905,6 +905,9 @@ FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV FPDFBitmap_CreateEx(int width, + // function; see the list of such formats above. + FPDF_EXPORT int FPDF_CALLCONV FPDFBitmap_GetFormat(FPDF_BITMAP bitmap); + ++FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV ++FPDFImageObj_GetBitmapBgra(FPDF_PAGEOBJECT image_object); ++ + // Function: FPDFBitmap_FillRect + // Fill a rectangle in a bitmap. + // Parameters: +-- +2.16.3 + diff --git a/external/pdfium/0004-svx-support-PDF-text-color.patch.2 b/external/pdfium/0004-svx-support-PDF-text-color.patch.2 new file mode 100644 index 000000000000..a99f8f5966dd --- /dev/null +++ b/external/pdfium/0004-svx-support-PDF-text-color.patch.2 @@ -0,0 +1,119 @@ +From 914467a56b9c4cd6a27cfa9b7ed61ebfb5a122d3 Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 11:29:49 +0200 +Subject: [PATCH 04/14] svx: support PDF text color + +--- + pdfium/fpdfsdk/cpdfsdk_helpers.h | 5 +++++ + pdfium/fpdfsdk/fpdf_editpage.cpp | 30 +++++++++++++++++++++++++----- + pdfium/public/fpdf_edit.h | 16 ++++++++++++++++ + 3 files changed, 46 insertions(+), 5 deletions(-) + +diff --git a/pdfium/fpdfsdk/cpdfsdk_helpers.h b/pdfium/fpdfsdk/cpdfsdk_helpers.h +index d93ecfc..13362cf 100644 +--- a/pdfium/fpdfsdk/cpdfsdk_helpers.h ++++ b/pdfium/fpdfsdk/cpdfsdk_helpers.h +@@ -204,6 +204,11 @@ inline CPDF_TextPageFind* CPDFTextPageFindFromFPDFSchHandle( + return reinterpret_cast<CPDF_TextPageFind*>(handle); + } + ++inline CPDF_TextObject* CPDFTextObjectFromFPDFPageObject( ++ FPDF_PAGEOBJECT page_object) { ++ return reinterpret_cast<CPDF_TextObject*>(page_object); ++} ++ + ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string); + + #ifdef PDF_ENABLE_XFA +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index 3244943..f8e2418 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -443,7 +443,7 @@ FPDFTextObj_CountChars(FPDF_PAGEOBJECT text_object) + if (!text_object) + return 0; + +- CPDF_TextObject* pTxtObj = static_cast<CPDF_TextObject*>(text_object); ++ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); + return pTxtObj->CountChars(); + } + +@@ -453,7 +453,7 @@ FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object) + if (!text_object) + return 0; + +- CPDF_TextObject* pTxtObj = static_cast<CPDF_TextObject*>(text_object); ++ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); + return pTxtObj->GetFontSize(); + } + +@@ -645,3 +645,23 @@ FPDFPageObj_SetLineCap(FPDF_PAGEOBJECT page_object, int line_cap) { + pPageObj->SetDirty(true); + return true; + } ++ ++FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV ++FPDFTextObj_GetStrokeColor(FPDF_PAGEOBJECT text_object, ++ unsigned int* R, ++ unsigned int* G, ++ unsigned int* B, ++ unsigned int* A) ++{ ++ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); ++ if (!pTxtObj || !R || !G || !B || !A) ++ return false; ++ ++ const uint32_t strokeRGB = pTxtObj->m_ColorState.GetStrokeRGB(); ++ *R = FXSYS_GetRValue(strokeRGB); ++ *G = FXSYS_GetGValue(strokeRGB); ++ *B = FXSYS_GetBValue(strokeRGB); ++ *A = static_cast<unsigned int>( ++ (pTxtObj->m_GeneralState.GetStrokeAlpha() * 255.f) + 0.5f); ++ return true; ++} +diff --git a/pdfium/public/fpdf_edit.h b/pdfium/public/fpdf_edit.h +index 602849f..fa9902e 100644 +--- a/pdfium/public/fpdf_edit.h ++++ b/pdfium/public/fpdf_edit.h +@@ -1016,6 +1016,22 @@ FPDFTextObj_CountChars(FPDF_PAGEOBJECT text_object); + FPDF_EXPORT int FPDF_CALLCONV + FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object); + ++// Get the stroke RGBA of a text. Range of values: 0 - 255. ++// ++// path - the handle to the path object. ++// R - the red component of the path stroke color. ++// G - the green component of the path stroke color. ++// B - the blue component of the path stroke color. ++// A - the stroke alpha of the path. ++// ++// Returns TRUE on success. ++FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV ++FPDFTextObj_GetStrokeColor(FPDF_PAGEOBJECT text_object, ++ unsigned int* R, ++ unsigned int* G, ++ unsigned int* B, ++ unsigned int* A); ++ + #ifdef __cplusplus + } // extern "C" + #endif // __cplusplus +diff --git a/pdfium/fpdfsdk/fpdf_edittext.cpp b/pdfium/fpdfsdk/fpdf_edittext.cpp +index c38873faa..aa3287ef4 100644 +--- a/pdfium/fpdfsdk/fpdf_edittext.cpp ++++ b/pdfium/fpdfsdk/fpdf_edittext.cpp +@@ -398,11 +398,6 @@ CPDF_Font* LoadCompositeFont(CPDF_Document* pDoc, + return pDoc->LoadFont(fontDict); + } + +-CPDF_TextObject* CPDFTextObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object) { +- auto* obj = CPDFPageObjectFromFPDFPageObject(page_object); +- return obj ? obj->AsText() : nullptr; +-} +- + } // namespace + + FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV +-- +2.16.3 + diff --git a/external/pdfium/0009-svx-support-color-text-for-imported-PDFs.patch.2 b/external/pdfium/0009-svx-support-color-text-for-imported-PDFs.patch.2 new file mode 100644 index 000000000000..c141cc4b58ea --- /dev/null +++ b/external/pdfium/0009-svx-support-color-text-for-imported-PDFs.patch.2 @@ -0,0 +1,100 @@ +From 32ec9efddb8e1706085478fd8434dd2860840345 Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 11:33:56 +0200 +Subject: [PATCH 09/14] svx: support color text for imported PDFs + +--- + pdfium/core/fpdfapi/page/cpdf_imageobject.cpp | 2 +- + pdfium/core/fxge/cfx_pathdata.cpp | 4 +-- + pdfium/fpdfsdk/fpdf_editpage.cpp | 47 ++++++++++++++++++++++----- + pdfium/public/fpdf_edit.h | 10 +++--- + 4 files changed, 46 insertions(+), 17 deletions(-) + +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index 2249e8e..9c353a4 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -733,21 +733,50 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFTextObj_GetText(FPDF_PAGEOBJECT text_object, + } + + FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV +-FPDFTextObj_GetStrokeColor(FPDF_PAGEOBJECT text_object, +- unsigned int* R, +- unsigned int* G, +- unsigned int* B, +- unsigned int* A) ++FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, ++ unsigned int* R, ++ unsigned int* G, ++ unsigned int* B, ++ unsigned int* A) + { + CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); + if (!pTxtObj || !R || !G || !B || !A) + return false; + +- const uint32_t strokeRGB = pTxtObj->m_ColorState.GetStrokeRGB(); +- *R = FXSYS_GetRValue(strokeRGB); +- *G = FXSYS_GetGValue(strokeRGB); +- *B = FXSYS_GetBValue(strokeRGB); ++ bool bFill = false; ++ bool bStroke = false; ++ CPDF_Font* pFont = pTxtObj->m_TextState.GetFont(); ++ const TextRenderingMode text_render_mode = pTxtObj->m_TextState.GetTextMode(); ++ switch (text_render_mode) ++ { ++ case TextRenderingMode::MODE_FILL: ++ case TextRenderingMode::MODE_FILL_CLIP: ++ bFill = true; ++ break; ++ case TextRenderingMode::MODE_STROKE: ++ case TextRenderingMode::MODE_STROKE_CLIP: ++ if (pFont->GetFace()) ++ bStroke = true; ++ else ++ bFill = true; ++ break; ++ case TextRenderingMode::MODE_FILL_STROKE: ++ case TextRenderingMode::MODE_FILL_STROKE_CLIP: ++ bFill = true; ++ if (pFont->GetFace()) ++ bStroke = true; ++ break; ++ case TextRenderingMode::MODE_INVISIBLE: ++ case TextRenderingMode::MODE_CLIP: ++ return false; ++ } ++ ++ const uint32_t RGB = bStroke ? pTxtObj->m_ColorState.GetStrokeRGB() : pTxtObj->m_ColorState.GetFillRGB(); ++ *R = FXSYS_GetRValue(RGB); ++ *G = FXSYS_GetGValue(RGB); ++ *B = FXSYS_GetBValue(RGB); + *A = static_cast<unsigned int>( + (pTxtObj->m_GeneralState.GetStrokeAlpha() * 255.f) + 0.5f); ++ + return true; + } +diff --git a/pdfium/public/fpdf_edit.h b/pdfium/public/fpdf_edit.h +index fc906f4..4264ccd 100644 +--- a/pdfium/public/fpdf_edit.h ++++ b/pdfium/public/fpdf_edit.h +@@ -1075,11 +1075,11 @@ FPDFTextObj_GetText(FPDF_PAGEOBJECT text_object, + // + // Returns TRUE on success. + FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV +-FPDFTextObj_GetStrokeColor(FPDF_PAGEOBJECT text_object, +- unsigned int* R, +- unsigned int* G, +- unsigned int* B, +- unsigned int* A); ++FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, ++ unsigned int* R, ++ unsigned int* G, ++ unsigned int* B, ++ unsigned int* A); + + #ifdef __cplusplus + } // extern "C" +-- +2.16.3 + diff --git a/external/pdfium/0010-svx-support-importing-forms-from-PDFs.patch.2 b/external/pdfium/0010-svx-support-importing-forms-from-PDFs.patch.2 new file mode 100644 index 000000000000..f0b09bbf7abf --- /dev/null +++ b/external/pdfium/0010-svx-support-importing-forms-from-PDFs.patch.2 @@ -0,0 +1,94 @@ +From 636f92aac24f0accfbce910c9153d5479e097e5f Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 11:34:38 +0200 +Subject: [PATCH 10/14] svx: support importing forms from PDFs + +--- + pdfium/fpdfsdk/cpdfsdk_helpers.h | 5 +++++ + pdfium/fpdfsdk/fpdf_editpage.cpp | 30 ++++++++++++++++++++++++++++++ + pdfium/public/fpdf_edit.h | 17 +++++++++++++++++ + 3 files changed, 52 insertions(+) + +diff --git a/pdfium/fpdfsdk/cpdfsdk_helpers.h b/pdfium/fpdfsdk/cpdfsdk_helpers.h +index 13362cf..477bb74 100644 +--- a/pdfium/fpdfsdk/cpdfsdk_helpers.h ++++ b/pdfium/fpdfsdk/cpdfsdk_helpers.h +@@ -209,6 +209,11 @@ inline CPDF_TextObject* CPDFTextObjectFromFPDFPageObject( + return reinterpret_cast<CPDF_TextObject*>(page_object); + } + ++inline CPDF_FormObject* CPDFFormObjectFromFPDFPageObject( ++ FPDF_PAGEOBJECT page_object) { ++ return reinterpret_cast<CPDF_FormObject*>(page_object); ++} ++ + ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string); + + #ifdef PDF_ENABLE_XFA +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index 9c353a4..bf68250 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -704,3 +704,31 @@ FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, + + return true; + } ++ ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFFormObj_CountSubObjects(FPDF_PAGEOBJECT form_object) ++{ ++ CPDF_FormObject* pFrmObj = CPDFFormObjectFromFPDFPageObject(form_object); ++ if (pFrmObj) ++ { ++ const CPDF_PageObjectList* pObjectList = pFrmObj->form()->GetPageObjectList(); ++ if (pObjectList) ++ return pObjectList->size(); ++ } ++ ++ return 0; ++} ++ ++FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV ++FPDFFormObj_GetSubObject(FPDF_PAGEOBJECT form_object, int index) ++{ ++ CPDF_FormObject* pFrmObj = CPDFFormObjectFromFPDFPageObject(form_object); ++ if (pFrmObj) ++ { ++ const CPDF_PageObjectList* pObjectList = pFrmObj->form()->GetPageObjectList(); ++ if (pObjectList) ++ return pObjectList->GetPageObjectByIndex(index); ++ } ++ ++ return nullptr; ++} +diff --git a/pdfium/public/fpdf_edit.h b/pdfium/public/fpdf_edit.h +index 4264ccd..ca76954 100644 +--- a/pdfium/public/fpdf_edit.h ++++ b/pdfium/public/fpdf_edit.h +@@ -1081,6 +1081,23 @@ FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, + unsigned int* B, + unsigned int* A); + ++// Get number of page objects inside the form object. ++// ++// form_object - Handle to a form object. Returned by FPDFPage_GetObject. ++// Return value: ++// The number of the page objects. ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFFormObj_CountSubObjects(FPDF_PAGEOBJECT form_object); ++ ++// Get the page object from a form object. ++// ++// form_object - Handle to a form object. Returned by FPDFPage_GetObject. ++// index - The index of a page object. ++// Return value: ++// The handle of the page object. Null for failed. ++FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV ++FPDFFormObj_GetSubObject(FPDF_PAGEOBJECT form_object, int index); ++ + #ifdef __cplusplus + } // extern "C" + #endif // __cplusplus +-- +2.16.3 + diff --git a/external/pdfium/0011-svx-correctly-possition-form-objects-from-PDF.patch.2 b/external/pdfium/0011-svx-correctly-possition-form-objects-from-PDF.patch.2 new file mode 100644 index 000000000000..081840e20576 --- /dev/null +++ b/external/pdfium/0011-svx-correctly-possition-form-objects-from-PDF.patch.2 @@ -0,0 +1,75 @@ +From c82f6e80d94f8598221009035c8f336f5f656333 Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 11:35:14 +0200 +Subject: [PATCH 11/14] svx: correctly possition form objects from PDF + +--- + pdfium/fpdfsdk/fpdf_editpage.cpp | 25 +++++++++++++++++++++++++ + pdfium/public/fpdf_edit.h | 18 ++++++++++++++++++ + 2 files changed, 43 insertions(+) + +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index bf68250..f4a1688 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -810,3 +810,28 @@ FPDFFormObj_GetSubObject(FPDF_PAGEOBJECT form_object, int index) + + return nullptr; + } ++ ++FPDF_EXPORT void FPDF_CALLCONV ++FPDFFormObj_GetMatrix(FPDF_PAGEOBJECT form_object, ++ double* a, ++ double* b, ++ double* c, ++ double* d, ++ double* e, ++ double* f) ++{ ++ if (!form_object || !a || !b || !c || !d || !e || !f) ++ return; ++ ++ CPDF_FormObject* pFrmObj = CPDFFormObjectFromFPDFPageObject(form_object); ++ if (pFrmObj) ++ { ++ const CFX_Matrix& matrix = pFrmObj->form_matrix(); ++ *a = matrix.a; ++ *b = matrix.b; ++ *c = matrix.c; ++ *d = matrix.d; ++ *e = matrix.e; ++ *f = matrix.f; ++ } ++} +diff --git a/pdfium/public/fpdf_edit.h b/pdfium/public/fpdf_edit.h +index ca76954..f249e64 100644 +--- a/pdfium/public/fpdf_edit.h ++++ b/pdfium/public/fpdf_edit.h +@@ -1098,6 +1098,24 @@ FPDFFormObj_CountSubObjects(FPDF_PAGEOBJECT form_object); + FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV + FPDFFormObj_GetSubObject(FPDF_PAGEOBJECT form_object, int index); + ++// Get the matrix of a particular form object. ++// ++// form_object - Handle of form object ++// a - Pointer to a double value receiving coefficient "a" of the matrix. ++// b - Pointer to a double value receiving coefficient "b" of the matrix. ++// c - Pointer to a double value receiving coefficient "c" of the matrix. ++// d - Pointer to a double value receiving coefficient "d" of the matrix. ++// e - Pointer to a double value receiving coefficient "e" of the matrix. ++// f - Pointer to a double value receiving coefficient "f" of the matrix. ++FPDF_EXPORT void FPDF_CALLCONV ++FPDFFormObj_GetMatrix(FPDF_PAGEOBJECT form_object, ++ double* a, ++ double* b, ++ double* c, ++ double* d, ++ double* e, ++ double* f); ++ + #ifdef __cplusplus + } // extern "C" + #endif // __cplusplus +-- +2.16.3 + diff --git a/external/pdfium/0012-svx-import-processed-PDF-text.patch.2 b/external/pdfium/0012-svx-import-processed-PDF-text.patch.2 new file mode 100644 index 000000000000..008c7047bdfa --- /dev/null +++ b/external/pdfium/0012-svx-import-processed-PDF-text.patch.2 @@ -0,0 +1,148 @@ +From 7e8ecec81f102993e3fe73256415dcf049c09e29 Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 11:35:39 +0200 +Subject: [PATCH 12/14] svx: import processed PDF text + +--- + pdfium/core/fpdftext/cpdf_textpage.cpp | 29 ++++++++++++++++++++++++ + pdfium/core/fpdftext/cpdf_textpage.h | 2 ++ + pdfium/fpdfsdk/fpdf_editpage.cpp | 41 ++++++++++++++++++++++++++++++++++ + pdfium/public/fpdf_edit.h | 13 +++++++++++ + 4 files changed, 85 insertions(+) + +diff --git a/pdfium/core/fpdftext/cpdf_textpage.cpp b/pdfium/core/fpdftext/cpdf_textpage.cpp +index 5690698..4d7c48a 100644 +--- a/pdfium/core/fpdftext/cpdf_textpage.cpp ++++ b/pdfium/core/fpdftext/cpdf_textpage.cpp +@@ -1464,3 +1464,32 @@ Optional<PAGECHAR_INFO> CPDF_TextPage::GenerateCharInfo(wchar_t unicode) { + info.m_Origin.x, info.m_Origin.y); + return info; + } ++ ++WideString CPDF_TextPage::GetTextObjectText(CPDF_TextObject* pTextObj) ++{ ++ if (!m_bIsParsed) ++ return WideString(); ++ ++ float posy = 0; ++ bool IsContainPreChar = false; ++ bool IsAddLineFeed = false; ++ WideString strText; ++ for (const auto& charinfo : m_CharList) { ++ if (charinfo.m_pTextObj == pTextObj) { ++ IsContainPreChar = true; ++ IsAddLineFeed = false; ++ if (charinfo.m_Unicode) ++ strText += charinfo.m_Unicode; ++ } else if (charinfo.m_Unicode == 32) { ++ if (IsContainPreChar && charinfo.m_Unicode) { ++ strText += charinfo.m_Unicode; ++ IsContainPreChar = false; ++ IsAddLineFeed = false; ++ } ++ } else { ++ IsContainPreChar = false; ++ IsAddLineFeed = true; ++ } ++ } ++ return strText; ++} +diff --git a/pdfium/core/fpdftext/cpdf_textpage.h b/pdfium/core/fpdftext/cpdf_textpage.h +index 43a0312..7d5d5ec 100644 +--- a/pdfium/core/fpdftext/cpdf_textpage.h ++++ b/pdfium/core/fpdftext/cpdf_textpage.h +@@ -105,6 +105,8 @@ class CPDF_TextPage { + WideString GetPageText(int start, int count) const; + WideString GetAllPageText() const { return GetPageText(0, CountChars()); } + ++ WideString GetTextObjectText(CPDF_TextObject* pTextObj); ++ + int CountRects(int start, int nCount); + bool GetRect(int rectIndex, CFX_FloatRect* pRect) const; + +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index f4a1688..f34d3b5 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -26,6 +26,7 @@ + #include "core/fpdfapi/parser/cpdf_string.h" + #include "core/fpdfdoc/cpdf_annot.h" + #include "core/fpdfdoc/cpdf_annotlist.h" ++#include "core/fpdftext/cpdf_textpage.h" + #include "fpdfsdk/cpdfsdk_helpers.h" + #include "public/fpdf_formfill.h" + #include "third_party/base/logging.h" +@@ -656,6 +657,46 @@ FPDFPageObj_SetLineCap(FPDF_PAGEOBJECT page_object, int line_cap) { + return true; + } + ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_GetTextProcessed(FPDF_PAGEOBJECT text_object, ++ FPDF_TEXTPAGE page, ++ int char_start, ++ int char_count, ++ unsigned short* result) ++{ ++ if (!page || !text_object || char_start < 0 || char_count < 0 || !result) ++ return 0; ++ ++ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); ++ CPDF_TextPage* textpage = CPDFTextPageFromFPDFTextPage(page); ++ int char_available = textpage->CountChars() - char_start; ++ if (char_available <= 0) ++ return 0; ++ ++ char_count = std::min(char_count, char_available); ++ if (char_count == 0) { ++ // Writing out "", which has a character count of 1 due to the NUL. ++ *result = '\0'; ++ return 1; ++ } ++ ++ WideString str = textpage->GetTextObjectText(pTxtObj); ++ ++ if (str.GetLength() > static_cast<size_t>(char_count)) ++ str = str.Left(static_cast<size_t>(char_count)); ++ ++ // UFT16LE_Encode doesn't handle surrogate pairs properly, so it is expected ++ // the number of items to stay the same. ++ ByteString byte_str = str.UTF16LE_Encode(); ++ size_t byte_str_len = byte_str.GetLength(); ++ constexpr size_t kBytesPerCharacter = sizeof(unsigned short); ++ int ret_count = byte_str_len / kBytesPerCharacter; ++ ++ ASSERT(ret_count <= char_count + 1); // +1 to account for the NUL terminator. ++ memcpy(result, byte_str.GetBuffer(byte_str_len), byte_str_len); ++ return ret_count; ++} ++ + FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV + FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, + unsigned int* R, +diff --git a/pdfium/public/fpdf_edit.h b/pdfium/public/fpdf_edit.h +index f249e64..e14b2a5 100644 +--- a/pdfium/public/fpdf_edit.h ++++ b/pdfium/public/fpdf_edit.h +@@ -1088,6 +1088,19 @@ FPDFTextObj_CountChars(FPDF_PAGEOBJECT text_object); + FPDF_EXPORT int FPDF_CALLCONV + FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object); + ++// Get the processed text of a text object. ++// ++// text_object - Handle of text object returned by FPDFPageObj_NewTextObj ++// or FPDFPageObj_NewTextObjEx. ++// Return Value: ++// The number of characters (not bytes) written in result. ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_GetTextProcessed(FPDF_PAGEOBJECT text_object, ++ FPDF_TEXTPAGE page, ++ int char_start, ++ int char_count, ++ unsigned short* result); ++ + // Get the stroke RGBA of a text. Range of values: 0 - 255. + // + // path - the handle to the path object. +-- +2.16.3 + diff --git a/external/pdfium/0014-svx-update-PDFium-patch-and-code.patch.2 b/external/pdfium/0014-svx-update-PDFium-patch-and-code.patch.2 new file mode 100644 index 000000000000..d56c2ce69e70 --- /dev/null +++ b/external/pdfium/0014-svx-update-PDFium-patch-and-code.patch.2 @@ -0,0 +1,83 @@ +From f701ff3ce04a4e7e757a9f3ee62b4967749455dd Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Tue, 5 Jun 2018 14:27:55 +0200 +Subject: [PATCH 14/14] svx: update PDFium patch and code + +--- + pdfium/fpdfsdk/cpdfsdk_helpers.h | 2 ++ + pdfium/fpdfsdk/fpdf_editimg.cpp | 2 +- + pdfium/fpdfsdk/fpdf_editpage.cpp | 19 ++++++++++++------- + pdfium/public/fpdf_edit.h | 16 ++++++++-------- + 4 files changed, 23 insertions(+), 16 deletions(-) + +diff --git a/pdfium/fpdfsdk/cpdfsdk_helpers.h b/pdfium/fpdfsdk/cpdfsdk_helpers.h +index 477bb74..c907ad8 100644 +--- a/pdfium/fpdfsdk/cpdfsdk_helpers.h ++++ b/pdfium/fpdfsdk/cpdfsdk_helpers.h +@@ -40,6 +40,8 @@ class CPDF_TextPage; + class CPDF_TextPageFind; + class IPDFSDK_PauseAdapter; + class FX_PATHPOINT; ++class CPDF_TextObject; ++class CPDF_FormObject; + + #ifdef PDF_ENABLE_XFA + class CPDFXFA_Context; +diff --git a/pdfium/fpdfsdk/fpdf_editimg.cpp b/pdfium/fpdfsdk/fpdf_editimg.cpp +index 3f400c7..968b84a 100644 +--- a/pdfium/fpdfsdk/fpdf_editimg.cpp ++++ b/pdfium/fpdfsdk/fpdf_editimg.cpp +@@ -203,7 +203,7 @@ FPDFImageObj_GetBitmapBgra(FPDF_PAGEOBJECT image_object) { + RetainPtr<CFX_DIBitmap> pBitmap; + pBitmap = pSource->CloneConvert(FXDIB_Argb); + +- return pBitmap.Leak(); ++ return FPDFBitmapFromCFXDIBitmap(pBitmap.Leak()); + } + + FPDF_EXPORT unsigned long FPDF_CALLCONV +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index 29c8b01..a52e1a9 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -693,7 +693,7 @@ FPDFTextObj_GetTextProcessed(FPDF_PAGEOBJECT text_object, + int ret_count = byte_str_len / kBytesPerCharacter; + + ASSERT(ret_count <= char_count + 1); // +1 to account for the NUL terminator. +- memcpy(result, byte_str.GetBuffer(byte_str_len), byte_str_len); ++ memcpy(result, byte_str.GetBuffer(byte_str_len).data(), byte_str_len); + return ret_count; + } + +@@ -736,10 +736,15 @@ FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, + return false; + } + +- const uint32_t RGB = bStroke ? pTxtObj->m_ColorState.GetStrokeRGB() : pTxtObj->m_ColorState.GetFillRGB(); +- *R = FXSYS_GetRValue(RGB); +- *G = FXSYS_GetGValue(RGB); +- *B = FXSYS_GetBValue(RGB); ++ const CPDF_Color* pColor = bStroke ? pTxtObj->m_ColorState.GetStrokeColor() : pTxtObj->m_ColorState.GetFillColor(); ++ if (pColor == nullptr) ++ return false; ++ ++ int r, g, b; ++ pColor->GetRGB(&r, &g, &b); ++ *R = r; ++ *G = g; ++ *B = b; + *A = static_cast<unsigned int>( + (pTxtObj->m_GeneralState.GetStrokeAlpha() * 255.f) + 0.5f); + +@@ -768,7 +773,7 @@ FPDFFormObj_GetSubObject(FPDF_PAGEOBJECT form_object, int index) + { + const CPDF_PageObjectList* pObjectList = pFrmObj->form()->GetPageObjectList(); + if (pObjectList) +- return pObjectList->GetPageObjectByIndex(index); ++ return FPDFPageObjectFromCPDFPageObject(pObjectList->GetPageObjectByIndex(index)); + } + + return nullptr; +-- +2.16.3 + diff --git a/external/pdfium/0015-svx-set-the-font-name-of-imported-PDF-text.patch.2 b/external/pdfium/0015-svx-set-the-font-name-of-imported-PDF-text.patch.2 new file mode 100644 index 000000000000..8eb0bac1eed2 --- /dev/null +++ b/external/pdfium/0015-svx-set-the-font-name-of-imported-PDF-text.patch.2 @@ -0,0 +1,77 @@ +From 04f9899ddf5f9691ffaca5091082183f167e95d3 Mon Sep 17 00:00:00 2001 +From: Ashod Nakashian <ashod.nakash...@collabora.co.uk> +Date: Wed, 6 Jun 2018 06:34:56 +0200 +Subject: [PATCH] svx: set the font name of imported PDF text + +--- + pdfium/fpdfsdk/fpdf_editpage.cpp | 23 +++++++++++++++++++++++ + pdfium/public/fpdf_edit.h | 11 +++++++++++ + 2 files changed, 34 insertions(+) + +diff --git a/pdfium/fpdfsdk/fpdf_editpage.cpp b/pdfium/fpdfsdk/fpdf_editpage.cpp +index a52e1a9..9daffc0 100644 +--- a/pdfium/fpdfsdk/fpdf_editpage.cpp ++++ b/pdfium/fpdfsdk/fpdf_editpage.cpp +@@ -20,6 +20,7 @@ + #include "core/fpdfapi/page/cpdf_pageobject.h" + #include "core/fpdfapi/page/cpdf_pathobject.h" + #include "core/fpdfapi/page/cpdf_shadingobject.h" ++#include "core/fpdfapi/page/cpdf_textobject.h" + #include "core/fpdfapi/parser/cpdf_array.h" + #include "core/fpdfapi/parser/cpdf_document.h" + #include "core/fpdfapi/parser/cpdf_number.h" +@@ -458,6 +459,29 @@ FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object) + return pTxtObj->GetFontSize(); + } + ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_GetFontName(FPDF_PAGEOBJECT text_object, char* result) ++{ ++ if (!text_object) ++ return 0; ++ ++ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); ++ CPDF_Font* pPdfFont = pTxtObj->GetFont(); ++ if (!pPdfFont) ++ return 0; ++ ++ CFX_Font* pFont = pPdfFont->GetFont(); ++ if (!pFont) ++ return 0; ++ ++ ByteString byte_str = pFont->GetFamilyName(); ++ const size_t byte_str_len = byte_str.GetLength(); ++ ++ memcpy(result, byte_str.GetBuffer(byte_str_len).data(), byte_str_len); ++ result[byte_str_len] = '\0'; ++ return byte_str_len; ++} ++ + FPDF_EXPORT void FPDF_CALLCONV + FPDFPageObj_SetBlendMode(FPDF_PAGEOBJECT page_object, + FPDF_BYTESTRING blend_mode) { +diff --git a/pdfium/public/fpdf_edit.h b/pdfium/public/fpdf_edit.h +index 4351649..f858ab2 100644 +--- a/pdfium/public/fpdf_edit.h ++++ b/pdfium/public/fpdf_edit.h +@@ -1068,6 +1068,17 @@ FPDFPageObj_CreateTextObj(FPDF_DOCUMENT document, + FPDF_FONT font, + float font_size); + ++// Get the font name of a text object. ++// ++// text_object - Handle of text object returned by FPDFPageObj_NewTextObj ++// or FPDFPageObj_NewTextObjEx. ++// result - The result in ascii. ++// ++// Return Value: ++// The number of characters / bytes written in result. ++FPDF_EXPORT int FPDF_CALLCONV ++FPDFTextObj_GetFontName(FPDF_PAGEOBJECT text_object, char* result); ++ + // Get the number of characters from a text object. + // + // text_object - Handle of text object returned by FPDFPageObj_NewTextObj +-- +2.16.3 + diff --git a/external/pdfium/Library_pdfium.mk b/external/pdfium/Library_pdfium.mk index 0019535857a6..05d84c749a05 100644 --- a/external/pdfium/Library_pdfium.mk +++ b/external/pdfium/Library_pdfium.mk @@ -24,6 +24,7 @@ $(eval $(call gb_Library_add_defs,pdfium,\ -DUSE_SYSTEM_LCMS2 \ -DUSE_SYSTEM_LIBJPEG \ -DUSE_SYSTEM_ZLIB \ + -DUSE_SYSTEM_ICUUC \ -DMEMORY_TOOL_REPLACES_ALLOCATOR \ -DUNICODE \ )) @@ -278,6 +279,8 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\ UnpackedTarball/pdfium/core/fpdfapi/parser/cpdf_object_avail \ UnpackedTarball/pdfium/core/fpdfapi/parser/cpdf_page_object_avail \ UnpackedTarball/pdfium/core/fpdfapi/parser/cpdf_cross_ref_avail \ + UnpackedTarball/pdfium/core/fpdfapi/edit/cpdf_pagecontentmanager \ + UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_transparency \ )) # fpdfdoc @@ -343,7 +346,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\ UnpackedTarball/pdfium/core/fxcodec/jbig2/JBig2_HtrdProc \ UnpackedTarball/pdfium/core/fxcodec/jbig2/JBig2_HuffmanDecoder \ UnpackedTarball/pdfium/core/fxcodec/jbig2/JBig2_HuffmanTable \ - UnpackedTarball/pdfium/core/fxcodec/jbig2/JBig2_HuffmanTable_Standard \ UnpackedTarball/pdfium/core/fxcodec/jbig2/JBig2_Image \ UnpackedTarball/pdfium/core/fxcodec/jbig2/JBig2_PatternDict \ UnpackedTarball/pdfium/core/fxcodec/jbig2/JBig2_PddProc \ diff --git a/external/pdfium/UnpackedTarball_pdfium.mk b/external/pdfium/UnpackedTarball_pdfium.mk index 6a20b8f7d590..dc1ad7b4e221 100644 --- a/external/pdfium/UnpackedTarball_pdfium.mk +++ b/external/pdfium/UnpackedTarball_pdfium.mk @@ -10,11 +10,18 @@ pdfium_patches := pdfium_patches += visibility.patch.1 pdfium_patches += ubsan.patch -pdfium_patches += icu.patch.1 # Fixes build on our baseline. pdfium_patches += build.patch.1 # Adds missing editing API -pdfium_patches += edit.patch.1 +pdfium_patches += 0002-svx-more-accurate-PDF-text-importing.patch.2 +pdfium_patches += 0003-svx-import-PDF-images-as-BGRA.patch.2 +pdfium_patches += 0004-svx-support-PDF-text-color.patch.2 +pdfium_patches += 0009-svx-support-color-text-for-imported-PDFs.patch.2 +pdfium_patches += 0010-svx-support-importing-forms-from-PDFs.patch.2 +pdfium_patches += 0011-svx-correctly-possition-form-objects-from-PDF.patch.2 +pdfium_patches += 0012-svx-import-processed-PDF-text.patch.2 +pdfium_patches += 0014-svx-update-PDFium-patch-and-code.patch.2 +pdfium_patches += 0015-svx-set-the-font-name-of-imported-PDF-text.patch.2 $(eval $(call gb_UnpackedTarball_UnpackedTarball,pdfium)) diff --git a/external/pdfium/build.patch.1 b/external/pdfium/build.patch.1 index 89d8e5e7d8d0..901edbbf4e56 100644 --- a/external/pdfium/build.patch.1 +++ b/external/pdfium/build.patch.1 @@ -19,20 +19,6 @@ index 8e01127b0..f4ce4d915 100644 if (m_Storer.GetBitmap()->IsAlphaMask()) { CalcAlpha(cdata); } else { -diff --git a/core/fxcrt/string_view_template.h b/core/fxcrt/string_view_template.h -index 05694cf24..101253814 100644 ---- a/core/fxcrt/string_view_template.h -+++ b/core/fxcrt/string_view_template.h -@@ -231,9 +231,6 @@ inline bool operator<(const T* lhs, const StringViewTemplate<T>& rhs) { - return rhs > lhs; - } - --extern template class StringViewTemplate<char>; --extern template class StringViewTemplate<wchar_t>; -- - using ByteStringView = StringViewTemplate<char>; - using WideStringView = StringViewTemplate<wchar_t>; - diff --git a/core/fpdfdoc/cpdf_metadata.cpp b/core/fpdfdoc/cpdf_metadata.cpp index 323de4ffc..f11a0b0ad 100644 --- a/core/fpdfdoc/cpdf_metadata.cpp @@ -122,3 +108,42 @@ index d3bf38d31..e8aea9707 100644 } return FPDFPageObjectFromCPDFPageObject( +diff --git a/third_party/base/span.h b/third_party/base/span.h +index 0fb627ba8..dda1fc8bc 100644 +--- a/third_party/base/span.h ++++ b/third_party/base/span.h +@@ -204,7 +204,7 @@ class span { + // size()|. + template <typename Container, + typename = internal::EnableIfSpanCompatibleContainer<Container, T>> +- constexpr span(Container& container) ++ span(Container& container) + : span(container.data(), container.size()) {} + template < + typename Container, +diff --git a/core/fpdfdoc/cpdf_dest.h b/core/fpdfdoc/cpdf_dest.h +index 7f4eb86c0..5e227f86e 100644 +--- a/core/fpdfdoc/cpdf_dest.h ++++ b/core/fpdfdoc/cpdf_dest.h +@@ -46,7 +46,7 @@ class CPDF_Dest { + float* pZoom) const; + + private: +- UnownedPtr<const CPDF_Array> const m_pObj; ++ UnownedPtr<const CPDF_Array> m_pObj; + }; + + #endif // CORE_FPDFDOC_CPDF_DEST_H_ +diff --git a/core/fpdfdoc/cpdf_filespec.h b/core/fpdfdoc/cpdf_filespec.h +index 7050f695b..916afed8b 100644 +--- a/core/fpdfdoc/cpdf_filespec.h ++++ b/core/fpdfdoc/cpdf_filespec.h +@@ -41,7 +41,7 @@ class CPDF_FileSpec { + + private: + UnownedPtr<const CPDF_Object> const m_pObj; +- UnownedPtr<CPDF_Object> const m_pWritableObj; ++ UnownedPtr<CPDF_Object> m_pWritableObj; + }; + + #endif // CORE_FPDFDOC_CPDF_FILESPEC_H_ diff --git a/external/pdfium/edit.patch.1 b/external/pdfium/edit.patch.1 deleted file mode 100644 index d0d7cb97060e..000000000000 --- a/external/pdfium/edit.patch.1 +++ /dev/null @@ -1,757 +0,0 @@ -diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp -index 5690698..4d7c48a 100644 ---- a/core/fpdftext/cpdf_textpage.cpp -+++ b/core/fpdftext/cpdf_textpage.cpp -@@ -1464,3 +1464,32 @@ Optional<PAGECHAR_INFO> CPDF_TextPage::GenerateCharInfo(wchar_t unicode) { - info.m_Origin.x, info.m_Origin.y); - return info; - } -+ -+WideString CPDF_TextPage::GetTextObjectText(CPDF_TextObject* pTextObj) -+{ -+ if (!m_bIsParsed) -+ return WideString(); -+ -+ float posy = 0; -+ bool IsContainPreChar = false; -+ bool IsAddLineFeed = false; -+ WideString strText; -+ for (const auto& charinfo : m_CharList) { -+ if (charinfo.m_pTextObj == pTextObj) { -+ IsContainPreChar = true; -+ IsAddLineFeed = false; -+ if (charinfo.m_Unicode) -+ strText += charinfo.m_Unicode; -+ } else if (charinfo.m_Unicode == 32) { -+ if (IsContainPreChar && charinfo.m_Unicode) { -+ strText += charinfo.m_Unicode; -+ IsContainPreChar = false; -+ IsAddLineFeed = false; -+ } -+ } else { -+ IsContainPreChar = false; -+ IsAddLineFeed = true; -+ } -+ } -+ return strText; -+} -diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h -index 43a0312..7d5d5ec 100644 ---- a/core/fpdftext/cpdf_textpage.h -+++ b/core/fpdftext/cpdf_textpage.h -@@ -105,6 +105,8 @@ class CPDF_TextPage { - WideString GetPageText(int start, int count) const; - WideString GetAllPageText() const { return GetPageText(0, CountChars()); } - -+ WideString GetTextObjectText(CPDF_TextObject* pTextObj); -+ - int CountRects(int start, int nCount); - bool GetRect(int rectIndex, CFX_FloatRect* pRect) const; - -diff --git a/fpdfsdk/cpdfsdk_helpers.h b/fpdfsdk/cpdfsdk_helpers.h -index d93ecfc..c700592 100644 ---- a/fpdfsdk/cpdfsdk_helpers.h -+++ b/fpdfsdk/cpdfsdk_helpers.h -@@ -40,7 +40,8 @@ class CPDF_TextPage; - class CPDF_TextPageFind; - class IPDFSDK_PauseAdapter; - class FX_PATHPOINT; -- -+class CPDF_TextObject; -+class CPDF_FormObject; - #ifdef PDF_ENABLE_XFA - class CPDFXFA_Context; - class CPDFXFA_Page; -@@ -204,6 +205,16 @@ inline CPDF_TextPageFind* CPDFTextPageFindFromFPDFSchHandle( - return reinterpret_cast<CPDF_TextPageFind*>(handle); - } - -+inline CPDF_TextObject* CPDFTextObjectFromFPDFPageObject( -+ FPDF_PAGEOBJECT page_object) { -+ return reinterpret_cast<CPDF_TextObject*>(page_object); -+} -+ -+inline CPDF_FormObject* CPDFFormObjectFromFPDFPageObject( -+ FPDF_PAGEOBJECT page_object) { -+ return reinterpret_cast<CPDF_FormObject*>(page_object); -+} -+ - ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string); - - #ifdef PDF_ENABLE_XFA -diff --git a/fpdfsdk/fpdf_editimg.cpp b/fpdfsdk/fpdf_editimg.cpp -index fed1581..968b84a 100644 ---- a/fpdfsdk/fpdf_editimg.cpp -+++ b/fpdfsdk/fpdf_editimg.cpp -@@ -186,6 +186,26 @@ FPDFImageObj_GetBitmap(FPDF_PAGEOBJECT image_object) { - return FPDFBitmapFromCFXDIBitmap(pBitmap.Leak()); - } - -+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV -+FPDFImageObj_GetBitmapBgra(FPDF_PAGEOBJECT image_object) { -+ CPDF_PageObject* pObj = CPDFPageObjectFromFPDFPageObject(image_object); -+ if (!pObj || !pObj->IsImage()) -+ return nullptr; -+ -+ RetainPtr<CPDF_Image> pImg = pObj->AsImage()->GetImage(); -+ if (!pImg) -+ return nullptr; -+ -+ RetainPtr<CFX_DIBSource> pSource = pImg->LoadDIBSource(); -+ if (!pSource) -+ return nullptr; -+ -+ RetainPtr<CFX_DIBitmap> pBitmap; -+ pBitmap = pSource->CloneConvert(FXDIB_Argb); -+ -+ return FPDFBitmapFromCFXDIBitmap(pBitmap.Leak()); -+} -+ - FPDF_EXPORT unsigned long FPDF_CALLCONV - FPDFImageObj_GetImageDataDecoded(FPDF_PAGEOBJECT image_object, - void* buffer, -diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp -index ec29891..9daffc0 100644 ---- a/fpdfsdk/fpdf_editpage.cpp -+++ b/fpdfsdk/fpdf_editpage.cpp -@@ -12,12 +12,14 @@ - #include <vector> - - #include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h" -+#include "core/fpdfapi/font/cpdf_font.h" - #include "core/fpdfapi/page/cpdf_form.h" - #include "core/fpdfapi/page/cpdf_formobject.h" - #include "core/fpdfapi/page/cpdf_imageobject.h" - #include "core/fpdfapi/page/cpdf_page.h" - #include "core/fpdfapi/page/cpdf_pageobject.h" - #include "core/fpdfapi/page/cpdf_pathobject.h" -+#include "core/fpdfapi/page/cpdf_textobject.h" - #include "core/fpdfapi/page/cpdf_shadingobject.h" - #include "core/fpdfapi/parser/cpdf_array.h" - #include "core/fpdfapi/parser/cpdf_document.h" -@@ -25,6 +27,7 @@ - #include "core/fpdfapi/parser/cpdf_string.h" - #include "core/fpdfdoc/cpdf_annot.h" - #include "core/fpdfdoc/cpdf_annotlist.h" -+#include "core/fpdftext/cpdf_textpage.h" - #include "fpdfsdk/cpdfsdk_helpers.h" - #include "public/fpdf_formfill.h" - #include "third_party/base/logging.h" -@@ -624,3 +627,268 @@ FPDFPageObj_SetLineCap(FPDF_PAGEOBJECT page_object, int line_cap) { - pPageObj->SetDirty(true); - return true; - } -+ -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_CountChars(FPDF_PAGEOBJECT text_object) -+{ -+ if (!text_object) -+ return 0; -+ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ return pTxtObj->CountChars(); -+} -+ -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object) -+{ -+ if (!text_object) -+ return 0; -+ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ return pTxtObj->GetFontSize(); -+} -+ -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetFontName(FPDF_PAGEOBJECT text_object, char* result) -+{ -+ if (!text_object) -+ return 0; -+ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ CPDF_Font* pPdfFont = pTxtObj->GetFont(); -+ if (!pPdfFont) -+ return 0; -+ -+ CFX_Font* pFont = pPdfFont->GetFont(); -+ if (!pFont) -+ return 0; -+ -+ ByteString byte_str = pFont->GetFamilyName(); -+ const size_t byte_str_len = byte_str.GetLength(); -+ -+ memcpy(result, byte_str.GetBuffer(byte_str_len).data(), byte_str_len); -+ result[byte_str_len] = '\0'; -+ return byte_str_len; -+} -+ -+FPDF_EXPORT void FPDF_CALLCONV -+FPDFTextObj_GetMatrix(FPDF_PAGEOBJECT text_object, -+ double* a, -+ double* b, -+ double* c, -+ double* d, -+ double* e, -+ double* f) -+{ -+ if (!text_object || !a || !b || !c || !d || !e || !f) -+ return; -+ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ const CFX_Matrix& matrix = pTxtObj->GetTextMatrix(); -+ *a = matrix.a; -+ *b = matrix.b; -+ *c = matrix.c; -+ *d = matrix.d; -+ *e = matrix.e; -+ *f = matrix.f; -+} -+ -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetUnicode(FPDF_PAGEOBJECT text_object, int index) -+{ -+ if (!text_object || index < 0) -+ return 0; -+ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ if (index > pTxtObj->CountChars()) -+ return 0; -+ -+ CPDF_TextObjectItem info; -+ pTxtObj->GetCharInfo(index, &info); -+ return info.m_CharCode; -+} -+ -+FPDF_EXPORT int FPDF_CALLCONV FPDFTextObj_GetText(FPDF_PAGEOBJECT text_object, -+ int char_start, -+ int char_count, -+ unsigned short* result) { -+ if (!text_object || char_start < 0 || char_count < 0 || !result) -+ return 0; -+ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ int char_available = pTxtObj->CountChars() - char_start; -+ if (char_available <= 0) -+ return 0; -+ -+ char_count = std::min(char_count, char_available); -+ if (char_count == 0) { -+ // Writing out "", which has a character count of 1 due to the NUL. -+ *result = '\0'; -+ return 1; -+ } -+ -+ CPDF_Font* pFont = pTxtObj->GetFont(); -+ WideString str; -+ for (uint32_t charcode : pTxtObj->GetCharCodes()) { -+ if (charcode != CPDF_Font::kInvalidCharCode) -+ str += pFont->UnicodeFromCharCode(charcode); -+ } -+ -+ // UFT16LE_Encode doesn't handle surrogate pairs properly, so it is expected -+ // the number of items to stay the same. -+ ByteString byte_str = str.UTF16LE_Encode(); -+ size_t byte_str_len = byte_str.GetLength(); -+ int ret_count = byte_str_len / sizeof(unsigned short); -+ -+ ASSERT(ret_count <= char_count + 1); // +1 to account for the NUL terminator. -+ memcpy(result, byte_str.GetBuffer(byte_str_len).data(), byte_str_len); -+ return ret_count; -+} -+ -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetTextProcessed(FPDF_PAGEOBJECT text_object, -+ FPDF_TEXTPAGE page, -+ int char_start, -+ int char_count, -+ unsigned short* result) -+{ -+ if (!page || !text_object || char_start < 0 || char_count < 0 || !result) -+ return 0; -+ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ CPDF_TextPage* textpage = CPDFTextPageFromFPDFTextPage(page); -+ int char_available = textpage->CountChars() - char_start; -+ if (char_available <= 0) -+ return 0; -+ -+ char_count = std::min(char_count, char_available); -+ if (char_count == 0) { -+ // Writing out "", which has a character count of 1 due to the NUL. -+ *result = '\0'; -+ return 1; -+ } -+ -+ WideString str = textpage->GetTextObjectText(pTxtObj); -+ -+ if (str.GetLength() > static_cast<size_t>(char_count)) -+ str = str.Left(static_cast<size_t>(char_count)); -+ -+ // UFT16LE_Encode doesn't handle surrogate pairs properly, so it is expected -+ // the number of items to stay the same. -+ ByteString byte_str = str.UTF16LE_Encode(); -+ size_t byte_str_len = byte_str.GetLength(); -+ constexpr size_t kBytesPerCharacter = sizeof(unsigned short); -+ int ret_count = byte_str_len / kBytesPerCharacter; -+ -+ ASSERT(ret_count <= char_count + 1); // +1 to account for the NUL terminator. -+ memcpy(result, byte_str.GetBuffer(byte_str_len).data(), byte_str_len); -+ return ret_count; -+} -+ -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, -+ unsigned int* R, -+ unsigned int* G, -+ unsigned int* B, -+ unsigned int* A) -+{ -+ CPDF_TextObject* pTxtObj = CPDFTextObjectFromFPDFPageObject(text_object); -+ if (!pTxtObj || !R || !G || !B || !A) -+ return false; -+ -+ bool bFill = false; -+ bool bStroke = false; -+ CPDF_Font* pFont = pTxtObj->m_TextState.GetFont(); -+ const TextRenderingMode text_render_mode = pTxtObj->m_TextState.GetTextMode(); -+ switch (text_render_mode) -+ { -+ case TextRenderingMode::MODE_FILL: -+ case TextRenderingMode::MODE_FILL_CLIP: -+ bFill = true; -+ break; -+ case TextRenderingMode::MODE_STROKE: -+ case TextRenderingMode::MODE_STROKE_CLIP: -+ if (pFont->GetFace()) -+ bStroke = true; -+ else -+ bFill = true; -+ break; -+ case TextRenderingMode::MODE_FILL_STROKE: -+ case TextRenderingMode::MODE_FILL_STROKE_CLIP: -+ bFill = true; -+ if (pFont->GetFace()) -+ bStroke = true; -+ break; -+ case TextRenderingMode::MODE_INVISIBLE: -+ case TextRenderingMode::MODE_CLIP: -+ return false; -+ } -+ -+ const CPDF_Color* pColor = bStroke ? pTxtObj->m_ColorState.GetStrokeColor() : pTxtObj->m_ColorState.GetFillColor(); -+ if (pColor == nullptr) -+ return false; -+ -+ int r, g, b; -+ pColor->GetRGB(&r, &g, &b); -+ *R = r; -+ *G = g; -+ *B = b; -+ *A = static_cast<unsigned int>( -+ (pTxtObj->m_GeneralState.GetStrokeAlpha() * 255.f) + 0.5f); -+ -+ return true; -+} -+ -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFFormObj_CountSubObjects(FPDF_PAGEOBJECT form_object) -+{ -+ CPDF_FormObject* pFrmObj = CPDFFormObjectFromFPDFPageObject(form_object); -+ if (pFrmObj) -+ { -+ const CPDF_PageObjectList* pObjectList = pFrmObj->form()->GetPageObjectList(); -+ if (pObjectList) -+ return pObjectList->size(); -+ } -+ -+ return 0; -+} -+ -+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV -+FPDFFormObj_GetSubObject(FPDF_PAGEOBJECT form_object, int index) -+{ -+ CPDF_FormObject* pFrmObj = CPDFFormObjectFromFPDFPageObject(form_object); -+ if (pFrmObj) -+ { -+ const CFX_Matrix& matrix = pFrmObj->form_matrix(); -+ const CPDF_PageObjectList* pObjectList = pFrmObj->form()->GetPageObjectList(); -+ if (pObjectList) -+ return FPDFPageObjectFromCPDFPageObject(pObjectList->GetPageObjectByIndex(index)); -+ } -+ -+ return nullptr; -+} -+ -+FPDF_EXPORT void FPDF_CALLCONV -+FPDFFormObj_GetMatrix(FPDF_PAGEOBJECT form_object, -+ double* a, -+ double* b, -+ double* c, -+ double* d, -+ double* e, -+ double* f) -+{ -+ if (!form_object || !a || !b || !c || !d || !e || !f) -+ return; -+ -+ CPDF_FormObject* pFrmObj = CPDFFormObjectFromFPDFPageObject(form_object); -+ if (pFrmObj) -+ { -+ const CFX_Matrix& matrix = pFrmObj->form_matrix(); -+ *a = matrix.a; -+ *b = matrix.b; -+ *c = matrix.c; -+ *d = matrix.d; -+ *e = matrix.e; -+ *f = matrix.f; -+ } -+} -diff --git a/fpdfsdk/fpdf_editpath.cpp b/fpdfsdk/fpdf_editpath.cpp -index aca2beb..017dbcd 100644 ---- a/fpdfsdk/fpdf_editpath.cpp -+++ b/fpdfsdk/fpdf_editpath.cpp -@@ -117,6 +117,16 @@ FPDFPath_SetStrokeWidth(FPDF_PAGEOBJECT path, float width) { - return true; - } - -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFPath_GetStrokeWidth(FPDF_PAGEOBJECT path, float* width) { -+ auto* pPathObj = CPDFPathObjectFromFPDFPageObject(path); -+ if (!pPathObj || !width) -+ return false; -+ -+ *width = pPathObj->m_GraphState.GetLineWidth(); -+ return true; -+} -+ - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetFillColor(FPDF_PAGEOBJECT path, - unsigned int R, - unsigned int G, -@@ -235,6 +245,25 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path, - return true; - } - -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetDrawMode(FPDF_PAGEOBJECT path, -+ int* fillmode, -+ FPDF_BOOL* stroke) -+{ -+ auto* pPathObj = CPDFPathObjectFromFPDFPageObject(path); -+ if (!pPathObj || !fillmode || !stroke) -+ return false; -+ -+ if (pPathObj->m_FillType == FXFILL_ALTERNATE) -+ *fillmode = FPDF_FILLMODE_ALTERNATE; -+ else if (pPathObj->m_FillType == FXFILL_WINDING) -+ *fillmode = FPDF_FILLMODE_WINDING; -+ else -+ *fillmode = 0; // no fill -+ -+ *stroke = pPathObj->m_bStroke; -+ return true; -+} -+ - FPDF_EXPORT void FPDF_CALLCONV FPDFPath_SetLineJoin(FPDF_PAGEOBJECT path, - int line_join) { - if (!path) -@@ -268,6 +297,30 @@ FPDF_EXPORT void FPDF_CALLCONV FPDFPath_SetLineCap(FPDF_PAGEOBJECT path, - } - - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFPath_GetMatrix(FPDF_PAGEOBJECT path_object, -+ double* a, -+ double* b, -+ double* c, -+ double* d, -+ double* e, -+ double* f) -+{ -+ if (!path_object || !a || !b || !c || !d || !e || !f) -+ return false; -+ -+ CPDF_PathObject* pPathObj = CPDFPathObjectFromFPDFPageObject(path_object); -+ const CFX_Matrix& pMatrix = pPathObj->m_Matrix; -+ *a = pMatrix.a; -+ *b = pMatrix.b; -+ *c = pMatrix.c; -+ *d = pMatrix.d; -+ *e = pMatrix.e; -+ *f = pMatrix.f; -+ -+ return true; -+} -+ -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV - FPDFPathSegment_GetPoint(FPDF_PATHSEGMENT segment, float* x, float* y) { - auto* pPathPoint = FXPathPointFromFPDFPathSegment(segment); - if (!pPathPoint || !x || !y) -diff --git a/fpdfsdk/fpdf_text.cpp b/fpdfsdk/fpdf_text.cpp -index a1bbbb4..01b74c9 100644 ---- a/fpdfsdk/fpdf_text.cpp -+++ b/fpdfsdk/fpdf_text.cpp -@@ -95,6 +95,28 @@ FPDF_EXPORT double FPDF_CALLCONV FPDFText_GetFontSize(FPDF_TEXTPAGE text_page, - return charinfo.m_FontSize; - } - -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetMatrix(FPDF_TEXTPAGE text_page, -+ int index, -+ double* a, -+ double* b, -+ double* c, -+ double* d) { -+ if (!text_page || index < 0) -+ return false; -+ -+ CPDF_TextPage* textpage = CPDFTextPageFromFPDFTextPage(text_page); -+ if (index >= textpage->CountChars()) -+ return false; -+ -+ FPDF_CHAR_INFO charinfo; -+ textpage->GetCharInfo(index, &charinfo); -+ *a = charinfo.m_Matrix.a; -+ *b = charinfo.m_Matrix.b; -+ *c = charinfo.m_Matrix.c; -+ *d = charinfo.m_Matrix.d; -+ return true; -+} -+ - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetCharBox(FPDF_TEXTPAGE text_page, - int index, - double* left, -diff --git a/public/fpdf_edit.h b/public/fpdf_edit.h -index c0766a3..75381bb 100644 ---- a/public/fpdf_edit.h -+++ b/public/fpdf_edit.h -@@ -660,6 +660,15 @@ FPDFPageObj_GetStrokeColor(FPDF_PAGEOBJECT page_object, - unsigned int* B, - unsigned int* A); - -+// Get the stroke width of a path. -+// -+// path - the handle to the path object. -+// width - the width of the stroke. -+// -+// Returns TRUE on success -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFPath_GetStrokeWidth(FPDF_PAGEOBJECT path, float* width); -+ - // Set the stroke width of a path. - // - // path - the handle to the path object. -@@ -898,6 +907,36 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path, - int fillmode, - FPDF_BOOL stroke); - -+// Get the drawing mode of a path. -+// -+// path - the handle to the path object. -+// fillmode - the filling mode to be set: 0 for no fill, 1 for alternate, 2 for -+// winding. -+// stroke - a boolean specifying if the path should be stroked or not. -+// -+// Returns TRUE on success -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetDrawMode(FPDF_PAGEOBJECT path, -+ int* fillmode, -+ FPDF_BOOL* stroke); -+ -+// Get the matrix of a particular text object. -+// -+// path_object - Handle of path object returned by FPDFPath_NewPathObj -+// a - Pointer to a double value receiving coefficient "a" of the matrix. -+// b - Pointer to a double value receiving coefficient "b" of the matrix. -+// c - Pointer to a double value receiving coefficient "c" of the matrix. -+// d - Pointer to a double value receiving coefficient "d" of the matrix. -+// e - Pointer to a double value receiving coefficient "e" of the matrix. -+// f - Pointer to a double value receiving coefficient "f" of the matrix. -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFPath_GetMatrix(FPDF_PAGEOBJECT path_object, -+ double* a, -+ double* b, -+ double* c, -+ double* d, -+ double* e, -+ double* f); -+ - // Create a new text object using one of the standard PDF fonts. - // - // document - handle to the document. -@@ -971,6 +1010,135 @@ FPDFPageObj_CreateTextObj(FPDF_DOCUMENT document, - FPDF_FONT font, - float font_size); - -+// Get the number of characters from a text object. -+// -+// text_object - Handle of text object returned by FPDFPageObj_NewTextObj -+// or FPDFPageObj_NewTextObjEx. -+// Return Value: -+// A character count in the text object. -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_CountChars(FPDF_PAGEOBJECT text_object); -+ -+// Get the font size of a text object. -+// -+// text_object - Handle of text object returned by FPDFPageObj_NewTextObj -+// or FPDFPageObj_NewTextObjEx. -+// -+// Return Value: -+// The value of the font size -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetFontSize(FPDF_PAGEOBJECT text_object); -+ -+// Get the font name of a text object. -+// -+// text_object - Handle of text object returned by FPDFPageObj_NewTextObj -+// or FPDFPageObj_NewTextObjEx. -+// result - The result in ascii. -+// -+// Return Value: -+// The number of characters / bytes written in result. -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetFontName(FPDF_PAGEOBJECT text_object, char* result); -+ -+// Get the matrix of a particular text object. -+// -+// text_object - Handle of text object returned by FPDFPageObj_NewTextObj -+// or FPDFPageObj_NewTextObjEx. -+// a - Pointer to a double value receiving coefficient "a" of the matrix. -+// b - Pointer to a double value receiving coefficient "b" of the matrix. -+// c - Pointer to a double value receiving coefficient "c" of the matrix. -+// d - Pointer to a double value receiving coefficient "d" of the matrix. -+// e - Pointer to a double value receiving coefficient "e" of the matrix. -+// f - Pointer to a double value receiving coefficient "f" of the matrix. -+FPDF_EXPORT void FPDF_CALLCONV -+FPDFTextObj_GetMatrix(FPDF_PAGEOBJECT text_object, -+ double* a, -+ double* b, -+ double* c, -+ double* d, -+ double* e, -+ double* f); -+ -+// Get the unicode of a special character in a text object. -+// -+// text_object - Handle of text object returned by FPDFPageObj_NewTextObj -+// or FPDFPageObj_NewTextObjEx. -+// index - The index of the character to get the unicode. -+// Return Value: -+// The unicode value. -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetUnicode(FPDF_PAGEOBJECT text_object, int index); -+ -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetText(FPDF_PAGEOBJECT text_object, -+ int char_start, -+ int char_count, -+ unsigned short* result); -+ -+// Get the processed text of a text object. -+// -+// text_object - Handle of text object returned by FPDFPageObj_NewTextObj -+// or FPDFPageObj_NewTextObjEx. -+// Return Value: -+// The number of characters (not bytes) written in result. -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFTextObj_GetTextProcessed(FPDF_PAGEOBJECT text_object, -+ FPDF_TEXTPAGE page, -+ int char_start, -+ int char_count, -+ unsigned short* result); -+ -+// Get the stroke RGBA of a text. Range of values: 0 - 255. -+// -+// path - the handle to the path object. -+// R - the red component of the path stroke color. -+// G - the green component of the path stroke color. -+// B - the blue component of the path stroke color. -+// A - the stroke alpha of the path. -+// -+// Returns TRUE on success. -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFTextObj_GetColor(FPDF_PAGEOBJECT text_object, -+ unsigned int* R, -+ unsigned int* G, -+ unsigned int* B, -+ unsigned int* A); -+ -+// Get number of page objects inside the form object. -+// -+// form_object - Handle to a form object. Returned by FPDFPage_GetObject. -+// Return value: -+// The number of the page objects. -+FPDF_EXPORT int FPDF_CALLCONV -+FPDFFormObj_CountSubObjects(FPDF_PAGEOBJECT form_object); -+ -+// Get the page object from a form object. -+// -+// form_object - Handle to a form object. Returned by FPDFPage_GetObject. -+// index - The index of a page object. -+// Return value: -+// The handle of the page object. Null for failed. -+FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV -+FPDFFormObj_GetSubObject(FPDF_PAGEOBJECT form_object, int index); -+ -+// Get the matrix of a particular form object. -+// -+// form_object - Handle of form object -+// a - Pointer to a double value receiving coefficient "a" of the matrix. -+// b - Pointer to a double value receiving coefficient "b" of the matrix. -+// c - Pointer to a double value receiving coefficient "c" of the matrix. -+// d - Pointer to a double value receiving coefficient "d" of the matrix. -+// e - Pointer to a double value receiving coefficient "e" of the matrix. -+// f - Pointer to a double value receiving coefficient "f" of the matrix. -+FPDF_EXPORT void FPDF_CALLCONV -+FPDFFormObj_GetMatrix(FPDF_PAGEOBJECT form_object, -+ double* a, -+ double* b, -+ double* c, -+ double* d, -+ double* e, -+ double* f); -+ - #ifdef __cplusplus - } // extern "C" - #endif // __cplusplus -diff --git a/public/fpdf_text.h b/public/fpdf_text.h -index 3502337..6524cd3 100644 ---- a/public/fpdf_text.h -+++ b/public/fpdf_text.h -@@ -342,6 +342,26 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetSchCount(FPDF_SCHHANDLE handle); - // - FPDF_EXPORT void FPDF_CALLCONV FPDFText_FindClose(FPDF_SCHHANDLE handle); - -+// Get the matrix of a particular character. -+// -+// text_page - Handle to a text page information structure. -+// Returned by FPDFText_LoadPage function. -+// index - Zero-based index of the character -+// a - Pointer to a double value receiving coefficient "a" of the matrix. -+// b - Pointer to a double value receiving coefficient "b" of the matrix. -+// c - Pointer to a double value receiving coefficient "c" of the matrix. -+// d - Pointer to a double value receiving coefficient "d" of the matrix. -+// -+// Return Value: -+// On success, return TRUE and fill in |a|, |b|, |c|, and |d| -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFText_GetMatrix(FPDF_TEXTPAGE text_page, -+ int index, -+ double* a, -+ double* b, -+ double* c, -+ double* d); -+ - // Function: FPDFLink_LoadWebLinks - // Prepare information about weblinks in a page. - // Parameters: -diff --git a/public/fpdfview.h b/public/fpdfview.h -index 0ccd140..b451b9c 100644 ---- a/public/fpdfview.h -+++ b/public/fpdfview.h -@@ -905,6 +905,9 @@ FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV FPDFBitmap_CreateEx(int width, - // function; see the list of such formats above. - FPDF_EXPORT int FPDF_CALLCONV FPDFBitmap_GetFormat(FPDF_BITMAP bitmap); - -+FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV -+FPDFImageObj_GetBitmapBgra(FPDF_PAGEOBJECT image_object); -+ - // Function: FPDFBitmap_FillRect - // Fill a rectangle in a bitmap. - // Parameters: diff --git a/external/pdfium/icu.patch.1 b/external/pdfium/icu.patch.1 deleted file mode 100644 index 85e837d9b99f..000000000000 --- a/external/pdfium/icu.patch.1 +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/core/fxcrt/fx_extension.h b/core/fxcrt/fx_extension.h -index ff96de0f7..0195bd06f 100644 ---- a/core/fxcrt/fx_extension.h -+++ b/core/fxcrt/fx_extension.h -@@ -13,7 +13,7 @@ - - #include "core/fxcrt/fx_string.h" - #include "third_party/base/span.h" --#include "third_party/icu/source/common/unicode/uchar.h" -+#include <unicode/uchar.h> - - #define FX_INVALID_OFFSET static_cast<uint32_t>(-1) - diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx index 64fbdb83dbf9..8e7d9e28f0eb 100644 --- a/svx/source/svdraw/svdpdf.cxx +++ b/svx/source/svdraw/svdpdf.cxx @@ -890,7 +890,7 @@ void ImpSdrPdfImport::ImportText(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE pTex return; double a, b, c, d, e, f; - FPDFTextObj_GetMatrix(pPageObject, &a, &b, &c, &d, &e, &f); + FPDFText_GetMatrix(pPageObject, &a, &b, &c, &d, &e, &f); Matrix aTextMatrix(mCurMatrix); aTextMatrix.Transform(left, right, top, bottom); @@ -1189,7 +1189,7 @@ void ImpSdrPdfImport::ImportPath(FPDF_PAGEOBJECT pPageObject, int /*nPageObjectI aPoly.transform(aTransform); float fWidth = 1; - FPDFPath_GetStrokeWidth(pPageObject, &fWidth); + FPDFPageObj_GetStrokeWidth(pPageObject, &fWidth); const double dWidth = 0.5 * fabs(sqrt2(aPathMatrix.a(), aPathMatrix.c()) * fWidth); mnLineWidth = lcl_ToLogic(lcl_PointToPixel(dWidth)); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits