THotPDF.ValidatePDFA4 Method
針對支援的 PDF/A-4 基礎、PDF/A-4e 工程或 PDF/A-4f 關聯檔案設定檔,驗證產生或載入的物件圖,並傳回穩定的結構化診斷
宣告
function ValidatePDFA4(
const Options: THPDFPDFA4ValidationOptions;
out Issues: THPDFPDFA4ValidationIssues): boolean; overload;
function ValidatePDFA4(
const Options: THPDFPDFA4ValidationOptions;
out Findings: THPDFComplianceFindings): boolean; overload;
單元
HPDFDoc
設定檔與嚴重性類型
THPDFPDFA4Profile = (
p4pAutomatic,
p4pBase,
p4pEngineering,
p4pAssociatedFiles
);
THPDFPDFA4IssueSeverity = (
p4isWarning,
p4isError
);
THPDFPDFA4Profile 負責選擇中繼資料推斷或明確的一致性設定檔;THPDFPDFA4IssueSeverity 則區分建議性診斷與驗證錯誤
選項
| 欄位 | 用途 |
|---|---|
Profile | 選擇自動中繼資料偵測、基礎、工程或關聯檔案驗證 |
MaxObjects | 限制物件圖的迭代走訪,預設為 1,000,000 個物件 |
MaxIssues | 限制保留的診斷數量,預設為 1,024 筆 |
MaxDecodedBytes | 限制累計解碼的中繼資料、ICC 與內容串流位元組數,預設為 64 MiB |
MaxContentTokens | 限制累計的內容串流 token 數,預設為 4,000,000 個 |
CheckEmbeddedFonts | 檢查轉譯用字型是否帶有內嵌字型程式 |
CheckAnnotationAppearances | 檢查附註旗標與正常外觀串流 |
CheckOptionalContent | 檢查選用內容組態的名稱與唯一性 |
CheckColourSpaces | 檢查實際塗色的裝置色彩、ICC 設定檔、輸出意圖、預設值、影像、漸層、表單與透明度群組 |
CheckTransparency | 檢查實際塗色的 alpha、軟遮罩、混合模式,以及頁面層級混合色彩空間的涵蓋情況 |
CheckCompositeFonts | 檢查 Type 0 子代字型、CIDSystemInfo、CMap 相容性與 CIDToGIDMap 限制 |
CheckMetadataPackets | 檢查每個中繼資料串流的 UTF-8、封包標頭、RDF 信封與 PDF/A 識別限制 |
診斷
每個 THPDFPDFA4ValidationIssue 會回報嚴重性、穩定的命名空間代碼、適用的 ISO 19005-4 條款、物件路徑、物件編號、已知時以 0 起算的頁面索引,以及人類可讀的訊息
THPDFComplianceFindings 多載會透過共用的機器可讀檢查結果模型公開同樣的走訪,並標記 PDF/A-4 設定檔與 crsNotAttempted 修復狀態
驗證器涵蓋 PDF 2.0 識別、trailer ID 與加密狀態、每個中繼資料封包、Info 限制、ICC 標頭與通道數、文件與頁面輸出意圖、實際塗色的裝置色彩、跨內容串流陣列與巢狀 Form XObject 繼承的圖形狀態、影像遮罩、漸層、透明度、轉譯字型的內嵌、複合字型關聯、附註與外觀、AcroForm 限制、動作與額外動作、關聯檔案、選用內容、外部參照,以及設定檔特定的 3D 或附件規則
色彩與透明度的檢查結果是根據實際繪製運算子判定,而不只看色彩設定運算子;內容 token 化與已解碼串流的重用會快取,但每次呼叫仍會為自己的頁面或 Form 環境求值繼承的圖形狀態
解碼位元組、內容 token、物件與保留診斷的上限都以失敗關閉方式處理,會先產出穩定的 pdfa4.validation.* 檢查結果,不讓無上限的工作繼續
範例
var
Options: THPDFPDFA4ValidationOptions;
Issues: THPDFPDFA4ValidationIssues;
begin
Options := THPDFPDFA4ValidationOptions.Default;
Options.Profile := p4pAutomatic;
if not PDF.ValidatePDFA4(Options, Issues) then
raise Exception.CreateFmt('%s at %s',
[String(Issues[0].Code), String(Issues[0].Path)]);
end;
產生行為
EndDoc 會對 '4'、'4E' 與 '4F' 自動執行驗證器,若仍留下錯誤,會在序列化之前丟出例外
PDF/A-4 產生時會省略 trailer 的 Info 項目;PDF/A-4f 一律會建立必需的 EmbeddedFiles 名稱樹;檔案附件附註只有 PDF/A-4f 接受,此時內嵌串流、Filespec、AF 關聯、Catalog 的 AF 陣列與名稱樹會一併輸出