The PDF press,
rebuilt.
Converts web pages and office documents to PDF, then remediates, signs and delivers them in the same request. Validates any PDF against PDF/A, PDF/UA and Factur-X.
- Pure-Go PDF engine
- 26 PDF stages
- PDF/A · PDF/UA · Factur-X
Without paperSize, Chromium prints on Letter. Or set paperWidth and paperHeight yourself, in pt, px, in, mm, cm or pc.
297 × 420 mm
Print anything. Prove it.
Validates any PDF against PDF/A, PDF/UA and Factur-X, clause by clause, and remediates what fails.
litho, a pure-Go PDF processor, takes over from QPDF, pdfcpu, pdftk and ExifTool, the tools behind Gotenberg 8's PDF engines. PDF/A and PDF/UA rules carry veraPDF's clause numbers.
6.1.2The file header shall begin at byte zero and shall consist of "%PDF-2.n" followed by a single EOL marker.test 1 · header "%PDF-1.7" does not match required pattern×16.2.4.3DeviceRGB shall only be used if a device independent DefaultRGB colour space has been set.test 2 · page 1: DeviceRGB used without DefaultRGB or RGB OutputIntent×96.7.2.1The document catalog dictionary of a conforming file shall contain the Metadata key.test 1 · catalog missing or invalid /Metadata stream×1
The JSON answer says "compliant": false, with the specification, clause, test number, context and severity of each violation.
PDF/A-4, validated
The validate route takes the profile, and a password for encrypted files. It answers JSON, one report per file.
Factur-X, ZUGFeRD. XRechnung too.
Send the invoice with its Cross-Industry Invoice XML: one remediate stage returns a PDF/A-3 hybrid invoice.
Embedded per Factur-X 1.07.2 and ZUGFeRD 2.3.2. Already hybrid? Leave out the XML: the same stage repairs the existing Factur-X. Validation adds Schematron warnings that do not fail conformance on their own.
Asynchronous, straight to S3.
One request in. The PDF lands in your bucket, an event tells you. Your server never touches the bytes.
Gotenberg fetches the source from a presigned GET URL and answers 204. It then uploads the PDF to a presigned PUT URL and sends an event to your events URL.
PDF and screenshots
via lok, LibreOfficeKit
remediate · pure Go
- 1Your app → GotenbergPOST /forms/… · Gotenberg-Webhook-*
- 2S3 · in.docx → GotenbergGET · downloadFrom
- 3Gotenberg → Your app204 No Content · once downloaded
- 4Gotenberg → S3 · out.pdfPUT · Gotenberg-Webhook-Url
- 5Gotenberg → Events URLevent · Gotenberg-Webhook-Events-Url
- 6Gotenberg → Your collectorOTLP · OpenTelemetry
26 stages write. 5 routes read.
Write stages change the PDF and send it back. Read routes leave it as it is and answer JSON.
Gotenberg checks the order of the stages before it runs them: decrypt comes first, render last, and nothing rewrites a signature.
Runs where you run.
Nine images on five architectures.
The full image carries Chromium and LibreOffice; the -chromium and -libreoffice images carry one of them. AWS Lambda and Cloud Run get their own images.
| gotenberg/gotenberg | amd64 | arm64 | arm/v7 | 386 | ppc64le |
|---|---|---|---|---|---|
| :9 | |||||
| :9-chromium | |||||
| :9-libreoffice | |||||
| :9-aws-lambda | |||||
| :9-chromium-aws-lambda | |||||
| :9-libreoffice-aws-lambda | |||||
| :9-cloudrun | |||||
| :9-chromium-cloudrun | |||||
| :9-libreoffice-cloudrun |


