mirror of
https://github.com/UglyToad/PdfPig.git
synced 2026-03-10 00:23:29 +08:00
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
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:
Binary file not shown.
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user