From 16b0260d686eea49a8235c2ede77d05425101678 Mon Sep 17 00:00:00 2001 From: Eliot Jones Date: Sat, 5 Jan 2019 18:01:39 +0000 Subject: [PATCH] add support for fonts which use the standard 14 fonts but also provide an encoding --- .../Fonts/Parser/Handlers/Type1FontHandler.cs | 13 +++++++++++++ .../Fonts/Simple/Type1Standard14Font.cs | 7 +++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs b/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs index 3c24b73e..6fe8a760 100644 --- a/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs +++ b/src/UglyToad.PdfPig/Fonts/Parser/Handlers/Type1FontHandler.cs @@ -65,6 +65,19 @@ var widths = FontDictionaryAccessHelper.GetWidths(pdfScanner, dictionary, isLenientParsing); + if (!dictionary.TryGet(NameToken.FontDescriptor, out var _)) + { + if (dictionary.TryGet(NameToken.BaseFont, out var baseFontToken) && + DirectObjectFinder.TryGet(baseFontToken, pdfScanner, out NameToken baseFontName)) + { + var metrics = Standard14.GetAdobeFontMetrics(baseFontName.Data); + + var overrideEncoding = encodingReader.Read(dictionary, isLenientParsing); + + return new Type1Standard14Font(metrics, overrideEncoding); + } + } + var descriptor = FontDictionaryAccessHelper.GetFontDescriptor(pdfScanner, fontDescriptorFactory, dictionary, isLenientParsing); var font = ParseFontProgram(descriptor, isLenientParsing); diff --git a/src/UglyToad.PdfPig/Fonts/Simple/Type1Standard14Font.cs b/src/UglyToad.PdfPig/Fonts/Simple/Type1Standard14Font.cs index 743565d2..f72a45b3 100644 --- a/src/UglyToad.PdfPig/Fonts/Simple/Type1Standard14Font.cs +++ b/src/UglyToad.PdfPig/Fonts/Simple/Type1Standard14Font.cs @@ -7,6 +7,9 @@ using IO; using Tokens; + /// + /// A font using one of the Adobe Standard 14 fonts. Can use a custom encoding. + /// internal class Type1Standard14Font: IFont { private readonly FontMetrics standardFontMetrics; @@ -17,10 +20,10 @@ private readonly TransformationMatrix fontMatrix = TransformationMatrix.FromValues(0.001m, 0, 0, 0.001m, 0, 0); - public Type1Standard14Font(FontMetrics standardFontMetrics) + public Type1Standard14Font(FontMetrics standardFontMetrics, Encoding overrideEncoding = null) { this.standardFontMetrics = standardFontMetrics ?? throw new ArgumentNullException(nameof(standardFontMetrics)); - encoding = new AdobeFontMetricsEncoding(standardFontMetrics); + encoding = overrideEncoding ?? new AdobeFontMetricsEncoding(standardFontMetrics); Name = NameToken.Create(standardFontMetrics.FontName);