Skip to content

Commit 4a09455

Browse files
authored
Only fall back to identity decoding when toUnicodeCMap is not set, fixes #254 (#276)
1 parent ef1760b commit 4a09455

3 files changed

Lines changed: 3635 additions & 1 deletion

File tree

src/Document/ContentStream/PositionedText/PositionedTextElement.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace PrinsFrank\PdfParser\Document\ContentStream\PositionedText;
44

5+
use PrinsFrank\PdfParser\Document\Dictionary\DictionaryValue\Name\EncodingNameValue;
56
use PrinsFrank\PdfParser\Document\Document;
67
use PrinsFrank\PdfParser\Document\Generic\Character\LiteralStringEscapeCharacter;
78
use PrinsFrank\PdfParser\Document\Object\Decorator\Font;
@@ -42,10 +43,12 @@ public function getText(Document $document, Page $page): string {
4243
$chars = $glyph->getChar();
4344
} elseif (strlen($unescapedChars) === 1 && ($glyph = $font->getDifferences()?->getGlyph(ord($unescapedChars))) !== null) {
4445
$chars = $glyph->getChar();
45-
} elseif (($encoding = $font->getEncoding()) !== null) {
46+
} elseif (in_array($encoding = $font->getEncoding(), [EncodingNameValue::MacExpertEncoding, EncodingNameValue::WinAnsiEncoding], true)) {
4647
$chars = $encoding->decodeString($unescapedChars);
4748
} elseif (($toUnicodeCMap = $font->getToUnicodeCMap() ?? $font->getToUnicodeCMapDescendantFont()) !== null) {
4849
$chars = $toUnicodeCMap->textToUnicode(bin2hex($unescapedChars));
50+
} elseif ($encoding !== null) {
51+
$chars = $encoding->decodeString($unescapedChars);
4952
} else {
5053
$chars = $unescapedChars;
5154
}

0 commit comments

Comments
 (0)