tecnickcom/tc-lib-pdf-filter
Pure-PHP decoder for standard PDF stream filters, including FlateDecode, LZWDecode, RunLengthDecode, ASCIIHexDecode, ASCII85Decode, CCITTFaxDecode, DCTDecode, JPXDecode and JBIG2Decode. Chain multiple filters in sequence, with typed exceptions for invalid or unknown filters. Requires PHP 8.2+ and zl...
qpdf/Ghostscript CLI) before greenlighting — that is a cheap insurance policy and should not block the feature.Adopt when:
zlib, and LGPL v3 (shown as NOASSERTION on Packagist — confirm against the LICENSE file) is compatible with your distribution and linking model. This is a legal review item, not a footnote, especially for on-prem or embedded distribution.Look elsewhere when:
smalot/pdfparser, setasign/FPDI, or a rendering service; this package is the wrong layer.qpdf, Ghostscript) rather than a stream-filter decoder, and keep that distinction out of the product promise.qpdf) run as a queued job would be cheaper to operate than a pure-PHP decode path in request-time workers.Executives: "This is a small, focused PHP component that unlocks one specific capability — reading the encoded contents of PDFs that customers and partners send us. It removes a genuinely fiddly piece of engineering from our critical path and lets us ship [document ingest / archival / triage] on the current roadmap instead of a custom build. It is maintained by the same team behind TCPDF, which is installed over 100 million times. Cost is near zero; the real investment is the small amount of pipeline work around it, which we'd have to do with any tool. Risk is contained by a documented fallback to an off-the-shelf CLI."
Engineering: "A well-scoped decoder for standard PDF stream filters — Flate, LZW, RunLength, ASCII85/Hex, CCITT, DCT, JPX, JBIG2 — with a clean decodeAll() entry point and typed exceptions. Pure PHP, single dependency (zlib), PHP 8.2+. Wrap it in a service class, drive it from queued jobs, and stream large files. Do not treat it as a PDF library: it does not parse documents, extract text, or handle password-protected files. Pin to ^2.11, review release diffs before bumping, and keep an internal fork path open given the low external contributor count."
Legal/Compliance: "Packagist reports the license as NOASSERTION while the repository states GNU LGPL v3 — we should confirm the authoritative text before adoption, because LGPL obligations depend on how we link and distribute (SaaS-only use is materially different from shipping an on-prem binary). Also note what this does not do: it decodes stream filters and is not a document decryption tool, so it should not be presented as a security or e-discovery control on its own."
How can I help you explore Laravel packages today?