====== 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