diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2020-03-13 20:04:45 +0100 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2020-03-18 09:23:15 +0100 |
commit | 27ee05f860e8225a41e15e0853fcef00a9d7a621 (patch) | |
tree | 277ae811da1551accde88468607d513d411be05e /filter | |
parent | 9054c36d4ea3bee25fb9a47a96a0ea2cd07148c3 (diff) |
pdfium: support for pages when using PDF import with pdfium
Moving PDF to use VectorGraphicData in Graphic has temporary
removed the support for showing different PDF pages when opening
the PDF using pdfium (LO_IMPORT_USE_PDFIUM=1).
This adds the support for back by specifying whcih PDF page to
render when creating the VectorGraphicData (and can't be changd
afterwards), which is used to create a Graphic and contains the
PDF source data array.
Change-Id: Ib915216b8d4c0c063d0fead44ff156b1915a35d2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90562
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/pdf/pdfdecomposer.cxx | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/filter/source/pdf/pdfdecomposer.cxx b/filter/source/pdf/pdfdecomposer.cxx index c926b1b35a9d..a03e70bd5d1a 100644 --- a/filter/source/pdf/pdfdecomposer.cxx +++ b/filter/source/pdf/pdfdecomposer.cxx @@ -39,8 +39,9 @@ public: XPdfDecomposer& operator=(const XPdfDecomposer&) = delete; // XPdfDecomposer - uno::Sequence<uno::Reference<graphic::XPrimitive2D>> - SAL_CALL getDecomposition(const uno::Sequence<sal_Int8>& xPdfData) override; + uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL + getDecomposition(const uno::Sequence<sal_Int8>& xPdfData, + const uno::Sequence<beans::PropertyValue>& xDecompositionParameters) override; // XServiceInfo OUString SAL_CALL getImplementationName() override; @@ -50,12 +51,27 @@ public: XPdfDecomposer::XPdfDecomposer(uno::Reference<uno::XComponentContext> const&) {} -uno::Sequence<uno::Reference<graphic::XPrimitive2D>> - SAL_CALL XPdfDecomposer::getDecomposition(const uno::Sequence<sal_Int8>& xPdfData) +uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL XPdfDecomposer::getDecomposition( + const uno::Sequence<sal_Int8>& xPdfData, const uno::Sequence<beans::PropertyValue>& xParameters) { + sal_Int32 nPageIndex = -1; + + for (sal_Int32 index = 0; index < xParameters.getLength(); index++) + { + const beans::PropertyValue& rProperty = xParameters[index]; + + if (rProperty.Name == "PageIndex") + { + rProperty.Value >>= nPageIndex; + } + } + + if (nPageIndex < 0) + nPageIndex = 0; + std::vector<Bitmap> aBitmaps; - vcl::RenderPDFBitmaps(xPdfData.getConstArray(), xPdfData.getLength(), aBitmaps, 0, - 1 /*, fResolutionDPI*/); + vcl::RenderPDFBitmaps(xPdfData.getConstArray(), xPdfData.getLength(), aBitmaps, nPageIndex, 1); + BitmapEx aReplacement(aBitmaps[0]); // short form for scale and translate transformation |