v0.1.0
Initial release.
Added
- Runtime loading of PDFium via
libloadingwith a documented discovery
chain (PDFIUM_LIB_PATH, executable directory,target/pdfium, system
loader), explicit-path loading, and eager symbol resolution — an
incompatible library fails at load time with
LoadError::MissingSymbol. - Process-wide singleton with every FFI call serialized through one
global mutex; all handle types areSend + Sync. - Document loading from memory or file with typed errors for encrypted
(PasswordRequired/IncorrectPassword/UnsupportedSecurity) and
malformed (InvalidPdf) input; metadata, permissions, PDF version,
security handler revision, page labels, and cheap per-page size
queries. - Page rendering to owned pixel buffers: scale / DPI / width / height /
fit / exact sizing,Bgra8/Rgba8/Bgr8/Gray8formats,
background colors, extra rotation, annotation and form-field layers,
anti-aliasing toggles, and a pre-allocation output-size ceiling
(RenderConfig::max_output_bytes, default 1 GiB, enforced via
Error::RenderTooLarge). - Pixel/page coordinate mapping: every render carries a
PageTransform
(points and rects, both directions) derived from PDFium's own
device-to-page mapping;PdfPage::transform_forcomputes it without
rendering. - Text extraction with per-character geometry (unicode, tight and loose
bounds, baseline origin). - AcroForm field appearance rendering via an owned form-fill environment.
- Public
sysmodule exposing the raw function table, gated by the
documentedffi_lockserialization contract. - Binary acquisition tooling:
pdfium.lock.jsonpin
(chromium/7988, PDFium 153.0.7988.0) with sha256 verification,
cargo xtask fetch-pdfium, andcargo xtask repackagefor the
native-v*release archives.