Inhaltsverzeichnis

std.pdf.xmp

XMP-Metadaten-Stream (WP-PDF-26): Bettet einen `/Metadata`-XMP-Stream in den PDF-Katalog ein. Entweder wird ein eigener XMP-XML-Blob übergeben (PdfSetXMP) oder die im Dokument gesetzten /Info-Felder werden automatisch in einen wohlgeformten XMP-Packet konvertiert (PdfGenerateXMP). XMP ist Pflicht für PDF/A-Konformität.

std.pdf.pdfa · std.pdf.meta · Standard Library


Funktionen

Signatur Beschreibung
PdfSetXMP(doc: int64, xmpXml: int64, len: int64): void Speichert einen rohen XMP-XML-Blob (UTF-8, ohne NUL-Terminator). Die Bytes werden in einen internen Puffer kopiert. Ein vorheriger XMP-Blob wird ersetzt.
PdfGenerateXMP(doc: int64): void Liest Title, Author, Subject, Keywords, Creator, Producer aus dem Dokument-Info-Block und erzeugt daraus automatisch ein wohlgeformtes XMP-Packet. Äquivalent zu PdfSetXMP mit dem generierten XML. Bei aktivem PDF/A-Modus werden pdfaid:part und pdfaid:conformance eingefügt.

PdfSetXMP — Parameter

Parameter Typ Beschreibung
doc int64 Dokument-Handle (von PdfCreate)
xmpXml int64 Pointer auf UTF-8-kodierten XMP-XML-Puffer
len int64 Länge des Puffers in Bytes (ohne NUL)

Der Puffer muss ein vollständiges XMP-Packet enthalten (`<?xpacket begin=…``<?xpacket end=„w“?>`). PdfSetXMP kopiert die Daten — der ursprüngliche Puffer kann danach freigegeben werden.


Generiertes XMP-Format

PdfGenerateXMP erzeugt folgendes Grundgerüst (Felder nur wenn belegt):

<?xpacket begin="…" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about=""
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
    xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">   <!-- nur bei PDF/A -->

   <dc:title>…</dc:title>
   <dc:creator>…</dc:creator>
   <dc:description>…</dc:description>
   <dc:subject>…</dc:subject>
   <xmp:CreatorTool>…</xmp:CreatorTool>
   <pdf:Producer>…</pdf:Producer>
   <pdfaid:part>1</pdfaid:part>                       <!-- nur bei PDF/A -->
   <pdfaid:conformance>B</pdfaid:conformance>         <!-- nur bei PDF/A -->
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>

XML-Sonderzeichen in Metadatenwerten (&, <, >, ) werden automatisch escaped.


Verwendung

Automatisch aus /Info generieren

import std.pdf.builder;
import std.pdf.meta;
import std.pdf.xmp;

fn SaveWithXMP(doc: int64, outPath: pchar): void {
    PdfSetTitle(doc,    "Jahresbericht 2026");
    PdfSetAuthor(doc,   "Andreas Röne");
    PdfSetSubject(doc,  "Finanzübersicht Q1–Q4");
    PdfSetKeywords(doc, "Bericht, Finanzen, 2026");
    PdfSetCreator(doc,  "SEOLizer PDF Engine");

    PdfGenerateXMP(doc);   // XMP aus /Info erzeugen
    PdfSave(doc, outPath);
}

PDF/A mit XMP

import std.pdf.pdfa;
import std.pdf.xmp;

fn SavePdfa(doc: int64, path: pchar): void {
    PdfSetConformance(doc, PDF_CONFORMANCE_A2B);
    PdfGenerateXMP(doc);   // pdfaid-Namespace wird automatisch eingefügt
    PdfSave(doc, path);
}

Eigenes XMP übergeben

import std.pdf.xmp;
import std.alloc;
import std.string;

fn SetCustomXMP(doc: int64): void {
    var xml: pchar :=
        "<?xpacket begin=\"\xEF\xBB\xBF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"c
        "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\">"c
        "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">"c
        "<rdf:Description rdf:about=\"\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">"c
        "<dc:title><rdf:Alt><rdf:li xml:lang=\"x-default\">Custom Title</rdf:li></rdf:Alt></dc:title>"c
        "</rdf:Description></rdf:RDF></x:xmpmeta>"c
        "<?xpacket end=\"w\"?>"c;

    PdfSetXMP(doc, xml as int64, StrLen(xml));
}


Hinweise


Verwandte Units

Letzte Aktualisierung: 2026-06-05