[Libreoffice-commits] core.git: vcl/qa

Miklos Vajna vmiklos at collabora.co.uk
Thu Mar 30 18:29:16 UTC 2017


 vcl/qa/cppunit/pdfexport/data/tdf106693.odt |binary
 vcl/qa/cppunit/pdfexport/pdfexport.cxx      |   56 ++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+)

New commits:
commit 932f6a8f37fbd99fc2ed16aa37966658d388c975
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Mar 30 17:04:19 2017 +0200

    vcl PDF export, norefxobj: add test for this
    
    Assert two important properties:
    
    - the pdf image is described using the form xobject markup (not the
      reference xobject one)
    - the form xobject refers to a vector image, not to a bitmap one
    
    Change-Id: I94b88976c1e5392758d56254143fbeeeeba51412
    Reviewed-on: https://gerrit.libreoffice.org/35901
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/vcl/qa/cppunit/pdfexport/data/tdf106693.odt b/vcl/qa/cppunit/pdfexport/data/tdf106693.odt
new file mode 100644
index 000000000000..a2c18037833e
Binary files /dev/null and b/vcl/qa/cppunit/pdfexport/data/tdf106693.odt differ
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index fb0bd8b3c597..ede50077b62c 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -47,6 +47,8 @@ public:
     void testTdf105093();
     /// Tests export of non-PDF images.
     void testTdf106206();
+    /// Tests export of PDF images without reference XObjects.
+    void testTdf106693();
 #endif
 
     CPPUNIT_TEST_SUITE(PdfExportTest);
@@ -55,6 +57,7 @@ public:
     CPPUNIT_TEST(testTdf105461);
     CPPUNIT_TEST(testTdf105093);
     CPPUNIT_TEST(testTdf106206);
+    CPPUNIT_TEST(testTdf106693);
 #endif
     CPPUNIT_TEST_SUITE_END();
 };
@@ -118,6 +121,59 @@ void PdfExportTest::testTdf106059()
     CPPUNIT_ASSERT(pReferenceXObject->Lookup("Ref"));
 }
 
+void PdfExportTest::testTdf106693()
+{
+    // Import the bugdoc and export as PDF.
+    OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf106693.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");
+    xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList());
+
+    // Parse the export result.
+    vcl::filter::PDFDocument aDocument;
+    SvFileStream aStream(aTempFile.GetURL(), StreamMode::READ);
+    CPPUNIT_ASSERT(aDocument.Read(aStream));
+
+    // Assert that the XObject in the page resources dictionary is a form XObject.
+    std::vector<vcl::filter::PDFObjectElement*> aPages = aDocument.GetPages();
+    // The document has one page.
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aPages.size());
+    vcl::filter::PDFObjectElement* pResources = aPages[0]->LookupObject("Resources");
+    CPPUNIT_ASSERT(pResources);
+    auto pXObjects = dynamic_cast<vcl::filter::PDFDictionaryElement*>(pResources->Lookup("XObject"));
+    CPPUNIT_ASSERT(pXObjects);
+    // The page has one image.
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pXObjects->GetItems().size());
+    vcl::filter::PDFObjectElement* pXObject = pXObjects->LookupObject(pXObjects->GetItems().begin()->first);
+    CPPUNIT_ASSERT(pXObject);
+    // The image is a form XObject.
+    auto pSubtype = dynamic_cast<vcl::filter::PDFNameElement*>(pXObject->Lookup("Subtype"));
+    CPPUNIT_ASSERT(pSubtype);
+    CPPUNIT_ASSERT_EQUAL(OString("Form"), pSubtype->GetValue());
+    // This failed: UseReferenceXObject was ignored and Ref was always created.
+    CPPUNIT_ASSERT(!pXObject->Lookup("Ref"));
+
+    // Assert that the form object refers to an inner form object, not a
+    // bitmap.
+    auto pInnerResources = dynamic_cast<vcl::filter::PDFDictionaryElement*>(pXObject->Lookup("Resources"));
+    CPPUNIT_ASSERT(pInnerResources);
+    auto pInnerXObjects = dynamic_cast<vcl::filter::PDFDictionaryElement*>(pInnerResources->LookupElement("XObject"));
+    CPPUNIT_ASSERT(pInnerXObjects);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pInnerXObjects->GetItems().size());
+    vcl::filter::PDFObjectElement* pInnerXObject = pInnerXObjects->LookupObject(pInnerXObjects->GetItems().begin()->first);
+    CPPUNIT_ASSERT(pInnerXObject);
+    auto pInnerSubtype = dynamic_cast<vcl::filter::PDFNameElement*>(pInnerXObject->Lookup("Subtype"));
+    CPPUNIT_ASSERT(pInnerSubtype);
+    // This failed: this was Image (bitmap), not Form (vector).
+    CPPUNIT_ASSERT_EQUAL(OString("Form"), pInnerSubtype->GetValue());
+}
+
 void PdfExportTest::testTdf105461()
 {
     // Import the bugdoc and export as PDF.


More information about the Libreoffice-commits mailing list