原生 Linux 保存字型修復
原生文字/向量 PDF/A-4 轉換可以透過已設定的 Ghostscript pdfwrite process 明確正規化缺少的字型,保留可搜尋文字與向量路徑,並在發布前以官方 veraPDF CLI 驗證最終的原生保存文件
Callback ABI
{"schemaVersion":1,"type":"pdfa.convert","mode":"preserve","profile":"PDF/A-4","fontRepair":true,"maxFontRepairMilliseconds":120000}
fontRepair 預設 false;設為 true 即明確允許依已安裝的 Ghostscript 字型設定進行字型替代,並在正規化成功後回傳 fontRepairPerformed true
回應另包含 textAndVectorsPreserved、validationSucceeded、pageCount 與既有的移除欄位、簽章與註解計數;成功發布會以驗證過的未加密保存文件取代 handle
Pascal 設定
Options := THPDFHeadlessArchivalPreservationOptions.Default;
Options.FontRepair := True;
Options.GhostscriptExecutable := '/usr/bin/gs';
Options.MaxFontRepairMilliseconds := 120000;
Report := HPDFConvertHeadlessToPDFA4PreservingFile(Document, Destination, Options);
GhostscriptExecutable 選擇正規化執行檔,JavaExecutable 與 ValidatorJAR 選擇真正的驗證器,CancellationToken 適用於資源走訪、文字檢查、正規化與驗證
處理與限制
轉換器先把來源頁面資源匯入私有的原生文件,並攤平符合條件的註解外觀,因此已驗證的 AES 輸入經由文件讀取器解密,原始頁面權限仍然適用
Ghostscript 收到的引數向量啟用 SAFER、prepress 基線、PDF 2.0 輸出、字型內嵌與明確的影像降取樣覆寫;受限的資源走訪把字型名稱收集成十六進位 PostScript 名稱,並為較舊的 Ghostscript 版本準備明確的 AlwaysEmbed 清單
正規化 process 透過 /usr/bin/prlimit 執行,帶來自 MaxWorkingBytes 的位址空間限制與來自 MaxOutputBytes 的檔案大小限制;其輸出與診斷有位元組上限,MaxFontRepairMilliseconds 約束處理經過時間
正規化後的頁面必須保留原始頁數與擷取字元序列,允許行與空白的版面變化以及額外攤平的外觀文字;轉換器隨後把它們匯入全新的原生 PDF/A-4 範本,帶 sRGB 輸出意圖、XMP 與文件識別碼
最終候選必須通過官方設定的 veraPDF PDF/A-4 驗證,才能 fsync 與原子改名;後端不可用、文字改變、無效輸出、超過預算、逾時或取消都會讓目的地保持完整,並清理私有暫存檔
逾時與取消會終止、必要時強制刪除,並回收直接的正規化 process;子 process 執行檔應直接執行,不要透過 shell 或會產生無關後代的 wrapper
執行環境與保真度
字型修復需要 Ghostscript、其已安裝的替代字型與 util-linux prlimit;保存驗證需要無頭 Java 執行環境、官方 veraPDF CLI JAR,以及產生原生 sRGB 設定檔所需的 Little CMS 2
替代字型可能改變 glyph 外框與版面;外觀必須完全一致時,優先使用可取得的原始字型,而明確的字型修復不保證位元組相同的頁面資源或保留的簽章
已簽署輸入需要 AllowSignatureInvalidation true,來源/輸出別名會被拒絕,可見註解在攤平前仍需要可用的 normal 外觀
獨立驗收涵蓋 12 種標準拉丁字體與一份未內嵌的 Arial TrueType 字型,橫跨純文字、AES R5 與 AES R6 輸入、旋轉頁面、實際內嵌字型程式、可搜尋的變音文字、保留的向量路徑、像素保真與真正的 PDF/A-4 驗證