All Versions
6
Latest Version
Avg Release Cycle
356 days
Latest Release
82 days ago

Changelog History

  • v0.1.14 Changes

    March 22, 2026

    ๐Ÿš€ Auto generated release notes

    • Increment version to 0.1.14 by @BobLd in #1231
    • Introduce StackDepthGuard class to check for stack depth in CoreTokenScanner and fix #1217 by @BobLd in #1220
    • โž• Add Links to Pdf Generation by @ochsnerd in #1232
    • โœ… Make LinkAnnotation internal to fix unit tests by @BobLd in #1239
    • Only throw if ArrayToken length is lesss than 4 in ToRectangle() and fix #1238 by @BobLd in #1240
    • ๐Ÿ– Handle empty encoding in Type1FontSimple and fix #1248 by @BobLd in #1249
    • ๐Ÿ‘‰ Make extended graphics states stacked too by @PsykerUdot in #1246
    • both Tj and TJ operators should increment text sequence #1241 by @EliotJones in #1251
    • ๐Ÿ‘Œ Improve HasFormXObjectCircularReference and fix #1250 by @BobLd in #1252
    • ๐Ÿš€ replace release flow single job with pr process by @EliotJones in #1253
    • โž• Add UglyToad.PdfPig.Benchmarks and misc performance improvements by @BobLd in #1255
    • ๐Ÿ‘‰ Make LinkAnnotation public by @BobLd in #1256
    • โช revert flate decode handling to more lenient processing by @EliotJones in #1254
    • ๐Ÿ›  Fix Benchmarks solution and add BruteForceBenchmarks by @BobLd in #1260
    • โž• Additional digital corpora testing by @EliotJones in #1261
    • Introduce IBlock and ILettersBlock interfaces (Round 2) by @davebrokit in #1263
    • ๐Ÿ‘Œ Improve SystemFontFinder performance and add benchmarks by @BobLd in #1264
    • For shading types 4 to 7, add Data property containing descriptive data characterizing the shading's gradient fill by @BobLd in #1267
    • creating branch in the previous step conflicts by @EliotJones in #1269
    • ๐Ÿš€ change the release flow to work on tags by @EliotJones in #1271

    ๐Ÿ†• New Contributors

    Full Changelog : 0.1.13...v0.1.14

  • v0.1.13 Changes

    December 23, 2025

    What's Changed

    • Increment version to 0.1.13 by @BobLd in #1207
    • Simply order by offset also when not doing brute force to fix #1208 by @BobLd in #1210
    • Ensure no key end up missing in ResolveInternal and fix #1209 by @BobLd in #1211
    • ๐Ÿš€ update release logic to check out master before commit by @EliotJones in #1212
    • Return empty glyph in ReadCompositeGlyph when glyphIndex is out of range and fix #1213 by @BobLd in #1215
    • Handling of optional content group names without proper name by @carlokok in #1216
    • ๐Ÿ“œ Minor Type1FontParser optimisations by @BobLd in #1221
    • ๐Ÿ‘‰ Use file header offset when doing brute force find and fix #1223 by @BobLd in #1224
    • Do not return glyph bbox and path in Type1Font if character name is '.notdef' by @BobLd in #1229

    ๐Ÿ†• New Contributors

    Full Changelog : v0.1.12...unreleased

  • v0.1.12 Changes

    November 13, 2025

    What's Changed

    • โž• add nullability to core project by @EliotJones in #1111
    • ๐Ÿ›  Fix usage of List.Contains by @theolivenbaum in #1112
    • ๐Ÿ‘ allow missing catalog type definition for catalog dictionary by @EliotJones in #1113
    • ๐ŸŽ Performance improvements and .Net 9 support by @chuckbeasley in #1116
    • Update run_integration_tests.yml by @BobLd in #1117
    • โž• Add global.json in tools by @BobLd in #1118
    • Update run_integration_tests.yml by @BobLd in #1119
    • Update run_integration_tests.yml by @BobLd in #1120
    • Update run_common_crawl_tests.yml by @BobLd in #1121
    • ๐Ÿš€ Update nightly_release.yml by @BobLd in #1123
    • Increase FlateFilter multiplier when preventing malicious OOM and fix #1125 by @BobLd in #1126
    • Update build_and_test_macos.yml by @BobLd in #1129
    • Update build_and_test_macos.yml by @BobLd in #1130
    • ๐Ÿ“œ Prevent StackOverflow in ParseTrailer and fix #1122 by @BobLd in #1127
    • ๐Ÿ“œ Lower max search depth in preventing StackOverflow in ParseTrailer by @BobLd in #1131
    • โž• add container node support for BookmarksProvider.cs by @migeyusu in #1133
    • ๐Ÿšš move file parsing to single-pass static methods by @EliotJones in #1102
    • โž• Add early version of IOSSystemFontLister by @BobLd in #1143
    • File buffering read stream investigation by @EliotJones in #1140
    • ๐Ÿš€ Draft release on master build by @EliotJones in #1145
    • ๐Ÿ‘€ First create the StreamInputBytes in PdfDocument.Open() to check the stream CanRead and CanSeek by @BobLd in #1147
    • ๐Ÿ›  Fix font matrix issues by @BobLd in #1150
    • ๐Ÿšš Properly fix #1148 by always parsing optional tables in TrueTypeFontParser and remove Type 0 font hack by @BobLd in #1151
    • ๐Ÿ“œ copy other parser behavior by treating end of stream as valid end inline image by @EliotJones in #1152
    • โž• add test jobs for common crawl 0000 to 0007 by @EliotJones in #1153
    • ๐Ÿ– handle case where xobjects use same key as fonts by @EliotJones in #1154
    • read last line of ignore file by @EliotJones in #1155
    • ๐Ÿ‘‰ Use correct font matrix when transforming the width in Type 0 font and fix #1156 by @BobLd in #1157
    • โž• Add initial support to process CFF fonts contained inside a TrueType font by @BobLd in #1159
    • ๐Ÿ‘€ Handle non seekable stream by copying it into a memory stream and fix #1146 by @BobLd in #1158
    • ๐Ÿ– handle case where offsets are out of range by @EliotJones in #1160
    • ๐Ÿ‘‰ Use record struct in FileHeaderOffset by @BobLd in #1161
    • ๐Ÿ”ฆ Expose letter's font via GetFont(), make Font property as obsolete and use FontDetails instead by @BobLd in #1166
    • โž• Add GetDescent() and GetAscent() to IFont and loose bounding box to letter by @BobLd in #1167
    • ๐Ÿ‘‰ Use pageFactoryCache.Clear() in Pages dispose and fix #1170 by @BobLd in #1174
    • ๐Ÿ›  Bugfix: xref-streams were not added by @ricflams in #1173
    • Guard against circular references in XRef tables/streams by @ricflams in #1175
    • โž• Add more tests to NearestNeighbourWordExtractorTests by @BobLd in #1180
    • ๐Ÿ”‹ Feature/improve group indexes by @BobLd in #1181
    • Trim excess in long lived font collections by @BobLd in #1184
    • ๐Ÿ‘€ Set Type 3 font ascent to Top instead of Height, see #1164 by @BobLd in #1185
    • ๐Ÿšš Only apply RemoveStridePadding() when bytes per pixel is one and fix #1183 by @BobLd in #1187
    • ๐Ÿ‘‰ Use zlib decode to properly use window size and checksum in flate filter by @rhuijben in #1186
    • ๐Ÿ‘€ Avoid doing a true file seek for simple peeking in the token parser by @rhuijben in #1188
    • ๐Ÿ›  Fix regression introduced in 3592fc8 where slicing the stream to the length breaks decoding by @BobLd in #1192
    • โšก๏ธ Update NameToUnicodeConvertAglSpecification to test what was intended by @rhuijben in #1191
    • โž• Add CMap caching at document level and add MurmurHash3 hashing function by @BobLd in #1193
    • ๐Ÿ‘€ Avoid reading ahead and then seeking back by @rhuijben in #1189
    • Do not slice the stream to the length breaks decoding in FlateDecode by @BobLd in #1194
    • ๐Ÿš€ Update test run command to use Release configuration by @BobLd in #1195
    • ๐Ÿ‘‰ Make geometric transforms consistent with PDF specification by @PsykerUdot in #1198
    • Check for index out of range in GlyphDataTable.ReadFlags() and fix #1199 by @BobLd in #1201
    • Check for array size before slice in ColorSpaceDetailsByteConverter.Convert() by @BobLd in #1202
    • ๐Ÿ› Bugs/revert e11dc6b by @BobLd in #1203

    ๐Ÿ†• New Contributors

    Full Changelog : v0.1.11...v0.1.12

  • v0.1.11 Changes

    July 26, 2025

    Welcome to version 0.1.11. The changes in this version have mainly focused on stability. There is a breaking API change.

    ๐Ÿš€ We have also started to run tests against a larger corpus of documents from Common Crawl allowing us to find bugs and malformed files proactively. This release is screened against 6000 additional files.

    • ๐Ÿ‘Œ Improvements to content and font parsing detected by fuzzing inputs.
    • ๐Ÿ‘Œ Improvements and resiliency for finding the startxref location when parsing a file..
    • โž• Adds build and tests for Mac OS as well as retrieving system fonts on iPad (Mac Catalyst).
    • ๐Ÿ‘Œ Support clipping when rendering XObjects.
    • Prevent malformed files leading to an out-of-memory when decompressing streams.
    • ๐Ÿ‘‰ Make IGraphicsStateOperationFactory and ReflectionGraphicsStateOperationFactory public.
    • ๐Ÿ‘ Softmask support for images.
    • ๐ŸŽ Performance improvements using Span and ReadOnlyMemory where available.
    • ๐Ÿ– Handle corrupt files where the stream contains comment tokens.
    • ๐Ÿ‘Œ Improvements to copying from existing files when using PdfDocumentBuilder, fixes some bugs with copying fonts and dictionary tokens referenced indirectly.
    • ๐Ÿ– Handle corrupt files with double endstream definitions.
    • ๐Ÿ“œ More tolerant parsing for a number of invalid PDFs, including invalid USC2 input, CMAP formats, CFF fonts, missing font subtypes, invalid xref table positions, missing /FirstChar entry for font dictionaries and corrupt ASCII 85 encoded data.
    • ๐Ÿ›  Fix an issue where adding content to an existing PDF using PdfDocumentBuilder could result in upside-down or wrongly positioned text due to global transforms in the source PDF.
    • ๐Ÿ†• New option to completely skip annotations when building a document.
    • Prevent infinite loops in certain documents #1096.
    • ๐Ÿ‘Œ Improved performance when tokenizing numbers, this should provide a minor speed improvement.
    • When adding a page from an existing PDF to a PdfDocumentBuilder any external link annotations should be preserved.

    ๐Ÿ’ฅ Breaking changes

    The method on PdfDocumentBuilder:

    public PdfPageBuilder AddPage(PdfDocument document, int pageNumber, Func<PdfAction, PdfAction?>? copyLink)
    

    ๐Ÿ‘ Has been changed to wrap the copyLink parameter in an options object to support the KeepAnnotations option:

    public PdfPageBuilder AddPage(PdfDocument document, int pageNumber, AddPageOptions options)
    

    You can just set the CopyLinkFunc property in the options object if you need to access this functionality.

    ๐ŸŒฒ Auto generated change log

    • โฌ†๏ธ Bump version to 0.1.11-alpha001 by @BobLd in #1009
    • ๐Ÿ‘Œ Improve Jpeg2000Helper to support J2K codec and add test by @BobLd in #1010
    • โž• Add SetStrokeDetails() and SetFillDetails() to PdfPath and tidy up ContentStreamProcessor by @BobLd in #1014
    • Implement clipping in ProcessFormXObject() by @BobLd in #1015
    • ๐Ÿ›  Fix #1017 by @lofcz in #1018
    • ๐Ÿ›  Fix PatternColor Equals() method and fix #1016 by @BobLd in #1019
    • ๐Ÿ”‹ Feature/image mask by @BobLd in #1012
    • โšก๏ธ Update README.md by @BobLd in #1020
    • ๐Ÿ›  Fix bug where FormXObject bbox needs to be normalised by @BobLd in #1021
    • โž• Add MacOS test pipeline and fix failing tests by @BobLd in #1025
    • โšก๏ธ Update README.md by @BobLd in #1026
    • Seal PdfSubpath class and IPathCommand implementations, fix Close.GetHashCode() and fix #1027 by @BobLd in #1029
    • ๐Ÿ›  Fix issue #1013 by @BobLd in #1031
    • โž• Add support for MacCatalyst in SystemFontFinder by @BobLd in #1033
    • ๐Ÿ“œ Make sure the value of the ImageMask / Im token is check in ColorSpaceDetailsParser by @BobLd in #1038
    • โž• Add early support for Stencil masking, rename SoftMaskImage property into MaskImage and make sure IsInlineImage is true for InlineImage by @BobLd in #1039
    • ๐Ÿ›  Bugfix and optimize GetStartXrefPosition by @ricflams in #1036
    • ๐Ÿ›  Fix bug introduced in #1039 by @BobLd in #1041
    • Try to repair xref offset by looking for all startxref and fix #1040 by @BobLd in #1044
    • โž• Add test to ensure #822 is fixed by @BobLd in #1045
    • ๐Ÿ– Handle TrueType case in CidFontFactory where the font is CFF by @BobLd in #1046
    • Issues/1048 by @BobLd in #1049
    • Check for infinite recursion in ObjectLocationProvider.TryGetOffset() and fix #1050 by @BobLd in #1051
    • ๐Ÿ‘Œ Improve IFilter memory allocation by @BobLd in #1052
    • ๐Ÿ”จ Modernise PngPredictor and refactor LzwFilter and FlateFilter to reduce memory allocation by @BobLd in #1053
    • Do not throw if the Mask dictionary contains a ColorSpace key by @BobLd in #1055
    • ๐Ÿ‘‰ Make the Diacritics class public for use in external StreamProcessors by @BobLd in #1056
    • โž• Add extension method to get Memory from MemoryStream, attempting to do it without allocation and update CMapParser by @BobLd in #1057
    • Miscellaneous minor changes by @BobLd in #1058
    • โšก๏ธ Optimize internal representation of IndirectReference by @BobLd in #1059
    • Skip creating IndirectReference in CrossReferenceTablePartBuilder when generationNumber is more than 65,535 by @BobLd in #1060
    • Check ColorSpace token as dictionary and fix issue #1061 by @BobLd in #1063
    • ๐Ÿ“œ Make classes related to page content parsing public by @BobLd in #1065
    • Prevent RunLengthFilter malicious OOM by @BobLd in #1068
    • ๐Ÿšš Use ReadOnlyMemory in ShowText operators and implement MoveToNextLineShowTextWithSpacing parsing by @BobLd in #1066
    • ๐Ÿ›  Fix bug in PngFromPdfImageFactory where softmask is wrongly referenced. by @orrest in #1069
    • ๐Ÿ›  Fix issue 926 by @EliotJones in #1072
    • writer util did not follow reference links #1032 by @EliotJones in #1073
    • ๐Ÿ›  fix #670 by ignoring duplicate endstream definitions by @EliotJones in #1075
    • skip single letter final blocks by @EliotJones in #1076
    • ๐Ÿ›  fix copying of sub-dictionary when keys collide by @EliotJones in #1077
    • ๐Ÿ‘‰ use correct bounding boxes for standard 14 glyphs #850 by @EliotJones in #1080
    • back-calculate first char if last char and widths present by @EliotJones in #1081
    • ๐Ÿ›  fix off-by-one and optimize brute force xref search #1078 by @EliotJones in #1079
    • fall back to times-roman as standard 14 font when lenient by @EliotJones in #1085
    • ๐Ÿ‘ allow reading to continue if encountering an invalid surrogate pair by @EliotJones in #1084
    • ๐Ÿ›  fix colorspace error when form xobject contains a transparency group by @EliotJones in #1088
    • ๐Ÿ‘Œ support bfrange having incorrect length in a cmap by @EliotJones in #1089
    • โž• add new action to run integration against common crawl corpus by @EliotJones in #1090
    • Update run_common_crawl_tests.yml by @BobLd in #1091
    • โœ‚ Remove decode parameter application from Stencil color space for consistency by @BobLd in #1092
    • โšก๏ธ Update hack for 1bpc + DeviceGray by @BobLd in #1093
    • when writing content to an existing page inverse any global transform #614 by @EliotJones in #1094
    • โž• add option to strip annotation by @EnraH in #492
    • check for cycles during indirect reference resolution by @jan-sutter in #1097
    • โšก๏ธ i merged a pr which broke the build, this updates the build to work by @EliotJones in #1099
    • โœ‚ remove debug asserts causing test failures by @EliotJones in #1098
    • โœ… Track IndirectReference instead of only ObjectNumber when checking for cycles during indirect reference resolution and add test by @BobLd in #1101
    • ๐Ÿšš move last uncovered operators to switch statement by @EliotJones in #1100
    • rework numeric tokenizer hot path by @EliotJones in #1104
    • ๐Ÿ‘‰ make link copying more tolerant when adding page by @EliotJones in #1103
    • ๐Ÿ– handle additional broken pdf files in the common crawl set by @EliotJones in #1108
    • โšก๏ธ update readme to avoid people using page.Text or asking about editing docs by @EliotJones in #110...
  • v0.1.10 Changes

    March 08, 2025

    What's Changed

    • ๐Ÿ›  Fix GetTextOrientation by cleanly checking if rotation is divisible by 90 and fix #913 by @BobLd in #914
    • โž• Add early version of BrowserSystemFontLister by @BobLd in #920
    • โœ‚ Remove list from FileTrailerParser.GetStartXrefPosition() by @BobLd in #922
    • Reorganise Filters and make them public by @BobLd in #925
    • ๐Ÿ‘Œ Support decrypting V4/R4 files with AESV2 and no Length property by @Greybird in #924
    • ๐Ÿ‘‰ Use pdfScanner in ReadVerticalDisplacements and fix #693 and return 0โ€ฆ by @BobLd in #928
    • 0๏ธโƒฃ Default page number to 0 in ExplicitDestination when the Dest has no page number and fix #736 by @BobLd in #930
    • ๐Ÿšš Move Paths, GetAnnotations() and GetOptionalContents() outside of ExperimentalAccess and mark Experimental class and reference as obsolete by @BobLd in #931
    • โฌ†๏ธ Upgrade tests project NuGet packages by @BobLd in #932
    • โšก๏ธ Optimize cross reference object offset validation by avoiding nested loop by @madelson in #935
    • Revive trimming/AOT analysis by @madelson in #939
    • โš  Stop treating Warnings as Errors by @BobLd in #941
    • ๐Ÿ– Handle alternate Unicode name representation cXXX and fix #943 by @BobLd in #944
    • ๐Ÿ– Handle odd ligatures names and fix #945 by @BobLd in #946
    • โšก๏ธ Update additional glyph list to latest from PDFBox by @BobLd in #948
    • ๐Ÿ†• New GetText() option: NegativeGapAsWhitespace by @Kizaemon in #952
    • ๐Ÿ›  Fix for IndexOutOfRangeException exception by @GrabzIt in #955
    • ๐Ÿ›  Fix "Nightly Release" pipeline following csproj changes by @BobLd in #957
    • ๐Ÿ“œ Do not throw exception when lenient parsing in ON in CrossReferenceParser and fix #959 by @BobLd in #961
    • ๐Ÿ‘Œ Improve UnwrapIndexedColorSpaceBytes by @BobLd in #962
    • ๐Ÿ›  Fix out of range exception in AnnotationProvider by @BobLd in #963
    • Return a copy of the ArrayPoolBufferWriter buffer in Ascii85, AsciiHex and RunLength filters and fix #964 by @BobLd in #965
    • ๐Ÿ‘‰ Make ColorSpaceDetails.BaseNumberOfColorComponents public to allow for external image factories by @BobLd in #966
    • ๐Ÿ‘Œ Improve GlyphList by @BobLd in #967
    • โœ… Properly handle ZapfDingbats font for TrueTypeSimpleFont and add tests by @BobLd in #969
    • ๐Ÿšš Execute RemoveStridePadding in place when possible by @BobLd in #968
    • โž• Add HexToken case in OptionalContent parsing by @simonedd in #971
    • โšก๏ธ Update UglyToad.PdfPig.ConsoleRunner target framework to net8 by @BobLd in #972
    • Do not throw error on Pop when stack size is 1 in lenient mode and fix #973 by @BobLd in #974
    • ๐Ÿ›  Fix warnings about "type 'K' cannot be used as type parameter 'TKey' in the generic type or method 'Dictionary<TKey, TValue>'" by @BobLd in #976
    • ๐Ÿ”จ Refactor XObjectFactory by @BobLd in #977
    • โšก๏ธ Update UnpackComponents() to account for 1bpc + DeviceGray (hack for Jbig2) by @BobLd in #978
    • CcittFaxDecodeFilter: do not check for input length, invert bitmap with ref byte and fix #982 by @BobLd in #983
    • โž• Add JPX bits per component decoding by @BobLd in #986
    • Issues/987 by @BobLd in #990
    • ๐Ÿ‘‰ Make DecodeParameterResolver class public by @BobLd in #993
    • โšก๏ธ Update Microsoft and SkiaSharp NuGet packages by @BobLd in #994
    • โšก๏ธ Update Microsoft NuGet packages for UglyToad.PdfPig.Package by @BobLd in #996
    • Resolve image data (implementation from @kasperdaff) by @BobLd in #998
    • Pass IFilterProvider to IFilter.Decode() and handle null in PdfExtensions.Resolve() by @BobLd in #999
    • ๐Ÿ‘Œ Improve GetExtendedGraphicsStateDictionary() and StackDictionary.TryGetValue() by @BobLd in #1004
    • ๐Ÿ‘ Better handle integer overflow in DocstrumBoundingBoxes by @BobLd in #1005
    • ๐Ÿ”– version 0.1.10 by @BobLd in #1006
    • Update run_integration_tests.yml by @BobLd in #1007

    ๐Ÿ†• New Contributors

    Full Changelog : v0.1.9...v0.1.10

  • v0.1.5 Changes

    May 09, 2021

    ๐Ÿ›  Some more bug-fixes:

    • ๐Ÿ›  Fix for object streams in files which require brute force searching.
    • ๐Ÿ– Handle NullToken presence when creating documents.
    • ๐Ÿ‘Œ Support for PDFs where the filters are defined as indirect references (against specification).
    • ๐Ÿ‘Œ Support for CMYK when generating PNG images from IPdfImage.
    • ๐Ÿ‘Œ Support for indexed ColorSpaces where palette is stored in a string.
    • ๐Ÿ– Handle UTF16 strings in encrypted document dictionaries.
    • ๐Ÿ“‡ Handle documents with a XMP metadata stream instead of an information dictionary.
    • ๐Ÿ‘ CCITTFaxDecode filter support.
    • 0๏ธโƒฃ Tweaks to DefaultWordExtractor to try and detect word gap size based on preceding text instead of a global gap threshold.

    0๏ธโƒฃ Note that changes to DefaultWordExtractor may change the output of calls to Page.GetWords() in this version.