Repository navigation
FreePDF 7.8.0
FreePDF 7.8.0
FreePDF 7.8.0 opens damaged files that viewers open, fixes MigraDoc documents
that crashed or never finished rendering, and keeps PDF/A files conforming: CID
fonts get the CIDSet PDF/A-1 requires, and the XMP metadata of generated and
opened files agrees with the document information.
Packages
io7.FreePDFhttps://www.nuget.org/packages/io7.FreePDF/7.8.0io7.FreePDF.Layouthttps://www.nuget.org/packages/io7.FreePDF.Layout/7.8.0io7.FreePDF.Gdihttps://www.nuget.org/packages/io7.FreePDF.Gdi/7.8.0io7.FreePDF.Layout.Gdihttps://www.nuget.org/packages/io7.FreePDF.Layout.Gdi/7.8.0io7.FreePDF.Wpfhttps://www.nuget.org/packages/io7.FreePDF.Wpf/7.8.0io7.FreePDF.Layout.Wpfhttps://www.nuget.org/packages/io7.FreePDF.Layout.Wpf/7.8.0
dotnet add package io7.FreePDF --version 7.8.0
dotnet add package io7.FreePDF.Layout --version 7.8.0
New
- Rebuilding unreadable cross-reference information. A file whose
cross-reference table or stream cannot be read (a wrongstartxref, offsets
that point elsewhere, a missing table, a damaged cross-reference stream) is
rebuilt from its objects, as viewers do, instead of being refused. The newest
copy of each object wins, object streams supply their objects (not in
encrypted files), and the trailer entries come from the newest dictionary that
names a/Root. The work grows linearly with the file size.Appendmode
still refuses a rebuilt file.
Fixed
- Reading files.
endstreamis found past a padded or mis-sized/Length(IBM i invoices,
Bluebeam); such files failed with "Cannot retrieve stream length".- An update that gives an object the number of an older cross-reference stream
no longer loses that object (a form could vanish). - Importing a page whose
/Rotateor boxes are indirect objects (pdf-lib)
works withAddPage,InsertRangeandAppendPages. - A distant
startxref, huge object numbers, a missingendobj, a stray),
an LZW special case and streams with short reads no longer stop a file. - Names in content streams in legacy code pages (Shift-JIS, GBK) match their
resource keys.
- MigraDoc.
- Justified paragraphs with a tab and soft hyphens no longer render forever,
and justified lines with tabs or fields are spaced correctly. - Bordered paragraphs at a page bottom, a
KeepWithpast the table end and
charts without axis settings no longer throw; charts without X axis settings
no longer draw at NaN coordinates. - Rows taller than a page, still cut off, now log a warning.
- Justified paragraphs with a tab and soft hyphens no longer render forever,
- PDF/A and metadata.
- PDF/A-1 CID fonts get the CIDSet veraPDF requires (rule 6.3.5-3).
- Generated XMP escapes text, keeps line breaks, leaves out empty dates and no
longer throws on information entries that are not text. SetPdfAon an opened file with its own XMP updates that XMP in place with
the PDF/A identification and the document information, sets the Print flag
on annotations and removes PDF/A-1 page transparency groups.- A
Modifysave of an opened file whose XMP claims PDF/A keeps it conforming:
the XMP follows the changed document information, annotations get the Print
flag, and no page transparency group is added.
Upgrading from 7.7.0
Update all FreePDF packages to 7.8.0 together and rebuild; the assembly version
is now 7.8.0.0. The public API is unchanged except for one addition,
PdfFontDescriptor.Keys.CIDSet. Behaviour changes to check:
- Damaged files that threw
PdfReaderExceptionmay now open through the
rebuild;Appendmode still throws for them. - A recovered stream length no longer includes the line break before
endstream;CNamevalues with bytes above 127 are decoded text. - MigraDoc: justified lines with tabs or fields can be spaced differently;
charts without X axis settings show a category axis; column, line and area
charts without Y axis settings render without a value axis. - Opened files whose XMP claims PDF/A: a
Modifysave rewrites the XMP packet,
sets annotation Print flags and handles page transparency groups as above. - Generated XMP leaves out empty dates;
DocumentMetadataInforeturns "" for
entries that are not text and decodes PDFDocEncoding strings.
Validation
All 7.7.0 release gates apply, plus:
- 115 new regression tests, 838 in all.
- The 31 sample files attached to the upstream issues open as before or better;
the Bluebeam files of #186 and #216 open, and #213 keeps its form. - A differential fuzz of 4,000 damaged files: the final reader opens 8 more than
the previous review round's build and none fewer. - veraPDF passes PDF/A-1b output with CID subsets and complete fonts, mixed
text, re-saved and converted opened files and XMP edge cases; 2b, 3b (Factur-X)
and ua1 output pass too. - MigraDoc: 2,882 scenarios compared before and after; of 1,332 justified
scenarios with tabs, fields and soft hyphens, 7.7.0 hung on 172 and 7.8.0 on
none. - Independent reviews (five rounds for the reader, two for PDF/A and metadata,
one for MigraDoc) found issues, including regressions in earlier rounds'
fixes, which were fixed before release. - A clean install from nuget.org, with an empty package cache: a damaged file (wrong
startxref, a padded stream) opens through the rebuild; a PDF/A-1b document with CID text and the title "Profit & Loss <2026>", the same file re-saved inModifymode with a new title, and a plain file with its own XMP and a link made PDF/A-1b after opening all pass veraPDF 1b; column, line and bar charts without axis settings render without NaN coordinates; a justified list with soft hyphens and aKeepWithpast the table end finishes. The earlier install checks still pass: pyHanko judges the certified form after filling, the countersigned encrypted form and the signed existing field VALID, and the edits of the signed nested page tree keep the signature valid in pdfsig.
The attached packages are the verified CI artifacts from source revision d6109ab76417a038ded37dc4d2a7bf8ae61afc18, and the same files that were
uploaded to NuGet.org. SHA256SUMS and validation.json record their hashes and package-install evidence.
NuGet.org adds its repository signature, so a package downloaded from NuGet.org has a different hash from the attached file.
CI: https://github.com/io7/FreePDF/actions/runs/42086912044 (core),
https://github.com/io7/FreePDF/actions/runs/42086912350 (packages/API/independent checks),
https://github.com/io7/FreePDF/actions/runs/42086912382 (comparisons),
https://github.com/io7/FreePDF/actions/runs/42109398401 (NuGet publication).