Handle empty encoding in Type1FontSimple and fix #1248
Some checks failed
Build, test and publish draft / build (push) Has been cancelled
Build and test [MacOS] / build (push) Has been cancelled
Run Common Crawl Tests / build (0000-0001) (push) Has been cancelled
Run Common Crawl Tests / build (0002-0003) (push) Has been cancelled
Run Common Crawl Tests / build (0004-0005) (push) Has been cancelled
Run Common Crawl Tests / build (0006-0007) (push) Has been cancelled
Run Integration Tests / build (push) Has been cancelled
Nightly Release / Check if this commit has already been published (push) Has been cancelled
Nightly Release / tests (push) Has been cancelled
Nightly Release / build_and_publish_nightly (push) Has been cancelled

This commit is contained in:
BobLd
2026-02-09 22:25:14 +00:00
parent c27f1b6553
commit d6e86b057e
4 changed files with 75 additions and 18 deletions

View File

@@ -11,6 +11,25 @@
public class GithubIssuesTests
{
[Fact]
public void Issues1248()
{
var path = IntegrationHelpers.GetDocumentPath("jtehm-melillo-2679746.pdf");
using (var document = PdfDocument.Open(path, new ParsingOptions() { UseLenientParsing = true }))
{
var page = document.GetPage(1);
foreach (var letter in page.Letters)
{
var font = letter.GetFont();
if (font?.Name?.Data.Contains("TimesLT") == true)
{
Assert.True(font.TryGetPath(100, out _));
}
}
}
}
[Fact]
public void Issues1238()
{

View File

@@ -125,7 +125,7 @@
{
if (font.TryGetFirst(out var t1Font))
{
fromFont = t1Font.Encoding is not null ? new BuiltInEncoding(t1Font.Encoding) : default(Encoding);
fromFont = (t1Font.Encoding is not null && t1Font.Encoding.Count > 0) ? new BuiltInEncoding(t1Font.Encoding) : default(Encoding);
}
else if (font.TryGetSecond(out var cffFont))
{
@@ -135,7 +135,7 @@
var encoding = encodingReader.Read(dictionary, descriptor, fromFont);
if (encoding is null && font != null && font.TryGetFirst(out var t1FontReplacement))
if (encoding is null && font != null && font.TryGetFirst(out var t1FontReplacement) && t1FontReplacement.Encoding?.Count > 0)
{
encoding = new BuiltInEncoding(t1FontReplacement.Encoding);
}

View File

@@ -29,7 +29,7 @@
private readonly FontDescriptor fontDescriptor;
private readonly Encoding encoding;
private readonly Encoding? encoding;
private readonly Union<Type1Font, CompactFontFormatFontCollection>? fontProgram;
@@ -67,7 +67,7 @@
var matrix = DefaultTransformationMatrix;
if (fontProgram != null)
if (fontProgram is not null)
{
if (fontProgram.TryGetFirst(out var t1Font))
{
@@ -183,15 +183,7 @@
try
{
if (isZapfDingbats)
{
value = GlyphList.ZapfDingbats.NameToUnicode(name);
if (value is not null)
{
return true;
}
}
value = GlyphList.AdobeGlyphList.NameToUnicode(name);
value = NameToUnicode(name);
}
catch
{
@@ -201,6 +193,34 @@
return value is not null;
}
private string? NameToUnicode(string name)
{
if (isZapfDingbats)
{
string value = GlyphList.ZapfDingbats.NameToUnicode(name);
if (value is not null)
{
return value;
}
}
return GlyphList.AdobeGlyphList.NameToUnicode(name);
}
public string UnicodeCodePointToName(int unicodeValue)
{
if (isZapfDingbats)
{
string value = GlyphList.ZapfDingbats.UnicodeCodePointToName(unicodeValue);
if (value is not null)
{
return value;
}
}
return GlyphList.AdobeGlyphList.UnicodeCodePointToName(unicodeValue);
}
public CharacterBoundingBox GetBoundingBox(int characterCode)
{
if (cachedBoundingBoxes.TryGetValue(characterCode, out var box))
@@ -255,7 +275,16 @@
PdfRectangle? rect = null;
if (fontProgram.TryGetFirst(out var t1Font))
{
var name = encoding.GetName(characterCode);
string name;
if (encoding is not null)
{
name = encoding.GetName(characterCode);
}
else
{
name = UnicodeCodePointToName(characterCode);
}
rect = t1Font.GetCharacterBoundingBox(name);
}
else if (fontProgram.TryGetSecond(out var cffFont))
@@ -308,21 +337,30 @@
return false;
}
if (fontProgram == null)
if (fontProgram is null)
{
return false;
}
if (fontProgram.TryGetFirst(out var t1Font))
{
var name = encoding.GetName(characterCode);
string name;
if (encoding is not null)
{
name = encoding.GetName(characterCode);
}
else
{
name = UnicodeCodePointToName(characterCode);
}
tempPath = t1Font.GetCharacterPath(name);
}
else if (fontProgram.TryGetSecond(out var cffFont))
{
var first = cffFont.FirstFont;
string characterName;
if (encoding != null)
if (encoding is not null)
{
characterName = encoding.GetName(characterCode);
}
@@ -334,7 +372,7 @@
tempPath = first.GetCharacterPath(characterName);
}
if (tempPath != null)
if (tempPath is not null)
{
path = tempPath;
return true;