Inhaltsverzeichnis

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


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

  1. PdfCreate() — Dokument anlegen
  2. Seiten, Inhalte, Metadaten aufbauen
  3. PdfSetConformance(doc, PDF_CONFORMANCE_A2B) — PDF/A aktivieren
  4. PdfGenerateXMP(doc) — XMP nach PdfSetConformance generieren
  5. PdfSave(doc, path) — OutputIntent + ICC-Profil werden automatisch geschrieben

Hinweise


Verwandte Units

Letzte Aktualisierung: 2026-06-05