vcl/qa/cppunit/pdfexport/data/tdf144222.ods |binary
 vcl/qa/cppunit/pdfexport/pdfexport.cxx      |   42 ++++++++++++++++++++++++++++
 vcl/source/gdi/pdfwriter_impl.cxx           |    2 -
 3 files changed, 42 insertions(+), 2 deletions(-)

New commits:
commit a4244c0f05b95ded277a3a7ed217bf0451daa996
Author:     Mark Hung <mark...@gmail.com>
AuthorDate: Sat Oct 16 13:55:56 2021 +0800
Commit:     Mark Hung <mark...@gmail.com>
CommitDate: Thu Oct 21 14:13:30 2021 +0200

    tdf#144222 fix pdf export with vertical layout
    
    Remove the offset adjustment that is no longer necessary.
    That was done in every backend before, and has been
    removed now.  We can trust what layout text provides us.
    
    Regression from:
    
    commit dd0d0b44fd1c6c0292d7b2eb3f5cf2baa21e4481
    Author: Mark Hung <mark...@gmail.com>
    Date:   Sun May 2 15:12:46 2021 +0800
    
        vcl: adjust LayoutText() for vertical writing.
    
    Change-Id: I077f5a5f0711444086e56e4469dbcb3010ffe661
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123682
    Tested-by: Jenkins
    Reviewed-by: Mark Hung <mark...@gmail.com>

diff --git a/vcl/qa/cppunit/pdfexport/data/tdf144222.ods 
b/vcl/qa/cppunit/pdfexport/data/tdf144222.ods
new file mode 100644
index 000000000000..7b572d301abc
Binary files /dev/null and b/vcl/qa/cppunit/pdfexport/data/tdf144222.ods differ
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx 
b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index 0da9bedd33ef..ad19395c5669 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -2945,6 +2945,48 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, 
testPdfImageRotate180)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(-1.0, aScale.getX(), 0.01);
 }
 
+CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf144222)
+{
+// Assume Windows has the font for U+4E2D
+#ifdef _WIN32
+    OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + 
"tdf144222.ods";
+    utl::MediaDescriptor aMediaDescriptor;
+    aMediaDescriptor["FilterName"] <<= OUString("calc_pdf_Export");
+    auto pPdfDocument = exportAndParse(aURL, aMediaDescriptor);
+
+    // The document has one page.
+    CPPUNIT_ASSERT_EQUAL(1, pPdfDocument->getPageCount());
+    std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = 
pPdfDocument->openPage(/*nIndex=*/0);
+    CPPUNIT_ASSERT(pPdfPage);
+    std::unique_ptr<vcl::pdf::PDFiumTextPage> pTextPage = 
pPdfPage->getTextPage();
+    CPPUNIT_ASSERT(pTextPage);
+
+    int nPageObjectCount = pPdfPage->getObjectCount();
+    const OUString sChar = u"\u4E2D";
+    basegfx::B2DRectangle aRect1, aRect2;
+    int nCount = 0;
+
+    for (int i = 0; i < nPageObjectCount; ++i)
+    {
+        std::unique_ptr<vcl::pdf::PDFiumPageObject> pPdfPageObject = 
pPdfPage->getObject(i);
+        if (pPdfPageObject->getType() == vcl::pdf::PDFPageObjectType::Text)
+        {
+            ++nCount;
+            OUString sText = pPdfPageObject->getText(pTextPage);
+            if (sText == sChar)
+                aRect1 = pPdfPageObject->getBounds();
+            else
+                aRect2 = pPdfPageObject->getBounds();
+        }
+    }
+
+    CPPUNIT_ASSERT_EQUAL(2, nCount);
+    CPPUNIT_ASSERT(!aRect1.isEmpty());
+    CPPUNIT_ASSERT(!aRect2.isEmpty());
+    CPPUNIT_ASSERT(!aRect1.overlaps(aRect2));
+#endif
+}
+
 } // end anonymous namespace
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx 
b/vcl/source/gdi/pdfwriter_impl.cxx
index 7718cbd39f9c..b987c948bd6d 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -5841,8 +5841,6 @@ void PDFWriterImpl::drawVerticalGlyphs(
         if (rGlyphs[i].m_pGlyph->IsVertical())
         {
             fDeltaAngle = M_PI/2.0;
-            aDeltaPos.setX( GetFontMetric().GetAscent() );
-            aDeltaPos.setY( 
static_cast<int>(static_cast<double>(GetFontMetric().GetDescent()) * fXScale) );
             fYScale = fXScale;
             fTempXScale = 1.0;
             fSkewA = -fSkewB;

Reply via email to