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;