function SaveAsPdfX(const FileName: string): Boolean; overload;
function SaveAsPdfX(const FileName: string; const Options: TPdfXSaveOptions): Boolean; overload;
SaveAsPdfX realiza primero el SaveAs normal, y luego coloca una actualización incremental sobre los bytes guardados para la variante PDF/X de intercambio de impresión seleccionada. El posprocesamiento inyecta cinco clases de bytes en el flujo guardado:
pdfxid:GTS_PDFXVersion, más pdfxid:GTS_PDFXConformance para PDF/X-1a / PDF/X-3) más la descripción pdfaExtension:schemas coincidente para el espacio de nombres pdfxid, y propiedades Dublin Core / xmp / pdf puenteadas para Title / Author / Producer / fechas/GTS_PDFXVersion obligatorio, el /GTS_PDFXConformance opcional (solo PDF/X-1a / PDF/X-3; PDF/X-4 deprecia esta entrada) y un nombre /Trapped (el valor predeterminado es /False). Las entradas Info existentes (Title / Author / Subject / etc.) se preservan/Metadata N 0 R y /OutputIntents [M 0 R]/Type /OutputIntent /S /GTS_PDFX y las entradas de condición de salida configuradas, refiriendo a un perfil ICC incrustado mediante /DestOutputProfileEl trailer se reescribe para añadir una matriz /ID. La salida permanece byte-idéntica al resultado base de SaveAs hasta el final del PDF original; solo se anexa la actualización incremental. Las dos sobrecargas difieren solo en cómo se pasa la configuración: la forma solo de nombre de archivo usa TPdfXSaveOptions.Default (PDF/X-4 + sRGB + /Trapped /False) con autorrelleno de los campos Info / DocumentId desde FPDF_GetMetaText y FPDF_GetFileIdentifier
Devuelve True tras escribir los bytes preparados, o False si el documento está inactivo o el guardado base falla. Una serialización con éxito no establece la conformidad PDF/X completa
Para pxc1a, IccProfileData debe contener un perfil de salida ICC v2 estructuralmente válido con clase de dispositivo prtr, espacio de color de datos CMYK, un PCS Lab o XYZ y las LUT bidireccionales requeridas. Los datos de perfil ausentes, RGB, truncados, clasificados incorrectamente o no soportados lanzan EArgumentException; no existe una alternativa sRGB para PDF/X-1a
Para PDF/X-1a, los valores de OutputCondition, OutputConditionIdentifier y OutputIntentInfo que sigan siendo el valor predeterminado integrado sRGB IEC61966-2.1 se sustituyen por la descripción del perfil comprobado. Si el perfil no tiene descripción, suministre un OutputConditionIdentifier no vacío y no predeterminado; aporta la etiqueta de sustitución, o la llamada lanza EArgumentException. Las etiquetas explícitas del llamador se conservan
La serialización y estas comprobaciones de perfil terminan en un almacén de guardado temporal antes de que el archivo de destino se abra para escritura. Un destino existente permanece por tanto sin cambios si la validación del perfil lanza una excepción o el guardado base falla. Esto no es una garantía de sustitución atómica del archivo: un fallo de E/S después de abrir el destino puede dejar salida parcial
saRemoveSecurity antes de la inyección de marcadoresOptions.Conformance pero no puede imponer estas reglas a nivel de contenido. Confirme mediante preflight
// PDF/X-4 simple con OutputIntent sRGB incluido
if Pdf1.SaveAsPdfX('C:\AdProof.pdfx.pdf') then
ShowMessage('Saved PDF/X-4');
// PDF/X-1a con un perfil ICC CMYK personalizado (p. ej. 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;