vcl/source/gdi/pdfwriter_impl.cxx | 11 +++++++++++ 1 file changed, 11 insertions(+)
New commits: commit 2f4ed9f048b904f1228c58a20d4f4bcfb87294fd Author: Armin Le Grand (Allotropia) <armin.le.gr...@me.com> AuthorDate: Fri Aug 20 17:51:14 2021 +0200 Commit: Armin Le Grand (Allotropia) <armin.le.gr...@me.com> CommitDate: Fri Aug 20 17:51:14 2021 +0200 AKDB-465: Correct usage of aCodeUnitsPerGlyph aCodeUnitsPerGlyph needs to be reset together with aCodeUnits, else if e.g. two code units for an already created glyph exists at the beginning that will by error be reused throughout the conversion of the given rText. Exactly that creates the described error. In the PDF, the /ToUnicode entry was created wrong due to this error. With this fix the same /ToUnicode list as in master gets created. Change-Id: I2feb8b1cb7d3bbaf3372ed369ab3b4b470071d4e diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 62f75b8a82ae..19ba5b76c3a3 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -8662,6 +8662,17 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool while ((nGlyphs = rLayout.GetNextGlyphs(nTmpMaxGlyphs, pGlyphs, aGNGlyphPos, nIndex, pFallbackFonts)) != 0) { aCodeUnits.clear(); + + // AKDB-465 aCodeUnitsPerGlyph needs to be reset here, too, else the + // units per glyph from former texts *will* wrongly be reused. + // Experimented by not using aCodeUnits.data() & aCodeUnitsPerGlyph.data() + // for the call to registerGlyphs below directly, but adding a live-offset + // to these. That again would make it necessary to also grow aCodeUnits + // all the time and the offsets would be not the same for both. + // Went out to be too complicated. AFAIU the simple solution below does + // not loose needed infos, so go with it. ProoveOfConcept: it works. + aCodeUnitsPerGlyph.clear(); + for( int i = 0; i < nGlyphs; i++ ) { // default case: 1 glyph is one unicode