magelan/htmltopdf-bundle
Symfony bundle for converting HTML markup into PDF documents, wrapping an HTML-to-PDF library with service configuration so you can generate downloadable or streamed PDFs from templates and controllers with minimal setup.
*Bundle suffix, DependencyInjection/Extension + compiler-pass autoconfiguration). That is a fact, not a tagging detail. If the product runs on Laravel, the correct PM decision is to close the evaluation, not to sponsor an integration project. If the product runs on Symfony, it survives to the next gate.PdfRenderer interface from day one. That decision keeps the exit cheap and survives whichever renderer wins.Consider it only when all of the following hold:
Look elsewhere when:
spatie/laravel-pdf, a DomPDF/Snappy wrapper, or a Gotenberg/Chrome client). Do not spend roadmap time on a framework mismatch; the "Laravel" label here is an indexing artifact.To executives (30 seconds): "There's a small open-source add-on that could let us ship PDF export quickly for internal use. It's a thin wrapper around a rendering engine we'd have to operate anyway, and it has no community adoption — zero stars, zero dependents. So I'm recommending we treat it as a prototype accelerator, not a product dependency. If we use it, we budget a follow-up to move to a supported renderer before anything customer-facing touches it, and we build behind our own interface so that swap is cheap."
To engineering (the real message): "Framework check first — this is a Symfony bundle, not a Laravel package: no service provider, no facade, no auto-discovery. If we're on Laravel, we consume only the underlying renderer library and wire it ourselves; the bundle is reference code. If we're on Symfony, it's a legitimate spike.
Either way, the operating assumptions are: zero stars / zero dependents means we are the only operator — no free bug reports, no security review, no maintenance signal. So: read the source, confirm which renderer it wraps and whether that renderer is still alive, resolve the composer graph in a throwaway branch (any need for --ignore-platform-reqs is a stop signal), pin the exact commit, and vendor it if it earns a second sprint.
Then isolate it: put a PdfRenderer interface in the domain layer, implement this as one candidate behind it, and keep a maintained alternative (Browsershot, KnpSnappy, Gotenberg) as a swap-in. Also assume rendering must be queued, not synchronous on the request path — it's CPU- and memory-bound, and oversized documents are where it breaks. Capture binary paths, font packages, and sandbox flags in a runbook at pilot time."
Recommendation: No-go as a production dependency; conditional go as a time-boxed internal spike — gated on Symfony stack fit, internal-only output, a named internal owner, a pinned version, and an adapter boundary that keeps the exit to a maintained renderer a one-file change. The zero-star signal isn't disqualifying by itself; combined with the framework mismatch, it shifts the entire burden of proof onto the adopting team, and the PM should say so out loud before anyone writes code.
How can I help you explore Laravel packages today?