diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-05-16 09:46:36 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-05-18 09:54:57 +0200 |
commit | efd59fd1d7fc9d955a2b924f247709201f2281c5 (patch) | |
tree | 67e689be8604ba0a15dc2d1c46bd305d967f8a43 /vcl/qa/cppunit | |
parent | 3de630074d69517d97c4dc874ad74203d7699e88 (diff) |
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 <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/qa/cppunit')
-rw-r--r-- | vcl/qa/cppunit/pdfexport/data/tdf105954.odt | bin | 0 -> 74147 bytes | |||
-rw-r--r-- | vcl/qa/cppunit/pdfexport/pdfexport.cxx | 47 |
2 files changed, 47 insertions, 0 deletions
diff --git a/vcl/qa/cppunit/pdfexport/data/tdf105954.odt b/vcl/qa/cppunit/pdfexport/data/tdf105954.odt Binary files differnew file mode 100644 index 000000000000..ba5c96de68bd --- /dev/null +++ b/vcl/qa/cppunit/pdfexport/data/tdf105954.odt 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); |