From 258e57c3c1c8f32753f04e5e2b9e443e205921bf Mon Sep 17 00:00:00 2001 From: BobLd <38405645+BobLd@users.noreply.github.com> Date: Tue, 14 Oct 2025 10:08:50 +0100 Subject: [PATCH] Trim excess in long lived font collections --- .../CharStrings/Type2CharStringParser.cs | 2 ++ .../Charsets/CompactFontFormatIsoAdobeCharset.cs | 4 ++++ .../PdfFonts/Cmap/CharacterMapBuilder.cs | 10 +++++++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/UglyToad.PdfPig.Fonts/CompactFontFormat/CharStrings/Type2CharStringParser.cs b/src/UglyToad.PdfPig.Fonts/CompactFontFormat/CharStrings/Type2CharStringParser.cs index af9b29da1..8e7f09cbf 100644 --- a/src/UglyToad.PdfPig.Fonts/CompactFontFormat/CharStrings/Type2CharStringParser.cs +++ b/src/UglyToad.PdfPig.Fonts/CompactFontFormat/CharStrings/Type2CharStringParser.cs @@ -770,6 +770,8 @@ private static Type2CharStrings.CommandSequence ParseSingle( } } + values.TrimExcess(); + return new Type2CharStrings.CommandSequence(values, commandIdentifiers); } diff --git a/src/UglyToad.PdfPig.Fonts/CompactFontFormat/Charsets/CompactFontFormatIsoAdobeCharset.cs b/src/UglyToad.PdfPig.Fonts/CompactFontFormat/Charsets/CompactFontFormatIsoAdobeCharset.cs index 656672475..8425c8d94 100644 --- a/src/UglyToad.PdfPig.Fonts/CompactFontFormat/Charsets/CompactFontFormatIsoAdobeCharset.cs +++ b/src/UglyToad.PdfPig.Fonts/CompactFontFormat/Charsets/CompactFontFormatIsoAdobeCharset.cs @@ -257,6 +257,10 @@ private CompactFontFormatIsoAdobeCharset() gidToStringIdAndNameMap[gid++] = pair; } +#if NET + gidToStringIdAndNameMap.TrimExcess(); +#endif + glyphIdToStringIdAndName = gidToStringIdAndNameMap; } diff --git a/src/UglyToad.PdfPig/PdfFonts/Cmap/CharacterMapBuilder.cs b/src/UglyToad.PdfPig/PdfFonts/Cmap/CharacterMapBuilder.cs index 5fcbfea27..db22479c3 100644 --- a/src/UglyToad.PdfPig/PdfFonts/Cmap/CharacterMapBuilder.cs +++ b/src/UglyToad.PdfPig/PdfFonts/Cmap/CharacterMapBuilder.cs @@ -81,11 +81,15 @@ public void AddBaseFontCharacter(ReadOnlySpan bytes, string value) public CMap Build() { +#if NET + BaseFontCharacterMap?.TrimExcess(); +#endif + return new CMap(GetCidSystemInfo(), Type, WMode, Name, Version, BaseFontCharacterMap ?? new Dictionary(), - CodespaceRanges ?? new CodespaceRange[0], - CidRanges ?? new CidRange[0], - CidCharacterMappings ?? new CidCharacterMapping[0]); + CodespaceRanges ?? Array.Empty(), + CidRanges ?? Array.Empty(), + CidCharacterMappings ?? Array.Empty()); } private CharacterIdentifierSystemInfo GetCidSystemInfo()