function SaveAsPdfA(const FileName: string; Conformance: TPdfAConformance = pac1b): Boolean; overload;
function SaveAsPdfA(const FileName: string; const Options: TPdfASaveOptions): Boolean; overload;
SaveAsPdfA exécute d'abord SaveAs, puis superpose une mise à jour incrémentielle sur les octets enregistrés afin de promouvoir le fichier en archive PDF/A (PDF/A-1b par défaut ; ISO 19005-1, avec Cor.1:2007). Le post-traitement injecte quatre éléments dans le flux enregistré :
pdfaid:part = 1, pdfaid:conformance = B), reflète chaque entrée du Document Information Dictionary dans son équivalent XMP (Title → dc:title, Author → dc:creator, Subject → dc:description, Keywords → pdf:Keywords, Creator → xmp:CreatorTool, Producer → pdf:Producer, CreationDate → xmp:CreateDate, ModDate → xmp:ModifyDate) comme l'exige ISO 19005-1 6.7.3, et incorpore la description du schéma d'extension pdfaid requise par 6.7.8 / Cor.1TPdfASaveOptions.IccProfileData/ID dans le trailer (obligatoire selon ISO 19005-1 6.1.3). Lorsque le PDF source porte déjà un identifiant de fichier, les ID permanent et changeant existants de 16 bytes sont réutilisés ; sinon un ID de repli déterministe de 16 bytes est dérivé des octets sourceLa sortie reste octet pour octet identique au résultat de base de SaveAs jusqu'à la fin du PDF original ; seule la mise à jour incrémentielle est ajoutée. Les lecteurs existants qui ne comprennent pas PDF/A affichent tout de même le fichier exactement comme SaveAs le ferait. Les deux surcharges ne diffèrent que par la façon dont la conformité et les options sont transmises — la forme TPdfAConformance est un raccourci pour le cas courant (pac1b) ; la forme TPdfASaveOptions prend un record avec toute la surface de configuration, y compris des remplacements facultatifs pour Title, Author, Subject, Keywords, Creator, Producer, CreationDate, ModDate, DocumentId et InstanceId. Les champs laissés vides sont renseignés automatiquement à partir de FPDF_GetMetaText / FPDF_GetFileIdentifier, de sorte que l'appelant typique n'a pas besoin de définir autre chose que Conformance
La valeur Conformance sélectionne la norme et le niveau cibles. PDF/A-1 (ISO 19005-1) propose pac1b et pac1a ; PDF/A-2 (ISO 19005-2) et PDF/A-3 (ISO 19005-3) ajoutent les niveaux b, u et a sous la forme de pac2b / pac2u / pac2a et pac3b / pac3u / pac3a. Le pdfaid:part injecté (1, 2 ou 3) et le pdfaid:conformance (A, B ou U) suivent la valeur demandée, tandis que l'OutputIntent conserve le sous-type GTS_PDFA1 que ISO 19005-2 retient pour chaque partie. Comme le post-processeur ne peut pas synthétiser de structure logique, une demande de niveau A (pac1a / pac2a / pac3a) est automatiquement rétrogradée au niveau B correspondant lorsque le PDF source ne contient pas la structure Tagged PDF requise par ce niveau — ainsi, le fichier enregistré ne prétend jamais à tort être de niveau A
Renvoie True en cas de succès. Renvoie False si SaveAs de base a échoué, si la mise à jour incrémentielle n'a pas pu être attachée (PDF trop court, trailer invalide) ou si les données du profil ICC ont été fournies mais ont échoué à la validation
/Encrypt. (En interne, la sauvegarde de base s’exécute avec saRemoveSecurity)ValidatePdfA après la sauvegarde pour inspecter le résultat et faire remonter tout problème restant aux opérateurs
// Simple PDF/A-1b output using the bundled sRGB profile
if Pdf1.SaveAsPdfA('C:\Report.pdfa.pdf') then
ShowMessage('Saved PDF/A-1b');
// With a custom ICC profile
var
Opts: TPdfASaveOptions;
begin
Opts := Default(TPdfASaveOptions);
Opts.Conformance := pac1b;
Opts.IccProfileData := TFile.ReadAllBytes('C:\Profiles\Coated.icc');
Pdf1.SaveAsPdfA('C:\Report.cmyk.pdfa.pdf', Opts);
end;