[Libreoffice-commits] core.git: filter/source include/vcl vcl/source

Miklos Vajna vmiklos at collabora.co.uk
Wed Mar 22 16:52:38 UTC 2017


 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 <vmiklos at collabora.co.uk>
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 <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

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();
 }
 


More information about the Libreoffice-commits mailing list