function SaveAsPdfX(const FileName: string): Boolean; overload;
function SaveAsPdfX(const FileName: string; const Options: TPdfXSaveOptions): Boolean; overload;
SaveAsPdfX führt zuerst das normale SaveAs aus und legt dann ein inkrementelles Update über die gespeicherten Bytes - für die gewählte PDF/X-Druckaustausch-Variante. Die Nachbearbeitung fügt fünf Klassen von Bytes in den gespeicherten Stream ein:
pdfxid:GTS_PDFXVersion, plus pdfxid:GTS_PDFXConformance bei PDF/X-1a / PDF/X-3), dazu die passende pdfaExtension:schemas-Beschreibung für den pdfxid-Namespace sowie gebrückte Dublin-Core-/xmp-/pdf-Properties für Title / Author / Producer / Daten/GTS_PDFXVersion, den optionalen Eintrag /GTS_PDFXConformance (nur PDF/X-1a / PDF/X-3; PDF/X-4 veraltet diesen Eintrag) und einen /Trapped-Namen (Standard /False) ergänzt. Vorhandene Info-Einträge (Title / Author / Subject usw.) bleiben erhalten/Metadata N 0 R und /OutputIntents [M 0 R]/Type /OutputIntent /S /GTS_PDFX und den konfigurierten Output-Condition-Einträgen, das über /DestOutputProfile auf ein eingebettetes ICC-Profil verweistDer Trailer wird neu geschrieben, um ein /ID-Array
zu ergänzen. Bis zum Ende der ursprünglichen PDF bleibt die Ausgabe
byte-identisch mit dem Basis-SaveAs-Ergebnis; nur das inkrementelle
Update wird angehängt. Die beiden Overloads unterscheiden sich nur
darin, wie die Konfiguration übergeben wird: Die Variante mit
alleinigem Dateinamen nutzt TPdfXSaveOptions.Default
(PDF/X-4 + sRGB + /Trapped /False) und befüllt die
Info-/DocumentId-Felder automatisch aus FPDF_GetMetaText
und FPDF_GetFileIdentifier
Liefert True zurück, nachdem die vorbereiteten Bytes geschrieben wurden, und False, wenn das Dokument inaktiv ist oder das Basis-Speichern fehlschlägt
Eine erfolgreiche Serialisierung begründet noch keine vollständige PDF/X-Konformität
Für pxc1a muss IccProfileData ein strukturell gültiges ICC-v2-Output-Profil mit Device-Klasse prtr, Datenfarbraum CMYK, einem Lab- oder XYZ-PCS und den erforderlichen bidirektionalen LUTs enthalten
Fehlende, RGB-, abgeschnittene, falsch klassifizierte oder nicht unterstützte Profildaten lösen EArgumentException aus; für PDF/X-1a gibt es keinen sRGB-Fallback
Bei PDF/X-1a werden OutputCondition-, OutputConditionIdentifier- und OutputIntentInfo-Werte, die noch dem eingebauten Standard sRGB IEC61966-2.1 entsprechen, durch die geprüfte Profilbeschreibung ersetzt
Hat das Profil keine Beschreibung, geben Sie einen nicht leeren, nicht standardmäßigen OutputConditionIdentifier an; er liefert das Ersatz-Label, sonst löst der Aufruf EArgumentException aus
Explizite Labels des Aufrufers bleiben erhalten
Serialisierung und diese Profilprüfungen laufen in einem temporären Save-Store ab, bevor die Zieldatei zum Schreiben geöffnet wird Ein vorhandenes Ziel bleibt daher unverändert, wenn die Profilvalidierung eine Exception auslöst oder das Basis-Speichern fehlschlägt Das ist keine Garantie für atomaren Dateiersatz: Ein I/O-Fehler nach dem Öffnen des Ziels kann eine Teilausgabe hinterlassen
saRemoveSecurity, bevor die Marker injiziert werdenOptions.Conformance passenden Marker an, kann diese Regeln auf Inhaltsebene aber nicht erzwingen. Bestätigen Sie das per Preflight
// Simple PDF/X-4 with bundled sRGB OutputIntent
if Pdf1.SaveAsPdfX('C:\AdProof.pdfx.pdf') then
ShowMessage('Saved PDF/X-4');
// PDF/X-1a with a custom CMYK ICC profile (e.g. FOGRA39)
var
Opts: TPdfXSaveOptions;
begin
Opts := TPdfXSaveOptions.Default;
Opts.Conformance := pxc1a;
Opts.IccProfileData := TFile.ReadAllBytes('C:\ICC\FOGRA39.icc');
Opts.OutputCondition := 'Coated FOGRA39 (ISO 12647-2:2004)';
Opts.OutputConditionIdentifier:= 'FOGRA39';
Opts.RegistryName := 'http://www.color.org';
Opts.Trapped := ptFalse;
Pdf1.SaveAsPdfX('C:\AdProof.cmyk.pdfx.pdf', Opts);
end;