vcl/qa/cppunit/pdfexport/data/tdf105954.odt |binary
 vcl/qa/cppunit/pdfexport/pdfexport.cxx      |   47 ++++++++++++++++++++++++++++
 vcl/source/gdi/pdfextoutdevdata.cxx         |    5 ++
 3 files changed, 52 insertions(+)

New commits:
commit efd59fd1d7fc9d955a2b924f247709201f2281c5
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Wed May 16 09:46:36 2018 +0200

    tdf#105954 PDF export, ReduceImageResolution: fix re-compressing large 
images
    
    Expensive re-compress is not pointless when the user opts in to reduce
    resolution.
    
    (cherry picked from commit 9fd6b6b1f5b83d923a47252b744358721761d9cf)
    
    Conflicts:
            vcl/qa/cppunit/pdfexport/pdfexport.cxx
            vcl/source/gdi/pdfextoutdevdata.cxx
    
    Change-Id: I1e04c6d4f0d95d41808ef885082239645401b2e2
    Reviewed-on: https://gerrit.libreoffice.org/54470
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/qa/cppunit/pdfexport/data/tdf105954.odt 
b/vcl/qa/cppunit/pdfexport/data/tdf105954.odt
new file mode 100644
index 000000000000..ba5c96de68bd
Binary files /dev/null and b/vcl/qa/cppunit/pdfexport/data/tdf105954.odt differ
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx 
b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index c6de4b344503..b2ebb23cf6cd 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -79,6 +79,7 @@ public:
     /// Text extracting RTL text with ligatures.
     void testTdf115117_2a();
 #endif
+    void testTdf105954();
 #endif
     void testTdf109143();
 
@@ -104,6 +105,7 @@ public:
     CPPUNIT_TEST(testTdf115117_2);
     CPPUNIT_TEST(testTdf115117_2a);
 #endif
+    CPPUNIT_TEST(testTdf105954);
 #endif
     CPPUNIT_TEST(testTdf109143);
     CPPUNIT_TEST_SUITE_END();
@@ -1019,6 +1021,51 @@ void PdfExportTest::testTdf115117_2a()
     CPPUNIT_ASSERT_EQUAL(aExpectedText, aActualText);
 }
 #endif
+
+void PdfExportTest::testTdf105954()
+{
+    // Import the bugdoc and export as PDF.
+    OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + 
"tdf105954.odt";
+    mxComponent = loadFromDesktop(aURL);
+    CPPUNIT_ASSERT(mxComponent.is());
+
+    uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+    utl::TempFile aTempFile;
+    aTempFile.EnableKillingFile();
+    utl::MediaDescriptor aMediaDescriptor;
+    aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export");
+    uno::Sequence<beans::PropertyValue> 
aFilterData(comphelper::InitPropertySequence(
+        { { "ReduceImageResolution", uno::Any(true) },
+          { "MaxImageResolution", uno::Any(static_cast<sal_Int32>(300)) } }));
+    aMediaDescriptor["FilterData"] <<= aFilterData;
+    xStorable->storeToURL(aTempFile.GetURL(), 
aMediaDescriptor.getAsConstPropertyValueList());
+
+    // Parse the export result with pdfium.
+    SvFileStream aFile(aTempFile.GetURL(), StreamMode::READ);
+    SvMemoryStream aMemory;
+    aMemory.WriteStream(aFile);
+    mpPdfDocument
+        = FPDF_LoadMemDocument(aMemory.GetData(), aMemory.GetSize(), 
/*password=*/nullptr);
+    CPPUNIT_ASSERT(mpPdfDocument);
+
+    // The document has one page.
+    CPPUNIT_ASSERT_EQUAL(1, FPDF_GetPageCount(mpPdfDocument));
+    mpPdfPage = FPDF_LoadPage(mpPdfDocument, /*page_index=*/0);
+    CPPUNIT_ASSERT(mpPdfPage);
+
+    // There is a single image on the page.
+    int nPageObjectCount = FPDFPage_CountObjects(mpPdfPage);
+    CPPUNIT_ASSERT_EQUAL(1, nPageObjectCount);
+
+    // Check width of the image.
+    FPDF_PAGEOBJECT pPageObject = FPDFPage_GetObject(mpPdfPage, /*index=*/0);
+    FPDF_IMAGEOBJ_METADATA aMeta;
+    CPPUNIT_ASSERT(FPDFImageObj_GetImageMetadata(pPageObject, mpPdfPage, 
&aMeta));
+    // This was 2000, i.e. the 'reduce to 300 DPI' request was ignored.
+    // This is now around 238 (228 on macOS).
+    CPPUNIT_ASSERT_LESS(static_cast<unsigned int>(250), aMeta.width);
+}
+
 #endif
 
 CPPUNIT_TEST_SUITE_REGISTRATION(PdfExportTest);
diff --git a/vcl/source/gdi/pdfextoutdevdata.cxx 
b/vcl/source/gdi/pdfextoutdevdata.cxx
index 71ef583cda58..3c689c3ccce0 100644
--- a/vcl/source/gdi/pdfextoutdevdata.cxx
+++ b/vcl/source/gdi/pdfextoutdevdata.cxx
@@ -810,6 +810,11 @@ bool PDFExtOutDevData::HasAdequateCompression( const 
Graphic &rGraphic,
         // rOutputRect is the crop rectangle, re-compress cropped image.
         return false;
 
+    if (mbReduceImageResolution)
+        // Reducing resolution was requested, implies that re-compressing is
+        // wanted.
+        return false;
+
     if (rGraphic.GetLink().GetDataSize() == 0)
         return false;
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to