Skip to content

v0.3.0

Choose a tag to compare

@roukmoute roukmoute released this 13 Oct 14:14
· 92 commits to master since this release

The Adobe PDF 1.7 extension level 3 supplement is now preserved in the repository and connected to the object model through exact document, page and SHA-256 references. PHP 8.3 remains the minimum, with CI on 8.3, 8.4 and 8.5.

  • All 61 dictionary tables are represented by 404 generated dictionary, immutable definition and entry components, composing existing ISO definitions. The complete source inventory separates format prescriptions, Acrobat behavior, external standards and documented inconsistencies.
  • Explicit developer extensions, Bates pagination, rich-media window dimensions, 3D unit mapping and barcode preparation/module-width objects. A new tutorial explains an executable PDF with an Adobe declaration and Bates numbers.
  • Explicit historical R=5 AES-256 security handler, frozen Unicode 3.2 SASLprep, credentials and writer integration; independent qpdf/pypdf and Unicode checks. OpenSSL is required only for the optional AES backend. Separate R=2–R=4 key derivation and ordered public-key digest primitives do not add CMS processing or other encrypted writers.
  • Both original Adobe PDFs are downloadable from the generated documentation and verified against their source hashes. Future Adobe PDFs supplied to the project must also be retained byte for byte.
  • Optional reader, image and font packages 0.1.1 accept core ^0.2 || ^0.3; the core has no runtime dependency on them.

Validation: 420 tests / 12,093 assertions on PHP 8.3–8.5, PHPStan level 8, coding standards, dependency audit, 24,744 Unicode preparation cases, 152 independent key derivations, generated PDF checks and a verified site with 2,709 components and 14 PDF examples.

Compatibility: extension declarations must be direct throughout their graph, as required by ISO 7.12.1. Replace indirect declarations with direct dictionaries. See the changelog for migration and scoped validation details.

Scope: R=5 is a historical interoperability mechanism, not a modern security default; its password derivation is old and AES-CBC does not authenticate contents. No 3D/media rendering, XFA engine, geodetic transformation, cryptographic signing, barcode symbology codec or encrypted incremental update is claimed.

Supplement guide · Tutorial and PDF result · All components