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
| 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. |
| 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.
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.
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);
}
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);
}
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));
}
PdfGenerateXMP muss nach PdfSetTitle / PdfSetAuthor / … und nach PdfSetConformance aufgerufen werden — die Reihenfolge ist wichtig.PdfGenerateXMP ersetzen das vorherige XMP — sinnvoll, wenn Metadaten nach dem ersten Aufruf noch geändert werden.pdfaid-Namespace Pflicht. PdfGenerateXMP fügt ihn automatisch ein, wenn PdfSetConformance zuvor aufgerufen wurde.EF BB BF) wird von PdfGenerateXMP automatisch eingefügt.PdfSetXMP kopiert den übergebenen Puffer — der Originalzeiger kann danach freigegeben werden.std.pdf.meta — /Info-Metadaten (Title, Author …)std.pdf.pdfa — PDF/A-Konformität (setzt pdfaid-Namespace im XMP)std.pdf.builder — Dokumenterstellung (PdfCreate, PdfSave)Letzte Aktualisierung: 2026-06-05