SetPDFAMode
文件屬性與遵循性
描述
為所選文件啟用 PDF/A 符合模式。單次呼叫即完成所選 PDF/A 部分與符合性層級要求的全部文件層級設定:PDF 版本提升到所需最低版本、選擇標籤式 PDF 符合性層級(A)時寫入 /MarkInfo 項目、目錄加入輸出意圖(DeviceRGB sRGB ICC 設定檔),並寫入 pdfaid:part/pdfaid:conformance XMP 命名空間項目。程式庫同時啟動產生端的合規防護,拒絕之後會產出所選部分所禁止內容的呼叫(見 備註)
在新建立的文件上、加入任何內容之前呼叫一次。要驗證本程式庫或其他程式庫產出的既有 PDF/A 檔案,請用 CheckFileCompliance 搭配 ComplianceTest = 1。
語法
Delphi
Function TPDFlib.SetPDFAMode(NewMode: Integer): Integer;
ActiveX
Function PDFlib::SetPDFAMode(NewMode As Long) As Long
DLL
int DLSetPDFAMode(int InstanceID, int NewMode);
參數
| NewMode | 要啟用的 PDF/A 符合模式。每個模式由 PDF/A part(1、2、3 或 4 — ISO 19005-1/-2/-3/-4)與符合層級(B 代表基本視覺重現,A 代表標籤式 PDF 無障礙)識別。 0 — 停用 PDF/A 模式(預設)。 1 — PDF/A-1a(ISO 19005-1 Level A)。PDF 1.4。必須是標籤式 PDF。 2 — PDF/A-1b(ISO 19005-1 Level B)。PDF 1.4。僅視覺重現。 3 — PDF/A-2b(ISO 19005-2 Level B)。PDF 1.7。視覺重現;允許透明度與圖層。 4 — PDF/A-2a(ISO 19005-2 Level A)。PDF 1.7。必須是標籤式 PDF。 5 — PDF/A-3b(ISO 19005-3 Level B)。PDF 1.7。如同 PDF/A-2b,但允許任意內嵌檔案。 6 — PDF/A-3a(ISO 19005-3 Level A)。PDF 1.7。如同 PDF/A-2a,但允許任意內嵌檔案。 7 — PDF/A-3u(ISO 19005-3 Level U)。PDF 1.7。如同 PDF/A-3b,但宣告文字應有 Unicode 對應。 8 — PDF/A-2u(ISO 19005-2 Level U)。PDF 1.7。如同 PDF/A-2b,但宣告文字應有 Unicode 對應;內嵌檔案仍然禁止。 9 — PDF/A-4(ISO 19005-4)。PDF 2.0。以 part 與修訂年份識別,而非符合層級;文字需要 Unicode 對應,標籤則非必要。 10 — PDF/A-4e(ISO 19005-4)。PDF 2.0。如同 PDF/A-4,另允許工程文件使用 3D 與豐富媒體。 11 — PDF/A-4f(ISO 19005-4)。PDF 2.0。如同 PDF/A-4,另允許任何格式的內嵌檔案。 |
|---|
傳回值
| 0 | 失敗 — 未開啟任何文件,或 NewMode 超出 0–7 的範圍。 |
|---|---|
| 1 | PDF/A mode activated successfully. |
備註
所選模式控制產生端的合規防護。啟用後,程式庫會拒絕或改寫之後會產出該部分所禁止內容的呼叫,符合 ISO 19005:
| CMYK / Separation / Shader colors | 所有 PDF/A 模式(1–7)皆封鎖 — 文件會以 sRGB output intent 設定,只能使用與該 output intent 裝置類別相容的色彩。 |
|---|---|
| Encryption | 所有 PDF/A 模式都封鎖。呼叫任何加密相關 API 之前先設定模式。 |
| Transparency / blend modes / page transparency groups | 模式 1 與 2 封鎖(PDF/A-1 禁止透明度)。模式 3–7 允許(PDF/A-2/3 允許透明度)。 |
| JavaScript actions | 所有 PDF/A 模式皆封鎖 — ISO 19005-1 §6.6.1 禁止 JavaScript,此禁令並延伸至 PDF/A-2/3。 |
| Embedded files / file attachments | 模式 1–4 封鎖(PDF/A-1 禁止;PDF/A-2 只允許符合 PDF/A 的內嵌 PDF,程式庫並未強制)。模式 5、6 與 7 允許 — PDF/A-3 透過 AFRelationship 關聯明確允許任何 MIME 類型的內嵌檔案。 |
a 層級(模式 1、4、6)需要的標籤式 PDF 內容(標題結構、figure 的替代文字、表格範圍屬性、自訂類型的 RoleMap 條目)由呼叫端負責。用 BeginTag、BeginArtifact、AddRoleMap 與各結構元素 setter 建出結構樹,儲存前呼叫 GetPDFUADiagnostics 浮出最常見的標籤式 PDF 問題。u 層級(模式 7)則要確保文件的字型資源為所有描繪的文字提供 Unicode 對映。
PDF/A 與 PDF/UA 可以在同一份文件上啟用。先啟用 SetPDFAMode(1a/2a/3a 本身已隱含標籤式 PDF),再呼叫 SetPDFUAMode 加入 PDF/UA 專屬的目錄設定(DisplayDocTitle、pdfuaid:part、自動 /Tabs /S)。
範例
// PDF/A-1b — minimum-effort archival document
PDF.NewDocument;
PDF.SetPDFAMode(2); // PDF/A-1b
PDF.SetDocumentInfo('Title', 'Quarterly Report Q1 2026');
PDF.AddStandardFont('Helvetica');
PDF.AddPage;
PDF.SetFontSize(12);
PDF.PrintText(50, 750, 'Quarterly Report — Q1 2026');
PDF.SaveToFile('Q1-Report-PDFA1b.pdf');
// PDF/A-3a — tagged report with an embedded source spreadsheet
PDF.NewDocument;
PDF.SetPDFAMode(6); // PDF/A-3a
PDF.SetPDFUAMode('en-US'); // Optional: also satisfy PDF/UA-1
PDF.SetDocumentInfo('Title', 'Sales Analysis 2026');
PDF.AddStandardFont('Helvetica');
PDF.AddPage;
PDF.BeginTag('H1', '', '');
PDF.PrintText(50, 750, 'Sales Analysis');
PDF.EndTag;
PDF.BeginTag('P', '', '');
PDF.PrintText(50, 720, 'See attached spreadsheet for source data.');
PDF.EndTag;
PDF.EmbedFile('Source data', 'data.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
PDF.SaveToFile('Sales-PDFA3a.pdf');另見
CheckFileCompliance、SetPDFUAMode、SetMarkInfo、EmbedFile、BeginTag、GetPDFUADiagnostics、SetInformation