Native Linux and macOS
原生 FPC 後端在 Linux x64 與 macOS ARM64 上支援無頭式函式庫工作流程,產出真正的 ELF 與 Mach-O 程式
PDF 建立、儲存/載入、文字擷取與編輯、結構化擷取、可攜式 OCR 回呼、點陣圖描繪、中繼資料、加密、網路範圍存取與原生 PFX 簽署,都沿用既有的 TPDFlib API
執行階段相依性
| Provider | Library | Purpose |
|---|---|---|
| OpenSSL 3 | libcrypto | AES CBC/GCM、摘要、PKCS12 身分、CMS 簽章、完整性,以及明確的信任錨點鏈 |
| libcurl | libcurl with asynchronous DNS | HTTP/HTTPS、有界二進位傳輸、範圍存取與 RFC 3161 請求 |
| Cairo | libcairo | 點陣圖影像表面、路徑、裁剪、字符外框與影像 |
| Fontconfig | libfontconfig | 真正的原生字型檔比對,包括明確的字族替換 |
| OpenJPEG 2 | libopenjp2 | JPEG 2000 解碼與編碼 |
Linux 會載入對應的系統 SONAME;macOS 使用 /opt/homebrew 下的 ARM64 函式庫與系統的 libcurl
缺少程式庫、符號,或遇到不支援的操作時都會明確失敗;不會使用任何 Windows 裝置內容替代品
簽署與時間戳記
預設 PFX 提供者支援真正的 RSA 與 EC 身分、分離式 CMS、CAdES 與舊式附加 SHA1 設定檔;驗證會檢查 PDF ByteRange 位元組與 CMS 簽章
憑證鏈驗證需要明確的信任錨點;內嵌憑證不會取得信任,只有完整性也不代表可信
ApplyPAdESSignatureTimeStamp 使用設定的預設原生 HTTP 傳輸抓取並附加真正的 RFC 3161 權杖;請在原始簽章之前預留足夠的 /Contents 容量
時間戳記驗證會檢查簽署權杖、訊息印記、獨佔的關鍵 timeStamping EKU、TSA 名稱、選配的預期 policy/nonce,以及權杖產生當下的可信憑證鏈
文件時間戳記還會驗證實際的 PDF ByteRange 印記;呼叫端可以沿用既有的 DocTimeStamp 直通工作流程並自行提供權杖
中繼資料與描繪
XMP 使用真正的命名空間感知 DOM,編輯時保留不相關的屬性
不論來源編碼為何,XML 讀取器都會拒絕 DTD 宣告;輸入與解碼字元都有上界,並在組建 DOM 之前以串流方式限制深度與節點事件
描繪使用真正的原生點陣儲存與 Cairo 影像表面;分帶描繪保留裝置空間座標,並以保護列維持邊界反鋸齒的一致性
原生字族字型內嵌會解析出實際的 Fontconfig 檔案,內嵌完整的獨立 TrueType 程式,含 CIDFontType2、Identity CIDToGIDMap、初始化完成的度量與 Unicode 寬度;BMP 文字與可攜式 OCR 圖層在 PDF 儲存/重新載入後仍然有效
未內嵌的字族字型、字型集合、CFF 程式與僅限點陣的內嵌授權都會被此進入點拒絕;受限內嵌需要既有的明確授權覆寫,禁止子集化的字型則保持完整程式
限制
- Windows 裝置內容、EMF、GUI、剪貼簿與列印不在原生無頭後端的範圍內
- 複雜的原生文字 shaping 與 Windows 系統憑證存放區身分無法使用
- 獨立 TrueType 內嵌進入點目前支援 BMP 文字;補充平面文字、TTC face 擷取與 CFF 內嵌不在這個進入點的範圍
- 無法使用線上 OCSP/CRL 撤銷;要求撤銷驗證會回報未知結果
- 預設原生 PFX 提供者會拒絕 RSA-PSS 與額外的 policy、commitment 或 revocation 簽署屬性
- 原生 CMYK/ICC 轉換與索引式 1 位元 BMP 寫入無法使用
- HTTP 需要 libcurl 支援非同步 DNS,才能遵守 DNS 查詢逾時
建置與驗證
python3 Tests/Native/run_native_tests.py --compiler /path/to/fpc --output /tmp/pdflib-native-tests
要指定明確的編譯器組態請傳入 --config /path/to/fpc.cfg;測試執行器不會變更全域編譯器設定,也不會加入 -FcUTF8
測試套件會檢查實際的原生執行檔格式,並寫出包含編譯器/相依性版本、來源雜湊、執行檔雜湊、結果與限制的 JSON 報告
簽入的 Tests/Native 測試素材涵蓋 PDF 儲存/重新載入/描繪、文字工作流程、加密、中繼資料、簽章、真實 HTTP/TSA 流量,以及負向安全案例