diff --git a/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs b/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs index 6fe8a760..90475b19 100644 --- a/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs +++ b/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs @@ -132,11 +132,10 @@ if (stream.StreamDictionary.TryGet(NameToken.Subtype, out NameToken subTypeName) && NameToken.Type1C.Equals(subTypeName)) { - var str = OtherEncodings.BytesAsLatin1String(bytes.ToArray()); var cffFont = compactFontFormatParser.Parse(new CompactFontFormatData(bytes)); return Union.Two(cffFont); } - + var length1 = stream.StreamDictionary.Get(NameToken.Length1, pdfScanner); var length2 = stream.StreamDictionary.Get(NameToken.Length2, pdfScanner); diff --git a/src/UglyToad.PdfPig/Fonts/Simple/Type1FontSimple.cs b/src/UglyToad.PdfPig/Fonts/Simple/Type1FontSimple.cs index 53f1b0bd..522f409a 100644 --- a/src/UglyToad.PdfPig/Fonts/Simple/Type1FontSimple.cs +++ b/src/UglyToad.PdfPig/Fonts/Simple/Type1FontSimple.cs @@ -120,7 +120,7 @@ { return box; } - + var boundingBox = GetBoundingBoxInGlyphSpace(characterCode); var matrix = fontMatrix; @@ -151,7 +151,8 @@ var rect = default(PdfRectangle?); fontProgram.Match(x => { - rect = x.GetCharacterBoundingBox(characterCode); + var name = encoding.GetName(characterCode); + rect = x.GetCharacterBoundingBox(name); }, x => { diff --git a/src/UglyToad.PdfPig/Fonts/Type1/Parser/Type1EncryptedPortionParser.cs b/src/UglyToad.PdfPig/Fonts/Type1/Parser/Type1EncryptedPortionParser.cs index 586bba59..d6f295cd 100644 --- a/src/UglyToad.PdfPig/Fonts/Type1/Parser/Type1EncryptedPortionParser.cs +++ b/src/UglyToad.PdfPig/Fonts/Type1/Parser/Type1EncryptedPortionParser.cs @@ -24,7 +24,7 @@ } var decrypted = Decrypt(bytes, EexecEncryptionKey, EexecRandomBytes); - + var tokenizer = new Type1Tokenizer(new ByteArrayInputBytes(decrypted)); /* @@ -495,6 +495,24 @@ { break; } + + // PostScript wrapper (ignored for now) + if (string.Equals(token.Text, "systemdict")) + { + ReadExpected(tokenizer, Type1Token.TokenType.Literal, "internaldict"); + ReadExpected(tokenizer, Type1Token.TokenType.Name, "known"); + ReadExpected(tokenizer, Type1Token.TokenType.StartProc); + + // TODO: read values from the wrapper, see line 396 of Type1Parser.java + // Skips the entire contents + while ((token = tokenizer.GetNext()) != null) + { + if (token.Type == Type1Token.TokenType.Name && (token.Text == "ND" || token.Text == "def")) + { + return; + } + } + } } else if (!skip) { diff --git a/src/UglyToad.PdfPig/Fonts/Type1/Type1FontProgram.cs b/src/UglyToad.PdfPig/Fonts/Type1/Type1FontProgram.cs index 59e2bfb1..ac4579dc 100644 --- a/src/UglyToad.PdfPig/Fonts/Type1/Type1FontProgram.cs +++ b/src/UglyToad.PdfPig/Fonts/Type1/Type1FontProgram.cs @@ -60,10 +60,9 @@ CharStrings = charStrings ?? throw new ArgumentNullException(nameof(charStrings)); } - public PdfRectangle? GetCharacterBoundingBox(int characterCode) + public PdfRectangle? GetCharacterBoundingBox(string characterName) { - var b = Encoding[characterCode]; - var glyph = CharStrings.Generate(b); + var glyph = CharStrings.Generate(characterName); var bbox = glyph.GetBoundingRectangle(); return bbox;