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 PdfGenerateXMP werden die pdfaid-Namespace-Felder im XMP-Stream gesetzt. Verschlüsselung wird bei aktivem PDF/A-Modus unterdrückt.
→ std.pdf.xmp · std.pdf.meta · Standard Library
| 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 |
| 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. |
| 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 |
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);
}
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);
}
import std.pdf.pdfa;
fn DisablePdfa(doc: int64): void {
PdfSetConformance(doc, PDF_CONFORMANCE_NONE);
// PdfSave schreibt ab jetzt ohne OutputIntent / pdfaid
}
PdfCreate() — Dokument anlegenPdfSetConformance(doc, PDF_CONFORMANCE_A2B) — PDF/A aktivierenPdfGenerateXMP(doc) — XMP nach PdfSetConformance generierenPdfSave(doc, path) — OutputIntent + ICC-Profil werden automatisch geschriebenPdfSetConformance muss vor PdfGenerateXMP aufgerufen werden, damit der pdfaid-Namespace in den XMP-Stream eingefügt wird.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).PdfEncrypt, falls vorhanden) wird bei aktivem PDF/A-Modus automatisch unterdrückt.std.pdf.xmp — XMP-Metadaten-Stream (pdfaid-Namespace)std.pdf.meta — /Info-Felder (Title, Author, Creator …)std.pdf.attach — eingebettete Dateien (für PDF/A-3b)std.pdf.builder — DokumenterstellungLetzte Aktualisierung: 2026-06-05