summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2020-04-26 12:07:19 +0200
committerTomaž Vajngerl <quikee@gmail.com>2020-04-26 18:19:00 +0200
commit2d1a0e36ec2eb851b487e75d3103bc76359bb1dd (patch)
tree6faefe90fb65a8adec1946b744e1f4a86863ba0a /vcl
parentcf557c0c2e79810dd957ffeb48513e3731ae533c (diff)
vcl: When exporintg PDF write the correct page of embedded PDF
We can display PDF as an graphic in the document, where the PDF is treated as a vector graphic and rendered with Pdfium. When in that case we export the document as PDF, we can insert the original PDF page as an reference XObject. This workes fine, however the PDF as an graphic also contains the page number, which page should be rendered. This was not taken into account in the PDF export - it was hardcored to first page. This extends the support so it reads the page index from the graphic, and sets the correct PDF page. Change-Id: I15188ee495f9b3fcc3aa7df6f4bad4fa09903c6a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92923 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx7
-rw-r--r--vcl/source/gdi/pdfwriter_impl.hxx5
2 files changed, 10 insertions, 2 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 8aec8544431a..c5d0e441254d 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -9145,7 +9145,9 @@ void PDFWriterImpl::writeReferenceXObject(ReferenceXObjectEmit& rEmit)
return;
}
- filter::PDFObjectElement* pPage = aPages[0];
+ size_t nPageIndex = rEmit.m_nPDFPageIndex >= 0 ? rEmit.m_nPDFPageIndex : 0;
+
+ filter::PDFObjectElement* pPage = aPages[nPageIndex];
if (!pPage)
{
SAL_WARN("vcl.pdfwriter", "PDFWriterImpl::writeReferenceXObject: no page");
@@ -9699,7 +9701,10 @@ void PDFWriterImpl::createEmbeddedFile(const Graphic& rGraphic, ReferenceXObject
rEmit.m_nEmbeddedObject = m_aEmbeddedFiles.back().m_nObject;
}
else
+ {
+ rEmit.m_nPDFPageIndex = rGraphic.getVectorGraphicData()->getPageIndex();
rEmit.m_aPDFData = *pPDFData;
+ }
rEmit.m_nFormObject = createObject();
rEmit.m_aPixelSize = rGraphic.GetPrefSize();
diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx
index ca3b797d5b6f..98d2f8812059 100644
--- a/vcl/source/gdi/pdfwriter_impl.hxx
+++ b/vcl/source/gdi/pdfwriter_impl.hxx
@@ -203,13 +203,16 @@ public:
sal_Int32 m_nBitmapObject;
/// Size of the bitmap replacement, in pixels.
Size m_aPixelSize;
+
/// PDF data from the graphic object, if not writing a reference XObject.
std::vector<sal_Int8> m_aPDFData;
+ sal_Int32 m_nPDFPageIndex;
ReferenceXObjectEmit()
: m_nFormObject(0),
m_nEmbeddedObject(0),
- m_nBitmapObject(0)
+ m_nBitmapObject(0),
+ m_nPDFPageIndex(-1)
{
}