Skip to content

FreePDF 7.9.0

Choose a tag to compare

@christianz christianz released this 10 Nov 17:21
b65e985

FreePDF 7.9.0

FreePDF 7.9.0 draws the barcodes invoices, labels and tickets need (QR, Data
Matrix, Code 128, EAN and UPC) as vector shapes, renders MigraDoc barcode
elements, and creates fillable form fields, so the whole form cycle is covered:
create, fill, flatten, merge, sign and certify.

Packages

dotnet add package io7.FreePDF --version 7.9.0
dotnet add package io7.FreePDF.Layout --version 7.9.0

New

  • Barcodes as vectors.
    • CodeQR: QR model 2, versions 1 to 40, levels L/M/Q/H, smallest version
      chosen to fit, UTF-8 with ECI 26 for text that is not ASCII, one path.
    • CodeDataMatrix: a new ECC 200 encoder written from ISO/IEC 16022, all 30
      sizes, ASCII and Base256, ECI and GS1 FNC1, vector modules in every build.
    • Code128 with shortest code-set choice and GS1-128 (Code128.Fnc1);
      Ean13, Ean8 and UpcA with check digits and guard bars.
  • MigraDoc renders barcodes. Barcode elements were silently left out of the
    PDF; they now draw 2 of 5, Code 39, Code 128, EAN-13, EAN-8, UPC-A, QR and Data
    Matrix, with AddBarcode() on sections, cells, text frames, headers and
    footers.
  • Creating form fields. PdfForm.AddTextField, AddCheckBox,
    AddRadioButtonGroup, AddComboBox, AddListBox and AddSignatureField,
    styled with PdfFormFieldStyle, with appearances every viewer shows.
  • Certifying a document. DigitalSignatureOptions.Certification writes a
    certification signature (DocMDP) permitting no changes, form filling, or form
    filling and comments; Append mode enforces it. Signature fields whose seed
    value names the signature type (/MDP) can now be signed.

Fixed

  • Text beyond U+FFFF (emoji, mathematical letters) is extracted correctly; large
    ToUnicode maps are split into sections of at most 100.
  • MigraDoc: default tab stops reach the right edge of the text, and a blank after
    a tab no longer breaks the line.
  • Data Matrix: the inherited encoder drew nothing in the Core build, lost
    characters in C40, Text and X12, and wrote unreadable EDIFACT. It appears to
    derive from the GPL-licensed iec16022 library and carried no notice of that
    origin, so it is removed and replaced (see PROVENANCE.md).
  • 1-, 2- and 4-bit grayscale and 2-bit palette PNGs load in the Core build.
  • DigitalSignatureOptions.ContactInfo is written; Code 39 refuses an
    apostrophe; DDL escapes barcode codes.

Upgrading from 7.8.0

Update all FreePDF packages to 7.9.0 together and rebuild; the assembly version
is now 7.9.0.0. The public API only gains members. Behaviour changes to check:

  • MigraDoc documents with Barcode elements now draw them: an invalid code makes
    rendering throw, and with TaggedPdf a barcode needs AlternativeText or
    Decorative.
  • Data Matrix C40, Text, X12 and EDIFACT requests are written in ASCII
    encodation, so a fixed size can now be too small.
  • A signature field with a seed value /MDP is signed when Certification
    matches it and refused with an ArgumentException when it does not.
  • MigraDoc lines with tabs near the right edge, or a blank after a tab, can be
    laid out differently.

Validation

All 7.8.0 release gates apply, plus:

  • 124 new regression tests, 962 in all.
  • zxing-cpp, as an external decoder only, read 1,004 QR symbols (every version,
    level and mode at full capacity), 212 Data Matrix symbols (all 30 sizes), the
    linear codes and MigraDoc barcodes; a strict checker written from ISO/IEC 16022
    passed 305 Data Matrix symbols.
  • MuPDF and pypdf read every created field in new, filled and reopened files.
    pyHanko 0.6.0 judged certifications at levels 1 to 3 VALID, and filling text
    fields, check boxes and combo boxes after levels 2 and 3 permitted. Its
    default policy rejects selecting a radio button after a certification, also
    when pypdf writes the same minimal update; the support policy lists it.
  • Independent reviews (two rounds for barcodes, one each for forms and the text
    fixes) found issues, including a regression in a tab fix, which were fixed
    before release.
  • A clean install from nuget.org, with an empty package cache: zxing-cpp decodes
    every code drawn with XGraphics (QR in ASCII and UTF-8, Data Matrix square and
    rectangular, Code 128, GS1-128, EAN-13, EAN-8, UPC-A) and every MigraDoc barcode
    (QR, Data Matrix, EAN-13, Code 128 in a table cell); a form with every field
    type, certified at levels 1, 2 and 3, is VALID in pyHanko, filling a check box
    and a combo box afterwards stays VALID at levels 2 and 3, and level 1 refuses the
    fill; poppler extracts emoji drawn with DejaVu Sans; a center tab in a justified
    MigraDoc line keeps its gap. The same check passed on the CI packages before
    publication.

See the release notes in docs/releases/7.9.0.md and the support policy.

The attached packages are the verified CI artifacts from source revision b65e9859bbd8303cbb34f351f2a17cb4dc629058, 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/42854130454 (core),
https://github.com/io7/FreePDF/actions/runs/42854129991 (packages/API/independent checks),
https://github.com/io7/FreePDF/actions/runs/42854129600 (comparisons),
https://github.com/io7/FreePDF/actions/runs/42856275483 (NuGet publication).