function SaveAsPdfUa(const FileName: string): Boolean; overload;
function SaveAsPdfUa(const FileName: string; const Options: TPdfUaSaveOptions): Boolean; overload;
SaveAsPdfUa 會先執行一般的 SaveAs,再在已儲存的位元組上疊加增量更新,將檔案提升為 PDF/UA-1 封存檔(ISO 14289-1:2014)。後處理會在儲存串流中注入四類標記
pdfuaid:part = 1)以及對應的 pdfaExtension:schemas 描述、必要的 dc:title 項目(ISO 14289-1 §7.1),還有橋接過來的 Info-dictionary 欄位(Author、Subject、Producer、Keywords、CreationDate、ModDate 等)/MarkInfo << /Marked true /Suspects false >>(§7.1)/ViewerPreferences << /DisplayDocTitle true >>(§7.1)Options.Language 有提供 BCP 47 標籤時,加入 catalog /Lang (xx)(§7.2)。trailer 也會取得 /ID array,若可用則重用 FPDF_GetFileIdentifier 的結果,否則會根據來源位元組以決定性方式產生輸出在原始 PDF 結尾之前都會與基礎 SaveAs 的結果保持位元組完全一致,只會在尾端附加增量更新。即使不理解 PDF/UA 的舊版讀取器,仍會像一般 SaveAs 一樣正常顯示。兩個多載只差在設定傳遞方式:只有檔名的版本會使用 TPdfUaSaveOptions.Default,並自動從 FPDF_GetMetaText、FPDF_GetFileIdentifier、FPDFCatalog_GetLanguage 補值;而 TPdfUaSaveOptions 版本則讓呼叫端覆寫 Title、Author、Subject、Keywords、Creator、Producer、CreationDate、ModDate、Language、DocumentId、InstanceId,以及 pdfuaid 的 Part / Amd / Corr 識別值
成功時回傳 True。若基礎 SaveAs 失敗,或增量更新無法附加(PDF 太短、trailer 無效、來源已加密),則回傳 False
SaveAsPdfUa 只會附加 ISO 14289-1 所需的檔案格式標記,不會建立 structure tree、嵌入缺少的字型、替 figure 加上 Alt text,或以其他方式改動頁面內容。建立有標記的文件(StructTreeRoot、Figure /Alt、table /TH /Scope 等)仍是呼叫端的責任,可用 ValidatePdfUa 找出這些內容層級需求的缺失SaveAsPdfUa 不會覆寫它們,/Metadata 則一律會換成新的 PDF/UA XMPSaveAs(..., saRemoveSecurity)
// Simple PDF/UA-1 output, options auto-populated from the document
if Pdf1.SaveAsPdfUa('C:\Report.pdfua.pdf') then
ShowMessage('Saved PDF/UA-1');
// With explicit options (Title overridden, language explicit)
var
Opts: TPdfUaSaveOptions;
begin
Opts := TPdfUaSaveOptions.Default;
Opts.DocumentTitle := 'Quarterly Report Q3 2026';
Opts.Language := 'en-US';
Pdf1.SaveAsPdfUa('C:\Report.q3.pdfua.pdf', Opts);
end;