PDF/A zur Archivierung
Mit pdf.pdfa ist ein Rendering eine PDF/A-Datei (ISO 19005), das Format für Dokumente, die sich auch in Jahren noch genauso öffnen sollen: Jede Schrift steckt in der Datei, Farben sind über ein Profil festgelegt, und nichts hängt vom Netz oder von einem Passwort ab. Formfeed wandelt das fertige PDF in die Stufe um, die Sie verlangen, PDF/A-2b oder PDF/A-3b, prüft die Datei vor der Auslieferung gegen die Regeln dieser Stufe und berichtet, was die Prüfung ergeben hat.
PDF/A ist ein Dateiformat. Ob Sie ein Dokument so aufbewahren, wie ein Gesetz es von Ihnen verlangt, ist eine Frage davon, wie Ihr Archiv geführt wird, nicht der Datei. Was das Format nicht regelt sagt, wo diese Grenze verläuft.
Was Sie erhalten
- Ein PDF/A in der Stufe, die Sie wählen.
"2b"oder"3b", für jedes PDF, das die Vorlage rendert, oder für eine einzelne Anfrage. - Vor der Auslieferung geprüft. Die umgewandelte Datei wird von veraPDF gegen die Regeln ihrer Stufe geprüft, dem quelloffenen Validator der PDF Association und der Open Preservation Foundation. Die Datei, die Sie erhalten, ist die Datei, die geprüft wurde.
- Die Aussage nur mit dem Beleg. Eine Datei, die nicht besteht, wird nicht ausgeliefert, und auch kein gewöhnliches PDF an ihrer Stelle: Das Rendering schlägt fehl und nennt die Regeln. Es gibt keinen Modus, der eine ungeprüfte oder nicht bestandene Datei ausliefert.
- Ein Bericht zu jedem Rendering. Das Feld
pdfades Renderings nennt die Stufe, den Validator mit seiner Version und den Hash der Datei, die er geprüft hat. - Jeder Plan, keine zusätzliche Einheit.
Das funktioniert für die PDF-Ausgabe von HTML-Vorlagen, von Ad-hoc-Renderings mit html oder url und von Word- und PowerPoint-Vorlagen, einzeln und im Batch, synchron und asynchron.
Welche Stufe
| Stufe | Was sie erlaubt | Wählen Sie sie, wenn |
|---|---|---|
PDF/A-2b | Alles, was ein gerendertes Dokument braucht, Transparenz eingeschlossen. Angehängte Dateien müssen selbst PDF/A sein. | das Archiv oder der Empfänger PDF/A-2 verlangt, oder Sie keine Anhänge in Ihrem Archiv haben wollen. |
PDF/A-3b | Dasselbe, und jede Datei, die an das PDF angehängt ist. Eine E-Rechnung ist ein PDF/A-3b. | das Archiv PDF/A-3 annimmt, oder das Dokument eine E-Rechnung ist. true meint diese Stufe. |
Das b steht für die Basisstufe: Die Datei sieht überall gleich aus, wo sie geöffnet wird. Die Stufen u (aller Text lässt sich als Unicode kopieren) und a (getaggt und barrierefrei) werden nicht angeboten. Für eine Datei, die ein Screenreader lesen kann, setzen Sie pdf.ua daneben. PDF/A-1 wird ebenfalls nicht angeboten: Es verbietet Transparenz, die der Browser für Schatten, opacity, rgba-Farben und Bilder mit Alphakanal schreibt.
Was die Prüfung belegt
conformant: true heißt: Die ausgelieferte Datei hat jede Regel ihrer PDF/A-Stufe bestanden, die veraPDF prüft. Das betrifft die Datei selbst: Jede Schrift ist eingebettet, Farben tragen ein Ausgabeprofil, die Metadaten nennen die Stufe, nichts ist verschlüsselt, kein Inhalt hängt von etwas außerhalb der Datei ab, und Anhänge sind von einer Art, die die Stufe erlaubt.
Es heißt nicht:
- dass der Inhalt stimmt. Ein Bericht mit einer falschen Zahl besteht;
- dass sich das Dokument vorlesen lässt. Das ist PDF/UA, eine eigene Norm;
- dass die Anforderungen eines Gesetzes an die Aufbewahrung erfüllt sind. Siehe Was das Format nicht regelt.
Formfeed ist ein Werkzeug, das das Format schreibt und prüft. Es gibt keine Rechtsberatung: Welche Dokumente Sie in welchem Format wie lange aufbewahren müssen, klären Sie selbst.
Einschalten
pdf.pdfa ist eine Einstellung wie jede andere: Sie wird mit der Version der Vorlage gespeichert und mit den Einstellungen der Anfrage zusammengeführt, wobei die Anfrage gewinnt.
| Wert | Bedeutung |
|---|---|
false oder null | Aus, die Voreinstellung. |
"2b" | Jedes PDF des Renderings ist ein PDF/A-2b. |
"3b" oder true | Jedes PDF des Renderings ist ein PDF/A-3b. |
Jeder andere Wert in einer Anfrage, etwa "1b", "3u" oder ein Objekt, antwortet mit 400 invalid_request; in einer Vorlage gespeichert, legt ein solcher Wert nichts fest, und formfeed validate meldet ihn. Er gilt nur für die PDF-Ausgabe.
In der Vorlage
Öffnen Sie im Editor die Seiteneinrichtung, gehen Sie zum Abschnitt Dokument und wählen Sie unter PDF/A zur Archivierung eine Stufe: Aus, PDF/A-2b oder PDF/A-3b. Die Zeile unter der Auswahl sagt, was die Stufe bedeutet. Speichern und veröffentlichen Sie die Version wie bei jeder anderen Einstellung. In einer Vorlage, die eine E-Rechnung erzeugt, lässt sich PDF/A-2b nicht wählen, denn das XML der Rechnung ist ein Anhang, den PDF/A-2 nicht erlaubt.
Die Vorschauen Fließend und Seiten des Editors sind HTML und kein PDF/A. Ein Echtes Rendering wandelt die Datei um, prüft sie und zeigt das Urteil unter seinem Ergebnis.
In einem Projekt steht die Festlegung in der settings.json:
{
"pdf": {
"metadata": { "title": "Jahresbericht {{ report.year }}" },
"pdfa": "2b"
}
}
In der Anfrage
curl https://api-eu.formfeed.dev/v1/renders \
-H "Authorization: Bearer $FORMFEED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"template": "annual-report",
"data": { "report": { "year": 2026 } },
"settings": { "pdf": { "pdfa": "2b" } }
}'
"pdfa": false in einer Anfrage schaltet für diese Anfrage ab, was die Vorlage festlegt.
Was scheitert und warum
Eine Datei, die nicht besteht, lässt das Rendering mit 500 pdfa_conversion_failed scheitern. Nichts wird ausgeliefert und nichts berechnet; das Problem und das fehlgeschlagene Rendering tragen den Bericht mit den verletzten Regeln. Wiederholen hilft nicht: Dasselbe Dokument scheitert auf dieselbe Weise.
Dokumente, die Formfeed aus HTML rendert, bestehen so, wie sie sind: Am 31. Oktober 2026 wurde jedes PDF-Beispiel auf formfeed.dev ein gültiges PDF/A-2b und PDF/A-3b, bis auf das passwortgeschützte und die E-Rechnung, die bereits ein PDF/A-3b ist, mit dem Text-Wasserzeichen und der Markierung von Test-Renderings, deren Schriften eingebettet sind. Was scheitert, kommt von anderswo:
| Regel | Was sie bedeutet | Woher es kommt | Was zu tun ist |
|---|---|---|---|
6.2.11.4.1-1 | Eine Schrift wird verwendet, die nicht in der Datei eingebettet ist. | Ein mit post.merge_after angehängtes PDF, das eine Schrift nennt, ohne sie mitzubringen, wie viele Programme es mit Helvetica oder Times tun. | Erzeugen Sie dieses PDF neu mit eingebetteten Schriften, oder hängen Sie es an ein Rendering ohne pdf.pdfa an. |
6.2.11.5-1 | Ein eingebettetes Schriftprogramm widerspricht den Breiten im PDF. | Der Office-Konverter schreibt solche Schriften für OpenType-Schriften mit CFF-Konturen; bei uns ist das die Schrift für chinesischen, japanischen und koreanischen Text in einer Word- oder PowerPoint-Vorlage. | Es gibt keine Reparatur: Das Schriftprogramm müsste neu geschrieben werden. Rendern Sie solchen Text aus einer HTML-Vorlage, oder lassen Sie pdf.pdfa dafür aus. |
6.8-5 | Eine an das PDF angehängte Datei ist selbst kein PDF/A-1 oder PDF/A-2. | Nur bei "2b": eine an das Dokument angehängte Datei, die selbst kein PDF/A ist, etwa das XML einer E-Rechnung. | Wählen Sie "3b", das jede angehängte Datei annimmt. Formfeed entfernt nie einen Anhang, damit eine Datei besteht. |
Jede Regel ist eine Klausel von ISO 19005 mit der Testnummer von veraPDF. messages nennt in location das Objekt des PDFs, und die Fehlerseite von pdfa_conversion_failed führt den Rest auf. Eine Datei, die der Konverter gar nicht lesen konnte, trägt statt eines Berichts reason. Senden Sie für alles, was nicht in dieser Liste steht, die render_id an support@formfeed.dev: Ein Dokument, das Formfeed gerendert hat und nicht umwandeln kann, ist unsere Sache.
Der Bericht
Ein Rendering, das pdf.pdfa gesetzt hat, trägt pdfa:
"pdfa": {
"standard": "PDF/A-2b",
"conformant": true,
"validator": "veraPDF 1.30.2",
"id": "8f503142-6d7c-4e8f-a091-2c3d4e5f6071",
"versions": { "verapdf": "1.30.2", "pdfbox": "3.0.8" },
"pdf_sha256": "9f2c0e5d…",
"messages": []
}
| Feld | Bedeutung |
|---|---|
standard | PDF/A-2b oder PDF/A-3b. |
conformant | Die Datei hat jede Regel ihrer Stufe bestanden. Ein Rendering liefert nur dann eine Datei aus. |
validator | Der Validator und seine Version. Sein Regelwerk ändert sich zwischen Versionen, daher sagt der Bericht, welche geurteilt hat. |
id | Die eigene Kennung des Validators für diesen Bericht. |
versions | Die Versionen dessen, was die Datei umgewandelt und geprüft hat. |
pdf_sha256 | Der SHA-256 der geprüften Datei: die ausgelieferte Datei, wenn das Rendering gelungen ist, null, wenn keine Datei zurückkam. |
messages | Die verletzten Regeln, höchstens 50, jede mit severity, rule (Klausel und Testnummer), message und location (das Objekt des PDFs). Leer bei einer Datei, die bestanden hat. |
truncated | Vorhanden und true, wenn mehr Regeln verletzt sind, als messages enthält. |
pdfa ist null bei einem Rendering, das pdf.pdfa nicht gesetzt hat. Ein Rendering, dessen Datei nicht bestanden hat, behält es, und sein Problem trägt denselben Block.
Wo Sie es sehen:
- In der API: in der Antwort auf das Rendering, in
GET /v1/renders/{id}, in der Liste der Renderings und in den Webhook-Ereignissenrender.completedundrender.failed. - Mit
?output=binaryist die Antwort die Datei, und der HeaderX-Formfeed-PDF-Anennt die Norm, die sie bestanden hat, etwaPDF/A-2b. - In der App hat das Blatt des Renderings im Render-Protokoll einen Abschnitt PDF/A mit dem Urteil und, bei einer Datei, die nicht bestanden hat, den Regeln. Bericht (JSON) lädt den Bericht als Datei herunter. Ein Echtes Rendering im Editor zeigt denselben Abschnitt unter seinem Ergebnis.
- Auf der Kommandozeile gibt
formfeed renderes aus.
Bewahren Sie den Bericht bei der Datei auf. Er hält fest, an welcher Stufe die Datei gemessen wurde, von welchem Validator, und dass die Datei mit diesem Hash bestanden hat, an dem Tag, an dem sie erzeugt wurde.
Mit einer E-Rechnung
Eine E-Rechnung ist bereits ein PDF/A-3b: Das XML der Rechnung hängt an der Datei, und die Datei wird vor der Auslieferung gegen PDF/A-3b geprüft. Daher:
"3b"odertrueneben einer E-Rechnung ändert nichts an der Datei und wandelt nichts ein zweites Mal um. Das Rendering trägt einen Blockpdfa, der aus der eigenen Prüfung der E-Rechnung gebildet ist, sodass ein Feld für jedes Rendering beantwortet, ob es ein PDF/A ist."2b"neben einer E-Rechnung antwortet mit400 invalid_request, gleich wo beides festgelegt wurde: Das XML ist ein Anhang, den PDF/A-2 nicht erlaubt.- Eine E-Rechnung, deren Umwandlung scheitert, antwortet mit ihrem eigenen
pdfa_conversion_failed, daseinvoiceträgt und, wopdf.pdfagesetzt war,pdfa.
Mit PDF/UA-1
pdf.pdfa und pdf.ua gehen zusammen, wie bei einer E-Rechnung:
{
"pdf": {
"metadata": { "title": "Jahresbericht {{ report.year }}" },
"pdfa": "2b",
"ua": true
}
}
- Eine Datei, als beides geprüft. Die Seite wird getaggt und repariert wie für jede PDF/UA-1-Datei, die Umwandlung erhält die Tags, und die umgewandelte Datei, also die, die Sie erhalten, wird im selben Schritt gegen ihre PDF/A-Stufe und gegen PDF/UA-1 geprüft.
- Zwei Berichte. Das Rendering trägt
pdfaundaccessibility. Hat die Datei beide bestanden, nennen ihre Metadaten beide Normen. - Streng. Eine Datei, die ein gültiges PDF/A ist und PDF/UA-1 nicht besteht, antwortet mit 422
pdfua_validation_failedund liefert nichts aus; das Problem trägtaccessibilitymit den verletzten Regeln undpdfa, das sagt, dass das PDF/A in Ordnung war. - Nur melden. Mit
{ "check": "report" }wird das gültige PDF/A ohne die PDF/UA-Kennung ausgeliefert.
Womit es sich nicht verbinden lässt
- Ein Passwort.
post.passwordmitpdf.pdfaantwortet mit400 invalid_requestundfield: "post.password", gleich wo das PDF/A festgelegt wurde: PDF/A verbietet Verschlüsselung. Für ein verschlüsseltes gewöhnliches PDF aus einer Vorlage, die PDF/A festlegt, senden Sie"pdfa": false. - Eine E-Rechnung bei
"2b". Siehe oben. - Bilder. Eine Vorlage, die
pdf.pdfafestlegt, rendert ihre Bilder wie bisher. Es in einer Anfrage für ein Bild zu verlangen, antwortet mit400 invalid_request.
Ein Zusammenführen (post.merge_after), ein Wasserzeichen, die Markierung von Test-Renderings, pdf.ua, Word- und PowerPoint-Vorlagen, Batches und asynchrone Renderings gehen alle damit zusammen. Die Umwandlung ist der letzte Schritt, nach dem Zusammenführen, dem Wasserzeichen und der Test-Markierung, sodass umgewandelt und geprüft wird, was ausgeliefert wird. Ein dedupliziertes Rendering antwortet mit der Datei, die es wiederverwendet, und deren Bericht.
Die PDF-Tools
/pdf/watermark und /pdf/protect lehnen eine PDF/A-Quelle mit 422 source_invalid ab: Ein nachträglich gezeichnetes Wasserzeichen veränderte eine Datei, die so geprüft wurde, wie sie ist, und ein Passwort hinterließe eine verschlüsselte Datei, die sich weiter PDF/A nennt. Setzen Sie das Wasserzeichen stattdessen beim Rendering (post.watermark), wo es vor der Umwandlung kommt. /pdf/merge nimmt ein PDF/A wie jedes PDF und gibt ein neues Dokument zurück, das kein PDF/A ist. Dasselbe gilt für E-Rechnungen, die PDF/A-3b-Dateien sind.
Was das Format nicht regelt
PDF/A schafft eine Datei, die sich auch in Jahrzehnten so öffnen lässt, wie sie ist. Ein Dokument so aufzubewahren, wie ein Gesetz es verlangt, etwa die GoBD für Geschäftsunterlagen, ist mehr als die Datei: wo sie gespeichert ist, dass sie nicht unbemerkt geändert oder gelöscht werden kann, dass sie über die ganze Frist wiedergefunden wird und wie das Verfahren dokumentiert ist. Nichts davon steckt in der Datei, und nichts davon übernimmt Formfeed:
- Formfeed ist kein Archiv. Ausgaben werden nur für die Aufbewahrungsfrist Ihres Plans und Workspace aufbewahrt. Legen Sie jede Datei, die Sie aufbewahren müssen, in Ihrem eigenen Archiv ab; Bring your own storage kopiert jedes Rendering beim Erzeugen in Ihren Bucket.
- Archivieren Sie die ausgelieferte Datei selbst. Eine Datei, die ein anderes Programm neu gespeichert hat, ist nicht mehr die Datei, die geprüft wurde.
- Bewahren Sie den Bericht daneben auf. Sein
pdf_sha256verbindet das Urteil mit der Datei.
Pläne, Einheiten und Kosten
pdf.pdfa gehört zu jedem Plan und kostet keine zusätzliche Einheit. Test-Renderings, die Markierung des Free-Plans eingeschlossen, und die echten Renderings des Editors werden umgewandelt und geprüft wie jedes andere Rendering. Ein fehlgeschlagenes Rendering kostet nichts. Eine E-Rechnung kostet wie immer ihre eigene Einheit.
Fehler
| Status | Code | Wann |
|---|---|---|
| 500 | pdfa_conversion_failed | Die Datei hat ihre PDF/A-Stufe nicht bestanden oder ließ sich nicht umwandeln. pdfa nennt die Regeln, oder reason die Meldung des Konverters. |
| 422 | pdfua_validation_failed | Mit pdf.ua und der strengen Prüfung hat das gültige PDF/A PDF/UA-1 nicht bestanden. |
| 503 | conformance_unavailable | Der Konverter ist ausgelastet oder nicht erreichbar. Wiederholen Sie nach Retry-After; eine Datei wird nie ungeprüft ausgeliefert. |
| 504 | render_timeout | Die Umwandlung wurde nicht rechtzeitig fertig. Wiederholen Sie. |
| 400 | invalid_request | Ein Wert, der keiner der oben genannten ist, ein Passwort, "2b" neben einer E-Rechnung oder eine Bildausgabe. |
Auf der Kommandozeile
formfeed validate annual-report
meldet eine Festlegung in der settings.json, die die API ablehnt: einen Wert, den sie nicht annimmt, oder "2b" neben einer E-Rechnung. Beides sind Fehler. Eine Festlegung in einer Bildvorlage ist eine Warnung.
formfeed render annual-report
gibt das Urteil des Renderings aus (hier mit einem Test-Schlüssel, der keine Einheit kostet):
PDF/A-2b conformant (veraPDF 1.30.2)
rnd_7da09ab6cd9946b798c187c2a9350852: 4 page(s), 0 unit(s) -> annual-report.pdf
formfeed dev zeigt die Vorlage als HTML in der Vorschau und sagt, dass erst ein Rendering die PDF/A-Datei erzeugt und prüft; das tut seine Schaltfläche Render.