| Hi HN, I'm Michał. I posted PDFBolt here about a year ago as a basic
HTML to PDF API. Since then I've been rebuilding it around the thing
that kept bugging me: every time a designer tweaked a layout,
it meant a code change, a deploy, and a prayer that nothing broke
in production. I wanted templates that live on the server and version
themselves, so my API calls stay the same when the layout changes. Try the editor, no sign-up. Open a sample report, change the data,
and download a real PDF:
https://pdfbolt.com/try Templates use Handlebars. Your API call sends a templateId + JSON data. You
update the template in the dashboard, your code never changes. Every
edit auto-creates a draft, and you publish when ready. You can browse
history and compare any two versions as rendered PDFs side by side.
The comparison shows rendered PDFs, not just code. A one-line margin tweak
can push a table onto the next page, and you won't catch that in code.
You can roll back with one click if something breaks. Right now template management lives in the dashboard. I'm working on
an API so coding agents can create and version templates programmatically. The part I went deepest on recently was compression. The compressor
samples every 10th pixel to classify each image as bitonal, grayscale,
or color, then picks an encoding per image. Bitonal gets CCITT Group 4
with Otsu's method for the threshold. Color and grayscale get JPEG.
Images with alpha channels get split into RGB (JPEG, lossy) and mask
(FlateDecode, lossless) via an SMask so edges stay sharp. Before any
of that, MD5 hashes of raw streams deduplicate identical images across
pages, and everything gets downscaled to target DPI. Four tiers: lossless, low, medium, high. A 23 MB product catalog with
photos dropped to 1.6 MB on high. Built on Apache PDFBox. I looked at Ghostscript but it's AGPL, which
doesn't work for a hosted SaaS. I also support PDF/X-1a and PDF/X-4 for print with RGB to CMYK
conversion and ICC profiles. Happy to talk about the color pipeline
in comments. Stack: headless Chromium via Playwright, Kotlin/Spring Boot, EU-hosted.
I don't store template data after rendering. Two-person team, bootstrapped. Revenue: https://trustmrr.com/startup/pdfbolt Free: 100 PDFs/month, no card Docs: https://pdfbolt.com/docs Ask me anything about compression internals, template versioning,
color pipeline, or whatever. |