[Libreoffice-commits] core.git: sdext/source

Mike Kaganski mike.kaganski at collabora.com
Sat Jan 28 17:30:44 UTC 2017


 sdext/source/pdfimport/test/testTdf105536.pdf |binary
 sdext/source/pdfimport/test/tests.cxx         |   15 +++++++++++++++
 sdext/source/pdfimport/tree/pdfiprocessor.cxx |    8 ++++++--
 3 files changed, 21 insertions(+), 2 deletions(-)

New commits:
commit 62c063de37b777ae2b0d06220ffdbdd8e8912d02
Author: Mike Kaganski <mike.kaganski at collabora.com>
Date:   Sat Jan 28 17:46:43 2017 +0300

    tdf#105536: PDF image should be v-flipped unconditionally
    
    Unit test included
    
    Change-Id: Id0d054a6b9922666daf4f36908f97ed6e65fb6c7
    Reviewed-on: https://gerrit.libreoffice.org/33649
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>

diff --git a/sdext/source/pdfimport/test/testTdf105536.pdf b/sdext/source/pdfimport/test/testTdf105536.pdf
new file mode 100644
index 0000000..d0bb7d7
Binary files /dev/null and b/sdext/source/pdfimport/test/testTdf105536.pdf differ
diff --git a/sdext/source/pdfimport/test/tests.cxx b/sdext/source/pdfimport/test/tests.cxx
index 9e4437e..987865c2 100644
--- a/sdext/source/pdfimport/test/tests.cxx
+++ b/sdext/source/pdfimport/test/tests.cxx
@@ -522,12 +522,27 @@ namespace
             CPPUNIT_ASSERT(aOutput.indexOf("svg:height=\"-262.82mm\"") != -1);
         }
 
+        void testTdf105536()
+        {
+            rtl::Reference<pdfi::PDFIRawAdaptor> xAdaptor(new pdfi::PDFIRawAdaptor(OUString(), getComponentContext()));
+            xAdaptor->setTreeVisitorFactory(createDrawTreeVisitorFactory());
+
+            OString aOutput;
+            CPPUNIT_ASSERT_MESSAGE("Exporting to ODF",
+                xAdaptor->odfConvert(m_directories.getURLFromSrc("/sdext/source/pdfimport/test/testTdf105536.pdf"),
+                new OutputWrapString(aOutput),
+                nullptr));
+            // This ensures that the imported image arrives properly flipped
+            CPPUNIT_ASSERT(aOutput.indexOf("draw:transform=\"matrix(-21488.4 0 0 -27978.1 21488.4 27978.1)\"") != -1);
+        }
+
         CPPUNIT_TEST_SUITE(PDFITest);
         CPPUNIT_TEST(testXPDFParser);
         CPPUNIT_TEST(testOdfWriterExport);
         CPPUNIT_TEST(testOdfDrawExport);
         CPPUNIT_TEST(testTdf96993);
         CPPUNIT_TEST(testTdf98421);
+        CPPUNIT_TEST(testTdf105536);
         CPPUNIT_TEST_SUITE_END();
     };
 
diff --git a/sdext/source/pdfimport/tree/pdfiprocessor.cxx b/sdext/source/pdfimport/tree/pdfiprocessor.cxx
index cb51407..a19f716 100644
--- a/sdext/source/pdfimport/tree/pdfiprocessor.cxx
+++ b/sdext/source/pdfimport/tree/pdfiprocessor.cxx
@@ -349,8 +349,12 @@ void PDFIProcessor::setupImage(ImageId nImage)
     pFrame->h = pImageElement->h = aScale.getY();
     pFrame->ZOrder = m_nNextZOrder++;
 
-    if (aScale.getY() < 0)
-        pFrame->MirrorVertical = pImageElement->MirrorVertical = true;
+    // Poppler wrapper takes into account that vertical axes of PDF and ODF are opposite,
+    // and it flips matrix vertically (see poppler's GfxState::GfxState()).
+    // But image internal vertical axis is independent of PDF vertical axis direction,
+    // so arriving matrix is extra-flipped relative to image.
+    // We force vertical flip here to compensate that.
+    pFrame->MirrorVertical = true;
 }
 
 void PDFIProcessor::drawMask(const uno::Sequence<beans::PropertyValue>& xBitmap,


More information about the Libreoffice-commits mailing list