filter/source/pdf/pdfexport.cxx | 3 +++ include/vcl/pdfwriter.hxx | 5 ++++- vcl/source/gdi/pdfwriter_impl.cxx | 27 +++++++++++++++++---------- 3 files changed, 24 insertions(+), 11 deletions(-)
New commits: commit 5f4826d89bfa1398b16fc85cf593ff58ce5e36a9 Author: Miklos Vajna <[email protected]> Date: Wed Mar 22 16:30:35 2017 +0100 tdf#106693 vcl PDF export: initial UseReferenceXObject option It's still on, but in experimental mode start work towards the ability to not use that markup. Change-Id: Idf11c0e0a3c61ad93af331346ec7107304f6dc0f Reviewed-on: https://gerrit.libreoffice.org/35538 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins <[email protected]> diff --git a/filter/source/pdf/pdfexport.cxx b/filter/source/pdf/pdfexport.cxx index 8fc1938aefb5..e341b07f50bf 100644 --- a/filter/source/pdf/pdfexport.cxx +++ b/filter/source/pdf/pdfexport.cxx @@ -47,6 +47,7 @@ #include <cppuhelper/exc_hlp.hxx> #include <cppuhelper/compbase.hxx> #include <cppuhelper/basemutex.hxx> +#include <officecfg/Office/Common.hxx> #include "pdfexport.hxx" #include "impdialog.hxx" @@ -776,6 +777,8 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >& aContext.SignPassword = msSignPassword; aContext.SignCertificate = maSignCertificate; aContext.SignTSA = msSignTSA; + // Not using reference XObjects is experimental for now. + aContext.UseReferenceXObject = !officecfg::Office::Common::Misc::ExperimentalMode::get(); // all context data set, time to create the printing device std::unique_ptr<vcl::PDFWriter> pPDFWriter(new vcl::PDFWriter( aContext, xEnc )); diff --git a/include/vcl/pdfwriter.hxx b/include/vcl/pdfwriter.hxx index aaacbce88707..f0fcea832b6c 100644 --- a/include/vcl/pdfwriter.hxx +++ b/include/vcl/pdfwriter.hxx @@ -632,6 +632,8 @@ The following structure describes the permissions used in PDF security PDFWriter::ColorMode ColorMode; css::uno::Reference< css::security::XCertificate> SignCertificate; OUString SignTSA; + /// Use reference XObject markup for PDF images. + bool UseReferenceXObject; PDFWriterContext() : RelFsys( false ), //i56629, i49415?, i64585? @@ -661,7 +663,8 @@ The following structure describes the permissions used in PDF security DPIx( 0 ), DPIy( 0 ), ColorMode( PDFWriter::DrawColor ), - SignCertificate( nullptr ) + SignCertificate( nullptr ), + UseReferenceXObject( false ) {} }; diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 334cccaeda0f..160829fa9566 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -10859,7 +10859,7 @@ void PDFWriterImpl::writeJPG( JPGEmit& rObject ) void PDFWriterImpl::writeReferenceXObject(ReferenceXObjectEmit& rEmit) { - if (rEmit.m_nFormObject <= 0 || rEmit.m_nEmbeddedObject <= 0) + if (rEmit.m_nFormObject <= 0) return; OStringBuffer aLine; @@ -10899,10 +10899,13 @@ void PDFWriterImpl::writeReferenceXObject(ReferenceXObjectEmit& rEmit) aLine.append(aSize.Height()); aLine.append(" ]\n"); - // Write the reference dictionary. - aLine.append("/Ref<< /F << /Type /Filespec /F (<embedded file>) /EF << /F "); - aLine.append(rEmit.m_nEmbeddedObject); - aLine.append(" 0 R >> >> /Page 0 >>\n"); + if (m_aContext.UseReferenceXObject && rEmit.m_nEmbeddedObject > 0) + { + // Write the reference dictionary. + aLine.append("/Ref<< /F << /Type /Filespec /F (<embedded file>) /EF << /F "); + aLine.append(rEmit.m_nEmbeddedObject); + aLine.append(" 0 R >> >> /Page 0 >>\n"); + } aLine.append("/Length "); @@ -11251,13 +11254,17 @@ void PDFWriterImpl::createEmbeddedFile(const Graphic& rGraphic, ReferenceXObject if (!rGraphic.getPdfData().hasElements()) return; - // Store the original PDF data as an embedded file. - m_aEmbeddedFiles.push_back(PDFEmbeddedFile()); - m_aEmbeddedFiles.back().m_nObject = createObject(); - m_aEmbeddedFiles.back().m_aData = rGraphic.getPdfData(); + if (m_aContext.UseReferenceXObject) + { + // Store the original PDF data as an embedded file. + m_aEmbeddedFiles.push_back(PDFEmbeddedFile()); + m_aEmbeddedFiles.back().m_nObject = createObject(); + m_aEmbeddedFiles.back().m_aData = rGraphic.getPdfData(); + + rEmit.m_nEmbeddedObject = m_aEmbeddedFiles.back().m_nObject; + } rEmit.m_nFormObject = createObject(); - rEmit.m_nEmbeddedObject = m_aEmbeddedFiles.back().m_nObject; rEmit.m_aPixelSize = rGraphic.GetBitmap().GetPrefSize(); } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
