====== std.pdf.pdfa ======
PDF/A-Konformität (WP-PDF-27): Setzt den PDF/A-Ausgabe-Modus. Bei aktivem Konformanz-Level fügt ''PdfSave'' automatisch einen ''/OutputIntent'' mit eingebettetem sRGB-ICC-Profil in den Katalog ein. In Verbindung mit ''[[lyx_-_programmiersprache:units:pdf:xmp|PdfGenerateXMP]]'' werden die ''pdfaid''-Namespace-Felder im XMP-Stream gesetzt. Verschlüsselung wird bei aktivem PDF/A-Modus unterdrückt.
→ [[lyx_-_programmiersprache:units:pdf:xmp|std.pdf.xmp]] · [[lyx_-_programmiersprache:units:pdf:meta|std.pdf.meta]] · [[lyx_-_programmiersprache:units|Standard Library]]
----
===== Konstanten =====
^ Konstante ^ Wert ^ Beschreibung ^
| ''PDF_CONFORMANCE_NONE'' | 0 | Kein PDF/A-Modus (Standard) |
| ''PDF_CONFORMANCE_A1B'' | 1 | PDF/A-1b — grundlegende visuelle Reproduzierbarkeit |
| ''PDF_CONFORMANCE_A2B'' | 2 | PDF/A-2b — erweitert (JPEG 2000, Transparenz, XMP) |
| ''PDF_CONFORMANCE_A3B'' | 3 | PDF/A-3b — wie A-2b, zusätzlich eingebettete Dateien erlaubt |
----
===== Funktionen =====
^ Signatur ^ Beschreibung ^
| ''PdfSetConformance(doc: int64, level: int64): void'' | Aktiviert oder deaktiviert den PDF/A-Modus. Beim ersten Aufruf mit ''level ≠ 0'' werden zwei PDF-Objekt-IDs für das ICC-Profil und den ''/OutputIntent'' reserviert. Mit ''PDF_CONFORMANCE_NONE'' wird der Modus wieder deaktiviert. |
----
===== Was PDF/A-Modus bewirkt =====
^ Aktion ^ Beschreibung ^
| ''/OutputIntent'' | Wird in den Katalog geschrieben; verweist auf ein eingebettetes sRGB-ICC-Profil |
| ICC-Profil | Wird als komprimierter Stream eingebettet (sRGB IEC61966-2.1) |
| XMP ''pdfaid'' | ''PdfGenerateXMP'' fügt ''pdfaid:part'' und ''pdfaid:conformance=B'' ein, wenn Konformanz aktiv ist |
| Verschlüsselung | Wird von ''PdfSave'' ignoriert — PDF/A und Verschlüsselung sind unvereinbar |
----
===== Verwendung =====
==== Minimales PDF/A-2b ====
import std.pdf.builder;
import std.pdf.meta;
import std.pdf.pdfa;
import std.pdf.xmp;
fn CreatePdfA2b(outPath: pchar): void {
var doc := PdfCreate();
var page := PdfAddPage(doc, PDF_A4_W, PDF_A4_H);
// Pflicht-Metadaten für PDF/A
PdfSetTitle(doc, "Archivdokument 2026");
PdfSetAuthor(doc, "Andreas Röne");
PdfSetCreator(doc, "SEOLizer PDF Engine");
PdfSetProducer(doc, "std.pdf.pdfa");
// PDF/A-Modus aktivieren (vor PdfGenerateXMP!)
PdfSetConformance(doc, PDF_CONFORMANCE_A2B);
// XMP mit pdfaid-Namespace generieren
PdfGenerateXMP(doc);
PdfSave(doc, outPath);
PdfFree(doc);
}
==== PDF/A-3b für Rechnungen (ZUGFeRD/Factur-X) ====
import std.pdf.pdfa;
import std.pdf.xmp;
import std.pdf.attach; // für eingebettete Dateien
fn CreateInvoicePdf(doc: int64, xmlData: int64, xmlLen: int64, outPath: pchar): void {
// PDF/A-3b erlaubt eingebettete XML-Anhänge
PdfSetConformance(doc, PDF_CONFORMANCE_A3B);
// ZUGFeRD XML einbetten
PdfAttachFile(doc, xmlData, xmlLen, "factur-x.xml", "application/xml");
PdfGenerateXMP(doc);
PdfSave(doc, outPath);
}
==== Konformanz nachträglich deaktivieren ====
import std.pdf.pdfa;
fn DisablePdfa(doc: int64): void {
PdfSetConformance(doc, PDF_CONFORMANCE_NONE);
// PdfSave schreibt ab jetzt ohne OutputIntent / pdfaid
}
----
===== Korrekte Aufruf-Reihenfolge =====
- ''PdfCreate()'' — Dokument anlegen
- Seiten, Inhalte, Metadaten aufbauen
- ''PdfSetConformance(doc, PDF_CONFORMANCE_A2B)'' — PDF/A aktivieren
- ''PdfGenerateXMP(doc)'' — XMP **nach** PdfSetConformance generieren
- ''PdfSave(doc, path)'' — OutputIntent + ICC-Profil werden automatisch geschrieben
----
===== Hinweise =====
* ''PdfSetConformance'' muss **vor** ''PdfGenerateXMP'' aufgerufen werden, damit der ''pdfaid''-Namespace in den XMP-Stream eingefügt wird.
* Für echte PDF/A-Zertifizierung muss das Dokument zusätzliche Bedingungen erfüllen (keine externen Ressourcen, alle Fonts eingebettet, kein JavaScript). Diese Bibliothek liefert die technischen PDF-Strukturen; die inhaltliche Compliance liegt beim Aufrufer.
* ''PDF_CONFORMANCE_A1b'' entspricht ISO 19005-1 (2005), A2b = ISO 19005-2 (2011), A3b = ISO 19005-3 (2012).
* ''PdfSetConformance'' mit ''level ≠ 0'' reserviert bei der ersten Aktivierung zwei Objekt-IDs. Mehrfachaufruf mit demselben Level ist sicher (es werden keine weiteren IDs reserviert).
* Verschlüsselung (''PdfEncrypt'', falls vorhanden) wird bei aktivem PDF/A-Modus automatisch unterdrückt.
----
===== Verwandte Units =====
* ''[[lyx_-_programmiersprache:units:pdf:xmp|std.pdf.xmp]]'' — XMP-Metadaten-Stream (''pdfaid''-Namespace)
* ''[[lyx_-_programmiersprache:units:pdf:meta|std.pdf.meta]]'' — ''/Info''-Felder (Title, Author, Creator …)
* ''[[lyx_-_programmiersprache:units:pdf:attach|std.pdf.attach]]'' — eingebettete Dateien (für PDF/A-3b)
* ''[[lyx_-_programmiersprache:units:pdf:builder|std.pdf.builder]]'' — Dokumenterstellung
Letzte Aktualisierung: 2026-06-05