PDFium Delphi Component 發布說明
PDFium Delphi Component 使用者可見功能、修復、檢視器改進、文件產生、PDF/A 輸出、彩現和文件更新的版本歷史
最新版本
- 最新版本:3.137.1;發行日期:
Version 3.137.1
修復 (Fixed)
- OpenSSL 線上撤銷檢查在沒有 OCSP 證據或可用回應者時,會保留先前 CRL 判定的狀態、原因、原生錯誤與受影響憑證,讓 CRL 過期診斷維持正確
Version 3.137.0
新增 (Added)
- 原生 Free Pascal/LCL 建置支援 Linux Qt6 與 macOS Cocoa,提供平台字型解析、私有暫存儲存,以及文件載入、編輯、表單、儲存與繪製
- macOS Keychain 簽署支援只作用於本次查詢的 Keychain 路徑,以及有資源上限的離線憑證鏈匯出,並提供原生 Free Pascal 與 Delphi 簽署及時間戳記傳輸
- 並行繪製回報各 Worker 實際的模組路徑、初始化位址與卸載結果,拒絕重用既有 PDFium 映像的原生載入器
修復 (Fixed)
- Unix PDFium 繫結保留 LP64 unsigned-long Callback 與緩衝區寬度,包括超過 4 GiB 的自訂串流讀取
- 原生 LCL 繪製遵循點陣圖位元組順序與通道配置,保留 Cocoa 輸出與裝置內容繪製的色彩
- 點陣圖、區塊與漸進式繪製可保留 clNone 與 clDefault 透明背景的 Alpha,不受原生頁面透明度查詢結果影響
- 簽署正確辨識憑證公開金鑰演算法,包括 EC 金鑰;macOS CMS 驗證保留外層簽章與時間戳記的獨立結果,並明確回報不支援的 RSA-PSS 驗證
- PAdES 時間戳記驗證要求 EKU 為 Critical,且僅包含 id-kp-timeStamping;OpenSSL 評估基本 TSA 憑證鏈時,不再錯誤套用 S/MIME 憑證用途
- Unix 原子式檔案提交在取代後目錄 Flush 失敗時,保留新的增量基準,並提供輸出已提交的例外與持久化未完成結果
變更 (Changed)
- Delphi POSIX Future 接受預設執行緒優先權,要求不支援的優先權時會在啟動 Worker 前拒絕
Version 3.136.0
新增 (Added)
- 可選用的 LittleCMS ICC 轉換與文件色彩轉換,直接使用原始文字、向量及 8-bit 或 16-bit 影像色彩分量,保留指定的特別色,並明確回報不支援的內容
- 複雜遮除可保留巢狀 Form XObjects、填色曲線路徑,以及旋轉、鏡射或傾斜影像中的受支援內容,並提供有限的幾何處理預算與詳細移除報告
- 讀取使用中的物件時,可在具體化與解碼前分別限制物件本文及壓縮物件串流的資源使用
安全性 (Security)
- 遮除會拒絕 Tagged 替代文字、XFA、選用內容圖層、文字裁切及無法驗證的繪製狀態,包括跨內容串流拆開的運算子,避免匯出具有不支援語意的敏感內容
Version 3.135.0
新增 (Added)
- 註解與 AcroForm Widget 比較不依賴頁面像素,使用穩定名稱、明確頁面對應、歧義報告與變更前後的疊圖邊界回報屬性差異
- 表格儲存格支援混合文字樣式、具有替代文字的影像、可選的跨頁合併儲存格續接、小計列與續頁標籤,並保留 Tagged PDF 關聯
修復 (Fixed)
- Tagged 版面產生會先初始化原生程式庫,再檢查功能,因此可以直接作為新文件元件的第一項操作
- 同一文字物件中的多次取代,會以原始邊界一次完成尺寸調整,落實整體最小水平縮放比例,避免不必要的中間編輯
Version 3.134.0
新增 (Added)
- 導覽合併可在選取、重新排序及重複匯入頁面時保留具名目的地與內部頁面連結,並提供明確的衝突策略與交易式驗證
- 樣式文字取代新增經驗證的來源計畫、獨立預覽、原生字型重用、明確的備援字型、有上限的水平尺寸調整,以及失敗或取消後的復原
- OpenSSL 簽署接受明確設定的私鑰與憑證鏈,支援 RSA-PSS、RSA PKCS#1 v1.5 及 ECDSA,並可在 Windows 以外的平台解析預設簽署者
- OpenSSL 驗證新增經驗證的離線與有上限的線上 OCSP 證據、驗證失敗的憑證識別資訊,以及可選的個別 CMS 簽署者診斷
- FPC macOS Security.framework 驗證器可使用明確的信任錨點與提供的 OCSP 證據,分別回報密碼學驗證、憑證鏈信任與撤銷結果
修復 (Fixed)
- 連結註解 URI 擷取現在提供包含終止字元的完整原生緩衝區,正確傳回有效的目標網址
Version 3.133.0
新增 (Added)
- 交易式 AcroForm 合併支援選定頁面、拒絕欄位、重新命名、命名空間及相容的共用文字/選項欄位,並隔離資源、外觀與計算順序
- 可選用的條碼提供者可產生 Code128、QR、DataMatrix 與 PDF417,並辨識灰階影像,原生相依項目與處理預算均明確指定
修復 (Fixed)
- FormField 可讀取繼承的父欄位值,並在共用 Widget 間一致提交文字編輯,儲存後重新開啟仍保留值,且會檢查唯讀狀態
- 繼承文字 Widget 重新產生外觀後會還原父欄位值,不留下 Widget 層級的遮蔽值;成功指派欄位後也會使共用頁面快取失效
Version 3.132.0
新增 (Added)
- 可選用的頁面對齊可辨識新增、刪除與移動的頁面,並提供有上限的 Unicode 文字差異、連通視覺區域與可匯出的比較疊圖
- 交易式導覽合併可在選取、重複與重新排序匯入頁面時,保留大綱階層、樣式、URI 動作及重新對應的目的地
- 可選用的 Tesseract OCR 提供者支援明確的相依項目診斷、Unicode 詞語幾何、取消操作與辨識預算,並驗證可搜尋文字層能否儲存後重新開啟
安全性 (Security)
- RSA-PSS 策略評估完整簽章及受限制公開金鑰的參數,拒絕格式錯誤的 DER,以及不相容的雜湊、遮罩、Salt 或 Trailer 限制
修復 (Fixed)
- 大綱儲存驗證不再因為僅適用於分支的展開狀態差異,而拒絕葉節點書籤
Version 3.131.0
新增 (Added)
- WatermarkStamp 現在接受目標 PDF、印章 PDF 與目標頁面區間,也支援僅輸出頁碼;混合頁面尺寸時會按比例放置
- MergePDF 現在會在合併前預覽每個輸入的選定頁面與目的區間,也支援以單一輸入擷取頁面
修復 (Fixed)
- MergePDF 在匯入前驗證所有來源;遇到無法讀取的輸入、無效區間、匯入失敗或取消操作時會停止,不會儲存不完整的合併結果
- WatermarkStamp 保留來源與範本檔案,即使兩種印章疊圖都停用,仍可可靠地儲存頁碼
變更 (Changed)
- 各原生示範目錄聚焦於 22 個完整工作流程,將 SecurityAudit 與 XfdfLab 移至 Miscellaneous,並修正專案路徑與導覽
移除 (Removed)
- 移除固定的 AnnotationsLab 操作範例;註解建立、檢查與交換仍由 XFDF、內容擷取範例及 API 測試涵蓋
Version 3.130.0
變更 (Changed)
- 各原生 demo 目錄以 24 個完整工作流程為主軸重新規劃,九個聚焦式 API 主題改放在 Miscellaneous 底下,並另外說明如何挑選第一個 demo
- 聚焦式的註解、無障礙、字型、導覽、文字匯出、頁面影像繪製、列印偏好、互動與 XFA 範例都保留了下來,並各自附帶原始碼與內建輸入資料
移除 (Removed)
- 移除精簡的 CJKTextLab 與 RTLTextLab 專案;Unicode 撰寫仍可在 CreatePDF 中使用,塑形文字 API 也持續記錄於 API 參考中
修正 (Fixed)
- 修正 C++Builder 無障礙 API 走訪在匯出語音腳本時失敗的問題
- 修正 C++Builder 註解範例對標示座標使用錯誤陣列偏移量的問題
Version 3.129.0
變更 (Changed)
- 讓每個原生 demo 都自帶所需內容:範例邏輯移進實際使用它的專案、展示用 PDF 隨相關的檢視與擷取專案一起打包,並移除 Demo/Shared 目錄
- 專案單獨複製出去後,離線功能導覽、即時預覽、可編輯表單、預先填入內容的報告、附件、導覽、列印偏好與靜態 XFA 檢查都仍然可用
- FontProperties 開啟時就直接顯示實際的字型與字元度量,開啟另一份文件後也會立即分析第一個文字物件
修正 (Fixed)
- 統一各原生變體中 PDFViewer 體驗列的位置與背景,並讓 FontProperties 在關閉前釋放檢視器關聯
Version 3.128.0
新增 (Added)
- 新增一份可離線使用的六頁展示文件,具備真實文字、向量圖表、嵌入式影像、表格、AcroForm 欄位、書籤、連結、註解與附件
- 所有原生 PDFViewer 變體新增一鍵即用的檢視體驗,涵蓋文字搜尋、雙頁版面配置、夜間閱讀、文件檢查與表單探索
變更 (Changed)
- CreatePDF 現在會開啟雙頁即時預覽,提供可編輯的中繼資料與內容選項、真實的影像與註解物件,並可在儲存前額外加入 Unicode 頁面
- 聚焦式的檢視、搜尋、擷取、表單與導覽範例現在會開啟已載入內容的工作流程;附件、列印偏好與靜態 XFA 範例則內含實際的功能特定資料
修正 (Fixed)
- 修正檢視器在啟動、文件替換、預覽重新產生與關閉期間的生命週期與焦點處理
- 修正 Lazarus 版 FormFill 的值編輯器在啟動後選取第一個欄位時仍保持停用的問題
- 修正 SearchAndSelect 的文件繫結與擷取報告:先前的報告會遺漏後續頁面的表單欄位,或對產生的記憶體內範例查詢不可用的檔案標頭
Version 3.127.0
變更 (Changed)
- MultiPageViewer 範例改用檢視器內建的文字選取與剪貼簿 API,讓選取行為在各種頁面版面配置間保持一致,並移除原本獨立的雙擊選取模式
- 範例指南將全部 35 個 demo 主題對應到各自的工作流程,Delphi 與 Lazarus 的無障礙、進件與 preflight 主控台範例共用相同的 Pascal 實作
新增 (Added)
- XfdfLab 可在匯入 XFDF 後儲存 PDF:Delphi GUI 提供 Save PDF 功能,主控台版本則接受明確的第二個輸出路徑
修正 (Fixed)
- C++Builder 與 Lazarus 的 MultiPageViewer 範例開啟時不再使用不支援的表單屬性,且所有 MultiPageViewer 範例都會在關閉前中斷文件連結
- Lazarus 無障礙工作台會為其 HTML 檢閱報告產生 JPEG 頁面縮圖
- ExtractImages 範例會建立內含真實嵌入式影像物件的兩頁範例文件,因此預設擷取工作流程會產生四張影像
- XFDF 往返的主控台範例會保留註解內容與作者資料,並在寫入輸出前拒絕衝突或已存在的 PDF 輸出路徑
Version 3.126.2
修正 (Fixed)
- 完整 XFA 檢視在預設文字選取設定下可正常運作,鍵盤輸入時會取代選取的文字,遵守唯讀欄位與停用的表單事件,並在動態版面配置變更後重新整理顯示中的頁面控制代碼
- Windows V8 程式庫會在變更存回的 XFA 串流之前,先拒絕格式錯誤的 XDP 屬性、重複的屬性、無效的命名空間用法與不相符的 XML 宣告
安全性 (Security)
- 簽章修訂分析在 widget 與外觀物件指向同一物件圖時仍保有頁面內容的擁有權,避免之後的頁面編輯被 DocMDP 誤判為允許的表單或註解更新
- 被鎖定的欄位與註解共用同一個間接值物件時,FieldMDP 鎖定依然有效
Version 3.126.1
修正 (Fixed)
- 動態 XFA 重新分頁現在會在頁面新增或移除後,以實際總頁數更新
TPdf.PageCount與OnXfaPageCountChanged,讓宿主的導覽與表單版面配置保持同步 - 更新後的 Windows V8 程式庫會在動態 XFA 版面配置變更後重新整理輸入 widget 的幾何資訊,欄位移到其他頁面時文字與輸入命中區域仍保持對齊
Version 3.126.0
新增 (Added)
- 更新後的 Win32 與 Win64 V8 程式庫在儲存支援的單串流 XFA 文件時,會保留作用中 datasets 與表單封包以外的 XML 註解與處理指令,UTF-8 與 UTF-16 輸入都適用
修正 (Fixed)
- 單串流 XFA 儲存現在會拒絕無效的 UTF-8 或 UTF-16 編碼、不完整的標籤、無效的實體參照與格式錯誤的處理指令,不再默默改寫這些輸入;作用中資料封包內不支援的建構、DTD 宣告與 XMLDSig 仍然明確判定為儲存失敗
- 檢視器的複製、剪下與表單貼上在 Windows 剪貼簿被其他執行緒或應用程式佔用時會短暫重試,讓瞬間的競爭狀況自行排除;剪下失敗時仍會保留欄位的原始文字
Version 3.125.3
修正 (Fixed)
- 更新後的 Win32 與 Win64 一般版
pdfium.dll程式庫,現在最終緩衝 PDF 寫入失敗時會回報失敗,與先前 V8 程式庫內建的修復一致
Version 3.125.2
修正 (Fixed)
- 更新後的 Windows V8 程式庫對封包陣列與支援的單串流 XDP 文件,在儲存與重新開啟後都能保留編輯過的 XFA 文字,包括空值、原始空白、換行與增補 Unicode 字元
- 在更新後的 V8 程式庫中,XFA 封包匯出錯誤與最終緩衝寫入器失敗現在都會回報儲存失敗,且不會清除文件的修改狀態;含不支援 XML 建構或 XML 簽章的單串流文件會被拒絕
- 更新後的 V8 程式庫在 PDFium 初始化與銷毀的整個過程中,會保留宿主應用程式明確提供的 V8 platform 與 isolate
LibraryName中的明確路徑現在兩種引擎模式都會選用該執行階段,包括EnableV8Engine=True;明確路徑不存在時直接失敗,不會改載其他隨附程式庫
Version 3.125.1
修正 (Fixed)
ValidatePdfFilesParallel不再弄壞共用的 PDFium 引擎:過去 worker 執行緒會同時開啟並檢查多份文件,導致某些文件出現載入錯誤或存取違規,甚至讓處理序當掉或影響後續 PDF 操作;現在每份文件的 PDFium 部分改為逐一處理,規則評估仍維持平行- 批次驗證中無法開啟的文件現在會回報實際的載入錯誤,而不是後續才出現「沒有作用中 PDF 文件」的訊息
Version 3.125.0
新增 (Added)
PdfLibraryConfigurationSupportError可查詢某個TPdfLibraryConfiguration能否用於具備指定 Skia 與 Fontations 能力的 PDFium 建置
修正 (Fixed)
- 在沒有 Skia 的 PDFium 建置上要求
prpSkia,或在沒有 Fontations 的建置上要求pfbpFontations,現在會讓程式庫載入引發EPdfError,而不是觸發會中止處理序或讓 PDFium 半初始化的原生檢查;設定保持未封固,應用程式可改用其他設定再載入一次
Version 3.124.0
變更 (Changed)
- PAdES 驗證現在會對 RSA 簽章套用 ETSI TS 119 312 簽章套件,不再照單全收所有 RSA 演算法:MD2、MD4 與 MD5 摘要的
AlgorithmPolicyStatus為pcsInvalid,SHA-1 與 SHA-224 這類 112 位元摘要為pcsIndeterminate,因為它們已不再列入現行驗證的認可範圍;SHA-1 簽章的整體完整性結果維持不變,只會被標記為待審查而非直接拒絕 - RSA 簽章的
digestAlgorithm若與簽章演算法固定的摘要不一致(例如 sha256WithRSAEncryption 搭配 SHA-1 摘要),現在會回報ppeiSignatureAlgorithmMismatch並判定完整性失敗;RSA 簽章演算法用在非 RSA 簽署者金鑰上時同理 - 找不到簽署者憑證的 RSA 簽章現在回報
pcsIndeterminate,與既有 ECDSA 行為一致;無法辨識的摘要與非簽章用途的 RSA OID 則回報pcsUnsupported - 採用 SHA3 摘要的 RSA PKCS #1 v1.5 簽章,以及舊式的 OIW sha1WithRSASignature 識別碼,現在都會被辨識為 RSA
Version 3.123.0
新增 (Added)
PdfNativeRendererType可查詢某個TPdfRendererPreference在指定 PDFium 建置上會選用的算繪器,prpDefault在啟用 Skia 的執行階段解析為 Skia,否則為 AGG
修正 (Fixed)
- 在
ConfigurePdfLibrary中啟用BrotliEnabled或IsolatePerDocument,而算繪器偏好留在prpDefault時,不再把算繪從 Skia 切換成 AGG;隨附的 Skia 啟用執行階段現在保住預設算繪器,頁面輸出不會再隨這些無關選項變動
Version 3.122.2
修正 (Fixed)
- Free Pascal 與 Lazarus 建置現在在所有載入路徑(檔案、記憶體、自訂串流與漸進式載入)都以 UTF-8 把檔名與密碼傳給 PDFium,因此位於中文、日文或其他非 ASCII 名稱資料夾內的文件,以及使用非 ASCII 密碼的加密文件,即使程式未採用 Lazarus UTF-8 字串模式也開得起來
Version 3.122.1
修正 (Fixed)
LastLoadReport現在每次載入失敗都會被取代:失敗的Active:= True(不引發例外、元件保持非作用中)與失敗的普通LoadDocument或LoadCustomDocument呼叫,都會以錯誤文字回報plsFailed,重用單一TPdf的批次程式碼不會再看到前一個檔案被回報為已載入Active說明頁現在如實描述失敗行為(不引發例外、元件保持非作用中、細節見LastLoadReport),並說明FileName只能在元件非作用中時變更
Version 3.122.0
新增 (Added)
FPdfAssocFiles中的EPdfAssocFilesError會說明InjectAssociateFiles無法注入的原因:來源沒有可讀的 trailer 或 catalog,或TargetPage為負值、指向不存在的頁面;目的地串流保持原樣未修改
變更 (Changed)
SaveAsWithAssociateFiles與SaveAsWithAssociateFilesToStream現在會在TAssocFilesOptions.TargetPage超出0..PageCount時引發EPdfError;這類值過去會被改掛到文件 catalog 上,與文件說明的行為不符
修正 (Fixed)
SaveAsWithAssociateFiles與SaveAsWithAssociateFilesToStream在儲存後的文件無法解析供注入時,現在會回傳False,不再原樣寫出檔案卻回傳True而缺少要求的檔案SaveAsWithAssociateFiles不再在輸出產出之前就截斷既有的目標檔案;被拒絕或失敗的儲存會讓檔案保持原狀
Version 3.121.4
修正 (Fixed)
- 頁面層級關聯檔案(
TAssocFilesOptions.TargetPage)現在會附加到文件頁面順序中對應位置的頁面;過去當頁面物件在檔案內的儲存順序與顯示順序不同時(例如頁面曾重新排序或插入),檔案可能落到別的頁面上
Version 3.121.3
修正 (Fixed)
- 以
SaveAsWithAssociateFiles儲存的關聯檔案,現在中文、日文與其他非 ASCII 檔名和描述都能保持原樣:/UF與/Desc改以 Unicode PDF 文字字串寫入,不再經過系統 ANSI 字碼頁轉換(Delphi)或直接輸出原始 UTF-8 位元組(Free Pascal) - 傳統的
/F檔名現在一律是可攜的可列印 ASCII,非 ASCII 字元以_取代,自行用字碼頁解碼/F的閱讀器不會再顯示亂碼
Version 3.121.2
修正 (Fixed)
- 關聯檔案的 MIME 類型現在會編碼成合法的 PDF 名稱,像
text/plain這類值不會再產出格式錯誤的內嵌檔案字典,也不會擋住 PDF/A-3 驗證
Version 3.121.1
修正 (Fixed)
- 讀取註解再寫回變更時,若 rollover 與 down 外觀串流原本不存在,不會再建立空串流,保住 PDF/A 對註解外觀的要求
Version 3.121.0
新增 (Added)
- 啟用
OnlineRetrieval後,OpenSSL CMS 驗證可以透過 HTTP(S) 擷取 AIA 中繼憑證與 CRL,並共用逾時、請求數與回應大小上限;下載的憑證在設定的信任鏈完成驗證之前不會被信任 - 線上擷取在 Windows 上使用 WinHTTP,FPC Unix 上使用可用的 libcurl,保留 HTTPS 憑證驗證,不支援的傳輸組態則透過既有的 capability 診斷呈現
修正 (Fixed)
- 傳統交叉參考表重建改為一次配置輸出表並直接填入物件槽位,物件編號大量稀疏時不再付出二次方等級的代價,同時保留解析器的資源限制與最新的物件世代
- PDF/X-1a 輸出要求結構有效的 ICC v2 CMYK 印表機設定檔,不再默默內嵌預設的 RGB 設定檔;設定檔無效時,會在開啟既有目的地檔案準備覆寫之前就失敗
- PDF/X-1a 驗證會檢查內嵌設定檔及其四聲道宣告,預檢報告也能指出無效的輸出設定檔;預設的 output-condition 標籤跟隨所提供的設定檔,呼叫端明確指定的標籤則保持不變
Version 3.120.4
修正 (Fixed)
- 表格擷取示範程式的批次模式再次能處理資料夾裡的每一份 PDF:先前共用的文件執行個體會跨檔案保持啟用,第二份之後的檔案因此觸發指派錯誤並被回報為失敗;現在 Delphi、Lazarus 與 C++Builder 版本都讓每份文件使用自己的執行個體
- 浮水印示範的範例文件頁面維持建立順序(1、2、3、4),不再透過指定索引插入的呼叫把第一頁轉到最後
- XFA 與 XFDF 示範在文件開啟失敗時以訊息回報,不再丟出未處理例外;附件示範在已載入文件的情況下也能另起新文件;Lazarus 檢視器會釋放它存檔的點陣圖
- Delphi 列展示範現在會把方向、雙面列印、灰階、品質與 DPI 設定套用到列印工作,遵循列印對話方塊中選擇的份數,略過算繪失敗的頁面,並在列印後還原預覽
- 載入器會吞掉開啟失敗的互動式示範,不再顯示誤導人的已載入狀態;擷取輸出檔案帶有 UTF-8 BOM;CJK 與 RTL 主控台示範在輸出擷取文字前先把主控台切到 UTF-8;信心度輸入解析小數時不再受系統區域設定影響
- PAdES 時間戳測試現在真的會斷言驗證器在注入簽章時間戳後達到 B-T 層級,並搭配一份自我一致的 ByteRange 測試文件
- 已載入 pdfium.dll 時,API 涵蓋率與 PDF/A 測試不再把任何載入失敗當成環境因素跳過;新增一個迴歸測試,涵蓋解密字串值被第三方產生器序列化為直接字串的文件
Version 3.120.3
修正 (Fixed)
EncryptDocumentBytes不會再丟掉以增量方式儲存的來源 PDF 中基礎修訂版的所有物件:現在會透過/Prev以新到舊的順序走訪傳統交叉參考鏈,較新的項目勝出;來源已加密時直接拒絕;stream關鍵字必須先關閉字典才會被當成串流資料;最後一個物件的範圍由來源 xref 界定,而不是其位元組裡第一個endobj- 由第三方產生器產出、字串值被序列化為直接字串的加密文件,現在可以解密,不會再因驗證錯誤而失敗
- 當來源 trailer 沒有
/Info時,PDF/E 標記注入不再讓合成的 Info 字典與內嵌 ICC 設定檔串流取用相同的物件編號——先前這會讓增量 xref 把/DestOutputProfile指到錯的物件 - PDF/X 驗證比較 XMP
pdfxid:GTS_PDFXVersion值時會先去除前後空白,因此合法填補的元素形式 XMP 不會再誤報 Info 不一致 - PDF/UA 驗證能辨識屬性形式的
pdfuaid:partXMP,會像其他標準驗證器一樣在位元組掃描前先展開物件串流,對交叉參考串流文件也檢查加密的/P位元,並要求非空的dc:title值;標記注入不再輸出空的標題項目 - 當來源帶有損毀的 DPart 階層(在頁面清單填完後驗證失敗)時,PDF/VT 標記注入不再把每個頁面物件收集並改寫兩次
- 在沒有
TsaUrl的情況下以 PAdES B-T 以上層級簽署,現在會直接引發錯誤,而不是默默產出 B-B 簽章;B-LTA 文件時間戳改為自行產生 nonce,不再重發呼叫端傳入的值 - CMS 簽章時間戳注入遇到多位簽署者輸入時會直接拒絕,不再默默丟掉第一個之後的所有 SignerInfo;SignedData 版本在使用 subjectKeyIdentifier sid 時改為 3;時間戳請求依 DER 規則省略
certReq FALSE;WinHTTP 在主體中途傳輸失敗時回報為傳輸錯誤,而不是被截斷的 DER 主體 - 系統字型內嵌會為要求的字族解析 TrueType Collection 中實際的字面,並把它抽成獨立字型,因此要求
.ttc的非第一字面(例如 NSimSun)不會再內嵌並算繪第 0 個字面 BuildToUnicodeCMap能正確地把字形與代理對字元配對,並把增補平面對應輸出為 bfchar 項目,不會再讓第一個增補平面字元之後的每個項目整體位移- 整形文字、CID 文字與 OCR 插入會先檢查頁面插入結果,再把物件記錄下來供復原使用,插入失敗不會再留下會被銷毀兩次的懸空控制代碼
- 壓縮器與 ToUnicode 修復中的 stream 關鍵字偵測,接受 ISO 32000-1 7.3.8.1 允許的單一 CR 換行
變更 (Changed)
- 試用版 Win64x C++Builder 套件建置會移除先前完整建置遺留的過期 COFF
PDFiumPas.lib,避免兩種匯入程式庫形式一起被出貨;FULL 安裝程式的萬用收納清單排除僅供本機開發的檔案(packagefiles.xml、狀態文件);安裝後的示範建置改以建置腳本實際讀取的PDFiumPas_BDS_ROOT變數固定 IDE 根目錄
Version 3.120.2
修正 (Fixed)
- 透過
AddText、SetText、版面配置產生與 OCR 搜尋層放入的文字,無論從活動中的文件還是儲存後的檔案擷取,現在都保留原始碼點:在目前 PDFium 建置下,空白不會再變成 U+00A0,連字號不會再變成 U+00AD - 系統字型改為以碼點索引的 CID 字型內嵌,每個 Unicode 字元一個 CID 並帶有明確的
CIDToGIDMap,因此被多個字元共用的字形(空白與不換行空白、連字號與軟連字號、Omega 與歐姆符號)在任何檢視器中來回都能忠實還原各自的字元;沒有 Unicode cmap 子表的字型維持原本的內嵌路徑
Version 3.120.1
修正 (Fixed)
- 使用子集字型儲存的文件重新載入後,擷取文字不再損壞:pdfium 序列化的 ToUnicode CMap 可能把同一個 CID 對應到兩個不同碼點(空白變 U+00A0、連字號變 U+00AD),現在每次完整儲存都會就地修復這些矛盾對應,同時讓 CMap 結構逐位元組保持一致,PDFium 讀取器、MuPDF 與 qpdf 都能擷取出原始字元
- 增量儲存、稀疏更新與交叉參考串流文件永遠不會被此修復改寫,會原樣通過;沒有矛盾對應的檔案則逐位元組複製
- 隨附的
sample.pdf測試夾具已以修復後的儲存路徑重新產生,載入政策測試也改成動態定位 xref 項目,不再寫死夾具位移
Version 3.120.0
新增 (Added)
- 書籤會回報大綱文字樣式:
TBookmark.Style攜帶透過新的FPDFBookmark_GetStyle繫結讀取的斜體與粗體旗標,BookmarkStyleFeaturesAvailable則告訴你已載入的 pdfium.dll 是否匯出該函式 - 附件會公開 PDF 2.0 的關聯檔案關係:
AttachmentRelationship[]、TPdfAttachmentMetadata與TPdfAnnotationAttachment的Relationship欄位透過新的FPDFAttachment_GetAFRelationship繫結讀取/AFRelationship名稱,並由AttachmentRelationshipFeaturesAvailable保障可用性 GetObjectRenderedStrokePattern透過新的FPDFPageObj_GetRenderedStrokePattern繫結,把路徑物件描邊所用的平鋪圖樣點陣化為呼叫端自有的點陣圖;StrokePatternRenderingFeaturesAvailable回報該匯出是否存在TPdfLibraryConfiguration.IsolatePerDocument對應FPDF_LIBRARY_CONFIG第 7 版的m_IsolatePerDocument旗標,讓 V8 建置能為每份文件配置專屬 isolate;ConfigurePdfLibrary會拒絕該旗標與明確V8Isolate併用的組合
變更 (Changed)
- 目前 PDFium 標頭檔的全部 476 個公開匯出都已完成繫結;三個新進入點採寬鬆載入,較舊的 pdfium.dll 部署照常運作,對應功能則回報空值或
nil
Version 3.119.1
修正 (Fixed)
- Windows 離線信任驗證也把撤銷資料擷取限制在快取資料,線上擷取停用時不會再發出隱性的 CRL 或 OCSP 網路請求
- Windows 撤銷失敗會保留獨立的鏈信任錯誤,並把撤銷原因與原生診斷公開到 PAdES 結果與證據報告
Version 3.119.0
新增 (Added)
- PAdES 信任驗證與證據報告為文件簽章與時間戳分別公開撤銷原因與原生錯誤,包括 JSON 欄位與附加的 CSV 欄
Version 3.118.0
新增 (Added)
- CMS 驗證結果公開
RevocationReason與RevocationError,針對過期、無法取得與無效的本機 CRL 提供 OpenSSL 診斷
修正 (Fixed)
- 當鏈信任成功且本機 CRL 驗證確認撤銷時,OpenSSL 會把被明確撤銷的憑證回報為無效,同時保留各自獨立的簽章與信任結果
Version 3.117.1
修正 (Fixed)
- 明確版本的儲存能接受帶有預測器壓縮交叉參考串流的有效多頁表單,不再誤報交叉參考區段損毀
Version 3.117.0
新增 (Added)
- 表格偵測現在讀得懂以填滿矩形畫出來的框線與底紋:厚度不超過新
MaxRulingThickness的填滿方塊會被當成一條格線,較大的填滿方塊則貢獻它的邊緣,於是從 Word、Google Docs 與瀏覽器匯出的表格,現在能以帶合併標題列的格線網格被找出來,而不是淪為空白片段。DetectFilledRulings可關閉這項行為 - 在組裝網格之前,格線座標會在
RulingSnapTolerance範圍內貼齊,讓逐儲存格的框線片段、雙重框線,以及中間只隔一小段溝槽的帶底紋儲存格合併成同一張表格 - 表單 XObject 內部的格線也會透過合成後的物件矩陣參與偵測,由
IncludeFormXObjects控制 ExtractDocumentTables現在會串接在前頁內容結束處收尾、又從下一頁內容開頭接續的延續片段,而不只認貼著頁面邊緣的片段,單獨溢出一列也會保留在延續鏈中- TableExtractionLab 在 Delphi、Lazarus 與 C++Builder 三種版本的選項面板都公開了
DetectFilledRulings
變更 (Changed)
- 空白偵測會忽略已屬於某個格線網格的詞,並要求每一條欄位邊界在其分隔的各列之間都是一條沒有文字的通道,因此兩端對齊的段落與項目符號清單不會再被誤報為表格
- 第一列只有一個橫跨整個寬度的儲存格之延續候選,現在會被視為一張帶標題的新表格,而不是前一張表格的後續
MinRows對格線網格接受 1;空白偵測維持至少兩列的下限,而MaxRulingSegments的預設配額提高到 16384,因為逐儲存格的框線方塊數量遠多於描邊的格線- 儲存格文字改為由相互重疊的字詞方塊逐行組裝,因此字形方塊高度不一致的字詞仍能保持由左至右的順序
TPdf.AboutInfo、Lazarus 套件中繼資料與安裝程式版本中繼資料回報 3.117.0
Version 3.116.4
新增 (Added)
- TableExtractionLab 新增資料夾批次處理:
Batch folder會對所選資料夾裡的每個 PDF 執行ExtractDocumentTables,列出每份文件的表格數,把沒有文字層的文件標記為需 OCR,並避免損毀或鎖定的檔案中斷整個執行 Export all CSV會把每個偵測到的表格寫成<document>-<n>-page<p>-t<i>.csv:批次執行時放在tables子資料夾底下,單一檔案時放在所載入文件旁- 偵測預設集選擇器提供調校過的
TPdfTableExtractionOptions:Default、Compact columns(MinColumnGap4 搭配AlignmentTolerance5,因應文書處理軟體輸出的緊湊版面),以及 Compact + wide rows(MaxRowGapFactor6,因應 1.5-2 倍行距) - 在 Default 預設集下擷取不到表格的文件,無論單份擷取還是批次擷取,都會改用 Compact columns 重試一次,批次結果列也會回報實際生效的預設集
修正 (Fixed)
- 批次擷取改為每份文件各自開一個
TPdf執行個體,不再反覆重載同一個共用元件,因此掃資料夾跑到一半時那類默默載入失敗、再以元件未啟用錯誤冒出頭的情況不會再發生
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料與安裝程式版本中繼資料回報 3.116.4
Version 3.116.3
變更 (Changed)
- 三套工具鏈的 TableExtractionLab 範例現在都會把產生的範例文件寫到 demo 執行檔旁的
TableExtractionSample.pdf,不再只留在記憶體裡;若資料夾不可寫,實驗室會退回先前的純記憶體行為,並在狀態列說明 TPdf.AboutInfo、Lazarus 套件中繼資料與安裝程式中繼資料回報 3.116.3
Version 3.116.2
修正 (Fixed)
- 程式庫在較舊的 Delphi 版本上編譯不過了。64 位元 tick 輔助函式以及信任清單與 production XML 編解碼器,從只有較新編譯器才內建的 RTL 單元呼叫
GetTickCount64與CP_UTF8;重排 HTML 寫入器內嵌的 CSS 字串字面值超過那些編譯器對單一字面值 255 個元素的上限;XFA datasets 的合併作業則在TBytes與普通動態陣列欄位之間直接指派,XE7 之前的編譯器不接受這種寫法。現在較舊的編譯器會改從 kernel32 繫結GetTickCount64,RTL 沒有CP_UTF8時就在本地宣告;樣式表改以多段短字面值串接而成;封包承載則逐元素複製
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料與安裝程式中繼資料回報 3.116.2
Version 3.116.1
新增 (Added)
Demo\Delphi\TableExtractionLab、Demo\CBuilder\TableExtractionLab與Demo\Lazarus\TableExtractionLab把表格偵測整合成單一工作流。實驗室先建立一份範例文件,內含帶合併表頭儲存格的格線表格、沒有格線而靠空白對齊的表格,以及一張會跨頁斷開的長表格,接著執行ExtractTables或ExtractDocumentTables,列出列數、欄數、合併跨度、表頭旗標、偵測模式、信心度與延續群組- 實驗室可透過
TPdfTable.ToCsv與TPdfTable.ToJson匯出選取的表格,從選項面板調整DetectRuledTables、DetectWhitespaceTables、DetectContinuations與MinConfidence,並能把完整報告複製到剪貼簿 TPdf.AboutInfo、Lazarus 套件中繼資料與安裝程式版本中繼資料回報 3.116.1
Version 3.114.21
修正 (Fixed)
- PDF/A 驗證會對任何含註解的文件回報外部檔案參照。ISO 19005-1 §6.1.7 禁止串流物件字典出現
/F、/FFilter與/FDecodeParms,但這項檢查卻搜遍整個檔案找這些名稱,而/F同時也是 §6.5.3 規定每個註解都必須帶的註解旗標鍵。現在這項檢查只看串流物件字典內部
Version 3.114.20
修正 (Fixed)
- 三個簽署後端的 RSASSA-PSS 簽章都帶了格式錯誤的演算法參數。RFC 4055 要求 RSASSA-PSS-params 的四個欄位全部打上標籤;鹽值長度卻被寫成裸整數,剖析器會把它讀成另一個欄位的開頭,而 trailer 欄位雖然值等於 DER 規定必須省略的預設值,卻仍被寫了出來。驗證器因此不是解析不了參數,就是退回預設的 20 位元組鹽值,簽章本身用的卻是 32,PSS 簽章於是遭到拒絕。PKCS#1 v1.5 與 ECDSA 簽章不受影響
Version 3.114.19
修正 (Fixed)
- 以 SHA-256 以外的摘要要求時間戳時,建出的請求會宣告那個演算法、帶的卻是 SHA-256 摘要,時間戳授權單位不是直接拒絕,更糟的是照單全收蓋了章。實際上只算得出 SHA-256,所以其他識別碼現在會當場拒絕;空的識別碼仍選用 SHA-256 預設值。Lazarus 與 C++Builder 版 PDF Viewer 範例也繫結了一個表單檔案有命名、程式碼卻沒定義的書籤展開處理常式,表單一載入就會出錯;該處理常式已從 Delphi 範例移植過來
Version 3.114.18
修正 (Fixed)
- Delphi 版 XFA Lab 與 XFDF Lab 範例,以及 Lazarus 版 XFA Lab 範例,啟動時就會失敗。它們都在表單的建立處理常式裡建構控制元件,但表單資源既不存在也沒被連結,建立主表單時就拋出找不到資源的錯誤,處理常式根本沒機會執行。三個範例現在都帶上了表單檔案與內嵌它的指示詞
Version 3.114.17
修正 (Fixed)
- 有兩個原生資源在作業半途失敗時被錯誤處置。縮圖彩現失敗時,目標點陣圖會在關閉原生彩現之前就被釋放,若彩現當時正直接畫進那張點陣圖自己的像素,清理流程就會讀到已釋放的記憶體。
AddBitmap裡點陣圖配置失敗時,剛建立的影像物件就此無人持有,也再也取不回來
Version 3.114.16
修正 (Fixed)
- 讀取 FDF 文字時,
0x7E以上的字元會解錯。ISO 32000-1 附錄 D.2 的 PDFDocEncoding 表從0x80起才是項目符號,這份對應表卻從0x7F就開始,整個區塊到0x9F為止全部錯位一格:劍號讀成項目符號、長破折號讀成刪節號,一路錯到 zcaron 直接掉出表外。0xA0的歐元符號也漏掉了,讀回來變成不換行空格。匯入 FDF 的欄位名稱與欄位值現在都能正確解碼
Version 3.114.15
修正 (Fixed)
- 對檔尾或 catalog 字典讀不出來的文件做信任驗證時,會寫入超出陣列結尾。這種情況下合規檢查會放棄、一筆簽章都沒記錄,接著執行的收集器卻直接讀位元組流,仍找得到簽章字典,於是每找到一個字典就往空陣列寫進一筆。現在計數會被夾限在合規檢查實際產出的數量
Version 3.114.14
修正 (Fixed)
- 執行 PDF/A 修復計畫時,會把規劃器已封鎖的步驟也做下去。步驟被封鎖的條件是:文件帶有簽章、該步驟會使簽章失效,而呼叫端又不允許這麼做;執行器卻只檢查步驟的安全層級,而這個條件並不由安全層級表達,於是已簽署文件的簽章可能被計畫早已拒絕的自動修復弄到失效。被封鎖的步驟現在會跳過,並計入跳過數
Version 3.114.13
修正 (Fixed)
- 對憑證集合超過 127 位元組的 CMS 值加簽章時間戳時——而這涵蓋每一張真實憑證——結果會損毀。定位巢狀結構起點的輔助函式往回走長度位元組時,把最後一個位元組當成了第一個,切出來的片段遠早於它要找的結構。標頭長度現在改由內容長度推導,DER 對此寫得明明白白。自我檢查沒抓到這個問題,是因為測試夾具的憑證小到用短形式就夠
Version 3.114.12
修正 (Fixed)
- 簽署屬性照建構順序輸出,而不是像 X.690 §11.6 對 DER SET OF 要求的那樣按編碼排序。驗證器若在計算摘要前先把屬性集合重新編碼——OpenSSL 和 BouncyCastle 都是這麼做的——就會算出不同的摘要,把完好的 PAdES 簽章判成無效。這個程式庫產生的簽章現在在那些驗證堆疊裡都能通過;經 Windows 層驗證本來就不受影響,因為它直接對收到的位元組算摘要
Version 3.114.11
修正 (Fixed)
- 超過兩個內容位元組寬的負 DER INTEGER 會被編碼成錯的值。寫入器用邏輯位移後再補回符號的方式模擬算術位移,但它用的遮罩把低位元組以上的每個位元都設了起來,而不是只設位移騰出的那個位元組,其餘位元組裡還留著的量值就此被覆寫。舉例來說,-100000 被編成 -34464。時間戳請求的 nonce 以及其他同尺寸的有號整數現在都能正確編碼
Version 3.114.10
修正 (Fixed)
- PDF/A 驗證從來沒回報過 ISO 19005-1 §6.4 透明度規則中的常數 alpha 部分。輔助函式組搜尋鍵時會先加一條斜線,呼叫端傳進來的鍵也帶了一條,結果實際在找
//CA,什麼都匹配不到。兩個 alpha 檢查還只認1和1.0這兩種寫法,完全不透明的/CA 1.00因此被當成違規;現在值為 1 時不管怎麼寫都認得
Version 3.114.9
修正 (Fixed)
- 頁面層級的 URI action 會傳回亂碼。路徑從原生層回來時是 UTF-8 位元組,卻被直接塞進寬字串,位元組被兩兩併成 16 位元碼元,緩衝區剩下的部分就留著記憶體裡原有的殘渣。
GetPageActionURI現在改用文件層級 action 既有的同一套方式解碼這些位元組
Version 3.114.8
安全性 (Security)
- 在 Windows 以外的目標上,每把加密金鑰、鹽值與初始向量背後的亂數位元組都來自執行階段 PRNG,而它的種子在程式不呼叫
Randomize時是個常數。於是每個行程都產出同一把檔案加密金鑰、同一組/UE與/OE鹽值、同一組/Perms位元組和同一批 AES-GCM nonce,Linux 或 macOS 上 Free Pascal 組建的加密輸出因此輕鬆可解,還在固定金鑰下重複使用 GCM nonce。這些位元組現在改從/dev/urandom取得;核心亂數池不可用時直接拋出例外而不退回,跟 Windows 上CryptGenRandom不可用時的既有行為一致
Version 3.114.7
修正 (Fixed)
- 格式錯誤的 object stream 可能讓壓縮與修復進入點讀出已解碼緩衝區的結尾。現在標頭一解析完,就檢查串流宣告的成員偏移是否在範圍內且遞增;宣告的成員數超過標頭裝得下的量時,會在任何記憶體配置前就拒絕;成員的位元組範圍則先驗證、後修剪尾端空白,不再反過來
Version 3.114.6
修正 (Fixed)
- 把行內影像外部化時,會產出不可用的影像 XObject。字典寫出時第一個鍵前面多了一條游離的斜線,開出一個空名稱,後面每個鍵全被擠到前一個鍵的值上;行內縮寫表又把 Decode 對應到
G而不是D,於是/D陣列被丟掉,DeviceGray 的值縮寫反被誤認成鍵。從內容串流裡抽出的影像現在帶有格式正確的字典,Decode 陣列也保得住
Version 3.114.5
修正 (Fixed)
- HarfBuzz 塑形器在由右至左的段落裡把字簇長度配給了錯的字形,而且共用同一字簇的字形(如讀音符號與連字元件)長度一律給 1。現在每個字形的
ClusterLength都涵蓋從所屬字簇起點到邏輯順序中下一個字簇的範圍,兩種方向皆然,阿拉伯文與希伯來文的字元對字形映射因此與 Uniscribe 後端回報的一致
Version 3.114.4
修正 (Fixed)
- libcurl 時間戳傳輸把數值選項與讀回的 HTTP 狀態碼都當 32 位元值處理,但 libcurl 收發的是 C 的
long,在 Linux 與 macOS 上是 64 位元。狀態碼查詢可能覆寫堆疊上目標旁邊的四個位元組,選項值則取決於暫存器上半部殘留什麼。兩者現在都改用該平台long的寬度,FPdfTsaFpc在 LP64 目標上因此站得住
Version 3.114.3
修正 (Fixed)
- PKCS#11 後端把權杖物件標籤的原始位元組直接抄進字串,在 Delphi 上等於把 UTF-8 位元組落在 UTF-16 碼元上。透過
TPdfPkcs11Options.CertificateLabel選憑證因此永遠對不上,EnumerateCertificates回報的LabelText也是亂碼。標籤現在按標準定義的 UTF-8 解碼;交給C_Login的 PIN 也改為編成 UTF-8,不再經主機字碼頁窄化,非 ASCII 的 PIN 能原封不動抵達權杖
Version 3.114.2
修正 (Fixed)
- macOS 鑰匙圈(Keychain)簽署器在判斷金鑰是否接受 RSASSA-PSS 時,問了
SecKeyIsAlgorithmSupported錯的操作:查的是解密而不是簽署,答案因此永遠是否,每個 RSA 簽章都默默退回 PKCS#1 v1.5。支援 PSS 的金鑰現在會按TPadesSignerOptions.PaddingScheme的要求用 PSS 簽署,操作參數也按 framework 宣告的寬度傳遞
Version 3.114.1
修正 (Fixed)
- 由右至左文字裡的巢狀括號配對會解析出錯的方向。UAX #9 的 BD16 規則按開括號出現的順序處理配對,被 N0 解決的配對會成為其後才開啟之配對的前向強 context;實作卻按閉括號完成的順序處理,於是內層配對可能跟著它包住的那個字母走,而不是跟著外層配對建立的 context 走。阿拉伯文或希伯來文句子裡帶巢狀括號的插語,現在能排成讀者預期的樣子
Version 3.114.0
新增 (Added)
FPdfCryptoSsl透過 OpenSSL 驗證 PDF 簽章與時間戳權杖,補上簽章驗證最後一塊平台缺口:Linux 本來完全沒有 CMS 驗證後端。ConfigureSslCmsVerifier負責安裝;libcrypto 於執行階段按名稱解析,因此不連結任何東西,1.1 與 3.x 兩個系列都繫得上- 簽章與憑證鏈分兩輪評估,因此簽章本身完好、但憑證鏈到不了信任錨點時,回報的是簽章有效而信任無效,而不是把整個簽章判壞
ConfigureSslTrustAnchors把 DER 信任錨點加進系統存放區,ConfigureSslCrls提供撤銷檢查可查的 CRL。只有 CRL 實際存在時撤銷才算查過,因為 OpenSSL 自己不會去抓;什麼都不提供時,結果會標為 unsupported,而不是讓未檢查的鏈蒙混過關SslAvailable、SslMissingSymbols、SslLibraryPath、SslLibraryVersion與SslAbiLayout回報哪些繫上了、哪些沒有;平台預設找不到程式庫時,ConfigureSslLibraryPath可以把後端指向特定程式庫
Version 3.113.0
新增 (Added)
TPdfKeychainCmsVerifier在 macOS 上透過CMSDecoder與 SecTrust 驗證 PDF 簽章與時間戳權杖,簽章驗證不再只有 Windows 能做。ConfigureKeychainCmsVerifier負責安裝;同一個單元現在涵蓋 macOS 支援的兩半,就像FPdfCryptoWin之於 Windows- 撤銷檢查也被尊重:要求時會有一條撤銷政策併入基本 X.509 政策,關掉線上擷取則把評估限制在快取回應上。簽章、憑證鏈、線上擷取與撤銷各階段的進度檢查點照樣觸發,回報方式與 Windows 後端完全一致
KeychainVerificationAvailable把驗證支援與簽署分開回報,因為兩者需要不同的 framework 符號,可能一個在而另一個不在
Version 3.112.0
新增 (Added)
FPdfCryptoMac用 macOS 鑰匙圈身分簽署 PAdES,地位相當於 Windows 的憑證存放區:憑證與其私鑰取自鑰匙圈,簽章由SecKeyCreateSignature產生,金鑰從不離開系統金鑰存放區。ConfigureKeychainSignerProvider負責安裝,而且不必像 PKCS#11 權杖後端那樣隨應用程式部署任何模組- 簽署器跟著憑證走:EC 金鑰簽 ECDSA,RSA 金鑰簽 RSASSA-PSS;PSS 用不了的地方——較舊的 macOS,或不接受 PSS 的金鑰——填補方式退回 PKCS#1 v1.5,輸出的 AlgorithmIdentifier 也如實標明,不會謊稱 PSS
KeychainMissingSymbols列出解析失敗的 framework 符號,部署環境回報後端不可用時,就能分清是 framework 缺席,還是這份繫結把名稱寫錯了
Version 3.111.0
新增 (Added)
ConfigurePadesCmsVerifier安裝 PAdES 驗證器所用的 CMS 驗證後端,簽章與時間戳驗證從此不必綁在 Windows 上。IPdfCmsVerifier宣告後端要回答的兩種操作——PDF 簽章用分離式,時間戳權杖用附加式——PadesCmsVerificationAvailable則回報目前有沒有後端在
變更 (Changed)
- 驗證結果與選項記錄搬到
FPdfCrypto,更名為TPdfCmsVerify*。TWinCmsVerify*名稱保留為別名,既有程式碼照常運作,外掛的後端也和 Windows 那個講同一套型別 - Windows 行為不變:沒裝驗證器時照樣用 CryptoAPI,進度檢查點、撤銷選項與原生錯誤碼都一樣。沒有後端應答時,每個判定都回報 unsupported,而不是留著不查
Version 3.110.0
新增 (Added)
FPdfPkcs11用一把始終待在 PKCS#11 權杖裡的金鑰簽署 PAdES。ConfigurePkcs11SignerProvider把它裝為簽署後端;模組在執行階段按路徑載入,因此不連結任何東西;同一份程式碼同時服務 Windows、Linux 與 macOS。IPdfPkcs11SignerProvider介面宣告的權杖列舉也一併實作了:插槽、權杖,以及各自持有的憑證- 常見情境下,在 Windows 以外簽署不再需要宿主另供 provider:一個權杖模組加
TPdfPkcs11Options就夠。RSA PKCS#1 v1.5、RSASSA-PSS 與 ECDSA 全都經由權杖產生 FPdfSha1加入 SHA-1 只為一個用途:按TPadesSignerOptions帶的指紋比對憑證。Windows 在憑證存放區裡就把這件事辦了;權杖只交回憑證位元組,比對得靠呼叫端自己來。它不是簽署用的摘要,PAdES 堆疊從頭到尾仍以 SHA-256 簽署
變更 (Changed)
- 讀取公鑰演算法 OID、抽出發行者與序號、以及重新包裝原始 ECDSA 簽章的這批憑證 DER 輔助函式,從 Windows 後端搬到了
FPdfCms,每個簽署後端都取得到
Version 3.109.0
變更 (Changed)
- 原生程式庫載入器不再僅限 Windows。
LibraryName會依目標預設為pdfium.dll、libpdfium.so或libpdfium.dylib,V8 組建會以對應名稱搜尋,而在 Free Pascal 上載入與符號繫結都改經可攜式載入器處理。Windows 行為不變,包括 Win32 與 Win64 的部署配置與架構不符診斷 - 其他目標的部署目錄採用編譯單元既有的
<cpu>-<os>拼寫,因此DLLs/x86_64-linux/libpdfium.so會位於Lib/FPC/x86_64-linux旁。系統目錄後備仍僅限 Windows;其他平台由載入器搜尋路徑涵蓋
Version 3.108.0
新增 (Added)
TPdfHarfBuzzTextShaper在沒有 Uniscribe 的 Free Pascal 目標上為雙向與複雜文字指令集文字塑形。它以FPdfBidi解析嵌入層級、依文字系統切割文字段、以 libharfbuzz 為每一段塑形,並依視覺順序排列各段。透過ConfigureTextShaper安裝;libharfbuzz 於執行階段解析,缺少時HarfBuzzAvailable會如實回報- 塑形器不會列舉字型。Uniscribe 是從裝置內容讀取字型二進位資料,這沒有可攜的對等做法,因此由宿主傳入
TPdfFontDataResolver,將字型名稱對應到字型檔位元組,把這項政策留在它所屬的位置
Version 3.107.0
新增 (Added)
FPdfBidi以純 Pascal 實作 Unicode 雙向演算法(UAX #9):PdfResolveBidiLevels為每個 UTF-16 碼元傳回一個嵌入層級,PdfBidiVisualOrder套用 L2 重新排序,PdfBidiClassOf公開碼位的 Bidi_Class。涵蓋規則 P2-P3、X1-X10、W1-W7、N0-N2、I1-I2 與 L1-L2,包括隔離啟始器與 BD16 括號配對- 此單元與編譯器和平台無關,這正是雙向文字能在沒有 Uniscribe 的環境排版的關鍵。塑形引擎是為方向已知的文字段解析字形,因此必須先由這個部分決定方向
Version 3.106.0
新增 (Added)
ConfigureTextShaper安裝整個程式庫共同經過的文字塑形後端,並附帶ActiveTextShaper、ActiveTextShaperName與ClearTextShaper。ShapePdfText與TPdf.AddShapedText現在都改用已安裝的塑形器,而不是直接建立 Uniscribe 塑形器,讓宿主能提供自己的引擎,測試也能提供確定性的引擎
變更 (Changed)
FPdfTextShaping可在 Windows 以外的目標編譯:Uniscribe 後端現在是平台預設值而非唯一實作,並且限定於 Windows 組建。沒有可用後端時,塑形進入點會回報此狀態,而不是無法編譯
Version 3.105.1
安全性 (Security)
- 時間戳回應現在在兩種傳輸上都以 4 MB 為上限。先前持續傳送的 TSA 可讓接收緩衝區無限成長,使簽章呼叫變成無上限的記憶體成長
Version 3.105.0
新增 (Added)
- RFC 3161 時間戳可在 Windows 以外的 Free Pascal 目標運作:新的 libcurl 後端會送出 TimeStampReq 並讀取 TimeStampResp,因此
PadesTsaAvailable回報 True,PAdES B-T、B-LT 與 B-LTA 也能在這些目標取得權杖。libcurl 於執行階段解析,並非建置期相依;缺少時該後端會像 WinHttp 後端一樣回報無法使用。Windows 仍使用 WinHttp,不受影響 - 在這些目標上簽章仍需要程式庫未持有的金鑰材料:由於
FPdfCryptoWin僅限 Windows,請透過ConfigurePadesSignerProvider提供IPadesSignerProvider(權杖金鑰則使用IPdfPkcs11SignerProvider)
Version 3.104.1
新增 (Added)
- XFA 檢查實驗室範例現在也提供 Lazarus 版本,因此可從 LCL 組建演練 XFA 能力探測、封包列出、封包匯出與
OnXfaRuntimeMissing後備機制
Version 3.104.0
變更 (Changed)
- 程式庫在 Free Pascal 3.2 上編譯時不再產生可避免的診斷:內部計時改從
GetTickCount64讀取毫秒刻度而非已淘汰的 32 位元呼叫,已淘汰的 SSE 控制字組存取子改用GetMXCSR與SetMXCSR取代,內容指紋位移基準明確指定型別以免觸發編譯期範圍檢查,而檢查點陣圖是否為由上而下配置時,掃描線位址會以無號指標比較
Version 3.103.1
修正 (Fixed)
- 在 Free Pascal 上,帶入 XMP 的文件中繼資料會保留非 ASCII 字元:送達
SaveAsPdfA、SaveAsPdfUa、SaveAsPdfE、SaveAsPdfX、SaveAsPdfR與SaveAsPdfVT的標題、作者、主旨、關鍵字與建立者名稱,現在改經字串字碼頁轉換,而不是逐位元組複製,因此即使宿主程式不是在 UTF-8 字碼頁上執行,中繼資料封包仍是 ISO 19005-1 6.7.2 要求的有效 UTF-8 - XFDF 匯出、產製中繼資料往返與信任清單 XML 解析採用相同的字碼頁正確轉換,因此在
TBytes與string之間傳遞的文字不再取決於宿主字碼頁
Version 3.103.0
新增 (Added)
TPdfEuropeanTrustedList可解析經鑑別的歐洲信任清單、以同一鑑別器重新載入帶總和檢查碼的快取、接受呼叫端提供的更新來源、公開目前的信任錨點,並在指定的驗證時間評估合格簽章服務TPadesTrustValidationOptions.QualifiedTrustEvaluator對每個受驗證的簽署者套用離線合格信任政策,而不為 PAdES 驗證器增加網路存取
Version 3.102.0
新增 (Added)
BeginIncrementalSave與CommitIncrementalSave現在能在 AES-256 加密文件附加經鑑別的修訂,同時保留原始的/Encrypt參考、安全性參數、精確的物件世代與既有位元組
變更 (Changed)
- 檔案認可多載現在會確實清寫並嚴格重新開啟同目錄的附屬檔案、驗證其修訂邊界,並以原子方式取代目標,任何失敗後都會回復工作階段
Version 3.101.0
變更 (Changed)
SaveAsRedacted現在會保留部分相交文字、矩形路徑與軸對齊影像的安全部分,然後移除頁面、Form XObject、圖樣、外觀與巢狀資源範圍不再參考的資源名稱
Version 3.100.0
變更 (Changed)
OptimizeImages現在會依縮放、內容類別、量測到的細節與呼叫端品質,選擇方框、雙線性、雙三次、Lanczos 或雙階重新取樣,具備感知 Alpha 的濾波與嚴格的工作記憶體額度
Version 3.99.0
新增 (Added)
GraftPdfAcroForm透過明確的頁面對應與衝突政策,匯入階層式的 AcroForm 欄位、視窗元件、外觀、計算順序、預設資源、動作與值TPdfCrossDocumentGraftMap依來源身分重用已匯入的間接物件,同時保留循環、共用參考、精確的來源世代與交易式失敗語意
Version 3.98.0
新增 (Added)
TPdfOutlineEditor可建立、移動、刪除、設定樣式、展開與重新定位大綱項目、透過頁面規劃結果重新對應明確目的地,並附加獨立驗證的增量修訂
Version 3.97.0
新增 (Added)
TPdfTreeEditor可讀取、驗證、更新、平衡、分割、合併、序列化並增量儲存任意的 PDF NameTree 與 NumberTree 結構,同時保留可重用的間接參考與原始項目值
Version 3.96.0
新增 (Added)
TPdfParserResourceBudget為自訂 PDF 解析器提供單一的執行緒安全處理程序政策,涵蓋遞迴、語彙單元、物件、解碼位元組、膨脹比例、配置與期限,並具備不可變的每作業快照與可設定的預設值
Version 3.95.0
變更 (Changed)
ValidatePdfX現在會在具有效 xref 的未加密文件上,透過有界的疏鬆讀取驗證作用中的 PDF/X 字典、中繼資料、輸出意圖、字型、禁止功能、透明度、色彩空間與頁面框
Version 3.94.0
變更 (Changed)
ValidatePdfR現在會在具有效 xref 的未加密文件上,透過有界的疏鬆與視窗讀取驗證作用中的 PDF/R 字典、頁面、影像濾波器、中繼資料與頁尾標記
Version 3.93.0
變更 (Changed)
ValidatePdfE現在會在具有效 xref 的文件上,透過有界的疏鬆讀取驗證作用中的 PDF/E 字典、中繼資料、輸出意圖、表單與禁止功能
Version 3.92.0
變更 (Changed)
ValidatePdfVT現在會在具有效 xref 的文件上,透過有界的疏鬆讀取執行進階的循環 XObject 範圍、可視性、封裝與巢狀 Form 使用分析
Version 3.91.0
新增 (Added)
TPdfSparseDictionaryReader可解析物件的作用中世代,並在呼叫端指定位元組上限內解碼直接串流
變更 (Changed)
ValidatePdfVT現在在一般有效 xref 路徑上,對 PDF/VT 中繼資料、DPart、OutputIntent、Info、頁面與一般字典檢查採用有界的疏鬆讀取
Version 3.90.0
新增 (Added)
TPdfSparseDictionaryReader會保持開啟一份疏鬆 xref 與物件串流索引,供重複的有界間接物件字典讀取使用
變更 (Changed)
InjectPdfVTMarkers現在會以有界的來源讀取驗證並保留既有的 PDF/VT DPart 階層,格式不正確的階層則繼續走重建後備路徑
Version 3.89.0
新增 (Added)
ReadPdfSparsePageDictionaries透過疏鬆物件索引,依頁面樹順序傳回頁面物件身分與有界的字典位元組
變更 (Changed)
- 當儲存的 PDF 尚未包含 DPart 階層時,
InjectPdfVTMarkers現在會合成 PDF/VT DPart 階層,並以有界的來源讀取附加標記物件
Version 3.88.0
新增 (Added)
ReadPdfSparseCatalogSubDict透過疏鬆物件索引讀取直接或間接的目錄子字典,供 PDF/UA 標記注入在MarkInfo與ViewerPreferences時使用
變更 (Changed)
InjectPdfUaMarkers現在透過疏鬆查閱解析目錄的MarkInfo與ViewerPreferences,並在一般 xref 路徑上以有界來源讀取附加 PDF/UA 修訂
Version 3.87.0
新增 (Added)
AppendPdfSparseUpdate將一份疏鬆修訂串流寫入已儲存的 PDF:來源位元組原樣保留、呼叫端提供的物件本體寫在記錄的位移上,並附加經/Prev鏈結的單一增量 xref/trailer 區塊NormalizePageViewRect將兩個對應的頁面空間角點正規化為限制在頁面內的可見矩形,或回報頁面完全不可見- 當來源文件沒有 Info 字典時,PDF/E 標記注入會以
/ISO_PDFEVersion合成全新的 Info 物件
變更 (Changed)
- PDF/E、PDF/X 與 PDF/R 標記注入現在透過疏鬆查閱解析目錄、Info 與 trailer,並在一般 xref 路徑上以有界來源讀取經
AppendPdfSparseUpdate附加修訂 - 表單填寫的
FFI_GetPageViewRect回呼現在回報附加的TPdfView中實際可見的頁面部分,而不是一律回報整個頁面框;無頭文件則改用頁面尺寸 TPdf.AboutInfo、Lazarus 套件中繼資料與安裝程式中繼資料現在一致地回報 Version 3.87.0
修正 (Fixed)
- 自
FPDFPath_GetBezierControlPoints繫結以來公開的路徑線段控制點一直沒有被填入:原生匯出函式只對每個三項三次曲線的端點索引回應,因此查詢現在改為每條曲線一次,三個項目都攜帶該曲線的控制點
Version 3.86.0
新增 (Added)
ReadPdfSparseRevisionInfo為串流後處理器公開有界的最新修訂、目錄、加密、文件 ID 與標記結構資訊ComposePdfSparseUpdateId在不具體化完整來源 PDF 的情況下保留或衍生增量更新文件識別碼
變更 (Changed)
InjectPdfAMarkers現在透過疏鬆查閱解析目錄與 trailer、以有界區塊複製大型輸入,並在一般 xref 路徑上附加 PDF/A 修訂,而不配置來源大小的位元組陣列- PDF/A 標記注入會保留傳統或 xref 串流輸出風格、目錄與 Info 世代、trailer 識別碼、拒絕加密文件的行為,以及 Level A 降級規則
Version 3.85.0
新增 (Added)
SanitiseActiveContentPdfStream接受呼叫端自有的剪裁工作區,用於自訂的有界或磁碟後端儲存
變更 (Changed)
- 主動式內容清理現在透過疏鬆查閱、有界解析視窗與固定大小範圍複製來更新目錄與 trailer,而不是在一般 xref 路徑上把完整 PDF 讀進單一位元組陣列
TPdf.SaveAsSanitised會將SaveMemoryLimit與SaveTemporaryDirectory套用到其剪裁工作區,並回報其溢寫診斷
修正 (Fixed)
StripMetadata=True現在即使目錄沒有/Metadata項目,也會移除 trailer 的/Info參考
Version 3.84.0
變更 (Changed)
TPdf.PdfVersion現在透過FPDF_GetFileVersion重用 PDFium 解析器狀態,而不是重新解析完整來源 PDF- 版本查詢最多讀取八位元組的 PDF 標頭,以避免格式不正確的目錄宣告降低有效版本
Version 3.83.0
變更 (Changed)
PageLabelledPdfStream現在透過有界的串流視窗與疏鬆惰性物件索引解析並更新目錄- 頁面標籤輸出以固定大小範圍複製大型來源 PDF,而不是在一般 xref 路徑上配置完整文件位元組陣列
Version 3.82.0
變更 (Changed)
ApplyDefaultOpenAction現在透過疏鬆惰性物件索引讀取傳統、xref 串流、混合與物件串流修訂,包括物件編號非常高的文件- 預設開啟動作處理使用固定大小視窗與有界範圍複製,而不是把完整 PDF 載入單一位元組陣列
Version 3.81.0
新增 (Added)
PostProcessSavedPdf接受三個呼叫端自有的可定位工作區,用於自訂記憶體上限與磁碟後端處理
變更 (Changed)
TPdf.SaveAs會將SaveMemoryLimit與SaveTemporaryDirectory套用到每個已存 PDF 後處理工作區,並在診斷中包含其溢寫資訊- 原生增量 xref 串流修復使用固定大小的結尾與字典視窗及有界範圍複製,而不是整檔位元組陣列與重複的整檔重新配置
Version 3.80.0
新增 (Added)
ReadAttachmentMetadata在一次有界的原生列舉中捕捉附件名稱、描述、MIME 子類型、解碼大小與可讀性ExtractAttachmentsToStreams將批次寫入呼叫端自有的串流,具備每檔與合計位元組上限、可設定的寫入區塊、取消支援與每項結果
變更 (Changed)
- 批次擷取在 PDFium Delphi Component 記憶體中最多保留一個已解碼附件,而不是將批次中每個承載全部具體化
Version 3.79.0
新增 (Added)
TPdfCacheGovernor、TPdf.CacheBudgetBytes、各類型使用量查詢與遙測,透過單一執行緒安全的全域 LRU 位元組額度協調保留的快取記憶體TPdfTileCache與整個處理程序的系統字型快取可加入呼叫端選擇的管理器,並精確統計點陣圖與字型位元組
變更 (Changed)
- 已解析的頁面場景、縮圖、結構資料、文字快照與頁面物件快照,現在在預設 256 MiB 的
TPdf額度下競爭,同時保留既有的項目數上限 - 使用中的頁面場景在彩現完成前保持固定,而不透明的原生頁面場景採用明確的估算計費,因為 PDFium 未提供可設定的總快取位元組 API
Version 3.78.0
新增 (Added)
TPdfLayoutPagedPlan、TPdfLayoutDocument.BuildPagedPlan與TPdf.GeneratePagedLayout將版面命令串流寫入呼叫端選擇的可定位儲存區,並一次具體化一頁
變更 (Changed)
- 大型產生版面可將命令溢寫到暫存儲存區、保留可設定的 LRU 頁面快取、還原不連續的頁首與頁尾區段,並在每個排版流程項目後釋放已換行的文字
Version 3.77.0
新增 (Added)
TPdfLayoutTable加上列、儲存格與表格選項,提供跨頁表格,具備解析後的網格軌道、標題、重複的表頭列、可分割的內文列、連結與可設定的框線
變更 (Changed)
- 產生的標記表格跨頁保留連續的 Table / TR / TH / TD 結構、讓跨列群組保持原子性,並自動將資料儲存格與表頭 ID 關聯
Version 3.76.0
新增 (Added)
TPdfLayoutConstraints與SetLastItemConstraints為產生的版面加入避免拆開、與下一項同頁、實體的分頁前/後控制,以及可設定的孤行/寡行控制
變更 (Changed)
BuildPlan重用每個換行文字結果進行分頁預測與命令產生,避免「與下一項同頁」重複量測文字
Version 3.75.0
新增 (Added)
TPdf.InspectPdfUaUnicodeCoverage回報有界的物件層級證據,涵蓋直接 Unicode 對應、ActualText取代、對應錯誤、缺少的 Unicode 值與未解析的來源物件
變更 (Changed)
TPdf.ValidatePdfUa現在重用單一物件範圍的字元掃描,排除 Artifact 與產生的字元,並防止某個文字物件的ActualText遮蔽相鄰內容
Version 3.74.0
變更 (Changed)
- 當 Artifact 頁面物件被結構樹 MCID 宣告時,
ValidatePdfUaPageContentTagging與TPdf.ValidatePdfUa現在會回報pvuaiArtifactInStructureTree,包括以路徑為基礎的分頁 Artifact - PDF/UA 頁面內容掃描現在只在偵測到未標記的實際內容與無效 Artifact 包含兩者後才提前結束,保有跨頁涵蓋範圍而不重複已完成的檢查
Version 3.73.0
新增 (Added)
TPdf.InspectPdfUaLanguageCoverage為自然語言片段回報有界的頁面物件與結構字串證據,包括有效語言、宣告來源、MCID、結構索引與文字摘錄ResolvePdfUaEffectiveLanguage以明確的效度證據解析標記內容、最近的結構祖系與目錄語言宣告
變更 (Changed)
- 當非 Artifact 文字或無障礙字串沒有有效的
/Lang宣告時,TPdf.ValidatePdfUa現在會回報pvuaiNaturalLanguageUncovered
Version 3.72.0
新增 (Added)
TPdf.InspectPdfAMetadata為全部八種 ISO 19005-1 Info 對 XMP 的對應回報具型別的逐欄位等價證據,包括明確的空值與日期解析失敗TPdf.NormalizePdfAMetadata只修復不匹配的已對應 XMP 屬性,同時保留不相關的命名空間與非預設語言替代項
變更 (Changed)
- 當 PDFium 解碼的 Info 值在 Unicode 或具時區感知的日期比較後,與正確型別的 XMP 值不同時,
TPdf.ValidatePdfA現在會回報pvaiInfoXmpValueMismatch
Version 3.71.0
新增 (Added)
InspectPdfVT2sStream為每個 PDF/VT MIME 部分回報列印條件證據,包括 OutputIntent 身分、內嵌或 MIME 描述檔來源、ICC 雜湊與標頭資訊,以及 DPart 頁面與記錄計數FPdfIccProfile提供有界的 ICC 標頭與標籤表檢查,支援 MD5、SHA-256、色彩空間、版本、設備類別、描述檔 ID 與多語系描述檔描述
變更 (Changed)
- PDF/VT-2s 驗證現在透過
DestOutputProfileRefURL 檔案規格解析較早的 ICC MIME 附件,並驗證CheckSum、ICCVersion、ProfileCS、ProfileName、設備類別與允許的印刷色彩空間 - 所有 PDF/VT 部分現在都要求一個權威的
GTS_PDFXOutputIntent、符合 PDF/X 基底的內嵌或外部描述檔封裝,以及相同的特性化列印條件;僅 PDF/X 的附件則不納入 PDF/VT 比較 - 單檔 PDF/VT-2 驗證現在將
DestOutputProfileRef識別為外部目的地描述檔,而不是回報它缺失
Version 3.70.0
變更 (Changed)
- PDF/VT 驗證現在直接在每個 XObject 上檢查
GTS_Scope、GTS_XID、GTS_Env與GTS_Encapsulated,而不允許鄰近或巢狀字典滿足提示需求 Record範圍現在從間接的DPartRoot字典解析RecordLevel,而Stream範圍在 PDF/VT-1 檔案中會被拒絕- 解碼後的頁面與 Form XObject 內容串流,現在透過有效繼承資源與 DPart 階層驗證
Do資源可視性、SingleUse出現次數與接收記錄所有權 - 封裝 XObject 現在驗證布林形狀、建議範圍、Image
Intent、隔離的透明度群組、混合色彩空間,以及直接或巢狀的選用內容相依
Version 3.69.0
變更 (Changed)
- PAdES 驗證現在拒絕重複的
Contents、ByteRange、SubFilter、Filter與Type項目,而不是接受解析器選出的值 - 簽章探索現在採用感知串流的線性字典掃描、辨識逸出的 PDF 名稱語彙單元,且不會被放置在真正
ByteRange之前的已閉合巢狀字典重新導向 - 簽章
ByteRange驗證現在要求排除的間距與直接的十六進位Contents語彙完全吻合,同時仍允許後續的增量修訂 - 簽章字典現在要求一個名稱值的
Filter,並強制Sig或DocTimeStamp的型別與子過濾器組合一致
Version 3.68.0
新增 (Added)
TPdf.BuildPadesEvidenceReport為每個簽章關聯 PDFium 簽章事實、CMS 政策、信任與時間戳狀態、憑證路徑雜湊、DSS/VRI 涵蓋與後續修訂決策TPadesEvidenceReport將有界的多簽章證據匯出為 JSON 或 CSV,並回報來源、簽章、DSS、修訂與截斷遙測
變更 (Changed)
- PAdES 信任驗證現在記錄簽署者憑證與有序 Windows 憑證路徑的 SHA-256 身分,同時預設保留離線驗證
- 證據產生在合規、信任、DSS 與修訂分析之間重用同一份保留的來源位元組捕捉,而不是在每個階段將原始 PDF 複製到新串流
Version 3.67.0
新增 (Added)
TPadesSignatureFieldOptions可建立可設定的簽章欄位名稱、必要的種子值、理由與法律聲明清單、可接受的簽署者憑證與欄位鎖定- 本機與遠端簽章都能以 ISO 32000-1 的
FieldMDP與DocMDP轉換建立核可或認證簽章
變更 (Changed)
- 認證簽章在透過
/Perms /DocMDP註冊新簽章的同時,保留既有的目錄權限
Version 3.66.0
新增 (Added)
RenderPageBandedToStream直接將 PNG 或 TIFF 輸出寫入呼叫端串流,具備可設定的帶狀高度、PNG 壓縮與輸出位元組上限RenderPageBandedToEncoder將連續的頁面帶狀區塊餵給呼叫端定義的編解碼器,並回報帶狀、列、記憶體、完成與輸出遙測
修正 (Fixed)
RenderPageBanded現在保留整頁彩現幾何並裁剪每個要求的帶狀區塊,而不是把整頁重新縮放進每個帶狀區塊
Version 3.65.0
新增 (Added)
TPdfParallelRenderReport現在回報來源大小、捕捉記憶體峰值、儲存後端與共用底層類型
變更 (Changed)
RenderPagesParallel透過不可變記憶體、唯讀檔案對應或FPDF_LoadCustomDocument隨機存取共用捕捉的來源,而不是再配置一份完整文件的位元組陣列- 溢寫的平行彩現來源仍在
SaveMemoryLimit之下,不再需要將完整 PDF 重新載入可定址的處理程序記憶體
Version 3.64.0
新增 (Added)
ImportImposed現在有多載可傳回TPdfImpositionExecutionReport,包含原生匯入、唯一來源、空白槽位、XObject 範本、表單物件、內容產生與輸出頁面計數
變更 (Changed)
- 零幾何拼版會在插入空白頁與原生 N-up 組合之前,將每個有序來源頁面透過單次
FPDF_ImportPagesByIndex呼叫送出 - 自訂幾何拼版為每個唯一來源頁面重用一個原生 XObject 範本、在不改變來源頁面的情況下讀取快取頁面量測,並預先配置精確的計畫儲存
Version 3.63.0
新增 (Added)
BeginPageObjectEditTransaction、CommitPageObjectEditTransaction與RollbackPageObjectEditTransaction將原生頁面物件變更組成原子性的頁面範圍批次,具備經驗證的快照回復PageObjectEditTransactionStatus回報繫結的頁面、變更狀態、成功變更計數與內容產生計數
變更 (Changed)
- 已認可的物件批次現在只呼叫
FPDFPage_GenerateContent一次,而不是每次插入、移除、變換、屬性、標記、註解物件或外觀變更都呼叫一次 - 在延遲內容可能遺失之前,會拒絕儲存、頁面切換、頁面刪除、巢狀編輯交易,以及失敗的原生插入或註解更新
Version 3.62.0
新增 (Added)
ReadPageObjectsSnapshot以物件、路徑、裁剪、標記、文字、字串與期限額度,捕捉呼叫端自有的頁面物件資訊PageObjectsSnapshot提供感知修訂的 LRU 重用,具備可設定的容量與占用率,以及命中與未命中遙測
變更 (Changed)
PageComplexity現在重用不可變的頁面物件快照,而不是重複進行原生物件列舉、透明度、路徑與影像查詢
Version 3.61.0
新增 (Added)
TPdf現在公開統一的縮圖 LRU,涵蓋內嵌與彩現預覽,具備可設定的項目與位元組上限,以及命中、未命中、收回、占用與修訂遙測RenderPageThumbnail接受旋轉、彩現選項、背景色彩與TPdfColorScheme,同時保留呼叫端自有的點陣圖合約
變更 (Changed)
- 重複的縮圖擷取與彩現透過修訂、頁面、來源、大小、旋轉、旗標、背景與色彩配置鍵重用原生 PDFium 結果,包括快取選擇性內嵌縮圖不存在的狀態
TPdfThumbnailView會將其可見頁面點陣圖快取與文件縮圖修訂同步,因此編輯不會留下過期的預覽
Version 3.60.0
新增 (Added)
ReadTextPageSnapshot在單次處理中捕捉 Unicode、UTF-16 對應、字元幾何與樣式,以及正規化的文字物件中繼資料,並有明確的字元、物件、字型名稱與期限額度TextPageSnapshot透過可設定的感知修訂 LRU 提供深層的呼叫端自有複本,具備容量、計數、命中與未命中遙測
變更 (Changed)
GetStructuredText與實體版面的GetTextInReadingOrder現在重用同一個文字快照,並套用 O(n log n) 幾何排序
修正 (Fixed)
- 小型文字與結構快照快取現在會在以要求的頁面索引儲存新資料時收回最舊頁面,避免跨頁快取別名問題
Version 3.59.0
新增 (Added)
LifecycleActionPolicy可選擇停用、僅明確或相容的自動執行 PDF 文件與頁面生命週期動作ExecuteDocumentLifecycleAction公開文件的 JavaScript、開啟、關閉、儲存與列印動作,而ExecutePageLifecycleAction執行頁面開啟與關閉動作且不改變PageNumber
變更 (Changed)
- 無頭頁面載入現在會收到與檢視器驅動載入相同的自動頁面開啟與關閉動作,暫存頁面則在彩現鎖定下重用或釋放
Version 3.58.0
新增 (Added)
ReadStructureElements與VisitStructureElements提供反覆式的標記結構走訪,具備明確的深度、元素、屬性與時間額度,以及詳細的完成狀態StructureElementsForPage公開從一起算的頁面快照而不改變PageNumber,背後由可設定的感知修訂 LRU 快取支援,具備命中、未命中與計數遙測
變更 (Changed)
- 無障礙、重排、驗證與檢視器取用者現在重用呼叫端自有的結構快照,直到相關的文件或頁面編輯使其失效
Version 3.57.0
新增 (Added)
- 完整的原生表單宿主回呼現在提供生命週期安全的延遲頁面控制代碼、互動檢視的游標路由、值變更通知、選取文字矩形、URI 事件與 GoTo 目的地事件
FormHostCallbacksComplete回報回呼就緒狀態,而FormSelectionRects與ClearFormSelectionRects公開有界的頁面空間選取幾何
修正 (Fixed)
- XFA 目前頁面回呼現在能正確地在 PDFium 從零起算的頁面索引與元件從一起算的
PageNumber之間轉換 - AcroForm 與 XFA 的 URI 回呼現在保留原始 URI 位元組,並在任何外部啟動之前要求明確的宿主核准
Version 3.56.0
新增 (Added)
- 索引式的
PageMetrics快照公開頁面的尺寸、旋轉、標籤、透明度與五個標準頁面框,而不改變使用中的頁面
變更 (Changed)
- 重複的頁面中繼資料讀取重用會自動失效的原生快照快取,減少縮圖、預檢與文件分析工作負載中的頁面開啟次數
Version 3.55.0
新增 (Added)
- 路徑檢查在載入的 PDFium 組建提供
FPDFPath_GetBezierControlPoints時公開精確的三次 Bézier 控制點,並為較舊的 DLL 提供選擇性的能力探測 FormFieldTypeAtPoint、TPdfView.FormFieldTypeAt與索引式FontFlags屬性公開原生表單與字型資訊,而不需要原始控制代碼TPdf.Signatures在單一呼叫端自有快照中傳回所有原生簽章內容、ByteRange、子過濾器、理由、時間與權限
變更 (Changed)
- 表單欄位存在檢查現在直接使用原生點擊測試,而不是開啟和關閉註解控制代碼
修正 (Fixed)
- PDF/E-1 驗證現在允許一般的 AcroForm 欄位、內嵌檔案與 FileAttachment 註解,同時精確回報頂層 AcroForm 的
/XFA與/NeedAppearances true,包括間接與物件串流值
Version 3.54.0
新增 (Added)
FPdfProduction新增經量測的多編解碼器影像選擇、色彩與字型處理後端、SVG 路徑、樣式化取代計畫、交易式 XFA 封包更新、條碼向量、Portfolio 模型與安全的 RichMedia 擷取FPdfStandardsExecution新增量測與 GeoPDF 轉換、交易式 PDF/A 修復、PDF/UA-2 計畫、外部多色描述檔、歷史 DSS 與 VRI 證據、DPart 查詢、深入的 PDF/E 事實與固定記憶體的 PDF/R 條帶TPdf.ImportImposed透過原生 N-up 或頁面 XObject 路徑組合有界的 N-up 與小冊子計畫,具備精確的裝訂溝、出血與爬移幾何,而TPdf.CompareWith回報語意、幾何與容錯像素差異- PAdES 簽署現在支援可插拔的路徑驗證器與 HSM 提供者、附加簽章的 PDF MAC、
cms-algorithm-protection與離線簽章政策文件
變更 (Changed)
- 版面引擎接受有界的 HTML 與 Markdown、可跨欄流向,並解析固定、自動與比例的網格軌道
- XFDF 往返現在會保留多值與 rich-text 欄位、彈出視窗、動作、目的地、外觀覆疊、自訂命名空間與明確的存在狀態
Version 3.53.0
新增 (Added)
ConfigurePdfLibrary在第一次載入 PDFium 前提供不可變的原生渲染器、字型、V8、Brotli、使用者字型路徑與沙箱組態- 原生結構屬性、註解關聯、註解檔案附件、具型別的字典值、焦點政策、連結與表單 z 順序查詢,以及預設 TTF 對應診斷,皆可透過有界的高階 API 使用
TPdfView.ReplaceFormTextAndKeepSelection在重複編輯間保留作用中的選取範圍,且滑鼠右鍵放開事件現在會送達原生表單引擎
變更 (Changed)
- 確定性文件時間現在除了固定紀元外,也使用穩定的 UTC 曆法轉換,在每個宿主時區都產生相同的中繼資料
- 附件字串寫入會驗證原生結果,並將字典索引鍵編碼為 UTF-8
Version 3.52.0
新增 (Added)
TPdf.GetImageObjectRenderedBitmap傳回影像物件套用目前矩陣、色彩空間、遮罩與渲染狀態後的算繪結果TPdf.TextObjectGlyphWidth、TPdf.TextObjectFontSize與TPdf.SetTextObjectFontSize公開原生字符量測與精確的文字物件字型大小編輯TPdf.TransformPageObjectClipPath、TPdf.DetachFormObjectChild、TPdf.SharePageObjectMark與TPdf.IsAnnotationObjectSubtypeSupported加入精確的內容物件編輯與能力檢查
Version 3.51.0
修正 (Fixed)
- 八個先前發布說明曾宣布過的
TPdf成員原本宣告於 private 區段,無法從PDFium單元外部呼叫;這些成員現在已依文件成為 public:LinkAtPoint、GetTextRenderMode、GetTextObjectRenderedBitmap、IsAnnotationSubtypeSupported、ChooseRenderFlags、AttachmentHasKey、GetAttachmentStringValue與SetAttachmentStringValue
變更 (Changed)
- 英文參考文件現在涵蓋
TPdf與TPdfView的每一個 public 成員:88 個原本沒有參考頁面的成員都取得了專屬頁面,類別頁面、導覽索引與 API 參考也全部列出 - 先前指向共用頁面的參考頁面現在改為連結到成員本身的頁面,搜尋結果會直接開啟所搜尋 API 的說明
- API 參考現在記錄可從 public 簽章連到的列舉與記錄,包括載入與串流回報、文字、字型與 OCR 類型、版面建構器類型、PAdES 驗證類型、批次與驗證類型,以及平行渲染類型
Version 3.50.0
新增 (Added)
- 每個 GUI 範例現在開啟時即提供立即可用的內容,而不是空白表單:檢視器與實驗室範例載入產生的範例文件、報表範例在啟動時即產生完成的報表,處理器範例則預先產生範例輸入,主要動作一鍵即可執行
MultiPageViewer、SplitView與FontProperties會在啟動時於記憶體中產生範例文件(六頁展示文件、兩份並排比較文件,以及可供點選檢視的多字型頁面)MergePDF、BatchExport、SplitPDF、ExtractText、PDFtoJpg、PrintPDF與PrintPreferences等處理器範例會在執行檔旁預先產生範例 PDF 並預填輸入控制項,重新產生具冪等性,絕不覆寫既有檔案FormFill與ExtractImages自動載入範例資料夾內附的範例檔案,ImageToPDF產生兩張範例點陣圖,WatermarkStamp預先建立其蓋章樣本,XfdfLab開啟時即載入帶有文字與高亮註解的產生文件
變更 (Changed)
CreatePDF現在會在啟動時於執行檔旁直接產生Sample.pdf,不顯示對話框,範例開啟的當下文件即已存在TPdf.AboutInfo與安裝器中繼資料現在一致回報 Version 3.50.0
Version 3.49.0
新增 (Added)
- 更新後 PDFium 二進位檔中的
FORM_GetTextDirection與FORM_SetTextDirection現已完成繫結,動態繫結層維持對全部 472 個 PDFium 匯出的完整覆蓋 TPdf.FocusedFormFieldTextDirection與TPdf.SetFocusedFormFieldTextDirection透過新的TPdfFormTextDirection列舉(ftdUnknown、ftdAuto、ftdLTR、ftdRTL)公開焦點控制項在記憶體中的文字方向,TPdfView對應成員會在方向變更後重繪頁面場景
變更 (Changed)
FPDF_LIBRARY_CONFIG現在反映 PDFium 第 6 版的版面配置,包含供以PDF_ENABLE_BROTLI建置之二進位檔使用的實驗性m_BrotliEnabled欄位TPdf.AboutInfo、Lazarus 套件中繼資料與安裝器中繼資料現在一致回報 Version 3.49.0
Version 3.48.0
新增 (Added)
PDFViewer範例程式現在會在啟動時使用建立 API 於記憶體中產生一份六頁的展示文件,檢視器開啟即有渲染內容,磁碟上不再需要範例檔案- 新增以
TPdfThumbnailView為基礎的縮圖面板,在三個範例連接埠中皆提供可點擊導覽的頁面預覽,位於書籤樹旁邊 - 檢視器搜尋現在透過
HighlightSearchText高亮當前頁面上的每一個符合項目,而不是僅顯示單一結果矩形,並在狀態列中回報符合數量 - 一鍵
Night與2-Up工具列按鈕可切換夜間雙色調渲染模式與雙頁對開顯示模式
變更 (Changed)
- 檢視器中的文字選取現在改用內建的
TPdfView選取引擎,支援雙擊選詞、拖曳選取與剪貼簿快捷鍵,取代原先自行撰寫的選取程式碼 - 頁面渲染加入陰影並支援平滑捲動,帶來更現代的閱讀體驗
TPdf.AboutInfo與安裝器中繼資料現在一致回報 Version 3.48.0
Version 3.47.0
新增 (Added)
FPdfBenchmark以可設定的暖機與量測輪次、頁面與像素上限、合作式取消以及每個案例的通過、失敗或略過狀態,執行有界的 PDF 文集TPdfBenchmarkReport記錄輸入與儲存的位元組大小、載入與首頁延遲、轉譯輸送量、儲存與重新開啟計時、取樣的尖峰工作集、語意與像素 SHA-256 雜湊、重複執行穩定性、預期雜湊閘門以及獨立重新開啟等價性- 基準測試報告可匯出對公式安全的 CSV 與結構化 JSON,供 CI、發布資格驗證與長期效能追蹤使用
GetSkiaRenderCapabilities、RenderPageSkia與RenderPageSkiaByIndex公開選用的原生 Skia 頁面與表單轉譯,重用已解析頁面快取且不強制要求 DLL 匯出- 版本化的能力閘控列印輸出 ABI 會在載入的 PDFium 模組提供時,公開精確的專色色版列舉、色版轉譯、疊印偵測與疊印預覽
修正 (Fixed)
- 未啟用
PDF_USE_SKIA的 PDFium 組建現在可正常載入,不再因缺少實驗性 Skia 匯出而失敗
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.47.0
Version 3.46.0
新增 (Added)
ValidatePdfR現在會透過可設定的驗證選項,檢查純光柵頁面內容、條帶幾何、色彩模型、有效解析度、壓縮參數、必要中繼資料與加密的 PDF 2.0 設定檔BuildPdfARepairPlan將驗證證據轉換為依相依性排序的補救步驟,並附帶安全分類、簽章影響防護與 JSON 輸出BuildPdfXProductionPreflight在不解碼影像資料的前提下,報告頁面方框、內嵌字型、OutputIntent、色料、透明度、疊印、分色、影像解析度與生產就緒狀態- PDF/UA-2 結構驗證現在會檢查關聯檔案擁有權、閱讀順序、描述、關聯性與可探索性
變更 (Changed)
TAssociateFile.Description、TPdf.ImageInfo與TPdf.PageComplexity公開關聯檔案與生產預檢工作流程所需的中繼資料TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.46.0
Version 3.45.0
新增 (Added)
TPdfXmpPacket可解析、編輯、複製與序列化具命名空間感知的 XMP,支援未知命名空間、具型別的 RDF 容器、URI 與資源值、限定詞、語言替代值、封包包裝與保留的填補TPdf.ReadXmpPacket與SaveAsWithXmpPacket公開高階中繼資料讀取與原子性輸出,對已簽章文件的變更則要求明確授權
安全性 (Security)
- 有界的 XML 讀取器會拒絕 DTD 與外部實體,並限制封包位元組數、巢狀層數、節點數、屬性數與數值字元參照
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.45.0
Version 3.44.0
新增 (Added)
TPdfValidationRuleRegistry註冊設定檔條款,附帶嚴重性、相依性、修復指引、證據以及內建或自訂述詞TPdfValidationBudget與TPdfValidationExecutionContext為規則數、失敗數、物件數、遞迴、UTF-8 證據、保留記憶體、耗用時間、快速失敗與合作式取消設定界限ValidatePdfFilesParallel透過隔離的工作器文件驗證多個檔案,同時保留輸入順序,並彙總問題分布、計時、失敗、取消與載入錯誤
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.44.0
Version 3.43.0
新增 (Added)
TPdfStructureElement現在承載命名空間、命名空間角色對應、參照、關聯檔案、註解、介面元件、標籤與外觀事實,供 PDF/UA-2 語意驗證使用ValidatePdfUa2StructureElements及其各專項驗證器會在不載入pdfium.dll的情況下,檢查 ISO/TS 32005 命名空間與內含關係、有界的表格網格、註解、表單、Formula/MathML 關聯、關聯檔案、文件根節點、FENote、清單、目錄參照、標題與圖說ClassifyPdfUaNamespace可識別 PDF 1.7、PDF 2.0、MathML、ARIA、DPUB、自訂與缺失的結構命名空間PdfUa2StructureHasIssue提供對 C++Builder 安全的單一問題查詢,不需以傳值方式回傳 Pascal 集合
變更 (Changed)
ValidatePdfUaStructureElements會自動為puc2套用新的語意規則集,同時保留 PDF/UA-1 的規則路徑TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.43.0
Version 3.42.0
新增 (Added)
TPdfUaSaveOptions.PdfUa2建立帶有pdfuaid:part2、pdfuaid:rev2024 與有效 PDF 2.0 catalog 版本的 PDF/UA-2 輸出ValidatePdfUa會偵測puc2,並回報缺失的修訂中繼資料、非 PDF 2.0 檔案、未命名的可選內容設定、已淘汰的註解與泛用的 H 標題
變更 (Changed)
- PDF/UA 驗證現在會為 PDF/UA-1 與 PDF/UA-2 選取各設定檔專屬的分頁順序、XFA 與標題規則
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.42.0
Version 3.41.0
新增 (Added)
SetPageObjectMarkParam可在現有的標記內容項目上新增或取代一個整數、實數、字串或 blob 參數,而不會取代標記本身RemovePageObjectMarkParam移除單一選定屬性,同時保留標記名稱與所有無關屬性
變更 (Changed)
- 非整數的標記內容數字現在能以
pmpFloat往返,不再被截斷為整數快照 AddPageObjectMark期間的參數驗證失敗會移除已部分建立的原生標記TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.41.0
Version 3.40.0
新增 (Added)
ConfigureSystemFontProvider會在 PDFium 啟動前安裝應用程式字型對應器,並為缺失或被替代的文件字型供應經過驗證的 TrueType 或 OpenType 位元組TPdfSystemFontPolicy控制字樣替代、原生後援、每字型位元組上限與有界的請求快取GetSystemFontProviderStatistics回報對應、快取、後援、拒絕、資料表與存活控制代碼的活動統計
變更 (Changed)
- 提供者回呼會公開 PDFium 要求的字樣、字重、樣式、字集與字距,同時將回呼失敗保持在原生邊界內
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.40.0
Version 3.39.0
新增 (Added)
AddCidType2Text內嵌呼叫端提供的 TrueType 資料,並附帶明確的每字形 CID-to-GID 幾何與 CID-to-Unicode 對應TPdfCidFontOptions可選擇完整內嵌、偏好子集化並附後援、或必要子集化,並設定有界的字型、字形與 Unicode 限額TPdfCidFontReport回報子集決策、位元組大小、唯一字形、內嵌狀態、預期文字、擷取文字與擷取完整性
變更 (Changed)
- TrueType 子集化會保留要求的字形識別碼、拒絕不安全的輸出,並在對應或擷取驗證失敗時回復所有已插入的頁面物件
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.39.0
Version 3.38.0
新增 (Added)
BuildReflowDocument會在選定的頁面範圍內,從 Tagged PDF 結構或實體版面推斷建立有界且可重用的語意節點樹TPdfReflowDocument.ToHtml會輸出經跳脫處理的回應式標題、段落、清單、圖片、圖說、頁面區段,以及帶有標題儲存格與跨度語意的表格TPdfReflowOptions控制表格偵測、頁面區段、幾何、CSS、換行、頁面範圍、取消與資源限額
變更 (Changed)
- 重排時表格內容會取代與其重疊的段落區塊,而作用中頁面狀態會在成功、失敗或取消之後還原
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.38.0
Version 3.37.0
新增 (Added)
ApplyOcrSearchLayer透過 PDFium 轉譯選定的頁面,並將有界的由上而下 BGRA 像素傳送給呼叫端提供的IPdfOcrProviderTPdfOcrWord承載 Unicode 文字、信心等級與像素空間四邊形,並透過原生頁面幾何映射為隱形的可搜尋文字TPdfOcrReport記錄每頁完成情況、因已有文字而略過、失敗、取消、已轉譯像素以及接受或拒絕的字詞
變更 (Changed)
- OCR 插入會保留原始掃描影像串流、過濾格式錯誤或低信心結果、每頁提交一次,並還原作用中頁面
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.37.0
Version 3.36.0
新增 (Added)
ExtractTables從原生文字幾何與轉換後的路徑框線偵測帶框線與靠空白對齊的表格TPdfTable回報列、欄、合併跨度、頁面邊界、標題儲存格、偵測模式、信心等級與直接的 CSV 或 JSON 輸出ExtractDocumentTables在共享限額下掃描每一頁,並標記跨頁延續的相符表格
變更 (Changed)
- 表格擷取會強制執行可設定的字詞、框線、儲存格與表格數量上限,並在文件層級掃描後還原作用中頁面
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.36.0
Version 3.35.0
新增 (Added)
GenerateTaggedLayout建立新的語意版面文件,附帶原生標記內容、Document 結構樹、ParentTree 與 IDTree 對應以及文件語言中繼資料TPdfLayoutSemantics可建模標題、區段、清單、圖片、圖說、表格、標題儲存格關聯、跨度、替代文字、實際文字、語言與元素 IDTPdfLayoutDocument.AddLink發出 URI Link 註解,並透過 OBJR 與 StructParent 對應將每個註解與其 Link 結構元素關聯
變更 (Changed)
- 版面文字預設採用段落語意,而頁首、頁尾、橫線、圖片與可重用表單除非明確標記,否則預設為 artifact 裝飾性內容
- 語意計畫驗證會在文件發出前,拒絕重複的 ID、缺失的父代、循環、無效的清單或表格內含關係、缺少替代文字的圖片,以及無法解析的表格標題儲存格 ID
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.35.0
Version 3.34.0
新增 (Added)
TPdf.AddShapedText透過原生系統整形與 PDFium CID Type 2 字型 API,寫入 RTL、bidi、上下文相關與連字字形序列ShapePdfText與TPdfUniscribeTextShaper可在不修改文件的情況下,公開已定位的字形 ID、前進量、位移、來源叢集、視覺序列位置與 bidi 層級
變更 (Changed)
- 產生的 ToUnicode 映射涵蓋每個整形後的字形,而
ActualText儲存原始的邏輯 Unicode 字串,供符合規範的擷取與無障礙消費端使用 - 帶有 UTF-16 位元組順序記號的標記內容字串,現在可透過
PageObjectMarks正確解碼 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.34.0
Version 3.33.0
新增 (Added)
TPdfLayoutCachedNode會在首次使用時建構子類化的版面內容,並透過AddCachedNode支援重複的縮放放置TPdfLayoutPlan回報量測快取命中、未命中、快取節點放置與重用的原生 XObject
變更 (Changed)
BuildPlan依完整的頁面限制條件、內容、字型、樣式、來源與量測器身分識別重用相符的計畫,而不重複文字量測GenerateLayout會將每個唯一的快取節點轉換為一個繫結目的地的 XObject,並為每次放置建立輕量的 Form 物件TPdf.AboutInfo、套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.33.0
Version 3.32.0
新增 (Added)
TPdfLayoutDocument將換行文字、間隔元件、橫線、圖片、可重用的頁面 XObject、明確分頁、頁首與頁尾建構成經過量測的頁面計畫GenerateLayout會先對完整版面分頁,再以原子方式附加原生頁面與頁面物件,並提供穩定的{page}與{pages}參照
變更 (Changed)
TPdf.AboutInfo、套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.32.0
Version 3.31.0
新增 (Added)
TPdfPagePlan建構器描述刪除、移動、插入、分割與合併頁面操作,而不實際套用ValidatePagePlan回傳精確的舊頁到新頁對應,並盤點受影響的書籤、命名目的地、頁面標籤、表單欄位、標籤頁面、匯入功能與簽章
安全性 (Security)
- 會留下懸空導覽目標、或在未經明確授權下變更已簽章內容的計畫,會在任何原生頁面操作執行前遭到拒絕
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.31.0
Version 3.30.0
新增 (Added)
SaveRecoverySnapshot寫入附有總和檢查碼且大小有界的復原套件,內含來源指紋與已驗證的文件編輯日誌RestoreRecoverySnapshot只在復原套件的總和檢查碼、日誌鏈、來源指紋與復原後指紋全部相符時才重播該套件EnableRecoveryAutosave會在每次有變更的提交、復原或重做之後,以原子方式刷新明確指定的復原檔,而不重新寫入來源 PDF
變更 (Changed)
InspectRecoverySnapshot回報復原來源、指紋、項目數、位置與有界的儲存空間,而不套用該套件ImportEditJournal與復原還原現在在將編輯套用至已簽章 PDF 之前,都需要明確的AllowSignedDocument授權- 復原套件儲存區使用已設定的有界隨機存取儲存區與同目錄寫穿式替換,以支援大型日誌與當機安全的自動儲存更新
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.30.0
Version 3.29.0
新增 (Added)
BeginEditTransaction、CommitEditTransaction與RollbackEditTransaction可將任意原生文件編輯分組為原子性交易UndoEdit與RedoEdit可對頁面、物件、註解、附件與中繼資料變更,套用經 SHA-256 驗證的反向與正向差異ExportEditJournal與ImportEditJournal持久化有界的可攜差異,附帶來源指紋與摘要鏈驗證,供之後重播
變更 (Changed)
- 交易快照使用可重現的原生輸出,因此即使一般 PDFium 儲存含有非確定性的識別碼或時間戳記,未變更的提交仍保持為空
- 失敗的提交與無效的日誌重播會以原子方式還原前一個可載入的文件,而項目數、儲存位元組數與快照大小均保持在呼叫端設定的限制之下
- 已簽章的 PDF 在文件編輯交易開始之前,需要明確的
AllowSignedDocument授權 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.29.0
Version 3.28.0
新增 (Added)
TPdf.InspectOptionalContent會列舉 OCG 圖層、預設與替代設定、View/Print/Export 使用狀態、縮放與語言中繼資料、鎖定圖層、順序陣列、單選群組、OCMD 原則、可見性運算式與有效轉譯狀態TPdf.SaveAsOptionalContentConfigured寫入經過嚴格驗證的副本,並為選定的用途與設定套用呼叫端選擇的圖層狀態
變更 (Changed)
- 圖層狀態輸出現在會同時更新設定的
/ON與/OFF陣列以及 OCG Usage 狀態字典,讓 PDFium 透過其原生轉譯內容套用要求的可見性 - 設定寫入會拒絕未知群組、鎖定圖層變更、單選群組衝突、已加密的暫存檔,以及未經明確授權的已簽章檔案,並預設移除自動狀態規則,以保持選定結果的確定性
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.28.0
Version 3.27.0
新增 (Added)
TPdf.RenderPageByIndex以精確像素大小轉譯任一以一為基的頁面,而不變更作用中的編輯頁面或觸發頁面變更事件PageSceneCacheCapacity、PageSceneCacheCount與ClearPageSceneCache公開有界的場景快取控制與診斷
變更 (Changed)
- 索引式頁面轉譯、轉譯的縮圖與內嵌縮圖擷取,現在預設會透過八個項目的 LRU 快取重用已解析的 PDFium 頁面狀態
- 場景項目會在頁面啟用、編輯、頁面樹變更、表單狀態回呼、明確清除與文件卸除時失效,而進行中的轉譯則安全保留直到釋放
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.27.0
Version 3.26.0
新增 (Added)
TPadesSignatureAlgorithmInfo回報每個 CMS 簽署者的摘要、簽章、公開金鑰與具名曲線 OID,以及獨立評估的演算法原則狀態InspectPadesSignatureAlgorithm與EvaluatePadesSignatureAlgorithm可識別 P-256、P-384、P-521、brainpoolP256r1、brainpoolP384r1、brainpoolP512r1、Ed25519 與 Ed448 設定檔
安全性 (Security)
- PAdES 驗證現在會拒絕橢圓曲線與摘要不符、ECDSA 簽章 OID 與 CMS 摘要不一致、未具名的 EC 參數、Ed25519 參數,以及長度不為 512 位元的 Ed448 SHAKE256 輸出
- 原生 CMS 驗證仍是密碼學有效性的依據,而無法使用的演算法與無法識別的曲線會回報為
pcsUnsupported,不再被視為無效簽章 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.26.0
Version 3.25.0
新增 (Added)
TPdf.ExportObjectGraph將作用中的傳統、xref 串流與物件串流物件匯出為有界的具型別 JSON,明確呈現字典、陣列、字串、名稱、純量值、間接參照、串流位元組計數與選用的 SHA-256 串流摘要TPdf.SaveAsObjectGraphPatched透過具型別的 null、Boolean、整數、實數、名稱、文字字串與間接參照修補值,設定或移除經結構描述檢查的頂層字典值
安全性 (Security)
- 物件圖匯出會強制執行物件、遞迴、字串與輸出位元組限額,而修補作業會在交付前驗證每個操作,並拒絕懸空參照、重複操作、加密輸入、受保護的串流篩選器或長度變更,以及未經明確授權的已簽章文件
- 物件圖修補會以增量修訂形式暫存,重新具體化以供 xref 驗證,透過 PDFium 嚴格載入,且只有在所有檢查成功後才會複製或以原子方式重新命名
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.25.0
Version 3.24.0
新增 (Added)
TPdf.ValidatePadesTrust會對精確的原始ByteRange驗證每個可探索的分離式簽章,評估 signing-certificate-v2 繫結與目前的 Windows 系統信任,並回報各自獨立的簽章、鏈結、撤銷與時間戳記狀態TPdf.ValidatePadesTrustAsync會在分派前快照原始載入的來源,分階段回報解析、密碼學、鏈結建置、AIA、OCSP、CRL 與 RFC 3161 時間戳記工作的進度,並支援合作式取消TPadesTrustValidationOptions可選擇離線或線上信任、選用的撤銷與時間戳記驗證、有界的 URL 擷取逾時、取消權杖與進度回呼
安全性 (Security)
- 簽章時間戳記與 Document Time-stamp 權杖現在會獨立於一般文件簽章,另行驗證其 SHA-256 訊息印象、附加的 CMS 簽章、TSA 鏈結與選用的撤銷狀態
- 信任驗證絕不對 PDFium 重新儲存的副本計算雜湊,預設採用僅限離線快取的憑證擷取,並回報不支援或無法判定的狀態,而不會將無法取得的原生信任或撤銷證據視為有效
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.24.0
Version 3.23.0
新增 (Added)
TPdf.RenewPadesArchiveTimestamp與RenewPadesArchiveTimestampToStream會在現有的 PAdES 簽章鏈上附加新的 RFC 3161 Document Time-stamp,而不變更任何歷史位元組TPadesArchiveTimestampOptions控制 TSA 存取、nonce、保留的權杖容量與選用的完整 DSS 刷新,而TPadesArchiveTimestampReport記錄來源與結果層級、鏈結長度、位元組長度與回傳的時間戳記身分識別
修正 (Fixed)
- 新增與更新的 PAdES B-LTA 輸出會宣告 ESIC ExtensionLevel 2,而 B-LT 驗證除非存在 Document Time-stamp,不再需要 Level 2
安全性 (Security)
- 更新作業會對精確的原始載入位元組加上任何要求的 DSS 更新計算雜湊,拒絕已加密或不完整的來源,在寫入輸出前驗證可探索的 B-LTA 結果,並在替換前先暫存檔案輸出
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.23.0
Version 3.22.0
新增 (Added)
TPdf.AnalyzeSignatureRevisions重建原始的增量修訂鏈,並回報依 DocMDP 與 FieldMDP 權限分類的每個簽章物件變更TPadesRevisionAnalysisReport可區分允許的表單、註解、簽章與驗證素材更新,以及不允許的頁面或文件變更、無法解析的案例與可疑的幽靈定義
安全性 (Security)
- 修訂分析可偵測未參照的物件定義、簽章物件重複定義、主動式內容、格式錯誤的修訂鏈與無法解析的壓縮物件,同時強制執行有界的修訂、物件與變更限額
- 分析一律使用原始載入的檔案、記憶體緩衝區、自訂串流或已完成的漸進來源,而非 PDFium 重寫的位元組
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.22.0
Version 3.21.0
新增 (Added)
TPdf.PreparePadesRemoteSignature建立固定寬度的分離式簽章預留位置,並回傳持久性要求,內含 SHA-256 文件摘要、精確的ByteRange、保留區座標與預備 PDF 指紋TPdf.CompletePadesRemoteSignature會在驗證已持久化的要求與回傳的 CMS 之後,完成 HSM、雲端或中斷的簽署工作階段TPdf.SavePadesRemoteSigningRequest與TPdf.LoadPadesRemoteSigningRequest為處理程序與機器邊界提供穩定、有版本的二進位工作階段格式
安全性 (Security)
- 完成作業會拒絕已修改的預備 PDF、遭變更的
ByteRange座標、重複使用的非空預留位置、過大的 CMS 值、不支援的 SignedData 形態、缺失的 signing-certificate-v2 屬性,以及與預備文件不符的 CMS 訊息摘要 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.21.0
Version 3.20.0
新增 (Added)
TPadesDssOptions.Vris會為每個簽章寫入一個間接/Type /VRI字典,以完整解碼後含填補的/Contents值之大寫 SHA-1 作為索引鍵TPadesDssVri透過經過驗證的索引選取憑證、OCSP 與 CRL 素材,而 PAdES B-LT 與 B-LTA 簽署現在會自動為新簽章建立 VRI
變更 (Changed)
- DSS 憑證、OCSP 回應與 CRL 會以內容雜湊去重,在寫入任何目的地位元組之前,先進行穩定的首次出現排序、精確位元組碰撞檢查與 VRI 參照重新映射
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.20.0
Version 3.19.0
新增 (Added)
TPdf.GetStructuredText將目前頁面轉換為可重用的區塊、行與具樣式跨度記錄,同時保留來源字元索引、Unicode 純量、幾何、字型名稱、大小、字重與文字角度TPdfStructuredTextOptions可選擇內容串流或實體版面順序、選用的字型與語意增強,以及失敗即封閉的最大字元限額- Tagged PDF 與啟發式可讀內容片段會以結構種類、標題層級、語言、來源與結構元素身分識別增強區塊,同時仍未匹配的 Figure 替代文字也會保留呈現
變更 (Changed)
- 實體版面擷取現在採用 O(n log n) 字元排序、幾何成長的行與跨度緩衝區、行與欄分群、緩衝式 Unicode 建構,以及相鄰非空文字物件的字型快取,以獲得可預測的大型頁面效能
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.19.0
Version 3.18.0
安全性 (Security)
TPdf.SaveAsRedacted會對隔離的文件快照套用每個/Redact矩形,移除每個相交的頂層頁面物件,並繪製不透明的取代矩形,而不變更已載入的文件- 密文輸出會移除密文註解、可選地移除其他相交註解、刪除原生內嵌附件,並剝除 catalog 的
/AF、主動式內容、表單、中繼資料與無法觸及的先前修訂物件 TPdfRedactionOptions控制取代顏色、重疊註解移除與失敗即封閉的頁面物件掃描限額,而TPdfRedactionReport記錄每次移除與輸出計量TPdfSanitiseOptions.StripAssociatedFiles現在預設會移除 catalog 層級的關聯檔案參照
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.18.0
Version 3.17.0
新增 (Added)
TPdf.RenderPagesParallel會並行轉譯以一為基的頁面要求,每個工作器都擁有從單一擷取的文件快照載入、彼此獨立的 PDFium 模組、文件與頁面狀態TPdfParallelRenderOptions控制 DPI、工作器數目、旋轉、原生轉譯旗標、背景顏色、每頁像素上限與彙總保留輸出上限TPdfParallelRenderReport保留要求順序,並回傳呼叫端擁有的由上而下 BGRA 或 RGBA 緩衝區,附帶每頁的成功、取消、失敗、尺寸、計時與診斷細節- 漸進的工作器轉譯會在原生區塊之間輪詢
IPdfCancellationToken,而無效要求與限額失敗仍隔離在對應的結果中 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.17.0
Version 3.16.0
新增 (Added)
TPdfEncryptionRevision.erR7新增 ISO/TS 32003 AES-256-GCM 輸出,附帶/V 6、/R 7、/CFM /AESV4與必要的 PDF 2.0 開發人員擴充- 每個加密的字串與串流都會收到唯一的 96 位元 IV、長度不變的密文與 128 位元驗證標籤,而
EncryptMetadata = False會保留中繼資料串流位元組 DecryptAesGcmDocumentBytes會在回傳與 PDFium 相容的明文位元組之前,驗證使用者或擁有者密碼、加密權限、選用的獨立 PDF MAC 資料與每個 GCM 標籤- AESV4 輸出可與
TPdfEncryptOptions.EnableIntegrityProtection結合,讓每物件的 GCM 驗證與整份文件的 ISO/TS 32004 PDF MAC 保護並存 - 加密現在會使用有效的傳統交叉參照項目,而不會把串流資料內形似物件的文字解讀為間接物件
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.16.0
Version 3.15.0
新增 (Added)
TPdfEncryptOptions.EnableIntegrityProtection會為 AES-256 Standard Security Handler 修訂版 5 與 6 的文件,寫入 ISO/TS 32004 獨立 PDF MAC 驗證碼TPdf.ValidatePdfMac會驗證精確的原始來源位元組、嚴格涵蓋 EOF 的/ByteRange、CMSAuthenticatedData、由密碼衍生的檔案金鑰、已驗證屬性、封裝的 MAC 金鑰與 HMAC 值FPdfHmac新增 HMAC-SHA256 與 HKDF-SHA256,而FPdfAes新增 RFC 3394 AES-256 金鑰包裝與帶驗證的解包裝基元TPdfMacValidationResult以診斷文字區分有效、不存在、無效與不支援的驗證碼TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.15.0
Version 3.14.0
新增 (Added)
TPdf.ValidatePades現在會在 Windows 上對精確的原始/ByteRange區段驗證分離式 CMS 簽章,包括已簽署屬性與簽章值TPadesValidationResult公開彙總的完整性狀態,以及每個簽章的 ByteRange、CMS、signing-certificate-v2、系統信任、撤銷與時間戳記狀態,而不會把不支援或未檢查的證據與無效簽章混為一談- 簽署者憑證繫結以 SHA-256 檢查,憑證鏈結採用僅限快取的 Windows 系統信任評估,而原生錯誤碼仍可用於診斷
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.14.0
Version 3.13.1
修正 (Fixed)
TPdf.ValidatePades現在會檢查原始檔案、緩衝記憶體或自訂串流的位元組,而不是 PDFium 重新儲存的副本,後者可能使偏移失效或丟失簽章字典- PAdES
/ByteRange檢查現在接受涵蓋先前的完整 PDF 修訂並接續有效增量更新的簽章,同時也驗證 Document Time-stamp 範圍 TPadesValidationResult.SourceStatus可區分原始來源驗證與無法使用或不完整的漸進輸入,而合規述詞會拒絕缺少原始位元組的結果TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.13.1
Version 3.13.0
新增 (Added)
FPdfSha3為 ISO/TS 32001 與相關的 PDF 2.x 密碼學工作,提供無相依性的 SHA3-256、SHA3-384、SHA3-512 與 SHAKE256 基元- 增量內容可吸收任意分割的輸入,而 SHAKE256 支援重複的 squeeze 呼叫與跨越海綿速率邊界的輸出
- 單次的位元組陣列與小寫十六進位輔助函式補足了串流 API,並在 Delphi、C++Builder 與 Lazarus 上提供明確的生命週期與大小驗證
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.13.0
Version 3.12.0
新增 (Added)
TPdf.ImportFDF從檔案或串流匯入 FDF 表單資料,並透過既有的介面元件欄位路徑套用解析後的值FdfImportFromStream與FdfImportFromFile在有界的資源限額下,解析直接或間接的階層欄位、PDF 字面與十六進位字串、PDFDocEncoding、Unicode 文字、名稱值與明確的空值- FDF 匯出現在會將非 ASCII 的欄位名稱與值寫入為符合標準的 UTF-16BE 文字字串,並安全地跳脫來源檔名
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.12.0
Version 3.11.0
新增 (Added)
TPdf.DetectPageSkew以低 DPI 轉譯目前頁面,並將暗像素投影到候選旋轉角上來偵測傾斜角,回傳能使行總和變異數最大 (文字行對齊) 的角度,精度約 0.1 度TPdfSkewReport公開偵測到的角度、信心等級與取樣尺寸TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.11.0
Version 3.10.0
新增 (Added)
TPdf.GetTextInReadingOrder透過FPDFText_GetCharBox加上依位置排序的字元擷取,以原始內容串流順序或實體版面順序 (由上至下、由左至右) 擷取目前頁面的文字,使多欄與視覺上重新排序的文字能自然閱讀TPdfReadingOrder列舉可在roContentOrder與roPhysicalLayout之間選擇TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.10.0
Version 3.09.0
新增 (Added)
TPdfImageOptimizeOptions.PreserveBilevel會在OptimizeImages期間略過 1 位元二值影像 (ImageMask/線稿掃描),避免最近鄰降取樣破壞其清晰邊緣TPdfImageOptimizeOptions.MinDimension會略過小於臨界值的影像 (通常是不值得再縮小的圖示或裝飾元素)TPdfImageOptimizeOptions.Default提供建議的起始設定 (150 DPI 目標、1.5 比率、保留二值影像、最小尺寸 8)TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.09.0
Version 3.08.0
新增 (Added)
TPdfTileCache提供有界的已轉譯頁面圖磚 LRU 快取,以文件修訂、頁面、縮放、旋轉、轉譯旗標與裝置矩形作為索引鍵,因此重繪時不會重新轉譯未變更的圖磚,而先前儲存留下的陳舊圖磚也會自動逐出TTileKey公開複合快取鍵,附帶靜態Create工廠與Equals比較器TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.08.0
Version 3.07.0
新增 (Added)
TPdf.GetAnnotationFontColor與TPdf.SetAnnotationFontColor包裝了先前已繫結但未使用的FPDFAnnot_GetFontColor與FPDFAnnot_SetFontColor,為表單欄位編輯公開介面元件文字顏色的讀寫,而無須直接操作註解字典TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.07.0
Version 3.06.0
新增 (Added)
TPdf.RenderPageBanded透過回呼以水平帶狀方式轉譯目前頁面,因此海報與工程圖頁面可在完全不需配置整張目的點陣圖的情況下匯出 — 每個帶狀區域都轉譯到以要求帶高全新建立的TBitmap,並在回呼傳回後釋放TPdfBandCallback公開每個帶狀區域的合約 (帶狀索引、top-y 位移、點陣圖),其 Boolean 傳回值可讓呼叫端提前取消帶狀轉譯TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.06.0
Version 3.05.0
新增 (Added)
TPdf.RenderPageProgressiveWithColorScheme透過FPDF_RenderPageBitmapWithColorScheme_Start,以低視能色彩配置驅動原生的漸進轉譯迴圈,讓呼叫端可為無障礙需求覆寫路徑填滿/描邊與文字填滿/描邊顏色,同時保留具取消感知的 Continue 迴圈TPdfColorScheme公開四個TColor覆寫欄位,其Default會在所有欄位皆為clDefault時改用 PDFium 的內建顏色TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.05.0
Version 3.04.0
新增 (Added)
TPdf.ExportFDF將表單欄位值序列化為 FDF (ISO 32000-1 §12.7.11) 文件,與既有的 XFDF 路徑並列,並重用相同的TXfdfField資料模型,讓呼叫端收集欄位一次即可輸出任一格式FPdfXfdf中的FdfExportToStream與FdfExportToFile為獨立於已載入TPdf之外建置欄位集合的呼叫端,公開低階的 FDF 序列化器TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.04.0
Version 3.03.0
新增 (Added)
TPdf.SaveAsSanitised寫入乾淨的單一修訂副本,先從 catalog 剝除主動式內容 (/OpenAction、catalog/AA、/Names、/AcroForm、/Metadata),再修剪無法觸及的物件,使孤立的 JavaScript、動作與附件本體從檔案主體中消失TPdfSanitiseOptions公開各向量的獨立剝除控制與選用的可觸及性修剪階段;TPdfSanitiseReport記錄剝除的項目數、修剪的物件數、位元組計數與任何錯誤TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.03.0
Version 3.02.0
新增 (Added)
TPdf.SaveAsPageLabelled寫入完整 PDF 副本,其 catalog 的/PageLabels數字樹會被取代為提供的範圍,依 ISO 32000-1 §12.4.2 套用十進位、大/小寫羅馬數字與大/小寫字母編號樣式,並支援選用的前置文字字串與起始編號TPdfPageLabelRange、TPdfPageLabelRanges、TPdfPageLabelStyle與TPdfPageLabelReport公開範圍模型、樣式列舉與每次儲存的位元組/範圍計數- 既有的 catalog
/PageLabels項目會被偵測並拒絕,除非傳入ReplaceExisting=True,此時會先剝除舊項目再注入新範圍 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.02.0
Version 3.01.0
新增 (Added)
TPdf.FlattenPageRotation會將每頁目前的/Rotate固化到內容串流、頁面方框與註解矩形中,再將/Rotate重設為 0 — 包裝FPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotation,使視覺版面得以保留,而不依賴旋轉顯示提示TPdfFlattenRotationOptions公開每頁的註解轉換、頁面方框交換與自動更新控制;TPdfFlattenRotationReport記錄已處理、略過與失敗的頁面,以及轉換過的物件與註解總數TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.01.0
Version 3.00.0
新增 (Added)
TPdf.StampPagesFromPdf將來源頁面作為已定位、已縮放且可選旋轉的 Form XObject 覆疊或襯底,蓋印到一或多個目標頁面,包裝CreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndex,並附帶明確的頁面方框、錨點、邊界、縮放、旋轉、混合與 Z 軸順序原則TPdfOverlayOptions與TPdfOverlayReport公開放置、轉換、混合與 Z 軸順序控制,以及每頁的已蓋印、失敗與略過計數TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 3.00.0
Version 2.99.0
新增 (Added)
TPdf.RefreshAppearance透過FPDFAnnot_SetAP選擇性重新產生單一介面元件的外觀串流,避免整頁的NeedAppearances重建TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.99.0
Version 2.98.0
新增 (Added)
TPdfView.MouseDown現在會透過FORM_OnRButtonDown將滑鼠右鍵事件路由至原生表單填寫引擎,讓滑鼠右鍵可開啟捷徑功能表並與介面元件互動- 路線圖項目 78 (連結註解對應)、82 (介面元件呈現) 與 83 (結構屬性模型) 已確認透過既有基礎結構完成
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.98.0
Version 2.97.0
新增 (Added)
TPdf.SetDeterministicTime與TPdf.RestoreActualTime讓測試與可重現建置可透過支援的原生回呼,注入固定的建立、修改與目前時間TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.97.0
Version 2.96.0
新增 (Added)
TPdf.GetWidgetAdditionalActionJavaScript透過FPDFAnnot_GetFormAdditionalActionJavaScript讀取指定事件觸發器的介面元件額外動作 JavaScript,而不執行任何指令碼TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.96.0
Version 2.95.0
新增 (Added)
TPdf.GetObjectText透過FPDFTextObj_GetText擷取文字頁面物件的 Unicode 文字,供精確內容編輯與編碼診斷使用TPdf.GetObjectsByType回傳符合某類別 (文字、路徑、影像、表單、網底) 的所有頁面物件索引,供選擇性類別輸出使用TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.95.0
Version 2.94.0
新增 (Added)
TPdf.AttachmentHasKey、GetAttachmentStringValue與SetAttachmentStringValue可讀取、寫入並探查內嵌附件上的自訂檔案規格擴充值TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.94.0
Version 2.93.0
新增 (Added)
TPdf.InsertObjectAtIndex透過FPDFPage_InsertObjectAtIndex在要求的堆疊位置插入頁面物件,而非一律附加到尾端TPdf.UpdateAnnotationObject透過FPDFAnnot_UpdateObject提交已編輯的註解外觀物件,使註解所擁有頁面物件的變更能可靠保存TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.93.0
Version 2.92.0
新增 (Added)
TPdf.InsertClipPath透過原生FPDF_CreateClipPath與FPDFPage_InsertClipPath路徑建立矩形裁剪路徑並插入目前頁面,補足既有的PageObjectClipPath檢查器TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.92.0
Version 2.91.0
新增 (Added)
TPdf.GetPageComplexity掃描目前頁面,回報影像、路徑與文字物件數量,以及路徑區段總數、影像像素總數與透明度存在與否,供轉譯規劃使用TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.91.0
Version 2.90.0
新增 (Added)
TPdf.IsAnnotationSubtypeSupported會在編輯前詢問已載入的 PDFium DLL 支援哪些註解子類型TPdf.ChooseRenderFlags依最終縮放與目的地大小選取原生轉譯旗標 (半色調、有限影像快取),以進行自適應影像次取樣TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.90.0
Version 2.89.0
新增 (Added)
TPdf.GetTextRenderMode公開文字頁面物件的原生文字轉譯模式 (填滿、描邊、裁剪),供製作診斷使用TPdf.GetTextObjectRenderedBitmap透過原生FPDFTextObj_GetRenderedBitmap路徑,將單一文字物件轉譯到隔離的點陣圖TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.89.0
Version 2.88.0
新增 (Added)
TPdf.GetThumbnail在頁面沒有內嵌縮圖時,現在會退回轉譯替代縮圖,實現內嵌縮圖優先的偏好TPdf.LinkAtPoint使用FPDFLink_GetLinkAtPoint回報頁面空間座標上是否存在原生連結,而非僅掃描矩形TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.88.0
Version 2.87.0
新增 (Added)
TPdf.AuditActiveContent回傳TPdfActiveContentAudit快照,內含 JavaScript 動作數、內嵌檔案數、簽章數、XFA 表單類型與文件權限,而不執行任何指令碼或動作TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.87.0
Version 2.86.0
新增 (Added)
TPdf.GetFeatureInventory只掃描每個頁面一次,即回報統一的記錄,包含文字、路徑、影像、Form XObject 與網底物件數量,以及附件、簽章、表單類型、權限與 PDF 版本等事實TPdfFeatureInventory將先前需要多次屬性呼叫才能取得的整份文件事實,彙總為單一快照TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.86.0
Version 2.85.0
新增 (Added)
TPdf.SaveAsReproducible會重寫文件,使同一個記憶體內狀態的兩次儲存產生位元組完全相同的輸出- 系統會剝除非確定性的
/Info時間戳記 (/CreationDate、/ModDate)、省略來源/ID(由依賴當時時間的位元組衍生),而物件順序與世代保持穩定 TPdfReproducibleReport回報保留與修剪的物件數量,以及被剝除的時間戳記項目數TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.85.0
Version 2.84.0
新增 (Added)
TPdf.SaveAsInlineImagesExternalised會重寫文件,將每個BI/ID/EI行內影像抽取為可重用的影像 XObject,並以/ImN Do運算子取代行內區塊- 行內影像字典縮寫 (
/W、/H、/BPC、/CS、/F、色彩空間值與篩選器值) 會展開為完整的影像 XObject 名稱,使抽取出的物件符合標準 - 頁面的
/Resources /XObject字典會更新為新的 XObject 參照,而重寫後的內容串流會以 Flate 壓縮 TPdfInlineImageExternaliseReport回報已外部化、略過與失敗的數量,以及建立的 XObject 數TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.84.0
Version 2.83.0
新增 (Added)
TPdf.SaveAsFlateRecompressed會重寫文件,以最大壓縮重新編碼符合資格的FlateDecode串流,只有在量測到的位元組節省量超過呼叫端臨界值時才取代該串流TPdfFlateRecompressOptions可選擇最小節省位元組數與最小節省比率,使已最佳化的串流保持不變TPdfFlateRecompressReport回報重新壓縮、略過與失敗的串流數量,以及原始與重新壓縮後的串流位元組總量- 物件編號與世代保持穩定;只有重新壓縮的串流內容及其直接
/Length值會變更,因此所有存留的交叉參照仍然有效 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.83.0
Version 2.82.0
新增 (Added)
TPdf.OptimizeImages會走訪每個頁面影像物件,並對有效放置 DPI 超過呼叫端選定目標者降取樣,再透過原生內容產生器提交每個觸及的頁面TPdfImageOptimizeOptions可選擇目標 DPI 與最小比率,因此只有真正過取樣的影像會被重新編碼TPdfImageOptimizeReport回報最佳化、略過與失敗的影像數量,並附帶結構化的失敗訊息- 降取樣會在原生 PDFium 點陣圖緩衝區上執行最近鄰處理,保留來源格式、跨距與 Alpha 色板,再由
FPDFImageObj_SetBitmap重新編碼存留的影像 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.82.0
Version 2.81.0
新增 (Added)
TPdf.SaveAsDeduplicated會將文件重寫為單一乾淨修訂,把相容的字型、影像與 Form XObject 收斂到一個共享的代表物件- 遞迴內容指紋會結合每個資源字典、其完整可觸及子圖與其原始串流內容,因此只有整體內容完全相同時,重複項目才會合併
- 每個指向被合併重複項目的交叉參照都會改寫為存留的代表物件,而重建的傳統交叉參照表保持物件編號穩定
TPdfDedupReport回報保留與修剪的物件數量,以及各分類合併的字型、影像與 Form XObject 數量TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.81.0
Version 2.80.0
新增 (Added)
TPdf.SaveAsReachable會將文件重寫為單一乾淨修訂,只保留可從 catalog 與 trailer /Info 字典觸及的間接物件TPdfPruneReport回報保留與修剪的間接物件數量、來源與輸出位元組大小,以及加密或格式錯誤輸入的結構化失敗原因- 增量更新、頁面合併或修復儲存留下的無法觸及孤兒物件會被清除,而重建的傳統交叉參照與 trailer 會保留
/Root、/Info與/ID,不重新編號 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.80.0
Version 2.79.0
新增 (Added)
TPdf.CreateDocumentSearch建立正向或反向的全文件搜尋,一次回傳一個比對結果,而不建立整份文件的文字索引TPdfDocumentSearchResult為每個結果回報以一為基的頁碼、字元範圍、比對的文字與頁面空間矩形- 搜尋工作階段接受
IPdfCancellationToken,只保留目前的 PDFium 頁面與文字控制代碼,並在文件關閉時安全地結束 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.79.0
Version 2.78.0
變更 (Changed)
TPdfRangeRequestScheduler現在會搶佔重疊的低優先順序傳輸,使頁面關鍵的 PDFium 提示不會排在背景下載之後等候- 外部已可取得的稀疏位元組會取消多餘的進行中傳輸,而被取代或重複的傳輸回呼會回傳 False,不發布過期的覆蓋範圍
- 優先順序提升會保留各自獨立的重試歷史,而傳輸搶佔不再耗用未受影響範圍尾段的重試限額
TPdfRangeRequestStatistics.SupersededRequestCount回報被更高優先順序提示或外部供應覆蓋範圍取代的傳輸工作TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.78.0
Version 2.77.0
新增 (Added)
TPdf.SaveAsNormalizedContent將語法正規化的頁面內容寫入串流或以原子方式取代的檔案,並回報正規化、略過與合併的頁數NormalizePdfContentSequence為已解碼的內容串流序列,提供有界的獨立語彙基元正規化
變更 (Changed)
- 頁面
/Contents陣列現在可合併為單一串流,同時保留字串、名稱、行內影像內容、未知運算子與跨串流的圖形狀態 - 格式錯誤的語彙基元、不平衡的狀態作用域、不支援的篩選器、加密輸入與已簽章文件重寫,都有明確原則與結構化狀態回報
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.77.0
Version 2.76.0
新增 (Added)
TPdfStreamInspector盤點任意的實體 PDF 串流物件,回報物件偏移、原始長度、篩選器鏈、DecodeParms、外部檔案標記、加密狀態,以及原生影像或附件路徑CopyRawData可複製完整的已編碼內容或經過驗證的位元組視窗,而DecodeData依宣告順序套用 ASCIIHex、ASCII85、LZW、Flate、RunLength、TIFF 8 位元與 PNG 預測器TPdfStreamInspectOptions為來源、原始、解碼、字典、串流數與展開比率資源設定界限,並對達到限額、格式錯誤的資料、不支援的編解碼器、加密與寫入失敗提供結構化報告
變更 (Changed)
- 串流長度解析現在會為直接與間接
/Length值公開精確跨度,包括零長度串流與內含字面endstream序列的內容 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.76.0
Version 2.75.0
新增 (Added)
TPdfLoadOptions為檔案、記憶體、位元組範圍與自訂串流載入新增相容、嚴格與復原原則TPdfLoadReport回報原生復原路由、xref 有效性、受損偏移、項目衝突、修訂數、稽核限額,以及傳統、混合與 xref 串流文件的結構化問題TPdf.SaveAsRepaired建立完整的單一修訂副本,並在交付已驗證的串流或以原子方式取代目標檔案之前,獨立對其進行嚴格載入
變更 (Changed)
- 既有的載入多載保持相容行為,現在並透過
LastLoadReport發布原生 xref 有效性與復原狀態 - 嚴格載入會拒絕需要原生 xref 重建或未通過結構稽核的文件,而已簽章文件的修復輸出則需要呼叫端明確授權
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.75.0
Version 2.74.0
新增 (Added)
TPdf.MergeFiles合併檔案式來源清單,支援各來源的頁面範圍與密碼,同時最多只保持一個來源文件開啟TPdfBatchMergeOptions新增發生錯誤時停止或略過的處理、來源範圍或分塊匯入、表單與大綱原則、插入控制、進度回呼、取消、檢視器偏好設定複製與回復控制TPdfBatchMergeReport回報已提交與已回復的頁面、各來源結果、原生匯入呼叫、最大批次、同時開啟來源的尖峰值、原則偵測、問題與終端狀態
變更 (Changed)
- 預設批次路徑會對每個來源執行一次原生頁面匯入,讓 PDFium 可在該來源內重用複製的物件,然後先關閉來源再開啟下一個檔案
- 分塊模式提供更細的取消點與更小的原生批次,而部分失敗的來源與停止或取消的結果,可移除該操作插入的所有頁面
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.74.0
Version 2.73.0
新增 (Added)
TPdfRandomAccessStore提供執行緒安全的循序與定位 I/O,將小型內容保持在有界的記憶體中,並在到達呼叫端選定的上限時一次性溢出到私人暫存儲存區TPdf.SaveMemoryLimit與SaveTemporaryDirectory設定儲存暫存方式,而LastSaveSpillCount與LastSaveLargestMemoryBuffer公開可量測的每次儲存診斷
變更 (Changed)
- 儲存、標準轉換、驗證、加密、DSS 與 PAdES 的暫存緩衝區現在共享有界的工作儲存區,附帶獨佔的關閉時刪除溢出檔與記憶體抹除
- 自訂 PDFium 區塊回呼會序列化一般串流 seek,並在以
TPdfRandomAccessStore為後盾時使用與游標無關的定位讀取 - 檔案式的 XFA 能力掃描現在會讀取固定大小的重疊區塊,而不再將整份 PDF 複製到記憶體
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.73.0
Version 2.72.0
新增 (Added)
TPdf.BeginIncrementalSave、CommitIncrementalSave與EndIncrementalSave提供修訂工作階段,只附加已變更或新建立的間接物件TPdfIncrementalCommitInfo為每次提交回報變更物件數、附加位元組數、輸出總位元組數與成功的修訂數
變更 (Changed)
- 每次有變更的提交都會將先前的完整輸出保留為精確的位元組前置,沒有變更時不發出修訂,並延續來源的傳統或 xref 串流格式
- 原生 xref 串流增量輸出會先修補其必要的類型、自身項目、長度、索引與物件終止符,再進行後續處理
- 工作階段開始前會先拒絕已加密文件,而已簽章文件需要呼叫端明確許可,使簽章原則不會被意外繞過
- 檔案多載會先完成同層暫存檔,再以原子方式取代目的地,並在任何寫入或取代失敗後回復工作階段狀態
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.72.0
Version 2.71.0
新增 (Added)
TPdf.SaveAsObjectStream寫入 PDF 1.5+ 檔案,附帶有界的壓縮物件群組與包含完整 type-2 項目的純 xref 串流PackPdfObjectStreams可在解析作用中的修訂後,將傳統、混合、xref 串流與既有的物件串流輸入現代化
變更 (Changed)
- 頁面區域物件排序、自適應 xref 欄位寬度、直接 catalog 存取,以及可設定的成員與解碼位元組上限,在檔案大小與隨機存取效能之間取得平衡
- 檔案多載會先完成同層暫存檔,再以原子方式取代目的地,而無效的增量、版本與群組選項會在輸出開始前遭到拒絕
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.71.0
Version 2.70.0
新增 (Added)
TPdf.SaveAsLinearized使用首頁物件群組、兩個交叉參照節,以及 Annex F 的頁面偏移與共享物件提示表,將真正的 Fast Web View PDF 寫入串流或檔案- 作用中的物件串流成員會自動具體化,讓 xref 串流與物件串流輸入在不變更可見頁面內容的情況下,成為適合範圍請求的輸出
變更 (Changed)
- 檔案多載會先完成同層暫存檔,再以原子方式取代目的地,而串流多載保留一般的 PDFium 儲存選項與明確的版本檢查
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.70.0
Version 2.69.0
新增 (Added)
TPdfRangeRequestScheduler將 PDFium 的位元組範圍提示轉換為已排定優先順序、已合併且大小有界的傳輸工作,而不強制連續下載- 完整與部分完成、有界的重試、稀疏可用性去重、要求統計與世代安全的取消,支援 HTTP Range 與自訂傳輸管線
TPdfProgressiveDocument.RangeRequests會自動接收文件、表單與頁面提示,只提升確實阻擋互動頁面的位元組
變更 (Changed)
CancelProgressiveLoad現在會在原生可用性與串流卸除之前取消進行中的範圍工作,並安全地忽略過期的傳輸完成通知TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.69.0
Version 2.68.0
新增 (Added)
TPdfProgressiveDocument會保持 PDFium 的可用性工作階段存活,同時由遠端或不斷增長的隨機存取串流接收 PDFium 要求的位元組範圍CheckDocumentAvailability、CheckFormAvailability與LoadAvailablePage會回傳合併的TPdfDownloadRange提示,讓主機應用程式只擷取開啟並顯示線性化頁面所需的資料AvailableByteCount支援單調的連續下載,而OnDataAvailable支援稀疏與亂序的範圍快取
變更 (Changed)
- 線性化檔案使用 PDFium 原生的漸進文件、表單與頁面閘門;非線性化檔案在完整檔案到齊後,會自動切換至原生的自訂串流載入器
TPdfStreamAdapter可公開與目前儲存位元組不同的邏輯最終大小,同時保留明確的 4 GiBFPDF_FILEACCESS限制TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.68.0
Version 2.67.0
新增 (Added)
TPdfView.AllowFormEvents可關閉檢視器轉送至表單填寫層的滑鼠、鍵盤與焦點事件,適用於唯讀檢視器或自行驅動表單互動的檢視器- 關閉後表單欄位仍正常轉譯:頁面載入與關閉刻意不設閘,因為這兩者是初始化表單層,而非回應輸入
- 此開關加入既有的
AllowUserPageChange與AllowUserTextSelection切換,預設為 True,因此現有行為不變
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.67.0
Version 2.66.0
新增 (Added)
- 文件引發的具名動作 (ISO 32000-1 §12.6.4.11) 現在可透過新的
OnNamedAction事件送達主機應用程式;先前它們全部遭到丟棄 - 若未處理,四個標準導覽名稱 —
NextPage、PrevPage、FirstPage、LastPage— 會移動頁面,並在首尾頁夾住而非循環繞轉 TPdf.PerformNamedAction讓應用程式可直接觸發相同行為,對不具程式庫提供意義的名稱則回傳 False
修正 (Fixed)
- 某個加密測試以從
endstream向後掃描的方式量測串流主體,偶爾會把密文位元組誤認為行終止符而回報間歇性失敗;程式庫本身全程正確
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.66.0
Version 2.65.0
新增 (Added)
BuildToUnicodeCMap產生 CID 字型所需的 ToUnicode CMap (ISO 32000-1 §9.10.3),讓其文字可被複製、搜尋並由輔助技術讀取 — 缺少它時文字雖能正確轉譯,擷取出來卻是空的- 項目會以規格設定的每區塊 100 條上限分塊,重複字形只寫入一次,並略過
.notdef - 此 CMap 遵循 CID = GID 慣例,因此不需要在旁邊附加
CIDToGIDMap串流
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.65.0
Version 2.64.0
新增 (Added)
- 筆跡與戳記註解是由自身的頁面物件繪製,而非來自頁面內容串流,而這些物件現在可供存取:
AnnotationObjectCount與AnnotationObjectInfo可讀取它們,AddPathToAnnotation可將以CreatePath建立的路徑交給註解,而RemoveAnnotationObject可刪除單一物件 - 建立戳記的外觀不再需要外部工具:如常建立路徑,然後把它交給註解而非頁面
- PDFium 僅接受筆跡與戳記子類型上的頁面物件,因此其他子類型會被拒絕並附上說明該限制的訊息,而不是莫名其妙地失敗
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.64.0
Version 2.63.0
新增 (Added)
TPdf.AddStandardFontText使用每個 PDF 閱讀器都必須提供的 14 種字型之一繪製文字,完全不含內嵌字型程式 — 產生的檔案明顯小於以AddText繪製相同文字的結果,後者會內嵌其所找到的系統字樣- 新的
TPdfStandardFont列舉為全部 14 種字樣命名,呼叫端不會再打錯基礎字型名稱;PDFium 會精確比對這些名稱,打錯字將默默地得不到任何字型 - PDF/A 與 PDF/X 都要求內嵌所有字型,因此以這些設定檔為目標的輸出應繼續使用
AddText
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.63.0
Version 2.62.0
新增 (Added)
TPdf.TextObjectGlyphOutline以路徑區段回傳文字物件字型的單一字形外框,可用於將文字轉為向量美術,或檢查可能被字型替代改變的字形- 結果重用既有的
TPdfPathSegments型別,因此讀起來與繪製路徑物件的外框完全一致 - 座標位於字型自身的設計空間中,正規化為一個 em 等於 1.0;要求的字型大小不會縮放這些座標,因此需要裝置單位的呼叫端須自行乘上點數大小
- 空結果代表該字型未提供該字形的外框,這不是錯誤;但對非文字物件要求字形會引發例外
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.62.0
Version 2.61.0
新增 (Added)
TPdf.InspectAvailability回報 PDFium 不將 PDF 載入為文件所能得知的資訊:檔案是否已線性化 (“網頁最佳化”)、完整解析是否會成功、是否帶有表單資料,以及檢視器會先顯示哪一頁- 新的
TPdfAvailability、TPdfLinearization與TPdfFormAvailability型別承載這些答案;串流會被讀取但不保留,且位置會在傳回時還原 - 這補足了
FPDFAvail_*家族的最後一個缺口,該家族先前已繫結並載入,但程式庫中沒有任何呼叫端 - Delphi、Lazarus 與 C++Builder 各自涵蓋回報的事實、串流位置保證與 nil 串流拒絕
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.61.0
Version 2.60.0
新增 (Added)
- 標記內容 (ISO 32000-1 §14.6) 現在可從高階 API 存取:
PageObjectMarks讀取頁面物件上的每個 BDC 標籤與其屬性清單,AddPageObjectMark寫入一個,RemovePageObjectMark刪除一個,而PageObjectMarkedContentID回報 MCID - 新的
TPdfContentMark、TPdfContentMarkParam與TPdfMarkParamKind型別承載標籤名稱及其具型別參數 (整數、float、字串、blob),值的種類由 PDFium 解析得知,而非從成功的 getter 猜測 - 新增標記會重建頁面內容串流,因此標記能在儲存後留存;這必須明確處理,因為
SaveAs本身不會重新產生內容 - Delphi、Lazarus 與 C++Builder 各自包含六個案例,其中一個會展開儲存後的內容串流,確認 BDC 運算子與其屬性清單確實寫入
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.60.0
Version 2.59.0
新增 (Added)
TPdfAnnotation新增HasLinkUri與LinkUri,因此CreateAnnotation現在可產生可用的網頁連結:註解會以指向指定位址的/URI動作儲存- 在
anLink以外的子類型上設定連結 URI 會引發例外,因為只有 Link 註解帶有動作字典 - 此欄位目前為唯寫;回讀連結目標須透過
FPDFLink_*家族,而該家族需要文件控制代碼 - Delphi、Lazarus 與 C++Builder 都會驗證儲存的位元組帶有
/URI動作與目標位址
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.59.0
Version 2.58.12
新增 (Added)
- 當頁面同時帶有
/TrimBox與/ArtBox時,PDF/X 驗證會回報pvxiTrimBoxWithArtBox;兩者都聲明成品頁面,RIP 無從得知哪一個才是權威 (ISO 15930) - 當
/TrimBox或/BleedBox超出/MediaBox時 (包括原點為負值的方框),PDF/X 驗證會回報pvxiPageBoxOutsideMediaBox;超出媒材的方框無法成像 - 矩形在比較前會先正規化,因此兩種角點順序都可接受,而恰好貼齊媒材邊緣的方框仍可通過驗證
- 預檢報告會將這兩個問題歸類為結構類,並出具具體的補救建議
- Delphi、Lazarus 與 C++Builder 都涵蓋兩個拒絕案例與一個合格案例
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.12
Version 2.58.11
新增 (Added)
- 當文件標記了 TOCI 項目、卻從未標記其所屬的 TOC 容器時,PDF/UA 驗證會回報
pvuaiTociWithoutToc,這會使輔助技術播報目錄項目時根本沒有目錄 (ISO 14289-1 §7.7) - 預檢報告會將此問題歸類為結構類,並建議以 TOC 元素包裹這些項目
- C++Builder 在 Delphi 與 Lazarus 案例之外,首度獲得 PDF/UA 測試覆蓋
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.11
Version 2.58.10
新增 (Added)
- 當符號式 TrueType 字型帶有
/Encoding項目時,PDF/A 驗證會回報pvaiSymbolicTrueTypeEncoding;ISO 19005-1 §6.3.7 僅承認字型的內建 cmap,因此/Encoding會與之抵觸 - 符號旗標會從
/FontDescriptor讀取,無論它是行內寫在字型字典中還是間接參照;非符號式字型保留其必要的/WinAnsiEncoding或/MacRomanEncoding,而不會被標記 - 預檢報告會將此問題歸類為內容類,並建議移除該項目
- Delphi 與 Lazarus 涵蓋被標記的案例與兩個接受案例;C++Builder 涵蓋被標記與非符號式案例
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.10
Version 2.58.9
新增 (Added)
- PDF/A 驗證會回報 ISO 19005-1 Annex C 的容器實作限制:名稱超過 127 位元組為
pvaiNameOverLimit、超過 8191 個元素為pvaiArrayOverLimit、超過 4095 個項目為pvaiDictOverLimit、巢狀超過 28 層為pvaiNestingOverLimit - 這些限制為含端點,因此恰好落在界限上的容器仍可通過驗證;測試同時鎖定每個邊界的拒絕側與接受側
- 預檢報告會將這四個問題歸類為結構類,並在每項建議中指明具體限制
- Delphi 與 Lazarus 涵蓋全部四個限制與邊界案例;C++Builder 涵蓋陣列限制與邊界
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.9
Version 2.58.8
新增 (Added)
- 當影像數量與頁面數量不符時,PDF/R 驗證會回報
pvriPageImageMismatch;ISO 23504-1 §6.5.1 規定每頁恰好一個條帶影像,因此沒有影像或有多個影像的頁面都不合格 - Delphi、Lazarus 與 C++Builder 測試涵蓋沒有影像的頁面、有兩個影像的頁面,以及合格的單一影像案例
變更 (Changed)
- PDF/R 標記注入測試現在從已帶有條帶影像的來源頁面開始,因為標記注入只會加入中繼資料,無法供應頁面內容
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.8
Version 2.58.7
新增 (Added)
- 當頁面指名字型資源時,PDF/R 驗證會回報
pvriFontForbidden;PDF/raster 頁面只承載掃描影像,別無其他 (ISO 23504-1 §6.5.2) - 對白名單以外的條帶編碼,PDF/R 驗證會回報
pvriForbiddenImageFilter,因此/LZWDecode、/RunLengthDecode、/ASCII85Decode、/ASCIIHexDecode、/JBIG2Decode與/Crypt會被拒絕,而/CCITTFaxDecode、/DCTDecode、/JPXDecode與/FlateDecode可通過 (ISO 23504-1 §6.6) - 預檢報告會將這兩個問題歸類為內容類,並建議具體的補救方式
- Delphi、Lazarus 與 C++Builder 測試涵蓋字型資源、被拒絕的篩選器,以及僅使用白名單編碼的頁面
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.7
Version 2.58.6
新增 (Added)
- 當文件顯示使用了字型、卻未帶有內嵌字型程式時,PDF/E 驗證會回報
pveiFontNotEmbedded,因此此要求在免 DLL 路徑上與透過 PDFium 都會檢查 - 工程圖必須在數十年後仍轉譯出相同的結果,因此 ISO 24517-1 不豁免任何標準 14 字型;此檢查一體適用於
/Type1、/TrueType、/Type0與/MMType1 - 預檢報告會將新問題歸類為內容類,並建議內嵌所有字型程式
- Delphi、Lazarus 與 C++Builder 測試涵蓋不含程式的描述器、內嵌的
/FontFile2,以及完全不使用字型的文件
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.6
Version 2.58.5
新增 (Added)
InjectPdfEMarkers現在會寫入 ISO 24517-1 §6.2 要求的 OutputIntent:內嵌的 sRGB ICC 目的地描述檔、指名它的/GTS_PDFE1OutputIntent,以及 catalog 的/OutputIntents陣列,全部作為同一個增量更新的一部分- 描述檔串流的
/N由 ICC 檔頭衍生,而非假設三個分量,因此 CMYK 描述檔也會被正確描述 - PDF/E 驗證會回報
pveiMissingOutputIntent與pveiMissingIccProfile,因此未聲明顏色條件的候選文件不再被接受 - Delphi、Lazarus 與 C++Builder 測試涵蓋合格的 OutputIntent、缺少目的地描述檔的 OutputIntent,以及完全沒有 OutputIntent 的 catalog
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.5
Version 2.58.4
新增 (Added)
- PDF/X 驗證現在會從位元組掃描回報
pvxiFontNotEmbedded,因此未內嵌的字型會在免 DLL 路徑上被發現,而不只透過 PDFium 支援的檢查 - 與 PDF/A 不同,PDF/X 不豁免標準 14 字型,因此任何未內嵌字型程式的字型使用都會被回報
- 此檢查保持保守:只有在檔案顯示使用字型、卻完全沒有
/FontFile、/FontFile2或/FontFile3時才會觸發,因為以描述器對程式計數會在共享描述器上產生誤判 - Delphi、Lazarus 與 C++Builder 測試涵蓋不含程式的描述器、內嵌的程式,以及不使用字型的文件
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.4
Version 2.58.3
新增 (Added)
- 當 PDF/X-1a 候選文件帶有
/DeviceRGB、/CalRGB或/Lab時,PDF/X 驗證現在會回報pvxiColorSpaceForbidden,ISO 15930-1 §6.2 將這些色彩空間排除在其 CMYK 交換之外 - 此檢查僅針對 PDF/X-1a 閘控,因此 PDF/X-3 與後續版本仍允許 RGB,以及它們與 OutputIntent 搭配的裝置無關色彩空間
- 只會測試無歧義的色彩空間名稱語彙基元;
ICCBased串流需要解析其/N,仍由物件模型層處理 - Delphi、Lazarus 與 C++Builder 測試涵蓋被標記的 RGB 空間、被標記的 Lab 空間、合格的 CMYK 與灰階組合,以及 PDF/X-3 上的許可案例
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.3
Version 2.58.2
新增 (Added)
- 對透明度群組或作用中的柔性遮罩,PDF/X 驗證現在會回報
pvxiTransparencyForbidden,ISO 15930-1 §6.2 (PDF/X-1a) 與 ISO 15930-3 §6.3 (PDF/X-3) 均禁止此兩者 - 此檢查依偵測到的一致性等級閘控,因此 PDF/X-4 與 PDF/X-6 仍允許透明度,而無法識別等級的檔案絕不會因可能不適用的規則被標記
- 以
/SMask /None明確關閉的柔性遮罩不會視為透明度 PdfHasActiveSMask從FPdfPdfa移入FPdfPdfCommon介面,讓每個驗證器都能共享同一條柔性遮罩規則- Delphi、Lazarus 與 C++Builder 測試涵蓋 X-1a 上被標記的群組、X-3 上被標記的柔性遮罩、已停用的柔性遮罩,以及 X-4 上的許可案例
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.2
Version 2.58.1
新增 (Added)
- PDF/X 驗證現在會檢查 ISO 15930-7 §6.2.4 要求的 OutputIntent 結構:
pvxiOutputIntentScheme回報存在但不是/GTS_PDFX的子類型,而pvxiOutputIntentMissingIdentifier回報缺少/OutputConditionIdentifier - 子類型以完整名稱語彙基元比對,因此
/GTS_PDFXVersion這類更長的名稱不再通過,而以#xx跳脫拼寫的相同名稱仍可通過 - 完全不帶子類型的 OutputIntent 則不予處理,因為其缺失已由標記層級的問題回報
- 預檢報告會將這兩個問題歸入 OutputIntent 分類,並建議修正方式
- Delphi、Lazarus 與 C++Builder 測試涵蓋合格的子類型、PDF/A 子類型、更長的名稱語彙基元、缺少子類型,以及缺少條件識別碼
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.58.1
Version 2.58.0
變更 (Changed)
- PDFium 從自身 C++ 堆疊框叫用的全部 35 個回呼 (表單填寫、XFA、JavaScript 平台、漸進轉譯暫停,以及串流讀寫),現在都會攔截任何 Pascal 例外並回傳文件記載的失敗值,而不會跨越語言邊界回溯展開
- 因此,引發例外的事件處理器、失敗的配置或回呼中的意外錯誤,都無法再拖垮整個處理程序或讓 PDFium 處於未定義狀態
修正 (Fixed)
- 當基礎計時器無法建立時,註冊表單計時器會洩漏其項目
新增 (Added)
- Delphi、Lazarus 與 C++Builder 測試現在涵蓋儲存到拒絕寫入的目的地串流,並斷言文件之後仍可使用且可儲存
Version 2.57.8
修正 (Fixed)
- 較舊的 Delphi 版本 (XE5 與更早) 無法編譯試用版程式庫,在
FPdfPades.pas中出現E2003 Undeclared identifier: 'GetTickCount64',因為這些編譯器隨附的 Windows 單元未匯出該符號 - 相同的編譯器也曾在
PDFium.pas的GetUserDefaultLocaleName,以及GetXfaFormPackets中TBytes對array of Byte的指派上失敗,因此 XFA 地區設定回呼與封包快照現在也能在這些編譯器上建置
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.8
Version 2.57.7
變更 (Changed)
- 每個儲存側重寫現在會在寫入前先截斷目的地串流,而不只是倒轉它,因此呼叫端提供的緩衝區若先前裝有較長的文件,便無法在新
%%EOF之後留下過期的尾端 - Delphi、Lazarus 與 C++Builder 測試現在涵蓋儲存到預先填滿的串流
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.7
Version 2.57.6
修正 (Fixed)
- 加密前的物件掃描先前接受任意長度的數字串,因此檔案中任何地方的長數字都可能繞成負數或虛假的物件編號,並在重建的交叉參照表中加入幻影項目
- 超過 ISO 32000-1 Annex C 上限的物件編號以及超過 65535 的世代,現在會被當作物件標頭而拒絕,而不是被截斷
新增 (Added)
- Delphi、Lazarus 與 C++Builder 測試現在會斷言重建資料表的確切使用中項目數
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.6
Version 2.57.5
修正 (Fixed)
- 以
EncryptMetadata = False加密時,先前雖然在 Encrypt 字典中寫入/EncryptMetadata false,卻仍對文件中繼資料串流加密,因此遵循該聲明的閱讀器會看到無法讀取的 XMP - 關閉中繼資料加密時,
/Type /Metadata串流現在會原樣複製,而其他所有串流仍會加密
新增 (Added)
AnsiNameTokenMatchesKey現在是FPdfPdfCommon介面的一部分,供具分隔符號感知的名稱比較使用- Delphi、Lazarus 與 C++Builder 測試現在涵蓋兩種中繼資料加密模式
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.5
Version 2.57.4
修正 (Fixed)
- 加密時重建的交叉參照表先前漏掉了 ISO 32000-1 §7.5.4 要求的必要物件 0 自由清單頭,因此其第一個子區段晚了一個物件開始
- 每個重建項目先前都聲稱世代 0;以更高世代寫入的物件現在會保留其世代,使資料表與它指向的物件標頭一致
新增 (Added)
- Delphi、Lazarus 與 C++Builder 測試現在涵蓋重建資料表中的自由清單頭項目與世代保留
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.4
Version 2.57.3
修正 (Fixed)
- 加密輸出先前丟掉了每個串流物件的
stream關鍵字,因此儲存的檔案不再是有效的 PDF 語法,嚴格的閱讀器會回報頁面內容既不是串流也不是串流陣列 /Length重寫先前以純子字串方式比對/Length,因此帶有/Length1的串流字典 (任何內嵌字型) 會發生索引鍵名稱損毀,而真正的長度維持過期值- 以
/Length N 0 R間接聲明長度的串流,其物件編號先前會被新長度覆寫;該項目現在會被直接的加密長度取代 - 完全沒有
/Length的串流字典現在會補上一個,而不會讓閱讀器沒有長度可用
新增 (Added)
AnsiFindDictKeyToken現在是FPdfPdfCommon介面的一部分,供頂層、具分隔符號感知的字典索引鍵查閱使用- Delphi、Lazarus 與 C++Builder 測試現在涵蓋
/Length1保留、間接長度取代與串流主體大小一致性
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.3
Version 2.57.2
修正 (Fixed)
- 以
Revision = erR6執行SaveAsEncrypted與SaveAsEncryptedToStream所產生的文件,先前約每四個檔案就有一個會拒絕自己的正確密碼,原因是 ISO 32000-2 §7.6.4.3 演算法 2.B 的回合計數器從低了一回合的位置開始,而多出的那一回合改變了/U、/O、/UE與/OE值 - R6 加密的文件現在可在任何符合規範的閱讀器中以使用者或擁有者密碼重新開啟,且仍會拒絕錯誤的密碼
新增 (Added)
- Lazarus 與 C++Builder 測試套件獲得了先前僅 Delphi 才有的加密覆蓋:R6 金鑰長度、Encrypt 字典欄位、重複加密並重新開啟的往返,以及錯誤密碼拒絕
變更 (Changed)
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.2
Version 2.57.1
變更 (Changed)
- 在表單欄位中輸入、移動插入點以及勾選核取方塊,現在只會重繪 PDFium 回報為受損的區域,而非整個檢視器
- 受損方框會針對向上的頁面 Y 軸正規化,加寬一個像素讓反鋸齒的介面元件邊框保持乾淨,並裁剪至可見的用戶端區域
- 完全捲出檢視區的受損方框不再排程重繪,而非作用中檢視或未映射的頁面仍會退回全頁重繪
- Delphi、Lazarus 與 C++Builder 測試現在涵蓋有界表單失效、翻轉的頁面方框、螢幕外方框與非作用中檢視安全性
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.1
Version 2.57.0
新增 (Added)
TPdfThumbnailView.Orientation支援垂直與水平縮圖配置,同時保留現有的垂直預設值FirstVisiblePageIndex、LastVisiblePageIndex與EnsureCurrentPageVisible以一為基的頁碼公開並控制縮圖檢視區
變更 (Changed)
- 變更
CurrentPageIndex現在會在任一方向上將選取的縮圖捲動至可見範圍 - Delphi、Lazarus 與 C++Builder 測試現已涵蓋方向預設值、切換、可見範圍以及選取頁面的可見性
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.57.0
Version 2.56.2
變更 (Changed)
HighlightSearchText、AddSearchTextHighlight與ClearHighlight現在僅使新增或移除的搜尋範圍對應的裝置矩形失效,而不再重繪整個檢視器- 使用相同比對取代反白或附加重複比對時,不再排程不必要的重繪
- Delphi、Lazarus 與 C++Builder 測試現已涵蓋有界失效、冪等更新、清除以及非作用中檢視安全性
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.56.2
Version 2.56.1
變更 (Changed)
TPdfThumbnailView現在會為在多次重繪與相鄰捲動位置中保持可見的頁面重用已轉譯的點陣圖- 快取僅保留目前可見頁面範圍,並在頁面離開該範圍、所指派的文件變更或縮圖尺寸變更時精確釋放項目
- Delphi、Lazarus 與 C++Builder 測試現已涵蓋快取重用、檢視區修剪、尺寸失效、文件取代以及元件銷毀
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.56.1
Version 2.56.0
新增 (Added)
TPdfView.CutSelectedFormTextToClipboard與TPdfView.PasteFormTextFromClipboard為取得焦點的可編輯表單介面元件提供 Unicode 剪貼簿編輯
變更 (Changed)
- 取得焦點的表單編輯器現在會在將文字輸入轉送給 PDFium 之前先處理標準的複製、剪下、貼上與全選鍵盤捷徑
- 剪下與貼上會拒絕唯讀欄位以及沒有表單填寫或修改權限的工作階段,而剪下在移除選取的文字之前會先成功複製
- Delphi、Lazarus 與 C++Builder 測試現已涵蓋無焦點、捷徑往返以及唯讀拒絕行為
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.56.0
Version 2.55.0
新增 (Added)
TPdfView.AddSearchTextHighlight將另一個搜尋詞的唯一比對附加到目前頁面覆疊,使多個查詢可同時保持反白
變更 (Changed)
HighlightSearchText仍是取代進入點,現在共用加法式掃描器,重複的字元範圍會被忽略,而ClearHighlight會移除完整的累積集合- Delphi、Lazarus 與 C++Builder 測試現已涵蓋不同查詢的累積以及重複範圍的抑制
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.55.0
Version 2.54.0
新增 (Added)
TPdf現可公開完整的頁面物件快照、批次樣式更新、仿射物件轉換、路徑區段、裁剪路徑以及 Form XObject 子物件- 字元檢查現已包含填滿與描邊色彩、字型名稱與旗標、鬆散字符邊界、有效矩陣、文字物件控柄以及字元對文字索引的轉換
- 註解現在可往返邊框幾何以及 normal、rollover 與 down 外觀串流
- 新的原始與解碼縮圖存取子、頁面內容與註解轉換,以及
RenderPageWithMatrix提供了直接的進階轉譯與編輯路徑
變更 (Changed)
- 頁面物件樣式變更可作為一個批次提交,使 PDFium 僅重新產生一次頁面內容
- 當目的地位元圖配置相容時,矩陣轉譯使用現有的零拷貝位元圖路徑
Version 2.53.1
修正 (Fixed)
- 內建中文複製選單標題現在使用與編碼無關的 Unicode 字碼指標,並在 Lazarus 建置中正確顯示
- 較舊的 Delphi 工具鏈可在其
Winapi.Windows單元省略GetTickCount64宣告時編譯FPdfAsync
Version 2.53.0
新增 (Added)
- 新的
Tests.ApiCoverage測試裝置涵蓋先前沒有端對端測試覆蓋的公開 TPdf API:GetPageBox/SetPageBox(MediaBox/CropBox 讀寫、缺失方塊錯誤以及儲存往返)、FlattenPage/FlattenAllPages(傳回值與頁數保留)、GenerateFormAppearances(對非表單文件為無操作)、SaveAsEncrypted/SaveAsEncryptedToStream(帶密碼往返的 AES-256 — 驗證加密檔案在沒有密碼時拒絕開啟,而在有密碼時可以開啟)、DeletePage邊界驗證(第 0 頁與超出範圍會引發EPdfError),以及 v2.38.0 中引入的HasContents/HasAuthor註解哨兵(驗證Default(TPdfAnnotation)會將它們保留為False)
Version 2.52.0
新增 (Added)
TPdfView.CopySelectedFormTextToClipboard將取得焦點的 AcroForm 介面元件內的文字選取範圍以CF_UNICODETEXT形式複製到 Windows 剪貼簿
變更 (Changed)
- 頁面文字與取得焦點的表單複製操作現在共用同一個防禦性 Unicode 剪貼簿寫入器,並在選取範圍為空時保持剪貼簿不變
- Delphi、Lazarus 與 C++Builder 測試現已涵蓋非作用中或未取得焦點的表單複製呼叫,以及透過 Windows 剪貼簿進行的取得焦點表單選取範圍往返
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.52.0
Version 2.51.0
新增 (Added)
TPdfView.SelectLineAt選取包含一為基頁碼與零為基字元索引的視覺文字行,無需滑鼠輸入
變更 (Changed)
- 程式化行選取、三擊選取,以及
Shift+Home或Shift+End現在共用一個字元方塊行邊界模型 - Delphi、Lazarus 與 C++Builder 測試現已涵蓋穩定的行選取以及無效的頁碼或字元索引
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.51.0
Version 2.50.0
新增 (Added)
TPdf.LoadDocument現在接受零為基的Index與Count視窗以存取TBytes緩衝區,使內嵌 PDF 無需配置臨時位元組陣列切片即可載入
變更 (Changed)
- 位元組範圍載入在變更文件狀態之前會拒絕負數或超出範圍的視窗,並保留現有的緩衝與借用緩衝區存留期選項
- Delphi、Lazarus 與 C++Builder 測試現已涵蓋內嵌 PDF 視窗以及無效的位元組範圍引數
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.50.0
Version 2.49.1
新增 (Added)
TPdfView.FitMode現已支援pfmFitHeight,可將目前頁面符合至可見檢視區高度,並在需要時允許水平捲動
修正 (Fixed)
- 符合模式現在會在捲軸可見性變更客戶端區域後收斂,使 fit-page、fit-width 和 fit-height 結果在 VCL 與 LCL 之間保持一致
- Delphi、Lazarus 和 C++Builder 檢視器測試現已涵蓋
pfmFitHeight選取與列舉往返 TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.49.1
Version 2.49.0
新增 (Added)
- 公開 PDFium 繫結介面現已涵蓋經審查標頭中的全部 470 個匯出函式,包括透過
FPDFAttachment_SetDescription和FPDFAttachment_GetDescription存取附件描述 TPdf現可公開附件描述、交叉參照有效性、trailer 結尾偏移、security-handler 修訂版本、64 位元記憶體載入、簽章位元組範圍、網頁連結文字範圍,以及擴充的影像資料、篩選器、中繼資料和 ICC 設定檔快照- 表單輔助程式現已支援原生欄位焦點、焦點選項的查詢與更新、滑鼠滾輪轉送、可寫入筆墨筆畫,以及漸進式轉譯後的表單覆疊
變更 (Changed)
FormFieldCount、表單欄位索引和定位順序現在僅描述介面元件註解,而不再包含無關的頁面註解- 無頭
TPdf頁面現在會進入並離開表單填寫頁面生命週期,使原生焦點和焦點欄位 API 無需TPdfView即可運作 - 附件描述匯出受能力管制,因此使用舊版 PDFium 建置的應用程式仍可載入程式庫並偵測不可用的功能
修正 (Fixed)
- 漸進式頁面轉譯現在會在啟用表單填寫時繪製表單控制項
- Delphi、Lazarus 和 C++Builder 測試現已涵蓋新的文件診斷、附件描述、筆墨路徑、表單行為、簽章位元組範圍、網頁連結範圍和影像中繼資料
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.49.0
Version 2.48.0
新增 (Added)
TPdfMatrix現可公開工廠、複製和指派、有限狀態和可逆性診斷、容差式比較、平移存取、行列式報告和仿射分解- 前綴組合、感知樞軸的旋轉、縮放、傾斜和翻轉,加上 stretch、contain 和 cover 矩形對應,支援本機空間和符合佈局的工作流程,無需手動係數運算
- 非變更反向存取、反向點對應、向量和四邊形轉換、動態點和矩形批次、就地變體和單趟轉換邊界,擴充了可重複使用的幾何介面
變更 (Changed)
- 平移、縮放和軸翻轉現在僅更新受影響的係數,而不再透過一般仿射乘法路由
- 矩形轉換對其輸入進行一次性正規化,在可能時使用專門的精確軸對齊路徑,並在沒有暫存點記錄的情況下計算一般旋轉邊界
- 點和矩形批次轉換配置一個結果陣列或重複使用呼叫端儲存,而轉換後的點邊界在單趟中累積,無需中間陣列
修正 (Fixed)
- 矩形對應在發布無法使用的矩陣之前,會拒絕零大小、非有限和
Single溢位的結果 - Delphi、Lazarus 和 C++Builder 測試現在驗證組合順序、樞軸不變量、反向往返、符合矩形、分解和批次幾何行為
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.48.0
Version 2.47.0
新增 (Added)
FPdfAsync現透過保留原始 API 的擴充介面,提供結構化取消原因和訊息、可移除回呼註冊、逾時式來源、取消等待和原子 try-cancel 操作TPdfFuture<T>.RunEx新增可設定的回覆分派和工作執行緒優先順序,同時結果信封公開操作 ID、值有效性、例外類別名稱、完成計時和可重複使用的完成輔助程式TPdfAsyncExecutor新增可重複使用的固定工作執行緒集區,具備四條 FIFO 優先順序通道、選用的有界佇列背壓、可取消的工作控制代碼、逾時感知等待、工作快照、彙總統計和優雅關機
變更 (Changed)
- 重複的非同步工作可重複使用工作執行緒和 O(1) 佇列操作,而非為每個工作建立執行緒,同時同步完成仍可用於 UI 主機
- 執行器和 future 失敗保留例外類別和訊息診斷,取消保留其原始原因,且回呼例外保持與工作執行緒生命週期和關機隔離
- Delphi、Lazarus 和 C++Builder 測試現已涵蓋擴充的取消、future 中繼資料、工作控制、背壓、優先順序排序、統計、失敗和關機介面
修正 (Fixed)
- 並行取消擁有者現在收到決定性的首位寫入者結果,而非依賴個別的觀察和取消序列
- 主執行緒閒置等待處理同步工作回覆,防止已完成的工作執行緒在協調關機期間讓執行器永久處於非閒置狀態
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.47.0
Version 2.46.0
新增 (Added)
FPdfAsn1現可公開識別碼類別、64 位元高標記編碼和解碼、剖析的 TLV 記錄、零複製子讀取器視窗、具型別的基本解碼器,以及內容或編碼值的切片- DER 寫入器現已支援完整的無號 64 位元 INTEGER 範圍、已驗證的任意 INTEGER 內容、ENUMERATED、自動 UTCTime 或 GeneralizedTime 選擇、application 和 private 標記、多值 SEQUENCE 和規範排序的 SET OF 輸出
ValidateDer傳回位移感知的驗證錯誤,同時強制執行可設定的巢狀、節點計數、內容長度、錯誤計數、根和選用的 SET 排序限制
變更 (Changed)
- DER 串接和多值組合使用單一輸出配置,寫入器緩衝區公開 reserve、count、capacity 和擁有權轉移操作,而 SET OF 排序現在使用
O(n log n)合併排序 - BOOLEAN、INTEGER、BIT STRING、OBJECT IDENTIFIER、NULL、UTF8String、PrintableString、IA5String、UTCTime 和 GeneralizedTime 值在編碼、具型別解碼或驗證期間接受規範格式檢查
- Lazarus 執行階段套件現在匯出
FPdfAsn1,而 Delphi、Lazarus 和 C++Builder 測試套件演練相同的公開 DER 介面
修正 (Fixed)
- 大於 30 的情境特定標記編號不再被截斷至識別碼的低五個位元
- 格式錯誤的高標記識別碼、非最小的明確長度、無效的 UTF-8、非零的 BIT STRING 填充、無效的時間欄位、尾端根和資源限制違規會被決定性地拒絕
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.46.0
Version 2.45.0
新增 (Added)
FPdfPreflightReport現在將 Info、Warning 或 Error 嚴重性指派給每個問題,並公開各標準和報告層級的嚴重性、狀態、類別、問題代碼、查詢、搜尋、扁平化和篩選 API- 預檢報告現在透過對應的
To*和Save*ToFile方法匯出 SARIF 2.1.0、JUnit XML、NDJSON 和原生 XML,以供 CI、自動化和串流管線使用 - 穩定的 SHA-256 報告指紋獨立於來源路徑和產生時間戳記,識別等效的驗證結果
變更 (Changed)
- JSON、CSV、text、Markdown 和 HTML 報告現在包含嚴重性和擴充的狀態摘要;HTML 新增可存取的表格標題和狀態摘要
- 問題和標準集合建構使用幾何容量成長,查詢結果預先設定大小,JSON 逸出寫入一個有界輸出緩衝區,而所有報告檔案使用一個直接的 UTF-8 寫入器
- 問題類別摘要使用決定性排序,時間戳記包含毫秒,JSON 帶有
formatVersion: 2,而 CSV 儲存格中和試算表公式
修正 (Fixed)
- JSON 匯出現在保留有效的補充 Unicode 配對,並取代孤立的 UTF-16 代理字碼單元,而非發出格式錯誤的純量資料
- HTML 匯出現在逸出撇號,而篩選的報告檢視擁有獨立的問題陣列,而非共用可變的結果儲存
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.45.0
Version 2.44.0
新增 (Added)
- 書籤與目的地現在會公開開啟狀態、子系數量、動作目標、目的地檢視模式,以及最多四個檢視參數
Metadata、GrantedPermissions、UserGrantedPermissions、HasPermission與UserHasPermission提供具型別的文件檢查快照與權限查詢ExtractThumbnail(PageNumber)在不變更作用中頁面的情況下彩現指定的頁面,且 RFC 3161 時間戳記結果會公開原則、產生時間與 nonce 詳細資料
變更 (Changed)
- 書籤、JavaScript、中繼資料、目的地與縮圖路徑使用已驗證的雙趟緩衝區、幾何式集合增長,以及免循環走訪
- 儲存後處理透過目前的 xref 修訂解析作用中的 catalog、頁面樹與開啟動作,快取已解碼的物件串流,並以詞彙邊界掃描 PDF 字典
- 共用 PDF 剖析現在會強制執行精確的物件標頭、世代、字典索引鍵、串流長度、預測器幾何、整數範圍,以及註解、字面字串與十六進位字串邊界
- RFC 3161 回應驗證現在會同時繫結 nonce 與 SHA-256
messageImprint,要求結構有效的簽署者,並套用嚴格的 DER 長度、OID、INTEGER 與 GeneralizedTime 規則
修復 (Fixed)
- 漸進式文件在加入預設開啟動作時,不再選取非作用中的重複 catalog 或格式錯誤的參照後綴
- 帶有長格式 DER 長度的時間戳記權杖會保留完整的編碼權杖,而格式錯誤的 CMS 選擇性欄位順序與空白簽署者集合會被拒絕
- 乾淨的 Delphi 建置現在透過對齊安全的位元組複製寫入 PAdES nonce 種子欄位,並以確切的原生指標型別傳遞 XFA 回應位元組
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式中繼資料現在一致地報告 Version 2.44.0
Version 2.43.0
新增 (Added)
- XFDF 欄位與註解紀錄現在會公開存在性旗標,用以區分省略的 XML 值與明確的空值
變更 (Changed)
- XFDF 匯入接受帶有命名空間前綴的元素與屬性、混合文字與 CDATA 內容、實體參照與空白字元顯著的值,同時拒絕無效的 Unicode 純量參照
- XFDF 匯入與匯出使用索引式欄位比對與有界的幾何緩衝區,改善深層巢狀表單、大型註解集合、筆跡清單、頂點與標記四邊形的吞吐量與尖峰配置行為
- PDF/A 與 PDF/UA 驗證針對大型頁面、串流、結構名稱與 RoleMap 集合使用有界增長;PDF/UA RoleMap 解析現在會跟隨直接陣列與確切世代的間接名稱或陣列物件
修復 (Fixed)
- XFDF 往返現在會保留深層巢狀的欄位路徑、明確的空欄位值、明確的空註解內容,以及不存在與空白內容之間的區別
- 無效的記憶體緩衝區載入與超出範圍的頁面指派會被拒絕而不留下部分的文件或頁面狀態,且失敗的原生頁面重新載入會保留先前作用中的頁面
- 大型的標記內容識別碼與簽章中繼資料緩衝區會在配置或原生存取前受到邊界限制與驗證
Version 2.42.0
新增 (Added)
TPdfMatrix現在提供Invert、TryInvert、TransformPoint與TransformRect,用於座標對應、命中測試、正規化邊界與明確的奇異矩陣處理TPdf.WrapText新增了BreakLongWords多載,可分割 CJK 與其他不帶空格的文字,同時保持有效的 UTF-16 配對在一起TPdfAnnotation.AttachmentPointSets會公開多行標記註解中的每個四邊形,而現有的AttachmentPoints欄位仍是第一個集合的別名
變更 (Changed)
- 文字擷取、可讀內容建構、單字查詢與朗讀文字位移對應現在會使用有界配置與二元查詢路徑,減少大型頁面上的重複配置與線性掃描
- ASN.1 序列化與加密 PDF 產生現在會使用幾何式輸出緩衝區;加密物件排序使用
O(n log n)排序,且 xref 列會直接寫入最終緩衝區 WrapText保留 CR、LF 與 CRLF 換行邊界,並對整個操作重用同一個原生量測物件- XFDF 匯入與匯出保留每個標記四邊形;匯入也會套用 RGB/內部顏色,並獨立於處理程序地區設定剖析小數座標
修復 (Fixed)
- 舊版呼叫端再次可透過指派非空白字串更新註解內容與作者,而不需設定較新的
HasContents與HasAuthor哨兵 - 明確為空的註解字串現在會使用有效的零終止原生緩衝區,因此清除
/Contents、/T與其他選擇性文字索引鍵時,不再傳遞 nil 指標給 PDFium
Version 2.41.0
變更 (Changed)
- Preflight 報告
SaveJsonToFile、SaveMarkdownToFile與SaveTextToFile現在於 Delphi 上會寫入 UTF-8(與現有的SaveHtmlToFile一致),而非系統 ANSI 頁碼;非 ASCII 字元在檔案路徑、建議與範圍說明中透過這些方法儲存時,先前在 Delphi 上會產生亂碼 SaveCsvToFile現在寫入帶有 BOM 前綴的 UTF-8,以便 Windows 版 Excel 自動偵測編碼;若無 BOM,Excel 會將 UTF-8 CSV 視為字碼頁 1252,並使任何非 ASCII 字元產生亂碼
修復 (Fixed)
ExtractImages範例在表單關閉且未先明確清除時,會洩漏FExtractedImages中快取的TBitmap物件;該表單現在覆寫Destroy以呼叫ClearExtractedImages,釋放每個快取的點陣圖
Version 2.40.0
變更 (Changed)
TPdf.RenderPage(HDC, ...)現在於呼叫FPDF_RenderPage前後會遮罩 FPU/SSE 例外,與TPdfView.RenderPage(HDC)(於 v2.25.0 修復)及每個回傳點陣圖的彩現進入點一致;在 pre-D12 編譯器上,先前TPdf層級直接彩現至 DC 的多載方法未遮罩 FPU 例外
修復 (Fixed)
ColorToARGB現在對clNone與clDefault回傳完全透明的像素(Alpha 0),而非將該哨兵值視為字面 RGB 顏色;先前的行為在呼叫端傳遞預期「無顏色」的clNone時,會產生深色且幾近不透明的填滿效果
Version 2.39.1
修復 (Fixed)
- 明確儲存為 PDF 1.3 現在會移除僅重複初始繪圖狀態的
/SMask /None、/AIS false與/TK true項目,同時繼續拒絕非預設的透明度狀態
Version 2.39.0
變更 (Changed)
CreatePDF與ImageToPDF現在使用已確認的儲存目的地,且僅在SaveAs成功完成時才回報成功BatchExport、PDFtoJpg與SplitPDF現在配置唯一的輸出目錄,使重複執行與同名輸入得以保留先前的結果SplitView現在於取消或無相符結果後封裝搜尋一次且不殘留隱藏的頁面狀態,並中止未完成的列印工作而非提交部分輸出
修復 (Fixed)
MergePDF現在拒絕格式錯誤的頁面範圍 Token 與覆寫來源的輸出路徑,計算實際匯入的頁數,並拒絕儲存空的結果- Delphi 與 C++Builder 的
Attachment範例現在透過具備回復安全性的檔案替換來提交相同路徑的儲存,使失敗的重新命名不會移除原始 PDF
Version 2.38.0
變更 (Changed)
SetAnnotationData現在將/Contents與/Author的寫入保護在TPdfAnnotation的HasContents/HasAuthor哨兵之後,與現有的HasName/HasSubject/HasIcon模式一致;先前這兩個欄位是無條件寫入的,因此指派Default(TPdfAnnotation)紀錄以僅更新顏色或旗標時,會靜默地用空字串覆寫註解現有的內容與作者;GetPageAnnotation現在設定該哨兵以使「讀取-修改-寫入」循環保留原始值
修復 (Fixed)
GenerateFormAppearances現在透過FPDFAnnot_GetFormFieldValue(其根據 ISO 32000-1 §12.7.5 尋找父欄位字典)讀取核取方塊/單選按鈕的值,而非透過FPDFAnnot_GetStringValue(Annot, 'V', ...)(其讀取 Widget 字典);該 Widget 通常不包含/V,因此/AS從未同步至選取狀態,導致扁平化的核取方塊/單選按鈕彩現為未選取
Version 2.37.0
變更 (Changed)
ParseTsaUrl現在於解析後將連接埠限制在1..65535之間;否則過大的連接埠值會透過DWORD截斷而溢位,並可能落在有效的連接埠上- XFDF
ParseField現在接受一個深度參數(預設為 0,上限為 64)並在達到限制時回傳空欄位,使惡意巢狀且高達 100,000 層深度的<field>鏈不再導致堆疊溢位
修復 (Fixed)
- TSA HTTP 請求現在於將
@ReqDer[0]傳遞給WinHttpSendRequest之前防範空的請求主體;長度為零的動態陣列取值會存取未指引的指標;BuildTimeStampReq總是回傳非空的 SEQUENCE,但呼叫端現在防禦此合約
備註 (Notes)
- 關於 HTTPS 撤銷檢查的
FPdfTsaWin標頭註釋已修正:WinHttp 預設會驗證伺服器憑證鏈,但不會進行 CRL/OCSP 撤銷檢查,除非透過WinHttpSetOption明確啟用;先前的用詞聲稱撤銷檢查「完全免費」,這具有誤導性
Version 2.36.0
變更 (Changed)
- TSA HTTP 請求現在除了
Content-Type與Accept標頭外,還會傳送明確的Content-Length標頭;WinHttp 會從總長度合成該標頭,但某些 RFC 3161 代理伺服器需要明確的標頭,否則會以411 Length Required拒絕請求 - XFDF 匯出現在捨棄 C0 控制字元(已轉義的 TAB/LF/CR 除外),而非發出無效的反斜線十六進位序列;先前的
\-01F轉義不是有效的 XML(反斜線在 XML 中無特殊意義),因此任何符合規範的讀取器都會將該文件視為格式錯誤而拒絕 InjectAssociatedFiles現在於 EmbeddedFile 串流字典上寫入/Subtype當呼叫端提供TAssociateFile.MIMEType;該欄位雖已宣告並記載於文件中,但注入器先前硬編碼了/Type /EmbeddedFile並忽略了它(ISO 32000-2 §7.11.4 允許在串流上使用/Subtype)
修復 (Fixed)
- XFDF 匯入跳過了 UTF-8 BOM 後的第一個內容位元組,以及無 BOM 時的第一個位元組:
BytesToAnsi(Bytes, 4, ...)(BOM)與BytesToAnsi(Bytes, 1, ...)(無 BOM)使用差一的起始偏移量,因為BytesToAnsi接受以 0 為起始的陣列索引;這些呼叫端現在使用3與0 ExtractSignatureValue有兩個懸空if縮排 Bug,其中R.Position:= CN對選用的certificates [0]與signedAttrs [0]分支無條件執行;這些分支現在已封裝在begin/end中,因此僅在實際讀取選用 TLV 時才會遞增位置(與 v2.22.0 中AddSignatureTimestampToCms修復的 Bug 屬同類錯誤)
Version 2.35.0
變更 (Changed)
TFPDFAvail_IsDocAvail、TFPDFAvail_IsPageAvail與TFPDFAvail_IsFormAvail現在接受hints: PFX_DOWNLOADHINTS,而非var hints: FX_DOWNLOADHINTS,使記載於文件中的nullptr僅查詢模式(在不請求更多資料的情況下檢查目前可用性)可從 Delphi 存取;PDFium 標頭明確允許hints為 null,先前的var繫結使該操作無法達成TFPDF_SetSystemFontInfo現在接受pFontInfo: PFPDF_SYSFONTINFO,而非var pFontInfo: FPDF_SYSFONTINFO,使呼叫端可以傳遞nil以指示 PDFium 停止使用先前註冊的系統字型介面(記載於文件中的停用路徑)TPdfThumbnailView.Paint現在使用與UpdateScrollBarRange相同的公式(ClientHeight div RowHeight)來計算VisibleRows,使彩現的列數與捲軸頁面大小相符;先前僅用於彩現的公式((ClientHeight - FMarginY) div RowHeight + 1)在邊緣高度可能相差一列,導致在非頁面列上浪費彩現或遺漏最後一列可見列
Version 2.34.0
新增 (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— 儲存文件後使用 PDF 2.0 AES-256-CBC (V=5/R=5/R=6) 加密的高階 API;接受帶用戶/擁有者密碼、權限與修訂版的TPdfEncryptOptions,並委派給EncryptDocumentBytes- StrF 字面字串加密:
EncryptDocumentBytes現在將非串流物件(Info 字典等)中的(...)字面字串加密為 AES-256-CBC 十六進位字串,以符合串流加密格式(16 位元組 IV + PKCS7 密文);十六進位字串<...>則保持原樣
Version 2.33.0
新增 (Added)
FPdfEncrypt.pas中的全文件 AES-256-CBC 加密注入器;EncryptDocumentBytes接受純文字 PDF 與密碼,加密每個間接串流物件(檔案金鑰下的 16 位元組 IV + AES-256-CBC PKCS7),修正/Length,附加/Encrypt字典物件,並使用/Encrypt與/ID重建完整的傳統交叉參照表 + 尾部;完成 PDF 2.0 加密堆疊(AES 區塊 + GCM + SHA-512/384 + R6 金鑰衍生 + 字典 + 文件掃描)EncryptStreamPayload輔助程式 — PDF 2.0 AES-256 串流格式(在 AES-CBC-PKCS7 密文前加上 IV),可供管理自身物件版面配置的呼叫端重複使用
Version 2.32.0
新增 (Added)
- 新增
FPdfSha512.pas單元,以純 Pascal 實作 SHA-512 / SHA-384 雜湊(FIPS 180-4),供 PDF 2.0 R6 密碼雜湊迭代使用;每一輪會依 128 位元值的 mod-3 結果選用 SHA-256/384/512,並已通過 FIPS-180-4 B.1 已知答案驗證 - 新增
FPdfEncrypt.pas單元,提供 PDF 2.0 加密金鑰衍生與 Encrypt 字典建立功能;實作 ISO 32000-2 §7.6.4.3 演算法 2.B(R6 雜湊迭代:AES-128-CBC + 反覆選用 SHA-256/384/512),衍生 32 位元組的檔案加密金鑰及/O、/U、/OE、/UE、/Perms項目,並以/CFM /AESV3建立 V=5/R=5/R=6 Encrypt 字典;位元組緩衝區採用 TBytes 形式
Version 2.31.0
新增 (Added)
- 新增
FPdfAes.pas單元,提供 AES 區塊加密基礎運算(FIPS 197);以純 Pascal 實作 AES-128、AES-256 區塊加密,並提供 CBC 模式輔助函式與 CSPRNG 後端;已通過 FIPS-197 附錄 C.2 / C.3 已知答案測試,作為 PDF 2.0 加密功能的基礎 - 新
FPdfAesGcm.pas單元中的 AES-GCM 驗證加密(NIST SP 800-38D);在 AES 區塊基元之上實作 GHASH(GF(2^128) 乘法)、GCTR 與 GCM AEAD 結構;NIST GCM 測試案例 1 與 3 (AES-128) 與官方密文及標籤完全相符,測試案例 13 (AES-256) 則完成來回測試;GCM 為 PDF 2.0 的 ISO/TS 32003 模式 - PDF/A Level A ParentTree 與 ClassMap 完整性驗證(ISO 19005-1 §6.8.3);
pvaiParentTreeMissing標記缺少 /ParentTree 數字樹的 StructTreeRoot;pvaiClassMapUnresolved標記缺少 /ClassMap 的 /C 類別參照
Version 2.30.0
新增 (Added)
- 關聯檔案注入(
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles,ISO 32000-2 §7.11.4);新FPdfAssocFiles單元將檔案規格參照的/AF陣列附加到目錄或任何頁面字典,涵蓋所有八個 ISO 32000-2 表 45 的/AFRelationship值;重複使用已由InjectPadesDssMarkers驗證的漸進式更新模式 - 支援 PDF/X-6 (ISO 15930-9:2020);
TPdfXConformance新增pxc6,注入器與驗證器將其貫穿pdfxid:GTS_PDFXVersion識別;PDF/X-6 是基於 PDF 2.0 的 PDF/X-4 後繼版本,用於完整交換 - PDF/A 停用
/Thread動作(ISO 19005-1 §6.6.1 白名單缺口);停用的動作列表現在除了 Launch、ResetForm、ImportData、SetOCGState、SetState、GoTo3DView、Rendition 與 Hide 之外,還涵蓋了 Thread
修復 (Fixed)
- PDF/A-4e 驗證路徑現在遵循與 Level A 相同的標記結構、MarkInfo 與斷字檢查;v2.29.0 儲存端的降級涵蓋了
PdfAIsLevelE,但三個ValidatePdfACompliance閘門僅檢查PdfAIsLevelA,因此缺少標記結構的 PDF/A-4e 文件會靜默通過驗證 - OCG
/BaseState測試偏差:v2.28.0 PostProcess 階段正確地放寬接受度至/ON或/OFF(ISO 32000-1 表 8.70),但 Delphi 與 C++ 測試仍預期/OFF被拒絕;測試現在使用真正無效的值(/Undefined),且新的正面測試鎖定了/OFF接受度 - 地理空間
/Subtype /GEO過度比對:ContainsDictionarySubtype('GEO')會比對任何帶有該 Token 的字典,包括無關的字典(例如散落的/ViewerPreferences << /Subtype /GEO >>);新ContainsMeasureDictionarySubtype另外要求/Type /Measure或 Measure 專屬的同層級金鑰,使非 Measure 字典不再觸發 ADBE ExtensionLevel 3 的需求
Version 2.29.0
新增 (Added)
- 跨驗證器、XMP 注入器與 Pdfium 物件模型層支援 PDF/A-4 (ISO 19005-4:2020);
TPdfAConformance新增pac4base、pac4f與pac4e;基礎等級為 PDF 2.0 (ISO 32000-2) 且以 base + F (表單) + E (無障礙) 取代舊有的 A/B/U 等級;ValidatePdfA讀取pdfaid:part=4XMP 封包(base 忽略了符合性元素),SaveAsPdfA發出該封包,且SignPadesWithPdfA接受pac4base作為長期封存容器 FPDFBookmark_GetColor繫結 — 最後一個未繫結的 PDFium 公開匯出 (469/469);TBookmark獲得從書籤/C陣列(ISO 32000-1 §12.3.3)填入的HasColor與Color欄位;該繫結使用容錯載入,使早於該匯出的舊版 DLL 能繼續運作- PDF/E-1 (ISO 24517-1 §5) 標頭版本檢查
pveiBadPdfVersion— PDF/E-1 基於 PDF 1.6,現在會標示非 1.6 的標頭 - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— 僅允許在%PDF-2.0標頭上進行加密,現在會標示帶有/Encrypt的 1.x 主體(先前為無效宣告) - PDF/R-1
pvriBadMediaBox— 每個頁面的MediaBox應為[0 0 w h];PdfRHasNonZeroMediaBoxOrigin是一個與地區無關的 ASCII 掃描器,會跳過間接參照的 MediaBox - PDF/A Level A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — 現在會標示存在但未完整的 RoleMap(該 RoleMap 未對自訂的/S結構類型進行對應),填補了現有僅檢查存在性的pvaiRoleMapMissing檢查所留下的缺口
修復 (Fixed)
PdfVersionToName(20)回傳"1.0"而非"2.0",導致每次儲存 PDF 2.0 時損毀目錄/Version項目與驗證器訊息;格式化程式現在針對版本代碼>= 20明確分割主版本與次版本FPdfAsn1.pas負值 INTEGER 編碼器在 Delphi 12 下編譯失敗(在Integer(-(V<0))上產生E2015),阻礙了整個測試專案;已透過針對符號延伸遮罩使用Int64(-Ord(V<0))予以修正- PDF/A 禁用的註解列表現在於所有部分中都包含
/RichMedia(先前遺漏;ISO 32000-1 §12.5.6.35 在 PDF/A 中禁用該註解)
Version 2.28.0
新增 (Added)
TPdfVersion現在為 PDF 2.0 (ISO 32000-2) 包含pv20;DecodePdfVersion(20)回傳pv20而非pvUnknown,且EncodePdfVersion(pv20)發出 20,使 PDF 2.0 文件的版本在讀回時不再遺失,且可被明確寫入
變更 (Changed)
DecodeDate現在根據 PDF 參考 3.8.3 解析具有選用結尾欄位的 PDF 日期字串,而非要求完整的 23 字元D:YYYYMMDDHHmmSSOHH'mm'格式;符合規範的截斷日期(例如D:20260712、D:20260712153000與D:20260712153000Z)現在已被接受,先前它們被硬性的Length=23閘門所拒絕;時區小時偏移量現在是根據真實世界的 UTC-12..UTC+14 範圍進行驗證,而非> 23FPdfMeasure.MeasureText現在將字型名稱編碼為 FPCAnsiString/ DelphiUTF8Encode(與程式庫的其他 FPDF_BYTESTRING 呼叫端一致),而非使用 bareAnsiString轉型,後者先前會透過目前的字碼頁使非 ASCII 的字型家族名稱產生亂碼
修復 (Fixed)
TDerWriter.Integer負值路徑當機或產生格式錯誤的 DER:迴圈while V <> -1 do V := V shr 8在Value = -1時使Inner保持為空(並在隨後的Inner[Length(Inner)-1]上產生範圍錯誤),且對其他負值產生過多的位元組;該編碼器現在使用符號延伸位移來擷取二補數位元組,並在餘數純粹為符號延伸時正確停止;CMS/PAdES INTEGER 欄位為正,因此這僅影響傳遞負值的呼叫端,但該路徑現在已正確TPdf.GetCharacterOrigin與TPdfView.GetCharacterOrigin忽略了FPDFText_GetCharOrigin的回傳值,且在失敗時回傳未初始化的點;該結果現在初始化為零,且失敗的讀取會回傳原點(與GetCharacterRectangle的合約相符)
Version 2.27.0
變更 (Changed)
PDFViewer與MultiPageViewer範例支援搜尋、Enter/F3與Esc取消- 列印會依照 viewer 旋轉方向輸出
- 三個
ViewerInteractionLab範例都支援Ctrl+A、Ctrl+C、Enter、F3與Esc快速鍵,且不會攔截原生編輯控制項的選取與複製命令
修正 (Fixed)
- 取消列印會停止印表機工作
- Delphi
MultiPageViewer的取消按鈕現在已連接至其處理常式,且 C++Builder/LazarusMultiPageViewer搜尋欄位保留原生方向鍵、Home 與 End 鍵編輯
Version 2.26.0
變更 (Changed)
TPdf.GetObjectBitmap、TPdf.GetBitmap、TPdf.GetThumbnail與其TPdfView對應方法現在會在FPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap呼叫周圍取得 render lock,與RenderPage/RenderTile一致;這些是 PDFium 彩現端的呼叫,先前在沒有鎖定的情況下執行,可能與同一文件上並行的UnloadPage/ReloadPage產生競爭TPdf.RenderPageThumbnail現在遵循頁面的/Rotate項目:對於/Rotate 90或270的頁面,會依旋轉後的尺寸重新計算最適大小,使縮圖長寬比與檢視器顯示的一致,而非使用FPDF_GetPageSizeByIndex回傳的原始(未旋轉)尺寸
修正 (Fixed)
TPdfView.GetCharacterRectangle忽略了FPDFText_GetCharBox的回傳值,且在 PDFium 回報失敗時將未初始化的TPdfRectangle傳遞給PageToDevice;該矩形現在會初始化為零,且失敗的GetCharBox會回傳Rect(0,0,0,0)GetLinkAnnotations的 URI 路徑與檔案路徑緩衝區長度差一:第二次FPDFAction_GetURIPath/GetFilePath呼叫將size(包含結尾 NUL)作為緩衝區長度,傳遞給配置為size-1的緩衝區;該呼叫現在傳遞size-1,因此在未自行夾限的 PDFium 組建上不會寫入超過配置範圍
Version 2.25.0
變更 (Changed)
TPdf.AddText、SetText、AddPath與InsertFormObjectFromXObject現在會在重新產生頁面內容前,使快取的文字頁面與連結註解失效,與SetTextPositions和RemoveObject一致;先前在編輯頁面後呼叫GetText/GetWebLinks/FindFirst會回傳編輯前擷取的過時文字與連結資料,且保留的FPDF_TEXTPAGE控制代碼會在內容重新產生後被使用,造成未定義的行為TPdfView.RenderPage(HDC, ...)現在會在FPDF_RenderPage呼叫周圍取得 render lock 並遮罩 FPU/SSE 例外,與其他所有彩現進入點一致;先前的 direct-to-DC 多載可能與同一文件上並行的UnloadPage/ReloadPage產生競爭,且在 D12 之前的編譯器上未遮罩 FPU 例外- Delphi
PrintPDF範例現在會在取消時呼叫Printer.Abort,而非讓finally區塊執行到Printer.EndDoc,後者會送出取消前已彩現的頁面;Lazarus 範例已正確處理此情況
修正 (Fixed)
TPdf.GetCharacter、TPdf.GetCharcode與其TPdfView對應方法會將FPDFText_GetUnicode回傳的增補平面碼點(emoji、CJK Extension B)透過WideChar()截斷為低 16 位元,產生孤立的代理字元並破壞後續的文字處理;U+FFFF 以上的字元現在回傳 U+FFFD(取代字元),請使用GetText擷取增補字元的完整 UTF-16 編碼GetWebLinks呼叫SetLength(Rectangles, FPDFLink_CountRects(...))時未防範-1回傳值,在格式錯誤的頁面上會引發EOutOfMemory;負值計數現在會被夾限為零TPdf.Destroy現在會在釋放參照計數緩衝區前,透過UniqueString+FillChar從記憶體清除Password字串,使密碼在元件摧毀後不會以可讀形式殘留在堆積上
Version 2.24.0
新增 (Added)
TPdf.DeletePage、GetAttachment、GetAttachmentName、GetAttachmentType、SetAttachment與DeleteAttachment現在會驗證頁面/附件索引,並在超出範圍時引發EPdfError,與現有註解存取子的行為一致;先前超出範圍的索引會直接傳遞給 PDFium,造成靜默的無動作或未定義行為
修正 (Fixed)
TPdf.AddText、AddBitmap與AddJpegImage在失敗時遺漏 page-object 控制代碼:當FPDFText_SetText、FPDFImageObj_SetBitmap、FPDFImageObj_SetMatrix或FPDFImageObj_LoadJpegFileInline在物件建立之後、FPDFPage_InsertObject將其交給頁面之前引發例外時,原生FPDF_PAGEOBJECT控制代碼就會遺漏;每條路徑現在都會在例外時先摧毀物件再重新引發TPdf.UnloadPage會把進行中的FPath控制代碼(由CreatePath設定但尚未被AddPath取用)直接設為nil,而未呼叫FPDFPageObj_Destroy予以捨棄;該控制代碼現在會被摧毀,因此建立後被捨棄(或被頁面切換中斷)的路徑不再遺漏TPdf.InsertFormObjectFromXObject遺漏了每個同類插入方法(AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject)都會執行的UpdatePage(FPDFPage_GenerateContent)呼叫,因此以此方式插入的 Form XObject 會在下一次重新載入或儲存時消失;現在插入之後會呼叫UpdatePage
Version 2.23.0
修正 (Fixed)
- 選用內容
/BaseState驗證現在除了/ON之外也接受/OFF(ISO 32000-1 表 8.70 允許兩者);先前的檢查會以「格式錯誤的選用內容」錯誤拒絕合法的/OCProperties /D /BaseState /OFF組態,即使該檔案符合規範 - 選用內容
/Intent驗證現在接受/Design以及[/View /Design]這類名稱陣列,而不僅限於字面值/View;ISO 32000-1 表 8.70 將/Intent定義為取自/View與/Design的名稱或名稱陣列;先前的單一值檢查過度拒絕了標準撰寫工具的輸出 - 針對 PDF 1.7
/Extensions /ADBEExtensionLevel 3 閘門的地理空間 Measure 字典偵測,不再要求/Type /Measure(ISO 32000-1 表 254 將其標記為選用);省略/Type的 GeoPDF 製作者(PDFBox、QGIS、FME)先前會繞過該閘門並靜默產生不符合規範的 PDF 1.7 輸出;偵測器現在僅比對/Subtype /GEO
Version 2.22.0
變更 (Changed)
TPdfView的最適顯示比例計算(GetPageZoom、GetPageWidthZoom、GetPageHeightZoom)現在改用ClientWidth/ClientHeight,而非視窗的Width/Height,使pfmFitPage/pfmFitWidth/pfmFitHeight依可視檢視區而非包含捲軸與邊框的外框來調整頁面大小,消除當最適頁面略大於工作區時出現的多餘捲軸AddSignatureTimestampToCms現在會引發明確的Exception,指出無法讀取的 CMS SignerInfo 欄位(version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm),而非靜默地Exit並讓不完整的剖析結果如同完整已簽署 CMS 般繼續處理;同時修正選用signedAttrs [0]分支周圍缺少begin/end區塊導致R.Position未前進的問題
修正 (Fixed)
ResolveWinSigner中的 CNG 私鑰控制代碼遺漏:當CryptAcquireCertificatePrivateKey成功,但後續的簽發者/序號擷取或TWinCmsSigner.Create引發例外時,NCryptKeyHandle永遠不會被釋放,因為其擁有權只會在建構函式成功時才轉移給簽署器;取得後的設定現在會被包裝,使控制代碼在任何失敗時先透過NCryptFreeObject釋放EcDsaP1363ToDer現在拒絕全為零的r或s半部,而非發出INTEGER 0;r = 0或s = 0的 ECDSA 簽章無效(RFC 4754 §6 / FIPS 186-4 §6 要求1 ≤ r, s ≤ n-1),否則寬鬆的驗證器會將其視為真實簽章接受
Version 2.21.12
修正 (Fixed)
- 明確的 PDF 1.5 至 PDF 1.7 儲存現在會拒絕格式錯誤的目錄
/OCProperties結構,包括缺少必要的/OCGs或/D項目、無效的預設設定值及非陣列狀態項目
Version 2.21.11
修正 (Fixed)
- 明確版本儲存操作現在會拒絕直接或間接的頁面
/Annots項目(其注釋字典中缺少所需的/Subtype或/Rect項目)
Version 2.21.10
修正 (Fixed)
- 明確儲存至 PDF 1.7 的操作現在要求地理空間
/Type /Measure /Subtype /GEO字典和 Projection 注釋使用/BaseVersion /1.7和/ExtensionLevel 3或更新版本宣告/Extensions /ADBE
Version 2.21.9
修正 (Fixed)
- 明確儲存至 PDF 1.7 的操作現在要求 RichMedia 注釋和
RichMediaExecute動作使用/BaseVersion /1.7和/ExtensionLevel 3或更新版本宣告/Extensions /ADBE
Version 2.21.8
修正 (Fixed)
- 明確儲存至 PDF 1.7 的操作現在要求 PRC 3D 串流使用
/BaseVersion /1.7和/ExtensionLevel 1或更新版本宣告/Extensions /ADBE,而不是將 PRC 視為 PDF 1.7 的核心功能
Version 2.21.7
修正 (Fixed)
- 明確儲存至 PDF 1.4 及更早版本的操作現在會拒絕圖像 XObject 的
/SMaskInData項目(包括明確值0),因為嵌入式 JPEG 2000 軟遮罩色版需要 PDF 1.5 或更新版本
Version 2.21.6
修正 (Fixed)
- 明確儲存至 PDF 1.4 及更早版本的操作現在會拒絕需要 PDF 1.5 或更新版本的 16 位元圖像 XObject,而針對 PDF 1.5 至 PDF 1.7 的目標則會保留其
/BitsPerComponent 16圖像資料
Version 2.21.5
修正 (Fixed)
- 明確儲存至 PDF 1.4 及更早版本的操作現在會拒絕文件目錄中需要 PDF 1.5 或更新版本的
/PageLayout /TwoPageLeft和/TwoPageRight值,而針對 PDF 1.5 至 PDF 1.7 的目標則會保留所要求的雙頁版面配置
Version 2.21.4
修正 (Fixed)
- 明確儲存至 PDF 1.3 的操作現在會拒絕文件目錄中需要 PDF 1.4 或更新版本的
/Lang項目,而針對 PDF 1.4 至 PDF 1.7 的目標則會保留語言識別碼
Version 2.21.3
修正 (Fixed)
- 明確儲存至 PDF 1.3 的操作現在會拒絕文件的
/EmbeddedFiles名稱樹(需要 PDF 1.4 或更新版本),而不拒絕透過較舊檔案規格參照的嵌入式檔案流
Version 2.21.2
修正 (Fixed)
- 明確指定 PDF 1.3 的儲存作業,現在會拒絕仍在使用中的中繼資料串流,因為這類串流需要 PDF 1.4 或更新版本;目標為 PDF 1.4 至 PDF 1.7 時則會保留
Version 2.21.1
修正 (Fixed)
- 混合參照驗證現在會在同一修訂版的傳統 xref 佔位符之前先应用補充
/XRefStm項目,因此當相容性表將其標記為空閒時,已壓縮的註釋和其他受版本限制的物件不再被遡漏
Version 2.21.0
變更 (Changed)
- 所有 Delphi、C++Builder 和 Lazarus 檢視器範例現在均可開啟作為第一個命令列引數傳入的 PDF,C++Builder 和 Lazarus 的
MultiPageViewer範例還提供了全選和複製的明確快捷鍵
修正 (Fixed)
- 檢視器範例現在會拒絕無效的書籤與連結目標頁,保留載入錯誤,並一致地檢查手動輸入的縮放值;列印已填寫的表單時會使用指定頁面,不再重複列印畫面上顯示的頁面;取消 Delphi 列印工作時會中止整個工作,不再送出部分輸出
Version 2.20.0
變更 (Changed)
- 所有 Delphi、C++Builder 與 Lazarus 檢視器範例,現在都提供一致的開啟、搜尋、儲存、列印、縮放與頁面導覽快捷鍵;各個
ViewerInteractionLab版本也支援跳至指定頁面、檢查範圍為 10–600% 的手動縮放輸入、保留互動紀錄,以及點擊座標的往返轉換檢查
Version 2.19.1
修正 (Fixed)
- 明確指定 PDF 版本時的驗證,現在會沿著目前有效的傳統 xref、混合式 xref 或 xref 串流修訂鏈檢查,也包含壓縮物件項目;已被取代、釋放或未被參照的物件,不再造成誤判的功能版本錯誤
Version 2.19.0
變更 (Changed)
- C++Builder 與 Lazarus 的附件、圖片擷取、文字擷取、頁面轉換及分割範例,現在使用專用輸出資料夾,或在檔案完整寫入後才安全地完成輸出;檔名採用固定寬度的補零編號,進度更新保持即時回應,完成摘要也會列出各項目的錯誤數
修正 (Fixed)
- C++Builder 的
CJKTextLab現透過匯出的 PDFium 編輯函式測量文字,MergePDF避免了歧義 VCL 訊息多載,恢復了 RAD Studio 37 的乾淨建置
Version 2.18.3
修正 (Fixed)
- PAdES B-LTA 文件時間戳記現已作為可探索簽章欄位註冊 — 一個透過首頁
/Annots和 AcroForm/Fields可存取的不可見 Widget(ETSI EN 319 142-1 §5.4.3)— 而非令簽章欄位列舉驗證器無法找到的孤立物件;現有註釋和欄位得以保留
Version 2.18.2
修正 (Fixed)
- PAdES 簽章和傳統交叉參照寫入現在當位元組偏移超過 10 位固定欄位寬度(約 9.3 GB)時會引發明確錯誤,而不是靜默地將
/ByteRange預留位置留空(產生無效簽章)或溢出 20 位元組 xref 行(ISO 32000-1 §7.5.4);使用 8 位元組二進位欄位的交叉參照串流輸出不受影響
Version 2.18.1
修正 (Fixed)
- PAdES 簽章現在透過完整物件標頭(ISO 32000-1 §7.5.3)及參照的實際代次號來解析間接首頁
/Annots、/AcroForm和/Fields參照;此前的裸字串子字串搜尋會將較短物件號匹配至較長數字內(將5 0 R解析為15 0 obj),固定代次號則會遺漏gen>0的物件,從而損毀簽章欄位陣列或拒絕合法文件 - 當目錄、首頁、
/Annots、/AcroForm或/Fields位於物件串流內時,簽章現在會在物件串流展開後的副本上重試,而非直接拒絕該文件
Version 2.18.0
新增 (Added)
ReadPdfVersionInfo從 PDF 串流中回報標頭版本、有效核心版本、目錄覆寫和 Adobe 開發者擴充等級
變更 (Changed)
- 明確指定 PDF 1.3-1.7 的儲存作業,現在會在各結構所屬的物件中驗證 catalog、頁面資源、XFA、內容遮蔽及開發者擴充結構;為維持文件完整性,會拒絕明確指定版本的加密輸出,以及 PDF 1.3 的增量正規化
- 檔案路徑儲存現在寫入同層暫存檔,僅在所有壓縮、規範化和版本檢查成功後才取代目的地檔案
修正 (Fixed)
- PDF 1.3 輸出現在會附上必要且完整的
/ProcSet資源;若 PDF 1.4 的透明度索引鍵只是重述 PDF 1.3 初始圖形狀態的值,就會移除這些索引鍵 - 混合參照、xref 串流和物件串流檔案不再被傳統 xref 壓縮器重寫,防止壓縮物件項目被捨棄
- 在字串、註解或無關資源對應內與透明度或目錄功能索引鍵相似的名稱不再導致錯誤的目標版本失敗
Version 2.17.0
新增 (Added)
- PAdES 簽章現已作為不可見 Widget 註釋註冊到首頁
/Annots陣列和 AcroForm/Fields陣列中,現有註釋和表單欄位得以保留
變更 (Changed)
- PDF/A、PDF/X、PDF/E、PDF/R、PDF/UA、PDF/VT 和 PAdES 的增量更新現在保留來源文件的交叉參照表示:xref 串流文件按 ISO 32000-1 §7.5.8.1 要求接收 xref 串流更新,傳統文件繼續接收 xref 表格
- 交叉參照偏移、
startxref、/Prev、PAdES ByteRange 值和 SHA-256 範圍處理現在使用 64 位元位置及分塊雜湊,在 64 位元建置中支援大於 2 GB 的檔案 - 產生的可寫 XMP 封包在關閉封包指令前保留 2048 位元組填補
Version 2.16.10
修正 (Fixed)
- 物件串流展開不再復活增量更新已將物件從物件串流遷移至一般定義的過時副本(ISO 32000-1 §7.5.7);此前的一致性檢查和標記注入會在此類檔案上解析過時的目錄或中繼資料字典
Version 2.16.9
修正 (Fixed)
- 在 Free Pascal 上,非有效 UTF-8 的文字字串按 Latin-1 逐位元組加寬並以 UTF-16BE 十六進位字串寫入;此前原始高位元組洩漏到字面字串中,這不是合法的 PDF 1.7 文字字串編碼
- 串流解碼現在識別不帶 RFC 1950 zlib 包裝的原始 deflate 資料(損毀寫入器的常見缺陷)並以原始模式解壓縮,使一致性掃描不再對此類串流靜默失明
Version 2.16.8
修正 (Fixed)
- 由儲存後處理路徑寫入的增量更新現在按 ISO 32000-1 §14.4 要求重新整理第二個(變化的)trailer
/ID元素;此前兩個元素均被逐字複製,導致快取和同步工具在每次更新後看到相同的識別碼
Version 2.16.7
修正 (Fixed)
- 一致性掃描使用的串流主體空白處理現在要求
stream關鍵字後跟行尾(ISO 32000-1 §7.3.8.1);此前像(downstream)這樣字面字串內的該詞會將所有後續結構直到下一個endstream清空,使位元組級檢查無法發現真正的違規 - PDF/X 和 PDF/E 禁止功能掃描還會額外清空字面字串和註解(§7.2.2),使
/Title (see /JavaScript docs)或註解標記不再產生誤報的JavaScript、AcroForm或LZWDecode發現
Version 2.16.6
修正 (Fixed)
- PDF/VT DPM 項目現在按文件在寫入時驗證:違反 ISO 16612-2 §6.6 NMTOKEN 規則或附錄 E 註冊者前置詞規則的索引鍵名,以及重複名稱,被拒絕而不是寫入 DPart 字典 — 此前含空格的名稱會被分割為虛假的索引鍵/值對並損毀字典
Version 2.16.5
修正 (Fixed)
- 移除值為十六進位字串(如
/Check <...>)的字典項目現在會移除整個項目;此前注入器會留下孤立的十六進位值,產生語法上損毀的字典 - 移除間接參照在標記間使用換行符的項目(ISO 32000-1 §7.3.10 允許任何空白符)不再遺留代次號和
R關鍵字
Version 2.16.4
修正 (Fixed)
- 最大物件號掃描不再要求物件標頭位於行首(ISO 32000-1 §7.5.3 允許其前有任意空白或分隔符),因此注入器不再能分配與內嵌
N G obj標頭衝突的物件號並靜默損毀檔案;物件號受附錄 C 上限約束 /Length為間接參照的串流現在會解析被參照的整數物件,並在其與關閉的endstream對齊時使用該值;此前此類串流受模式搜尋約束,會截斷合法包含endstream位元組序列的主體 — 典型情況是內嵌式 PDF 附件
Version 2.16.3
修正 (Fixed)
- 串流壓縮傳遞會原樣通過交叉參照串流文件(沒有傳統
trailer關鍵字的 PDF 1.5+ 檔案);此前重建路徑會錯誤解析startxref為表格位置並合成猜測的 trailer,可能產生無法開啟的檔案 - 壓縮器跳過 XMP 中繼資料串流,使 PDF/A 文件保留其強制要求的未過濾中繼資料串流(ISO 19005-1 §6.7.2),並保持外部檔案串流(帶
/FFilter的/F)不變 - 重建的交叉參照表格掃描文件的串流剝離副本,使二進位串流內容不再偽造物件標頭或膨脹表格;重建 trailer 的
/Size現在反映實際表格,物件號受附錄 C 上限約束 - 定位原始交叉參照表格接受僅 CR 的行尾(ISO 32000-1 §7.5.1),且不再將
startxref內的xref字母作為比對;串流關鍵字掃描獲得了與其他位置相同的endstream尾部守衛,並在跳過串流主體後推進
Version 2.16.2
修正 (Fixed)
- 位元組級 PDF 讀取器中的整數解析現在接受 ISO 32000-1 §7.3.3 允許的顯式
+號,並拒絕會溢位的數字串,使惡意或損毀文件不再能將解析的長度和偏移回繞為誤導性值
Version 2.16.1
修正 (Fixed)
- PDF/UA 注入器將目錄
/Lang值寫為正確的 PDF 文字字串;此前該值經過 XML 逸出處理,導致包含&或括號的語言標記產生損毀項目,非 ASCII 輸入以原始 UTF-8 寫入 - PDF/E 的
/ISO_PDFEVersionInfo 項目使用共用文字字串編碼器,使非 ASCII 值在 PDF 1.7 中合法 - XMP 封包的 XML 逸出會捨棄 XML 1.0 中非法的控制字元,防止從損毀來源文件複製的中繼資料使整個中繼資料串流格式不正確
- PDF 到 XMP 日期轉換驗證日期欄位為數字並補全缺失的分鐘欄位,防止產生的 XMP 中出現格式錯誤的 ISO 8601 日期;在非 Windows 平台上,備用時間戳記現在包含時間而非僅有日期
Version 2.16.0
新增 (Added)
- 串流解碼現在在 FlateDecode 之後重建
/DecodeParms預測器(PNG 預測器 10-15 和 TIFF 預測器 2,ISO 32000-1 §7.4.4.4),遵循/Colors、/BitsPerComponent和/Columns;使用預測器壓縮的物件串流(常見的 PDF 1.5+ 寫入器選擇)此前呈現差分位元組,導致其攜帶的物件對一致性掃描和標記注入靜默不可見
修正 (Fixed)
- FlateDecode 偵測現在將
/Filter值解析為名稱或陣列而非子字串比對,使串聯過濾鏈和不相關值中出現的該詞不再觸發虛假的膨脹;不支援的鏈回退到原始位元組
Version 2.15.1
修正 (Fixed)
- 字典掃描器現在在平衡
<</>>時跳過字面字串、十六進位字串和註解(ISO 32000-1 §7.2.2),使包含如(A >> B)值或緊接關閉分隔符的十六進位字串的字典在 trailer、目錄和一致性掃描解析期間不再被截斷 - 字面字串擷取現在解碼完整的 §7.3.4.2 表 3 逸出集 —
\n \r \t \b \f、八進位\ddd、行續符和未逸出 EOL 規範化 — 而非逐字複製逸出字母,恢復對使用八進位逸出的寫入器的正確/Producer、/GTS_PDFXVersion和/ISO_PDFEVersion比較 - 標記注入器寫入的字面字串現在逸出 CR、LF 和其他控制字元,使值在讀取器端行尾規範化後逐位元組存活
Version 2.15.0
修正 (Fixed)
- PDF/A、PDF/X、PDF/E、PDF/R、PDF/UA 和 PDF/VT 標記注入器以及 PAdES 簽章和 DSS 路徑寫入的增量更新現在保留來源文件的永久檔案識別碼:第一個 trailer
/ID元素按 ISO 32000-1 §14.4 要求逐字轉發,僅第二個(變化的)元素被重新整理;此前兩個元素均被重新產生,導致外部參照和長期驗證工作流程在每次儲存後看到不同的文件識別 - PAdES 簽章、DSS 注入和 B-LTA 文件時間戳記現在將來源 trailer 的
/Info參照轉發(ISO 32000-1 §7.5.6),使文件屬性在簽章後不再從讀取器面板消失;文件時間戳記 trailer 還獲得了/ID陣列 - 交叉參照串流文件的 trailer
/Info備用方案現在能正確定位 XRef 串流字典並保留參照的代次號;此前在符合 PDF 1.5+ 檔案上從不比對,靜默捨棄/Info
Version 2.14.4
修正 (Fixed)
TPdf.SignPades和SignPadesBytes寫入的簽章字典/M日期現在帶有 ISO 32000-1 §7.9.4 要求的強制D:前置詞和ZUTC 偏移標記;此前嚴格驗證器將簽章時間拒絕為格式錯誤的日期字串
Version 2.14.3
修正 (Fixed)
- 共用 PDF 讀取器中的字典索引鍵查找現在比對完整名稱標記(ISO 32000-1 §7.3.5);此前在
/Length之前列出/Length1(FontFile 串流的典型情況)的串流會被截斷到錯誤的位元組計數,靜默地使讀取字型、CMap 或中繼資料串流的 PDF/A、PDF/UA 和其他一致性掃描失明 /Encrypt、/Root、/Size和/Infotrailer 查找不再比對共用相同前置詞的較長索引鍵(如/EncryptMetadata)- 物件串流展開不再信任損毀或惡意的
/N值:非整數值現在產生 0 而非未初始化數字,從/First派生的上限防止在掃描格式錯誤文件時過大配置
Version 2.14.2
修正 (Fixed)
- PDF/X、PDF/VT、PDF/UA、PDF/E 和 PDF/R 標記注入器現在將加密來源文件原樣傳遞而非附加純文字更新節;此前行為產生最新 trailer 遺失
/Encrypt項目(ISO 32000-1 §7.5.6)的檔案,導致符合標準的讀取器將加密主體誤讀為純文字 TPdf.SignPades、SignPadesBytes和InjectPadesDssMarkers現在在來源文件已加密時引發EPadesCrypto,而非靜默產生損毀或不可驗證的檔案;簽章或嵌入 DSS 材料前請先移除加密
Version 2.14.1
修正 (Fixed)
TPdf.SignPades和SignPadesBytes現在回填簽章字典的全部四個/ByteRange欄位;此前最後三個欄位停留在零預留位置,導致產生的簽章宣告空位元組範圍,在符合標準的驗證器中驗證失敗- PAdES B-LTA 文件時間戳記字典收到相同的
/ByteRange回填修正 ValidatePadesCompliance現在接受位元組範圍間隙持有十六進位/Contents值的標準簽章配置,並檢查第二個範圍段恰好在檔案末尾結束;此前只有無間隙範圍通過涵蓋率檢查
Version 2.14.0
新增 (Added)
TPdf.ExportXFDF將所有頁面的每個表單欄位值和註釋序列化為 XFDF 文件(ISO 19444-1),為階層化表單值輸出<fields>,為所有支援的註釋子類型輸出<annots>(text、highlight、underline、strikeout、squiggly、line、circle、square、caret、polygon、polyline、stamp、ink、freetext、fileattachment、sound、link、redact)TPdf.ImportXFDF將 XFDF 文件讀回載入的 PDF,在比對頁面上重建註釋並將欄位值套用到其 widget 註釋TPdfAnnotation記錄新增了Name(NM)、Subject、ModificationDate(M)、CreationDate、Icon、Opacity(CA)、線端點、多邊形/折線頂點和墨水清單手勢欄位,使 XFDF 往返保留完整的註釋中繼資料- Delphi、C++Builder 和 Lazarus 示範集中新增
XfdfLab範例,示範匯出/匯入往返
Version 2.13.6
修正 (Fixed)
ValidatePdfA現在將沒有/Type /Metadata或/Subtype /XML的目錄/Metadata串流視為透過pvaiMissingXmpMetadata缺失的 XMP 中繼資料- PDF/A 預檢報告現在將
pvaiMissingXmpMetadata歸類為中繼資料,並建議具有/Type /Metadata、/Subtype /XML、未過濾 XMP 和pdfaid標記的目錄/Metadata串流
Version 2.13.5
修正 (Fixed)
ValidatePdfA現在透過pvaiAnnotationApDictViolation報告沒有外觀字典的 Widget 註釋以及需要但缺少/AP的 PDF/A-2 / PDF/A-3 註釋- PDF/A 預檢報告現在將
pvaiAnnotationApDictViolation歸類為標記注入無法修復的內容
Version 2.13.4
修正 (Fixed)
ValidatePdfA現在透過pvaiImageDictionaryViolation報告/I或/Interpolate值為true的 PDF/A-2 和 PDF/A-3 內嵌圖像,與現有 Image XObject 字典涵蓋範圍一致- PDF/A 預檢報告現在將
pvaiImageDictionaryViolation歸類為標記注入無法修復的內容
Version 2.13.3
修正 (Fixed)
ValidatePdfA現在透過pvaiInlineImageLzwForbidden報告在內容串流中使用/LZWDecode或縮寫/LZW過濾器的 PDF/A-1 內嵌圖像,與現有 PDF/A-2 和 PDF/A-3 內嵌圖像涵蓋範圍一致- 內嵌圖像過濾器掃描器現在跳過像
/GS1這樣的前導資源名稱,避免在掃描更廣泛的 PDF/A-1 內容串流時停滯
Version 2.13.2
新增 (Added)
TPdf.SetFocusedFormFieldText透過FORM_ReplaceSelection將文字寫入目前聚焦表單欄位的編輯緩衝區,與FocusedFormFieldText對稱。對於 AcroForm 文字/組合欄位,值在失去焦點時提交到/V並持久化;對於 XFA 文字欄位,寫入僅在記憶體緩衝區中(PDFium 不提供將 XFA 值協調回資料集封包的公共 API,因此跨儲存不持久)- 只要 V8 引擎可用,JavaScript 主機平台現在無論文件是否為 XFA 都會附加 — 因此嵌入的 AcroForm JavaScript(文件級指令碼、欄位計算、
app.alert)也可以執行。此前m_pJsPlatform僅為 XFA 文件連接,AcroForm JS 被靜默停用
變更 (Changed)
- JavaScript 平台附加現在獨立於
InitializeFormFill中的 XFA 決策 —m_pJsPlatform表在V8FeaturesAvailable為 true 時建置,在 XFA 版本/回呼連接之後而非巢狀在其中套用
Version 2.13.1
新增 (Added)
- 新主機事件呈現 v2.13.0 表單填寫回呼此前吞咽的資訊:
OnXfaUriAction、OnXfaPageCountChanged、OnXfaFocusChange、OnXfaEmail、OnXfaHttpRequest、OnXfaOpenFile、OnJavaScriptBeep、OnJavaScriptPrint、OnJavaScriptMail、OnJavaScriptSubmitForm。每個事件在未指派時均預設為現有的無操作行為,現有主機不受影響 TPdf.XfaFormPackets唯讀屬性傳回所有 XFA 封包的一次性快照(TXfaPacketList),實現了此前宣告但未使用的TXfaPacket/TXfaPacketList類型- XFA 專用 PDFium 錯誤碼
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUT現已繫結並透過LastPdfError呈現,取代了 XFA 載入/配置失敗的通用 "Unknown error"
變更 (Changed)
FFI_DoURIActionWithKeyboardModifier現在在 shell 執行來自 XFA 欄位的 URI 之前查詢OnXfaUriAction,賦予主機否決權(安全性:惡意 XFA 欄位此前可無條件啟動任意 URL)。未指派的處理常式保留先前的ShellExecuteW預設行為DecodeFormFieldType現在透過IsXfaFormField路由 XFA 欄位類型而非顯式的 8 分支 case,透過序號偏移保持列舉與FPDF_FORMFIELD_XFA_*對齊
修正 (Fixed)
ValidatePdfA現在透過新的pvaiPdfA1Pdf15Structure問題報告使用 PDF 1.5 交叉參照串流或物件串流的 PDF/A-1 宣告,同時繼續允許 PDF/A-2 和 PDF/A-3 的物件串流
Version 2.13.0
新增 (Added)
- 完整 XFA(XML Forms Architecture)執行階段支援:
TPdf.InitializeFormFill現在連接所有 14 個版本 2FPDF_FORMFILLINFO回呼(FFI_DisplayCaret、FFI_GotoURL、FFI_PageEvent、FFI_PopupMenu、FFI_OpenFile、FFI_EmailTo、FFI_UploadTo、FFI_GetPlatform、FFI_GetLanguage、FFI_DownloadFromURL、FFI_PostRequestURL、FFI_PutRequestURL、FFI_OnFocusChange、FFI_DoURIActionWithKeyboardModifier),並附加IPDF_JsPlatform,使支援 XFA 的pdfium.dll可彩現和指令碼化動態 XFA 表單 - 新建
Lib\FPdfXfa.pas單元,宣告 XFA 常數(FXFA_PAGEVIEWEVENT_*、FXFA_MENU_*、FXFA_SAVEAS_*、FPDF_FORMFIELD_XFA_*)以及此前僅在註解中參照的TXfaPacket/TXfaSaveFormat類型 TPdf上的 XFA 靜態封包讀取器:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByName加上GetXfaTemplate/GetXfaDatasets/GetXfaConfig,無需 XFA 執行階段即可將 XFAtemplate、datasets和config封包擷取為原始 XML — 對合規稽核和資料移轉有用- 能力探測:全域
XfaFeaturesAvailable,以及每文件的TPdf.XfaRuntimeAvailable(FPDF_LoadXFA是否實際成功)和TPdf.XfaStaticReadable(封包讀取器匯出是否可解析) TPdfFormFieldType擴充了fiXfa、fiXfaCheckBox、fiXfaComboBox、fiXfaImageField、fiXfaListBox、fiXfaPushButton、fiXfaSignature、fiXfaTextField,DecodeFormFieldType對應新的FPDF_FORMFIELD_XFA_*值TPdf上的 JavaScript 主機事件:OnJavaScriptAlert、OnJavaScriptResponse、OnXfaGotoUrl和OnXfaRuntimeMissing讓主機自訂 JS 對話方塊和 XFA 導覽,或在 XFA 文件無法執行引擎時作出反應- 新建
XfaLabDelphi 範例,示範 XFA 偵測、封包擷取、能力探測和執行階段缺失回退路徑
變更 (Changed)
TPdf.LoadDocument現在預掃描輸入的 XFA 標記(AcroForm 字典中的/XFA,或目錄/NeedsRendering),找到時透過在單例函式庫首次載入前設定EnableV8Engine := True自動選取pdfium.v8.dll;一旦載入了一般pdfium.dll,處理序就無法切換,因此OnXfaRuntimeMissing發出該情況的訊號TPdf.GetPageCount現在反映 XFA 引擎透過FFI_PageEvent在動態重新分頁後報告的頁數,而非僅靜態 PDF 頁面樹狀結構- 當 XFA 文件已開啟但執行階段不可用時,
InitializeFormFill現在固定version=1和xfa_disabled=1,而非要求帶未指派回呼的版本 2,後者此前有可能導致錯誤的回呼指標解參照
Version 2.12.2
修正 (Fixed)
ValidatePdfACompliance現在報告使用沒有pdfaExtension:schemas的自訂 XMP 命名空間的情況,同時仍接受沒有擴充宣告的標準pdfaid中繼資料- PDF/A-3 內嵌檔案驗證現在要求檔案規格字典上同時具有最上層
/F和/UF項目,並在檢查這些名稱時忽略巢狀/EF串流索引鍵
Version 2.12.1
修正 (Fixed)
ValidatePdfACompliance現在在比對 JavaScript、LZWDecode、Type1 和相關禁止名稱之前解碼逸出的 PDF 名稱標記,使混淆但語義相同的名稱被正確報告- PDF/A 內嵌圖像檢查現在拒絕使用
/LZWDecode、縮寫/LZW或/Crypt的/Filter和/F值,包括陣列和逸出名稱形式 - PDF/A 驗證現在報告帶有禁止串流過濾器的中繼資料串流、
/N元件計數缺失或不一致的 OutputIntent ICC 設定檔,以及缺少或無效/AFRelationship的 PDF/A-3 內嵌檔案規格
Version 2.12.0
新增 (Added)
- TSA HTTP 要求現在透過
WinHttpSetTimeouts為每個階段(解析/連線/傳送/接收)設定明確的 30 秒逾時,使緩慢或無法連線的時間戳記授權機構不能無限期掛起簽章執行緒,而非依賴 WinHttp 的隱含預設值 - 當呼叫端省略
TPadesSignOptions.Nonce時,PAdES B-T / B-LTA 時間戳記要求的每要求 nonce 派生:單調計數器 + 牆時鐘 +GetTickCount64+ 處理序 ID 的 SHA-256 折疊取代了以前固定的$100000000備用,使同一毫秒內發出的兩個要求不再重用相同的防重放 nonce PdfInflate現在將解壓縮輸出上限設為 256 MiB,防止 zlib 壓縮串流在惡意或損毀輸入("zlib 炸彈")上耗盡記憶體;該上限對任何真實 PDF 串流都足夠寬裕
變更 (Changed)
TPdfView疊加混合(搜尋醒目標示、文字選取、閱讀詞、展開選取)不再使用逐像素GetPixel/SetPixelV;矩形現在透過 32 位元離螢幕TBitmap和ScanLine一次性混合,消除每次繪製數千次 GDI 核心切換,使大型選取區域回應順暢FPdfAsn1.TDerReader.ReadInteger現在拒絕長於 8 位元組的 INTEGER 欄位(以及符號位元需要shl >= 64的 8 位元組負數),在 CMS/PAdES ASN.1 輸入上傳回 0 而非透過未定義移位行為計算錯誤值ParseTimeStampResp不再將要求 nonce 回傳為TPadesTimestamp.Nonce;在驗證傳回 nonce 的 TSTInfo 走訪器就位之前,該欄位保持為 0 以表示「未驗證」,而非給呼叫端虛假的時間戳記回應新鮮度信心
修正 (Fixed)
PointsToPixels對每個 DPI 均原樣傳回其輸入:除數是PointsPerInch(常數 72)而非字面量 72,將公式折疊為Result := Points。透過此助手進行點到裝置像素大小計算的任何外部呼叫端現在得到正確的Points × PixelsPerInch / 72PdfMaxObjNum在使用物件串流(PDF 1.5+ ObjStm)的文件上計數偏少:壓縮在/ObjStm內的物件沒有N 0 obj標記,因此原始位元組掃描遺漏了它們,為新物件配置MaxObj+1的注入器會與隱藏的 ObjStm 成員衝突並靜默損毀檔案。掃描現在先展開物件串流,使每個物件號可見InjectPdfAMarkers不再在加密文件上偽造 PDF/A 合規宣告:PDF/A(ISO 19005-1 §7.1)禁止加密,注入器此前會複製帶有標記的來源,即使下一次驗證就會拒絕它。當HasEncrypt設定時,來源現在原樣傳遞。正常的TPdf.SaveAsPdfA路徑在注入之前已剝除加密(saRemoveSecurity),因此這僅影響直接呼叫端PdfReadStreamBytes現在在配置結果緩衝區之前拒絕大於整個檔案的/Length,關閉損毀或惡意間接長度上的早期配置路徑
Version 2.11.0
新增 (Added)
- PDFium
FPDF_FILEHANDLER記錄現在將其六個回呼(Release、GetSize、ReadBlock、WriteBlock、Flush、Truncate)宣告為真實欄位而非註解,與 C 標頭配置相符。傳回或消耗PFPDF_FILEHANDLER的 XFA FFI 檔案傳輸回呼(FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL)在 Pascal 表單填寫層中仍未實作,但類型現在在結構上對任何未來 XFA 提交/上傳路徑都是正確的 - PDFium 函式庫載入和卸載(
LoadLibrary/UnloadLibrary)現在由處理序全域關鍵區段序列化,使兩個TPdfFuture<T>工作執行緒(或與主執行緒競爭的工作執行緒)不能同時觀察到PDFiumLibrary=0並雙重繫結,或在另一執行緒正在繫結時釋放 DLL initialization/finalization節現在在單元卸載時呼叫UnloadLibrary,確保FPDF_DestroyLibrary執行(工作執行緒聯結、V8 隔離釋放、字型/快取清理),而非依賴作業系統回收 DLL
變更 (Changed)
TPdf.SetActive現在吞咽載入期間的任何例外狀況(此前僅EPdfError),使表單/頁面設定期間的串流錯誤或存取違規以Active=False結束,而非處於部分載入的不確定狀態元件- PDFium 中繼資料索引鍵引數的一致字元編碼:
TPdf.GetMetaText現在使用與GetViewerPreference及載入路徑相同的 FPCAnsiString/ DelphiUTF8Encode分支,而非裸AnsiString(Tag)轉型 - 重複資料刪除
BytesToAnsi、AnsiToBytes、WriteBytes和WriteStr助手:FPdfCompress現在從FPdfPdfCommon匯入它們(其WriteBytesToStream/WriteAnsiToStream別名已退休),FPdfPdfa中冗餘的三引數BytesToAnsi多載被移除。FPdfAsn1按設計保留其本機副本,以使密碼層不依賴合規層單元
修正 (Fixed)
TPdf.LoadDocument(檔案、記憶體、TBytes、TMemoryStream、自訂串流)和TPdf.CreateDocument中的資源洩漏:如果InitializeFormFill或ReloadPage在FPDF_LoadDocument/FPDF_CreateNewDocument成功後引發,原生FPDF_DOCUMENT控制代碼會因FActive仍為 False 而洩漏。每個路徑現在將後載入設定包裝在try/except中,失敗時關閉文件,使元件乾淨地停用- 更友善的 PDFium DLL 載入診斷:
CheckLoadLibrary偵測ERROR_BAD_EXE_FORMAT(193)並報告 32/64 位元架構不符,指向相符的DLLs/Win32或DLLs/Win64建置,而非僅轉發通用作業系統錯誤。CheckGetProcAddress現在在必要匯出缺失時說明已部署的pdfium.dll比繫結舊,而非裸作業系統的「找不到程序」文字
Version 2.10.1
已修復 (Fixed)
- PAdES SignerInfo sid 標準化:簽署者識別碼現在使用 RFC 5652 §5.3
issuerAndSerialNumber形式(issuer Name + serialNumber,兩者皆從簽署者憑證 DER 中逐字擷取),取代先前 Adobe Acrobat 與其他相符驗證器所拒絕的非標準subjectKeyIdentifier+ 全憑證 SHA-256 預留位置。一個新的 TbsCertificate DER 走訪器(ExtractIssuerAndSerial)以原始 TLV 位元組讀取 issuer SEQUENCE 與 serial INTEGER — 序號通常超出Int64範圍,因此原始 TLV 為必要。subjectKeyIdentifier形式僅保留為憑證 DER 解析失敗時的備用方案
已修改 (Changed)
TCmsSignerId.SerialNumber: Int64由SerialDer: TBytes(原始 serialNumber TLV)取代。CMS 建構器將切出的 TLV 逐字嵌入IssuerAndSerialNumber,避免在 20 位元組 CA 序號上發生Int64溢位(RFC 5280 §4.1.2.2 上限)
Version 2.10.0
新增 (Added)
- PAdES B-LT 長期驗證:當
TPadesSignOptions.Level >= plB_LT時,SignPadesBytes會附加一個增量更新,其中帶有包含簽署者憑證與完整中繼鏈的/DSS字典(依 RFC 5652 §10.2.3 排除自我簽署根憑證),加上/Extensions /ESICLevel 1 標記(EN 319 142-1 §5.4.2) - PAdES B-LTA 封存時間戳記:當
Level >= plB_LTA且設定了TsaUrl時,會附加一個 Document Time-stamp 簽署字典(/SubFilter /ETSI.RFC3161),其/ByteRange涵蓋整個檔案;ESIC 標記晉升為 Level 2。這完成了四個 PAdES 基準等級(B-B、B-T、B-LT、B-LTA) - 憑證鏈收集:
ResolveWinSigner現在呼叫CertGetCertificateChain並以中繼 CA 憑證填入TPadesResolvedSigner.ChainCertDer,因此 B-LT 的/DSS /Certs帶有驗證簽章所需的每張憑證,而無需外部查詢。CertFreeCertificateContext現已繫結,關閉了 v2.8.0 中提到的每次簽署一個內容的洩漏 - PDF/A 整合工作流程:
TPdf.SignPadesWithPdfA先將文件轉換為 PDF/A(函式庫目前能產出的最高等級),再套用要求的 PAdES 簽署 — 即 EN 319 142-1 附錄 A.7 所建議的長期封存容器模式
Version 2.9.0
新增 (Added)
- PAdES B-T 信賴時間戳記:
TPadesSignOptions新增Level、TsaUrl與Nonce欄位。當Level >= plB_T且設定了TsaUrl時,SignPadesBytes會從建構的 CMS 中擷取簽章值,對其要求 RFC 3161 時間戳記,並將傳回的 TimeStampToken 嵌入為 SignerInfo 未簽署屬性signature-time-stamp— B-T 信賴時間步驟(EN 319 142-1 §6.3 req o) FPdfTsa:跨平台 RFC 3161 用戶端 —BuildTimeStampReq(版本 1、對簽章值的 SHA-256 messageImprint、nonce、certReq=true)、ParseTimeStampResp(接受 PKIStatus 0/1、拒絕 2+、逐字擷取 TimeStampToken ContentInfo),以及RequestTimestamp(一次性 build+POST+parse)。PadesTsaAvailable在沒有 HTTP 後端的平台上控管此功能FPdfTsaWin:Windows WinHttp 後端,從 winhttp.dll 動態繫結(無新的編譯時期相依性;HTTPS 由 Windows 憑證存放區協商)。對映FPdfCryptoWin的動態繫結模式FPdfCms:ExtractSignatureValue走訪建構的 CMS 以復原原始簽章八位元組(TSA 雜湊輸入),而AddSignatureTimestampToCms以帶有時間戳記屬性的新unsignedAttrs [1](0xA1)重建 ContentInfo。階段-1 驗證器會將結果辨識為 B-T 簽章
Version 2.8.0
新增 (Added)
- PAdES B-B 簽署堆疊:四個新的純 Pascal/跨平台建構區塊(
FPdfSha256、FPdfAsn1、FPdfCms、FPdfCrypto)加上 Windows CNG 後端(FPdfCryptoWin),讓TPdf.SignPades/SignPadesToStream能端對端產生 PAdES B-B 簽章。簽署者憑證以 SHA-1 指紋從 Current User “MY” 存放區解析;RSA-PSS(建議)、RSA PKCS#1 v1.5 與 ECDSA 皆透過NCryptSignHash支援 FPdfSha256:自包含的 FIPS 180-4 SHA-256(Init/Update/Final + 一次性輔助函式)。FPC 3.2.2 不隨附 SHA-2 單元,因此函式庫自有一個,以使每個 CMS 程式碼路徑都使用單一TSHA256Digest型別,而不分岔 RTLFPdfAsn1:DER 編碼器(TDerWriter)與讀取器(TDerReader),涵蓋 SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/context-specific tags,具備 CMS 所需的定長編碼與 IMPLICIT-tag 處理FPdfCms:CAdES SignedData 建構器(BuildSignedData),發出 PAdES 基準所要求的 content-type、message-digest 與 signing-certificate-v2 已簽署屬性,並含選用的 signing-time 與 commitment-type-indication。signedAttrs 摘要是在 SET-tagged (0x31) 形式上計算,並依 RFC 5652 §5.4 以 IMPLICIT [0] (0xA0) 標記重新發出FPdfCrypto+FPdfCryptoWin:密碼學後端抽象,含PadesCryptoAvailable/ResolvePadesSigner,而 Windows 實作動態繫結 crypt32.dll / ncrypt.dll(無新的編譯時期 DLL 相依性)。ECDSA 簽章從 Windows IEEE P1363 r¦s 形式重新編碼為 CMS 所需的 DERECDSA-Sig-Value形式SignPadesBytes:位元組級簽章注入 — 預留固定寬度的/Contents十六進位位置、計算涵蓋的/ByteRange、摘要文件、建構並嵌入 CMS,並附加增量更新。驗證器(v2.7.0)會將輸出辨識為 PAdES B-B 簽章
Version 2.7.0
新增 (Added)
- PAdES 結構驗證器(ETSI EN 319 142-1 V1.2.1):新的
FPdfPades單元與TPdf.ValidatePades方法檢查可從/ByteRange到達的簽章值字典,走訪/Contents內的 CMSSignedData至足以確認 CAdES 分離形式的程度,並偵測四個基準等級(B-B、B-T、B-LT、B-LTA)以及 Document Time-stamp 字典(/SubFilter /ETSI.RFC3161) - PAdES 條款級問題集:26 個
ppei*列舉涵蓋/SubFilter可接受性(adbe.pkcs7.sha1與adbe.x509.rsa_sha1標記為禁止)、/ByteRange檔案涵蓋、/Cert禁止、CMSSignedData形式(單一簽署者、分離 eContent、版本範圍)、必要的已簽署屬性(content-type、message-digest、signing-certificate/v2)、禁止的摘要(MD5、SHA-1)、/Reasonvscommitment-type-indication互斥(req d)、B-T 信賴時間需求、B-LT 的/DSS+/Certs+ ESIC Level 1 標記,以及 B-LTA 的 Document Time-stamp + ESIC Level 2 標記 - DSS 注入器:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStream會在文件副本上附加帶有/DSS字典(含/Certs、/OCSPs、/CRLs串流陣列)與/Extensions /ESIC標記(Level 1 或 2)的增量更新,保留原始位元組 — B-LT/B-LTA 驗證資料嵌入步驟(條款 5.4.2) - 跨平台、零相依性階段:驗證器與注入器為純 Pascal,並可在每個支援的 IDE(Delphi、Lazarus、FPC、C++Builder)上運作;此版本不需要密碼學後端,且未引入新的 DLL 相依性
Version 2.6.0
已修改 (Changed)
- 跨標準去重:另外七個重複的輔助函式(PdfEnclosingObjNum、PdfDictRefNum、PdfExpandObjectStreams、PdfTextStr、ExtractLiteralString、ExtractXmpAttr)已從各個標準單元中移除並整併至
FPdfPdfCommon,減少約 ~300 行的複製貼上維護負擔 - PreflightReport 品質:先前落入通用 “missing marker” 類別的 PDF/X 與 PDF/E 內容類別問題,現已帶有準確的 Content/Metadata/Security 類別與條款特定的建議(兩個標準共約 15 個列舉)
- PDF/E 與 PDF/R 測試涵蓋:另外六個零涵蓋列舉獲得正向測試(
pveiLzwForbidden、pveiJavaScriptForbidden、pveiFormFieldsForbidden、pveiEmbeddedFilesForbidden、pvriBadHeader、pvriProhibitedInfoEntry) - Lazarus 建置修正:
Tests.PdfVT(一個在 v2.5.x 中加入的 Delphi 專屬 DUnitX 單元)現已從 Lazarus 專案中排除,以恢復編譯
Version 2.5.3
新增 (Added)
- OutputIntent 完整性(PDF/X-4 §6.2.4):
pvviOutputIntentScheme標記/S不是/GTS_PDFX的 OutputIntent;pvviOutputIntentMissingIdentifier標記缺少的/OutputConditionIdentifier - PDF/VT-2 Reference XObject 豁免(§6.2.2):
pvviReferenceXObjectForbidden不再對PDF/VT-2檔案觸發,該檔案可以在 X-5g/5pg 基底上合法使用 Reference XObjects - MIME 邊界字元驗證(RFC 2046 §5.1.1):
vtmviBoundaryInvalidChar標記字元落在 bchars 集合之外或長度超過 70 的邊界
已修復 (Fixed)
InjectPdfVTMarkers現在會從儲存選項寫入 Info/CreationDate與/ModDate,因此產生的檔案能往返通過ValidatePdfVTCompliance,而不會出現錯誤的pvviInfoModDateMismatch(注入器先前重寫了 XMP 日期,卻留下 Info 字典的日期過時)
Version 2.5.2
新增 (Added)
- Info
/ModDate一致性(§6.3 NOTE 2,PDF/X-4 基底):pvviInfoModDateMismatch標記一個 Info 字典/ModDate,其在 PDF 日期正規化為 XMP 日期後不等於xmp:ModifyDate - PDF/VT-2s 內嵌區塊符合性(附錄 A.2):MIME 驗證器現在會在每個內嵌
application/pdf部分上執行ValidatePdfVTCompliance,並透過vtmviInlinePdfNotPdfVT標記非 PDF/VT 內容
Version 2.5.1
新增 (Added)
- DParts 分塊驗證(ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunking標記一個/DParts陣列,其非最終子陣列未恰好有 8192 個項目,或其最後子陣列落在 1..8192 之外 - RecordLevel 跨串流一致性(附錄 A.2):PDF/VT-2s MIME 驗證器現在會擷取每個內嵌 PDF 的
/RecordLevel,並透過vtmviRecordLevelMismatch標記不一致,補充既有的 NodeNameList 檢查 - 重複圖形物件提示(§6.7):
pvviGtsScopeInvalidValue標記 {SingleUse, Record, File, Stream, Global, Unknown} 之外的/GTS_Scope;pvviGtsScopeRecordWithoutRecordLevel標記沒有/RecordLevel的/Record;pvviGtsXidNotUuid標記不是 RFC 4122 uuid: URI 的/GTS_XID;pvviGtsEnvMissing標記當/GTS_Scope為 Stream 或 Global 時缺少的/GTS_Env(§6.7.4) - MIME 前向參照偵測(附錄 A.2):
vtmviForwardReference標記一個內嵌 PDF,其引用(透過/EF /F)一個未被串流中較早的附件部分引入的檔案名稱
已修復 (Fixed)
FPdfPdfvtMime中的ExtractNodeNameListFromPdf與ExtractRecordLevelFromPdf解決了一個重複發生的差一錯誤,即由AnsiFindKey傳回的 1 起始位移被當作展開 PDF 的絕對位元組位移處理
Version 2.5.0
新增 (Added)
- PDF/VT Document Part Metadata(DPM,ISO 16612-2 §6.6):
TPdfVTSaveOptions新增了DpmEntries與DpmTarget,讓寫入器可以將/DPM字典附加至合成的 DPart 節點,並在驗證器端對照附錄 E 第二類前綴規則與 §6.6 NMTOKEN / 唯一性 /GTS_Managed形式規則進行索引鍵名稱驗證 - PDF/VT-2s 串流交換(附錄 A):新的
FPdfPdfvtMime單元為multipart/mixedMIME 封套提供BuildPdfVT2sStream與ValidatePdfVT2sStream,其中帶有內嵌的 PDF/VT 區塊與附件 ICC 設定檔,並具備X-PDFVT-Stream-version: 1標頭排序規則與跨串流NodeNameList一致性檢查 TPdf.ValidatePdfVT現在透過FPDFDoc_GetJavaScriptActionCount執行權威的 JavaScript-action 計數,補充位元組級/JavaScript名稱掃描
已修復 (Fixed)
- PDF/VT
Trapped在 PDF/X-4 基底上的正確性:ptvUnknown列舉值已移除(PDF/X-4 禁止/Unknown)、ptvUnspecified在寫入時正規化為/False(缺少的/Trapped亦被禁止),且新的pvviTrappedInvalid問題標記缺席或Unknown的值 ValidatePdfVTCompliance現在會在掃描前展開物件串流(PdfExpandObjectStreams),因此儲存在壓縮 ObjStm 內的 catalog、OutputIntent 或 Metadata 字典(PDF 1.5+,為 PDF/X-4 產生器的典型行為)可被位元組級查詢觸及
已修改 (Changed)
- PDF/VT-1 現在繼承完整的 PDF/X-4 內容禁止:
pvviAcroFormForbidden(/AcroForm或/XFA)、pvviAdditionalActionsForbidden(catalog/AA)、pvviMissingTrimBox與pvviReferenceXObjectForbidden(Reference XObject,僅 X-5g/5pg) - 跨標準去重:
BuildDictObj、IccComponentCount、內建 sRGB ICC 設定檔(GetSrgbIccProfile)、PdfTextStr、PdfEnclosingObjNum、PdfDictRefNum與PdfExpandObjectStreams從FPdfPdfa/FPdfPdfx/FPdfPdfvt中的三重複本晉升為FPdfPdfCommon中的單一標準位置;3144 位元組的 ICC 字面值現在在程式庫中只存在一次
Version 2.4.0
已修復 (Fixed)
InjectPdfUaMarkers在交叉參照串流 (cross-reference-stream) 基底上不再丟棄 trailer 中的/Info參照:本機的SourceTrailerInfoRef(缺乏 xref-stream 備用方案)已被共用的PdfSourceTrailerInfoRef取代(該共用版本是從自 v2.0.0 起就已包含備用方案的 PDF/A 複本中提升而來)- 共用的
PdfReadStreamBytes現在可處理間接的/Length N G R參照(移植自 PDF/A 本機複本),因此對於使用間接 Length 的工具(Acrobat, Ghostscript)所產生的 XMP 詮釋資料串流,PDF/VT、PDF/R 和 PDF/E 驗證器不再發生誤讀或跳過
已修改 (Changed)
- 跨標準去重:
FPdfPdfa和FPdfPdfx中的本機PdfReadTrailer複本、FPdfPdfa和FPdfPdfua中的本機SourceTrailerInfoRef複本,以及FPdfPdfa中的本機PdfReadStreamBytes均已被刪除 — 共用的FPdfPdfCommon版本現在適用於所有地方,這減少了約 ~330 行的重複程式碼,並消除了保持複本同步的維護負擔 - PDF/X 測試欠債收尾:七個此前涵蓋率為零的內容類別列舉獲得了正向測試(
pvxiLzwForbidden、pvxiJavaScriptForbidden、pvxiFormFieldsForbidden、pvxiAdditionalActions、pvxiEmbeddedFilesForbidden、pvxiMissingTrimBox、pvxiTrappedNotSet)
Version 2.3.0
已修改 (Changed)
- PDF/A 測試欠債收尾繼續:另外三個涵蓋率為零的列舉獲得了正向測試;
pvaiForbiddenRenderingIntent(§6.2.9) 標記內容串流中非標準的 rendering-intent 名稱;pvaiJpeg2000Violation(§6.2.2) 標記 Part 2 中/NumComponents在 {1,3,4} 之外的 JPXDecode 影像;pvaiInlineImageLzwForbidden(§6.1.10) 標記 Part 2 中使用 LZW 濾鏡的內嵌影像
Version 2.2.0
已變更 (Changed)
- 交叉參照串流(cross-reference-stream)迴歸測試:現有的
Validate_XrefStreamTrailer_DetectsConformance現在還會驗證在 xref-stream 基準上(不只是/Root+/ID)catalog 的/Metadata參照已解析且 XMPpdfaid:part已被讀取;新的InjectPdfA_XrefStreamBase_RoundTrips測試防護了 v2.0.0 中加入的注入器 xref-stream 路徑;兩個跨標準測試(PdfE_XrefStreamBase_NotRejectedAsUnparsable、PdfR_XrefStreamBase_NotRejectedAsUnparsable)驗證了 PDF/E 和 PDF/R 驗證器不再將 xref-stream PDF 拒絕為無法解析 - PDF/A 測試債務關閉:
Validate_MinimalPdf_FlagsRequiredMarkers斷言一個極簡的 PDF 會觸發pvaiMissingPdfAIdentifier、pvaiMissingOutputIntent、pvaiMissingIccProfile、pvaiMissingXmpMetadata和pvaiMissingXmpDates— 從而填補了與已具備等價測試的 PDF/E 和 PDF/X 驗證器之間的對稱性差距;另外兩個零覆蓋率的列舉獲得了正向測試:pvaiUnembeddedFont和pvaiSubsetMissingCidSet
Version 2.1.0
已修正 (Fixed)
- PDF/E 在 v2.0.0 的交叉參照串流修正中被疏忽遺漏:
InjectPdfEMarkers和ValidatePdfECompliance仍然呼叫了未帶有AcceptXrefStream的PdfReadTrailer,因此 PDF/E 注入器在 PDF 1.5+ 輸出(pdfium 的SaveAsCopy預設值)上以隱蔽方式失敗;兩個呼叫端現在都傳遞True - 共用的
PdfReadTrailer交叉參照串流後備方案現在帶有 PDF/A 和 PDF/X 本地複本已具備的/Type /XRef防護,因此指向無關字典的損壞startxref偏移量會乾淨地失敗,而不會被誤解析為 trailer ValidatePdfUaCompliance(v2.0.0)中的間接參照/Lang解析器原本是無法到達的:PdfFindObjDict僅尋找<<字典,但/Lang字串物件是沒有字典的(...)或<...>;已替換為尋找字串 token 的直接物件主體掃描
已變更 (Changed)
- 已從
FPdfPdfa和FPdfPdfua中移除七個與共用FPdfPdfCommon版本在位元組上完全相同的重複輔助函式(PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj)— 共用版本現在透過uses套用至所有地方
Version 2.0.0
已修正 (Fixed)
- 跨標準隱蔽失敗:共用的
PdfReadTrailer輔助函式(由 PDF/UA、PDF/X、PDF/VT 和 PDF/R 標記注入器及驗證器使用)現在接受AcceptXrefStream參數,且在沒有trailer關鍵字存在時(PDF 1.5+)會後退至交叉參照串流物件字典;在此之前,pdfium 的SaveAsCopy輸出(使用交叉參照串流)會導致每個標記注入器以隱蔽方式失敗 — 來源位元組被原封不動複製,但呼叫仍然回傳成功;PDF/R-1.0 驗證器(其 PDF 2.0 基準始終是交叉參照串流)實際上成了無用操作;PDF/A 驗證器的成熟實作已被移植到共用輔助函式中,因此每個標準都能受益 InjectPdfUaMarkers和InjectPdfAMarkers中的 trailer 字典掃描現在使用感知深度的PdfDictEnd,而非僅僅搜尋>>,因此含有巢狀字典(例如/Encrypt << ... >>) 的 trailer 不再會在尾隨的/Info項目之前被提早截斷
已變更 (Changed)
TPdf.ValidatePdfUa現在在精確的 Pdfium 物件模型pvuaiPdfiumFontNotEmbedded已經觸發時抑制粗略的位元組層級pvuaiFontNotEmbedded,因此預檢報告不再針對同一個缺陷包含兩個近乎重複的「內嵌您的字型」列pvuaiLangInvalidFormat(§7.2)現在將間接參照的/Lang(N 0 R)解析為其字串物件並驗證其內容,因此間接參照的語言標記不再是盲點
Version 1.99.0
已修正 (Fixed)
pvuaiLangInvalidFormat(§7.2) 不再對十六進位編碼的/Lang字串直接放行:UTF-16BE 配對(含有FE FFBOM)與純 ASCII 十六進位字串現在會被解碼,並執行與字面(...)字串相同的 BCP 47 語法檢查,因此可捕獲格式錯誤的十六進位/Lang,而符合規範者(例如 UTF-16BEen-US)則不再有被標記的風險
已變更 (Changed)
pvuaiFontMissingToUnicode(§7.21.7) 現在將/MacExpertEncoding與/WinAnsiEncoding及/MacRomanEncoding一併豁免,符合該條款列出的四個豁免條件
Version 1.98.0
新增 (Added)
pvuaiNeedAppearancesTrue(§7.18.4) 標記一個/NeedAppearances旗標為 true 的 AcroForm,因為這會導致元件外觀無法被可靠鎖定,且輔助技術無法將其與結構樹關聯,此檢查自 PDF/A 驗證器移植,並以/AcroForm的存在為限制條件以縮小掃描範圍
已變更 (Changed)
- veraPDF 語料庫迴歸:將 §7.20 Reference-XObject 通過+失敗配對以及 §7.21.4.2 子集 CharSet/CIDSet 通過+失敗配對連接至
Live_Corpus_ValidatePdfUaMatchesConformance,此外 §7.21.7 ToUnicode-forbidden-value 和 §7.18.6.2 media-clip 通過範例也被連接作為誤判防護(其失敗範例使用位元級掃描無法捕獲的字典配置,因此僅連接通過端) - 語料庫通過路徑判定清單新增了 15 個零誤判防護,因此每個作用中的
pvuai*位元級與結構檢查現在都已針對符合規範的範例進行測試(此前 60 個作用中問題中僅有約 30 個受到防護),故意省略了pvuaiLangInvalidFormat防護,因為位元級檢查器會保守地標記其無法解碼的十六進位編碼/Lang字串
Version 1.97.0
已修正 (Fixed)
ValidatePdfUaStructureElements安全強化:EnclosingTable父鏈結走訪現在包含一個跳數計數器(以元素數量為上限),因此在合成結構元素陣列上格式錯誤的ParentIndex循環不再會掛起呼叫端,ValidatePdfUaPageContentTagging的標記內容 ID 陣列配置現在上限為一百萬個項目,以防止格式錯誤或惡意的MarkedContentID導致數 GB 的配置
已變更 (Changed)
pvuaiOrderedListMissingListNumbering列舉文件註解現在能精確描述該檢查的行為:它會標記ListNumbering值超出 ISO 32000-1 Table 347 集合的L元素(缺失的屬性不會被標記),先前的註解曾暗示它還會偵測缺少該屬性的排序列表,但實作中並非如此- 兩個
7.21.3.3-t02WMode 不相符的語料庫失敗範例現在已連接至Live_Corpus_ValidatePdfUaMatchesConformance— 自 v1.95.0 起,CMap 串流會被 FlateDecode 解壓縮,因此字典與內容的比較現在會在可讀端執行,已移除過時的「未連接」註解
Version 1.96.0
新增 (Added)
- 跨標準一致性:
TPdf.ValidatePdfUa新增了自 PDF/A 驗證器移植的兩項檢查,pvuaiAnnotationFlagsViolation(§7.18.1) 標記帶有 Hidden / Invisible / NoView 旗標的非豁免註解,這會中斷輔助技術的閱讀流程,而pvuaiActionTargetMissing(§7.18.5) 標記缺少必要目標鍵(/F+/D、/URI、/F)的 GoToR / URI / SubmitForm 動作,這會導致該連結無法被輔助技術使用
已修正 (Fixed)
- 跨頁面結構樹合併:
TPdf.ValidatePdfUa中的AllElems累積循環現在會將每個元素的ParentIndex從頁面區域陣列重新調整基準至合併後的陣列,否則頁面 2 的子元素將保留頁面區域索引,並指向頁面 1 的區段,從而以隱蔽方式損壞每個依賴 ParentIndex 的檢查(表格/清單結構、§7.4.4 H-child 數量、EnclosingTable) - RoleMap 解析:當值為間接參照(
N 0 R)或陣列([...])時,PdfReadRoleMapPairs不再終止整個鍵值掃描 — 根據 ISO 32000-1 14.8.5.1,這兩者皆為有效的 RoleMap 形式,現在會跳過該項目(Continue)而非中斷(Break),從而消除了在間接/陣列項目後對應類型上產生的pvuaiRoleMapUnresolved誤判
已變更 (Changed)
FPdfPreflightReport:18 個先前落入通用「遺失標記」類別與建議的作用中TPdfUaValidationIssue值,現在包含精確的類別(結構 / 內容 / 中繼資料 / 安全性)與特定條款建議,亦修正了PDFSpecComplianceMatrix.md中puaNone / pua1→pucNone / puc1的錯字
Version 1.95.0
已變更 (Changed)
TPdf.ValidatePdfUa召回與健全性檢視:§7.21.3.3 的pvuaiCMapWModeMismatch檢查與 §7.21.7 的pvuaiToUnicodeForbiddenValue檢查現在會在掃描前解壓縮FlateDecode壓縮的 CMap / ToUnicode 串流(先前僅判斷未壓縮的串流,此為已知的漏判),共享的PdfInflate/PdfReadAndDecodeStream輔助函式已自FPdfPdfa/FPdfPdfx升級至FPdfPdfCommon,因此每個符合性單元皆可共享同一個複本
新增 (Added)
pvuaiSubsetCharSetEmpty(§7.21.4.2) 標記一個攜帶/CharSet鍵且其字串值為空的 Type 1 子集FontDescriptor— 現有的pvuaiSubsetMissingCharSet僅捕捉缺失的鍵,而空的/CIDSet則不被標記,因為沒有 CID 的字型可能合法攜帶空點陣圖
Version 1.94.0
新增 (Added)
- 第二階段
TPdf.ValidatePdfUa稽核解決了逐條檢視以及重新掃描已被包裝但尚未在 PDF/UA 路徑中使用的 Pdfium 原生 API 時所發現的六個 ISO 14289-1 差距:pvuaiHeadingFormatInvalid(§7.4.3) 標記以 H 開頭但包含分隔符號、空白或羅馬數字而非純阿拉伯數字的自訂標題標籤;pvuaiMissingDocumentOutline(§7.17,建議) 標記未包含書籤大綱的多頁文件(單頁文件豁免);pvuaiStructElementLangInvalid(§7.2) 標記無效 BCP 47 標記的結構元素/Lang值;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) 標記缺少 PrintField 屬性擁有者的 Widget 結構元素;pvuaiLinkNotInStructureTree(§7.18.5) 標記其/Subtype /Link註解未公開為 Link 結構元素的文件;pvuaiPdfiumAnnotationMissingContents與pvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) 新增了精確的 Pdfium 物件模型註解掃描,該掃描會豁免隱藏、超出裁切框、Popup 與 Widget 註解 — 從而消除無法讀取/F旗標或/Rect的位元級啟發式檢查所帶來的誤判
Version 1.93.0
新增 (Added)
TPdf.ValidatePdfUa現在在位元級檢查器的基礎上重疊了 Pdfium 物件模型檢測,鏡像了 PDF/A 第 7 輪架構:它透過FPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) 走訪每個頁面的文字物件,並透過FPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) 及FPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) 掃描每個字元 — 這比起僅在字型程式不存在或完全沒有出現/ToUnicode時才觸發的位元級啟發式檢查更為精確,此走訪在三個層級上進行短路:當所有三個 Pdfium 層級問題都已設定時,頁面循環將會退出;針對每個物件的循環會在遇到第一個未內嵌字型時退出;而字元掃描則會在UnicodeMapError已經發生時跳過.notdef檢測,PDF/UA 曾是最後一個沒有 Pdfium 物件模型層的 PDF 標準驗證器
Version 1.92.0
新增 (Added)
- 建立了
Tests.PdfR— PDF/R-1 驗證器 (FPdfPdfr) 的第一個測試檔案,涵蓋標頭驗證、ObjStm 禁用、光柵標記偵測以及乾淨檔案的零誤判防護,所有六個 PDF 標準測試套件現在都有專用的測試檔案:PdfA(80)、PdfUa(101)、PdfX(7)、PdfE(5)、PdfVT(15)、PdfR(4) = 共 212 個測試
Version 1.91.0
新增 (Added)
ValidatePdfE與ValidatePdfVT新增了先前僅在 PDF/A、PDF/UA 與 PDF/X 驗證器中可用的內容級檢查:pveiLzwForbidden、pveiJavaScriptForbidden、pveiFormFieldsForbidden(僅限 PDF/E)、pveiEmbeddedFilesForbidden(僅限 PDF/E)、pveiOpiForbidden、pvviLzwForbidden、pvviJavaScriptForbidden、pvviEmbeddedFilesForbidden、pvviOpiForbidden,TPdf.ValidatePdfE與TPdf.ValidatePdfVT亦新增了 Pdfium 物件模型層(pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded),其透過FPDFFont_GetIsEmbedded走訪頁面文字物件,並在遇到第一個未內嵌字型時進行短路
Version 1.90.0
新增 (Added)
TPdf.ValidatePdfX現在在位元級檢查器的基礎上重疊了 Pdfium 物件模型檢測:它透過FPDFTextObj_GetFont→FPDFFont_GetIsEmbedded走訪每個頁面的文字物件,並將未內嵌字型回報為pvxiPdfiumFontNotEmbedded— 這比起僅在字型程式不存在時才觸發 the 位元級啟發式檢查更為精確,此走訪會在遇到第一個未內嵌字型時進行短路
已變更 (Changed)
TPdf.ValidatePdfUa結構樹走訪:一旦發現pvuaiUntaggedContent,後續頁面將跳過每頁的ValidatePdfUaPageContentTagging呼叫(其建立標記內容 ID 的宣告對應表並交叉檢查每個文字/影像物件) — 雖然仍會為跨頁面檢查(Note 唯一 ID、標題序列)收集結構元素,但昂貴的每頁內容標記階段會提早停止
Version 1.89.0
已變更 (Changed)
TPdf.ValidatePdfAPdfium 物件模型層效能:頁面/物件走訪現在在三個層級上進行短路 — 當所有適用的 Pdfium 層級問題都已找到時,頁面循環將會退出;當兩個個別物件問題(字型內嵌 + 透明度)都已設定時,個別物件循環將會退出;而當UnicodeMapError已經發生時,文字頁面字元掃描會跳過.notdef檢測,Assigned()的 API 可用性檢查和符合性旗標在循環前會被快取至本機布林值一次,而不是在每個頁面/物件/字元上重新評估,在大型非符合規範的文件上,走訪現在可以在第一頁後停止,而不是掃描所有頁面;在符合規範的文件上,每頁的額外負擔也更低(無重複的Assigned呼叫)
Version 1.88.0
新增 (Added)
ValidatePdfX新增了八個全新的內容級TPdfXValidationIssue值,涵蓋了 PDF/X 在檔案格式標記之外所施加的印刷交換限制:pvxiLzwForbidden(/LZWDecode)、pvxiJavaScriptForbidden(/JavaScript)、pvxiFormFieldsForbidden(/AcroForm//XFA)、pvxiAdditionalActions(/AA)、pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment)、pvxiOpiForbidden(/OPI//Alternates)、pvxiMissingTrimBox(任何頁面皆無/TrimBox)以及pvxiTrappedNotSet(/Trapped缺失或為/Unknown),PDF/X 驗證器先前僅檢查 XMP/OutputIntent 標記;這是其首次進行內容級檢測,共用的PdfStructureBytes/PdfHasName/PdfCountName輔助函式已新增至FPdfPdfCommon,以便所有符合性單元皆可使用它們
Version 1.87.0
新增
- PDF/UA 驗證現已涵蓋 ISO 14289-1 §7.21.3 複合字型規則:
pvuaiCidSystemInfoMismatch會標記 Type0 字型,其嵌入 CMap 與後代 CIDFont 在Registry/Ordering上不一致,或 CIDFont 的Supplement超過 CMap 所指定的值;pvuaiCMapNotEmbedded會標記以名稱(作為Encoding或UseCMap)參照但不屬於 ISO 32000-1 Table 118 預定義 CMap 的 CMap;pvuaiCMapWModeMismatch會標記嵌入 CMap 的字典WMode與其串流內容中的 WMode 不符的情況
修復
- §7.21.3.2 的
pvuaiCidFontMissingCidToGidMap檢查遺漏了Subtype鍵值對以換行字元分隔的 CIDFontType2 字典,現在也會標記CIDToGIDMap名稱值不為Identity的情況
Version 1.86.0
新增
- PDF/UA 驗證現已涵蓋 ISO 14289-1 §7.21.6 TrueType 編碼規則:
pvuaiTrueTypeEncodingInvalid會標記非符號 TrueType 字型其Encoding遺失,或既非MacRomanEncoding亦非WinAnsiEncoding(直接指定或透過BaseEncoding);pvuaiSymbolicTrueTypeEncoding會標記符號 TrueType 字型攜帶非標準Encoding名稱的情況
Version 1.85.1
變更
- ISO 14289-1 §7.18.3 標籤頁序檢查
pvuaiMissingTabsOrder現在改為逐頁執行:每個含有註解的頁面必須在其自身的頁面字典中宣告/Tabs /S,因此符合規範的相鄰頁面不再會遮蔽缺少該宣告的頁面
Version 1.85.0
新增
- PDF/UA 驗證現在可依 ISO 14289-1 §7.15 區分動態與靜態 XFA 表單:
pvuaiXfaDynamic會標記 XFA 設定中將dynamicRender設為required的表單
變更
- 原任何 XFA 候選旗標
pvuaiXfaPresent已停用,不再觸發(靜態 XFA 符合 §7.15 規範);列舉值保留以維持 API 相容性
Version 1.84.0
新增
- PDF/UA 驗證現在可偵測 ISO 14289-1 §7.1 所要求的未標記真實內容:
pvuaiUntaggedContent會標記既未透過頁面結構樹(以其標記內容 ID)認領,也未標記為 Artifact 的已彩現文字和影像物件 - 新增頁面層級輔助函式
GetPageContentMarkInfos和ValidatePdfUaPageContentTagging,以及TPdfPageContentMarkInfo記錄,可直接使用
Version 1.83.0
新增
- PDF/UA 驗證現在強制執行 ISO 14289-1 §7.4.4 標題模型:
pvuaiHeadingModelMixed會標記混用通用H標籤與編號H1..Hn標題的文件;pvuaiHeadingMultipleInNode會標記結構節點中含有多個子H標題的情況
Version 1.82.0
新增
- PDF/UA 驗證現在解析 ISO 14289-1 §7.1 所要求的 RoleMap:
pvuaiRoleMapRemapsStandard會標記重新定義標準結構類型的 RoleMap 條目;pvuaiRoleMapUnresolved會標記所使用的非標準結構類型,其 RoleMap 鏈結遺失、懸空或形成循環 — 間接鏈結若最終到達標準類型則被接受,未使用的 RoleMap 條目一律不予判定 - 新增輔助函式
PdfUaIsStandardStructType、PdfReadRoleMapPairs(含 PDF 名稱#hh跳脫解碼)和ValidatePdfUaRoleMapUsage,可直接使用
Version 1.81.0
新增
- PDF/UA 驗證現已涵蓋 ISO 14289-1 §7.6 所要求的 ISO 32000-1 清單標記:
pvuaiListStructureInvalid會標記不在 L 容器內的 LI 項目,以及不在 LI 項目內的 Lbl/LBody 部分;同時接受巢狀清單及 Lbl 在 Note 和 BibEntry 元素中的合法使用
Version 1.80.0
新增
- PDF/UA 驗證現已涵蓋 ISO 14289-1 §7.5 所要求的 ISO 32000-1 表格標記:
pvuaiTableStructureInvalid會標記不在 TR 列中的 TH/TD 儲存格,以及不在其 Table 容器內的列或列群組;pvuaiTableHeaderMissingScope會標記既無法透過 Scope 屬性、也無法透過 Headers/ID 關聯來確定關係的標題儲存格;pvuaiTableHeadersUndefinedId會標記在未定義任何結構元素 ID 的文件中出現 Headers 參照的情況 TPdfStructureElement公開表格屬性Scope、HasHeaders、HeadersIds、ColSpan和RowSpan,在結構樹走訪期間解析
變更
- 結構樹走訪現在以單次遍歷讀取每個元素屬性字典中的所有版面配置與表格屬性,而非每個屬性各掃描一次
Version 1.79.1
新增
- 將
AnnotationsLab範例移植至 Lazarus 與 C++Builder,加入現有的 Delphi 主控台範例
修復
TPdf.CreateAnnotation在建立使用 quad points 的標記註解(Highlight、Underline、StrikeOut、Squiggly)時可能會引發 “Cannot set attachment points” 錯誤,因為新註解尚未有 quad 槽可替換;現在改為附加第一個 quad
Version 1.79.0
新增
- 新增
AnnotationsLabDelphi 主控台範例:建立 Text、Highlight、Square 與 Circle 註解,將其寫入 PDF,然後重新載入檔案並列舉頁面註解清單
Version 1.78.0
新增
- 新增
TPdf.MeasureText與TPdf.MeasureTextWidth:測量指定字型與大小的字串渲染後的寬度與高度(PDF 使用者單位,1 單位 = 1/72 英吋),而無需將內容加入頁面,使得在AddText之上實作排版與自動換行邏輯成為可能;由獨立的FPdfMeasure單元作為類別輔助(class helper)提供 - 新增
TPdf.WrapText:基於MeasureTextWidth的貪婪換行功能,以空白字元分割文字並將單字填入不超過指定寬度(PDF 使用者單位)的行中;過長的單一單字會獨佔一行(單字內不斷行),並將換行後的結果作為陣列回傳
Version 1.77.0
新增
ValidatePdfA獲得三個新的TPdfAValidationIssue值,涵蓋了先前差距稽核中被評為「NO」或「讀取器行為」的條款(附加在列舉末尾,現有值保持不變):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — 字元解析為 Unicode 0 且沒有對應錯誤,這是參考.notdef字形的執行階段症狀;透過 Pdfium 物件模型層偵測)、pvaiWordBreakMissing(Level A 6.8.3.2 — 內容串流的 show 字串超過 20 個字元且沒有空白,極可能是合併單字的違規行為;此為粗略的啟發式方法,可避免 CJK 誤報)以及pvaiLinkActionMissingTarget(6.6.3 — GoToR/URI/SubmitForm 動作遺失其顯示目標鍵,導致讀取器無法呈現)
Version 1.76.0
新增 (Added)
ValidatePdfA新增了三個TPdfAValidationIssue值 (附加於列舉尾端,現有值保持不變):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — 包含 ≥ 0x80 且未構成有效 UTF-8 位元組的/BaseFont或/FontName標記)、pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — 頁面內容串流中的內嵌影像使用了 LZW 或 Crypt 濾鏡) 以及pvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — 其 Encoding 字典帶有/Differences的非符號 TrueType 字型)
Version 1.75.0
新增 (Added)
ValidatePdfA新增了三個TPdfAValidationIssue值 (附加於列舉尾端,現有值保持不變):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — 超過 32 位元有號整數限制 2,147,483,647 的數值標記)、pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — 超出 ISO 32000-1 §11.3.5 標準混合模式集的/BM值;補充了僅允許 Normal/Compatible 的 PDF/A-1pvaiTransparentColorSpace) 以及pvaiHexStringOddDigits(6.1.6 — 具有奇數個十六進位數字的<...>十六進位字串)
Version 1.74.0
新增 (Added)
ValidatePdfA新增了三個TPdfAValidationIssue值 (附加於列舉尾端,現有值保持不變):pvaiPermissionsViolation(6.1.12 — 與/DocMDP一起帶有/DigestLocation、/DigestMethod或/DigestValue的/Perms字典)、pvaiTransActionForbidden(PDF/A-2 6.5.1 — Trans 轉場動作,透過/S /Transaction-dict 模式偵測以避免誤判/Transparency) 以及pvaiPdfiumObjectTransparency(PDF/A-1 6.4 — 根據FPDFPageObj_HasTransparency頁面物件帶有真實透明度,這擴充了 v1.73.0 引入的 Pdfium 物件模型層,以捕捉位元組層級名稱掃描可能遺漏的混合模式/柔和遮罩效果)
Version 1.73.0
新增 (Added)
TPdf.ValidatePdfA現在在位元組層級檢查器之上疊加了 Pdfium 物件模型遍歷:它會透過FPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbedded走訪每個頁面的文字物件,並將未內嵌的渲染字型報告為pvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4),同時載入每個文字頁面以掃描FPDFText_HasUnicodeMapError,並將損壞的 Unicode 對應報告為pvaiPdfiumUnicodeMapError(6.3.8)。這些是位元組層級檢查器無法執行的檢查 —— 它只會看到名稱標記,而不是已解析的字型控制代碼或每個字元的對應狀態 —— 並且會合併到位元組層級結果中。獨立的ValidatePdfACompliance位元組層級函式維持不變
Version 1.72.0
新增 (Added)
ValidatePdfA新增了五個TPdfAValidationIssue值 (附加於列舉尾端,現有值保持不變):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — catalog 不應帶有/NeedsRendering)、pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — OutputIntent 不應帶有/DestOutputProfileRef)、pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — 帶有/EF的檔案規格也應帶有/UF)、pvaiXmpPacketBytesAttr(6.7.5 — XMP 封包標頭不應帶有已棄用的bytes=或encoding=屬性) 以及pvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — 註解/FToggleNoView 位元,值為 512,是被禁止的)
Version 1.71.0
變更 (Changed)
ValidatePdfUa現在會引發pvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6):結構樹走訪器透過 Pdfium 屬性 API 解析每個L元素上的ListNumbering配置屬性,並標記任何不在 ISO 32000-1 表 347 集合中的值 (Decimal、UpperRoman、LowerRoman、UpperAlpha、LowerAlpha、None、Circle、Disc、Square)。缺少的屬性不會被標記,因為該清單可能是無序的;這關閉了第 5 輪結束時記錄的最後一個殘留 ISO 14289-1 缺口
Version 1.70.0
新增 (Added)
ValidatePdfUa新增四個TPdfUaValidationIssue列舉值(採附加方式編序,既有值不變):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — CID 子集的FontDescriptor必須宣告/CIDSet)、pvuaiToUnicodeForbiddenValue(7.21.7 — ToUnicode CMap 不得把任何碼位對映到U+FEFF或U+FFFE;未壓縮串流會被掃描檢查<FEFF>/<FFFE>輸出形式)、pvuaiLangInvalidFormat(7.2 —/Lang必須是有效的 RFC 1766 / BCP 47 標籤;寬鬆文法接受en、en-US、zh-Hans、es-419,並標記明顯不合格的值),以及pvuaiOrderedListMissingListNumbering(7.6 — 為 API 完整性而保留;驗證器尚未引發,因為要可靠區分有序與無序清單,需要結構樹走訪器尚未公開的ListNumbering屬性值)
Version 1.69.0
新增 (Added)
ValidatePdfUa新增兩個TPdfUaValidationIssue列舉值(採附加方式編序,既有值不變):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — Widget 結構元素必須巢狀放在Form元素內;結構樹走訪器現在會檢查每個 Widget 的直接父元素型別),以及pvuaiSubsetMissingCharSet(7.21.4.2 — Type 1 子集的FontDescriptor必須宣告/CharSet,以/FontName上六個字母的+子集名稱前綴識別)
Version 1.68.0
新增 (Added)
ValidatePdfUa新增兩個TPdfUaValidationIssue列舉值(採附加方式編序,既有值不變):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — URI 動作字典不得攜帶值為true的/IsMap,因為它會讓無障礙連結目標失效),以及pvuaiHeadingSequenceViolation(7.4.2 — 編號標題必須從H1開始,遞降序列不得跳過中間層級,例如H1→H3即為違規)。標題檢查是驗證器第一條作用在結構樹層級的 PDF/UA 規則:ValidatePdfUaStructureElements現在會走訪型別化元素清單,按文件順序驗證H1…H6(以及 7.4.3 規定的H7+)序列
Version 1.67.0
新增 (Added)
ValidatePdfUa新增五個TPdfUaValidationIssue列舉值(採附加方式編序,既有值不變):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — Link 註解必須透過/Contents攜帶替代描述)、pvuaiAnnotationMissingContents(7.18.1 — 任何沒有/Contents又不在豁免之列的註解都必須有替代描述;Popup 與 Widget 豁免)、pvuaiEmbeddedFileMissingName(7.11 — 檔案規格字典必須包含/F與/UF)、pvuaiMediaClipMissingAlt(7.18.6.2 — 媒體片段資料字典必須包含/CT與/Alt),以及pvuaiCidFontMissingCidToGidMap(7.21.3.2 — 內嵌的 Type 2 CIDFont 必須包含/CIDToGIDMap)
Version 1.66.0
新增 (Added)
ValidatePdfUa新增五個TPdfUaValidationIssue列舉值(採附加方式編序,既有值不變):pvuaiRoleMapMissing(ISO 14289-1 7.1 — 含非標準結構型別的加標籤文件必須攜帶/RoleMap)、pvuaiOptionalContentAsKey(7.10 — 選擇性內容組態字典不得攜帶/AS自動狀態鍵)、pvuaiXfaPresent(7.15 — 偵測到 AcroForm/XFA即標記,因為動態 XFA 被禁止)、pvuaiTrapNetAnnotation(7.18.2 —/TrapNet註解被禁止),以及pvuaiReferenceXObject(7.20 — 以/Ref標記識別的 Reference XObject 被禁止)
修復 (Fixed)
ValidatePdfUa不再對每個加密檔案誤判pvuaiEncryptionPresent:只要加密字典的/P索引鍵設定了第 10 號位元位置 (值為 1024),PDF/UA 即允許加密,該位元會授予輔助科技存取權 (7.16)。精確的違規現在會透過新的pvuaiEncryptionPBitMissing回報;pvuaiEncryptionPresent為了 API 相容性而保留在列舉中,但位元組層級驗證器已不再引發它
Version 1.65.0
新增 (Added)
ValidatePdfA新增五個TPdfAValidationIssue列舉值(採附加方式編序,既有值不變):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — 內嵌的 Type 2 CIDFont 必須攜帶/CIDToGIDMap)、pvaiSubsetMissingCharSet(6.3.5 — Type 1 子集的FontDescriptor必須攜帶/CharSet)、pvaiSubsetMissingCidSet(6.3.5 — CID 子集的FontDescriptor必須攜帶/CIDSet)、pvaiWidgetActionForbidden(6.6.1 — Widget 註解不得攜帶/A或/AA),以及pvaiOptionalContentAsKey(ISO 19005-2 6.9 — 選擇性內容組態字典不得攜帶/AS自動狀態鍵;PDF/A-2 允許選擇性內容,這條規則因此變得相關)
Version 1.64.0
新增 (Added)
ValidatePdfA新增八個TPdfAValidationIssue列舉值(採附加方式編序,既有值不變):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 —%PDF-x.y檔頭之後必須緊跟一條至少含四個大於 127 位元組的%註解)、pvaiExternalStreamRef(6.1.7 — 串流字典不得攜帶/F、/FFilter或/FDecodeParms)、pvaiOutputIntentScheme(6.2.2 — OutputIntent 的/S必須是/GTS_PDFA1)、pvaiInfoXmpDateMismatch(6.7.3 — Info 的CreationDate/ModDate必須同時以xmp:CreateDate/xmp:ModifyDate出現)、pvaiMarkInfoMissing(6.8.2.2 — Level A 要求/MarkInfo帶/Marked true)、pvaiAnnotationApDictViolation(6.5.3 Cor.2 — 註解的/AP字典只能包含/N)、pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Annex E.2 — 每個關聯檔案規格都必須攜帶/AFRelationship),以及pvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — JPEG2000 影像必須宣告 1、3 或 4 個分量)
修復 (Fixed)
ValidatePdfA不再對使用單字母字型資源名稱 (例如/Font << /F 5 0 R >>) 的文件誤判pvaiAnnotationFlagsViolation;/F旗標掃描現在會以註解情境 (註解型別的/Subtype) 為條件,與文件記載的行為相符 (6.5.3)ValidatePdfA現在會針對每個檔案回報 PDF/A-3 關聯檔案需求:只有當內嵌的/Type /Filespec透過/EF參照內嵌串流卻缺少/AFRelationship時,文件才會被標記,而非先前的全文件任一或全無檢查 (ISO 19005-3 Annex E.2)- 將已棄用的
/SetState動作與/SetOCGState一併加入禁止動作集合,使 PDF Reference 的動作名稱能被直接捕捉 (6.6.1)
Version 1.63.0
新增 (Added)
- 新增
TPdf.MeasureText與TPdf.MeasureTextWidth:在不將內容加入頁面的情況下,測量指定字型與字號下文字的輸出寬高(PDF 使用者單位,1 單位 = 1/72 英寸),便於在AddText之上實作版面配置與自動換行;由獨立元件FPdfMeasure以 class helper 形式提供
變更 (Changed)
Demo\Delphi\MergePDF、Demo\CBuilder\MergePDF與Demo\Lazarus\MergePDF三端增強:支援每個檔案的頁面範圍選擇、可選輸出路徑、去重、執行記錄、取消按鈕與合併完成摘要,並在匯入第一個來源時一併攜帶書簽與元資料- 三種 IDE 的
CreatePDF範例現在都有「歐洲文字」選項,可寫入捷克文、法文、德文、西班牙文、葡萄牙文、波蘭文與土耳其文的附加符號字元,用來檢查字型選擇與 Unicode 處理;原本的EuropeanText範例已整合進來 - 移除
ExtractTextPages與EuropeanText範例:ExtractTextPages的逐頁文字輸出功能,已由ExtractText的頁面範圍與頁面分隔符選項涵蓋;EuropeanText的多語言文字算繪功能已整合至CreatePDF
Version 1.62.2
修正 (Fixed)
- 重新產生了適用於所有 RAD Studio 版本與平台(Win32/Win64/Win64x)的 C++Builder 標頭檔(
.hpp);它們已偏離 Pascal 原始碼,留下過時的函式簽章與缺少的單元,並透過原始碼散佈套件傳給 C++Builder 使用者
Version 1.62.1
修正 (Fixed)
- 恢復了 RAD Studio 12 Athens 及更早版本上的原始碼編譯:PDF/UA 驗證路徑中的
TArray<Byte>指派使用了僅 Delphi 13 才有的隱式陣列轉換,在較舊 IDE 上無法編譯
Version 1.62.0
新增 (Added)
TPdf.RenderPageThumbnail可將任意索引頁轉譯為等比例配合的位元圖,不會變更文件目前頁、已載入頁,也不會觸發OnPageChange
修正 (Fixed)
TPdfThumbnailView在繪製時不再驅動主文件的PageNumber;先前每次重繪都會重新載入頁面、觸發OnPageChange並捨棄文字頁,這可能干擾連結的TPdfView並引發重繪迴圈。縮圖現在改由RenderPageThumbnail轉譯,不再有這些副作用- PDF/X 一致性驗證現在會檢查交叉參照流文件(PDF 1.6,PDF/X-4 的常見形式)以及儲存在壓縮物件流中的物件,而不再直接把這類檔案判為不一致;
GTS_PDFXVersion標記現在會同時從元素形式與 RDF 屬性形式的 XMP 中讀取 - 當 Info 字典與 XMP 在 Producer 或 Creator 上不一致時,PDF/R 驗證現在會回報
pvriInfoXmpMismatch;這個問題先前只是宣告過,卻從未真正拋出 - 表單填入計時器現在依請求追蹤,因此某份文件即使同時執行多個計時器(例如 JavaScript interval 和欄位游標閃爍)也會保留全部計時器,而不會只剩下最新的那個
TPdfView的繪製與其公開的RenderPage/RenderTile方法現在會持有文件轉譯鎖,因而與同一個TPdf的工作緒轉譯序列化(PDFium 並非執行緒安全)- 寫入 PDF/X、PDF/R 和 PDF/VT 資訊中非 ASCII 文字(OutputIntent 條件名稱、Creator、Producer)現在會依 ISO 32000-1 §7.9.2.2 編碼為 UTF-16BE 字串,而不再是原始 UTF-8,符合規範的讀取器不會再誤讀
- 一致性輔助函式現在能正確讀取
/Length為間接參照的內嵌中繼資料流,使用ReadBuffer載入原始位元組(因此短讀會乾淨失敗),並拒絕負的startxref偏移,而不是冒著超出範圍讀取的風險
Version 1.61.0
變更 (Changed)
- 修正 FFI/ABI 宣告,可能需要重新編譯實作受影響回呼的程式碼:
FFI_OpenFile表單填入回呼現在帶有cdecl(Win32 堆疊慣例),而value參數在FPDFAnnot_SetStringValue與FPDFAttachment_SetStringValue中現在改為FPDF_WIDESTRING(UTF-16LE),以符合 PDFium 標頭 - 漸進式載入回呼
FX_FILEAVAIL.IsDataAvail和FX_DOWNLOADHINTS.AddSegment現在採用size_t偏移,而size_t在 Free Pascal / Lazarus Win64 上具有指標寬度(先前會截斷為 32 位),因此修復了 FPC Win64 上的資料可用性以及outsize_tAPI 呼叫
修正 (Fixed)
- 記憶體安全:在銷毀帶有作用中 AcroForm 游標的
TPdf時,表單填入計時器發生 use-after-free;FPDF_CloseDocument在ImportNPagesToOne錯誤路徑被呼叫兩次;儲存與插入 JPEG 時,Pascal 例外跨越 C 邊界從FPDF_FILEWRITE/FPDF_FILEACCESS回呼中逸出;以及在從起始索引讀取到頁面末尾時出現文字擷取整數溢位 TPdfFuture<T>現在能可靠地傳遞其結果回呼;先前因為工作緒在排入的回覆執行前就自行釋放,回覆幾乎總會遺失,還可能碰到已釋放的執行緒- PDF/A、PDF/X、PDF/E、PDF/R、PDF/VT 和 PDF/UA 輸出現在會寫入恰好 20 位元組的交叉參照項目,符合 ISO 32000-1 §7.5.4 的要求
- 標準標記注入在移除的鍵(例如
/Trapped)剛好是最後一項時,不再銷毀字典,這個問題先前會吞掉結尾的>>並產生損毀物件 - OutputIntent ICC profile 串流現在會為 PDF/X 和 PDF/VT 宣告所需的
/N元件數(PDF/A 已經具備);在注入 PDF/X、PDF/E、PDF/R、PDF/VT 和 PDF/UA 標記之前,先對加密來源文件進行解密,因此輸出是有效的,而不是被靜默損壞 - 生成的 XMP 中 UTF-8 xpacket BOM 現在會以精確位元組輸出,修復了 ANSI code page 不是 Latin-1 的 Delphi 安裝上的損壞;增量更新 trailer 現在會保留文件
/Info參照 - 帶壓縮的
SaveAs不再截斷其/Length為間接參照的串流,而重建後的交叉參照表現在使用 20 位元組項目、真實生成號,並移除了過時的/Prev指標 - 一致性驗證現在會讀取 PDF/E 和 PDF/X 的屬性形式 XMP 版本標記(因此可辨識以屬性序列化的 PDF/X-4 檔案),要求精確的
PDF/E-1識別字,正確讀取間接/Length的中繼資料串流,並且在檢查 PDF/UA trailer 時不再把結構元素的/ID或/StructTreeRoot鍵誤判為相符;畸形的startxref偏移也不再引發範圍錯誤 TPdfThumbnailView:最後一頁現在可透過捲軸到達,縮圖繪製後會恢復主文件的目前頁,且標準的 mouse-leave 處理會再次分派- 灰階頁面與圖像位元圖不再使用錯誤調色盤轉譯;
TPdfView在TPdf先被釋放時也不再留下懸空參照 - 預檢報告:HTML 現在以 UTF-8 儲存以符合其宣告的字元集,而 JSON 字串跳脫在 Free Pascal 上會為非 ASCII 字元產生正確的
\u序列 - 試用版建置:試用提醒對話框現在會正常出現,而不會在顯示前被抑制
TPdfStreamAdapter現在會對大於 4 GiB 的串流回報明確錯誤,而不是靜默截斷傳給 PDFium 的長度
Version 1.60.1
變更 (Changed)
- Delphi、Lazarus 與 C++Builder 的 AccessibilityReader 示範現在改在
TPdfReadingSession上執行朗讀:每一頁都會透過BuildSpokenTextFromWords組裝成一個語音區塊,SAPI 字詞位置驅動FeedSpokenPosition,而會話會推進頁面並驅動檢視器的字詞游標,取代了每個示範先前手寫的編排 - 示範中的字級 karaoke 追蹤現在在 NVDA 作為語音引擎時也能運作:
EstimatePacing會依據已用朗讀時間來調節閱讀游標,而此前 NVDA 完全沒有字詞追蹤 - 示範中的 Pause 與 Resume 現在也能與 NVDA 搭配:
ResumeRestartsChunk會在 Resume 時從目前頁開頭重新朗讀該頁,而 SAPI 仍保留其原生的就地暫停與恢復
Version 1.60.0
新增 (Added)
TPdfView上的即時低視力轉譯:新的reInvert與reNightDuotone轉譯選項會在繪製搜尋、選取、閱讀與字詞游標疊加層之前,先為每個已轉譯頁面瓦片重新著色(完全反相或夜間雙色調配色),把既有位元圖色彩轉換帶進單頁與對開頁佈局的互動檢視器;切換選項會立即重繪NightDuotoneInk與NightDuotonePaper用來設定夜間配色,預設是在黑色頁面上顯示琥珀色文字;兩項都設定時,reInvert會優先
Version 1.59.0
新增 (Added)
TPdfReadingSession:一個與語音引擎無關的朗讀編排元件。它會保留區塊游標、字詞游標與播放狀態(Play/PlayFrom/Pause/Resume/Stop),推進已載入的TPdfSpokenText區塊,當主控端透過Tick回報引擎閒置時便繼續朗讀流程,將朗讀文字偏移量映回頁面字元,並自動驅動附加的TPdfView字詞游標;主控端透過OnSpeak以及取消 / 暫停 / 恢復請求事件接入任何語音引擎,因此程式庫本身不連結任何語音 APIFeedSpokenPosition會接收引擎字詞位置(例如 SAPIStatus.InputWordPosition);EstimatePacing搭配EstimatedWordsPerMinute可為沒有位置訊號的引擎估算節奏;ResumeRestartsChunk會為沒有原生暫停功能的引擎重新朗讀目前區塊OnChunkChange、OnWordChange和OnFinished只在真正變更時觸發,而已釋放的附加檢視器會自動解除附加,因此主控端程式碼可以維持無閃爍且較不易崩潰
Version 1.58.0
新增 (Added)
EstimateSpokenWordIndex會根據已用時間與每分鐘字數估算語音引擎目前正在朗讀哪個字,讓較長的字按比例分配更多時間,因此不回報字詞位置的引擎(例如 NVDA controller client)也能驅動字級閱讀游標;呼叫端提供已用時間,所以這個常式不依賴時鐘,也方便單元測試
Version 1.57.0
新增 (Added)
- 支援用於朗讀追蹤的雙域映射語音文字組裝:
BuildSpokenTextFromWords與SpokenTextAppend會根據頁面詞框建立交給文字轉語音引擎的字串,同時記錄跨度表,而SpokenToPageChar會把引擎回報的朗讀偏移量(例如 SAPIStatus.InputWordPosition)映回頁面字元索引,因此當朗讀文字不是整頁文字時(例如略過區域、按單元朗讀、發音覆寫)字級高亮追蹤仍然正確 TPdfSpokenText與TPdfSpokenSpan型別會同時帶有朗讀字串以及其建立來源的頁面範圍;插入分隔符上的偏移會解析到下一個已映射字,而超出已映射片段的偏移會回報沒有匹配
Version 1.56.9
新增 (Added)
Demo\Delphi\PreflightReport增加 Action Plan 預覽,可將未通過的標準、優先順序、後續動作、問題代碼及建議彙整為修復清單Demo\Delphi\PreflightReportCli在單一檔案與批次執行時可接受plan/actionplan作為輸出格式,並將相同修復清單寫入文字檔
變更 (Changed)
- 兩個 Delphi PreflightReport 示範現在都會在總標準數和問題數旁顯示 pass / action / review 狀態計數
Version 1.56.8
變更 (Changed)
ViewerInteractionLab現在新增頁面跳轉控制項、手動縮放控制項、以點擊為基礎的DeviceToPage/PageToDevice座標紀錄,並提供更清晰的互動紀錄供選取、搜尋、旋轉與巡覽檢查使用ViewerInteractionLab的 readme 頁面現已在本地化 demo readme 集合中補充已新增的互動流程
Version 1.56.7
新增 (Added)
AccessibilityWorkbenchCli將每個觸發的發現對應到其 WCAG 2.1 成功準則和 ISO 14289-1(PDF/UA-1)條款區域,並在報告中顯示標準涵蓋章節AccessibilityWorkbenchCli計算具文件化說明的 0-100 可及性分數,採用公開的懲罰規則,並以 excellent / good / needs work / poor 分段輸出,逐檔與批次平均皆可查看AccessibilityWorkbenchCli接受failscore=N,當任何檔案分數低於 N 時會使本次執行失敗(退出碼 2)AccessibilityWorkbenchCli在批次摘要檔名以.sarif結尾時寫入 SARIF 2.1.0 日誌,每個發現種類對應一條規則,並附帶 WCAG 2.1 與 PDF/UA 標籤,供 CI 與程式碼掃描取用AccessibilityWorkbenchCli新增version指令,用於輸出連結的 PDFium Delphi Component 版本
Version 1.56.6
新增 (Added)
IntakeWorkbenchCli會為每個輸入檔案計算 SHA-256 鑑識雜湊(會退化為unavailable,適用於不支援System.Hash的編譯器),並在每種格式中回報IntakeWorkbenchCli接受passwords=file.txt,用於從候選清單中試行解鎖受密碼保護的文件,並在不記錄密碼文字的前提下記錄對應的候選索引IntakeWorkbenchCli接受copyto=dir,將每個審計檔案導向各風險等級子資料夾,讓審計流程具備 intake 分流能力IntakeWorkbenchCli在批次摘要檔名以.sarif結尾時寫入 SARIF 2.1.0 日誌,每個風險旗標對應一條規則,每個被標記檔案產生一筆結果,供 CI 與程式碼掃描取用IntakeWorkbenchCli新增version指令,用於輸出連結的 PDFium Delphi Component 版本
Version 1.56.5
新增 (Added)
IntakeWorkbenchCli現在可推導建議的後續處理動作,例如 accept、request-password、manual-review、quarantine 與 deduplicate,並在批次摘要中曝光這些動作計數AccessibilityWorkbenchCli現在可推導建議的修復動作,例如 pass-through、remediate-tags、run-ocr、remediate-semantics 與 manual-review,並提供對應批次動作計數
變更 (Changed)
- 兩個工具級 CLI 示範現在皆於 console、text、HTML、JSON、CSV 輸出中呈現建議動作,使批次作業人員可在無需事後處理風險或狀態欄位的情況下完成檔案分流
Version 1.56.4
修復 (Fixed)
- 在迴圈中讀取註解、書籤或連結註解時,不再外洩前一項的文字字串:
TPdfAnnotation、TBookmark與TLinkAnnotation結果記錄現在以「認知管理型別」的初始化方式清除,而非原始記憶體歸零,避免大量文字註解文件持續推升整體程式記憶體用量 - 當銷毀一個
TPdf,且它先前已註冊OnUnsupportedFeature處理常式時,現在會將其從行程全域的 PDFium 回呼移除,因此後續另一個未自訂處理常式的TPdf實例載入文件時,不會再將呼叫分派到已釋放元件(use-after-free)
Version 1.56.3
修復 (Fixed)
AccessibilityWorkbenchCli不再把空白頁列為啟發式閱讀順序頁,帶有空白分隔頁的標記化文件因此保有正確的可近用性狀態,且無可讀內容的頁面會另外報告AccessibilityWorkbenchCli的表頭偵測不再將屬於巢狀表格的TH儲存格歸到外層表格,表單欄位與字型名稱採大小寫敏感比對,避免不同欄位被合併IntakeWorkbenchCli的 URL host 清單會移除 userinfo、query 與 fragment 部分,因此像[email protected]這類組合連結會歸到真實主機,mailto:目標會提供其網域而非完全隱藏IntakeWorkbenchCli的 Markdown 報告會對可被攻擊者控制的路徑、主機與附件名稱中的反引號進行逸出,避免文件內部文字破壞報告格式
變更 (Changed)
AccessibilityWorkbenchCli將字型掃描失敗與表單欄位掃描失敗分開計數,標記同時存在嵌入執行個體的未嵌入字型,並以明確截斷標記限制過長字型清單IntakeWorkbenchCli的批次摘要新增附件註解計數欄位,且每頁註解統計上限為每頁 20000 筆,在每種格式都會回報該上限
Version 1.56.2
新增 (Added)
AccessibilityWorkbenchCli現在會審計字型嵌入、表單欄位 tooltip、閱讀順序來源、文件大綱、表格與清單結構、可疑替代文字,以及更完整的逐頁檢閱細節,讓 accessibility 批次報告能識別更多修復目標IntakeWorkbenchCli現在會報告頁面掃描上限、launch 與 remote-go-to 動作、URI host 清單、註解數量、不支援的 PDFium 功能、重複文件識別碼,以及更完整的自動 intake 檢閱風險標記
變更 (Changed)
IntakeWorkbenchCli在單一檔案和批次模式中接受maxpages=N,用於限制每份文件的頁面掃描數量,同時仍完成 metadata、attachment、script、XFA、signature 和 risk 報告
Version 1.56.1
修復 (Fixed)
- 載入缺少較新匯出的舊版
pdfium.dll現在會乾淨地失敗:失敗路徑會重設每個已繫結的 API 進入點,因此Assigned()檢查(例如FPDF_GetLastError或FPDF_GetSecurityHandlerRevision)會回報程式庫未載入,而不是呼叫已卸載的模組並因存取違規而當機 UnloadLibrary現在會清除所有 PDFium API 繫結,而不只是可選的 V8 輔助函式,因此 DLL 釋放後不會留下過時的函式指標
Version 1.56.0
新增 (Added)
TPdfView上的逐詞卡拉 OK 朗讀游標:TrackReadingWordAt會將文字轉語音引擎的目前詞字元偏移,例如 SAPIStatus.InputWordPosition,對應到頁面詞框,反白包含該偏移的詞,在朗讀區塊上方繪製獨立疊加層,將其捲動到檢視中,並傳回詞索引,讓正在朗讀的詞隨語音前進而亮起SetReadingWord和ClearReadingWord可直接從TPdfWordBox設定或清除反白詞;重複設定同一個詞不會執行操作,因此逐詞追蹤不會讓檢視閃爍ReadingWordColor和ReadingWordFollow控制詞游標顏色,以及檢視是否自動捲動到正在朗讀的詞
Version 1.55.2
修復 (Fixed)
- ViewerInteractionLab 現在為工具列各列提供更多垂直空間,因此 Open PDF、Create Sample、導覽、搜尋和選取控制項在縮放字型下不再重疊
Version 1.55.1
修復 (Fixed)
- ViewerInteractionLab 現在把 Prev、Next 和 Rotate 放在第二列工具列,避免啟動時與 Open PDF 和 Create Sample 重疊
Version 1.55.0
新增 (Added)
- 為「朗讀並選取」流程提供詞到選取範圍的橋接:
TPdfView.SelectWordBox和SelectWordSpan可依字元範圍選取PageWordBoxes中的單一詞框或同頁詞框範圍,因此目前朗讀的詞或列也能被選取和複製 WordBoxIndexAtCharIndex可把字元索引對應回包含它的詞框,驅動 TTS 朗讀游標前進時的逐詞高亮
Version 1.54.0
新增 (Added)
- 供語音表單填寫使用的存取器:
FocusedFormFieldValue、FocusedFormFieldName與FocusedFormFieldDetails會在TPdf與TPdfView上直接從邏輯游標讀取目前欄位的值、可讀名稱(優先採用/TUtooltip,否則退回/T)以及完整TPdfFormFieldInfo(型別、旗標、選項),讓語音 UI 在逐步巡覽表單時能播報所需的全部資訊
修復 (Fixed)
FocusedFormFieldValue依FocusedFormFieldIndex讀取,而不是依賴 pdfium 互動焦點,因此即使畫面上沒有文字游標,既有的FocusedFormFieldText仍反映 pdfium 焦點,而邏輯欄位值也會正確回報
Version 1.53.0
新增 (Added)
- 逐詞高亮支援:
TPdf.PageWordBoxes與TPdfView.PageWordBoxes會把頁面拆成TPdfWordBox記錄,每筆都帶有詞文字、字元範圍與頁面座標矩形,因此可及性閱讀器可把矩形傳給SetReadingHighlight,逐詞高亮目前朗讀內容 BuildWordBoxes將頁面文字拆成 TPdfWordBox 記錄,包含詞文字和 FTextPage 字元範圍
Version 1.52.0
新增 (Added)
- 為低視力轉譯提供的輔助函式
InvertPdfBitmap、GrayscalePdfBitmap與DuotonePdfBitmap會對已轉譯的 32 位元點陣圖就地套用色彩轉換,因此可及性閱讀器可用反相 / 深色模式、灰階或自訂雙色配置(例如深色背景搭配淺色文字)呈現頁面 - 輔助函式會強制 pf32bit 並直接更新 ScanLine 像素,因此可在 RenderPage 或 ToBitmap 之後使用,不需要額外暫存緩衝
Version 1.51.0
新增 (Added)
- 供輔助聽讀使用的句子級閱讀單元:
TPdf.ReadingUnits、TPdf.DocumentReadingUnits與TPdfView.ReadingUnits會把可讀內容串流線性化為有序、以句子為單位的TPdfReadingUnit記錄;每筆都帶有要朗讀的文字、語意種類、頁碼、反白矩形與語言標籤,讓螢幕閱讀器 app 能逐頁或逐文件逐單元朗讀 NextReadingUnitOfKind尋找下一個或上一個 Kind 符合指定 TPdfContentFragmentKind 的 TPdfReadingUnitBuildReadingUnits可直接把任何TPdfContentFragments轉為閱讀單元:標題與圖形 / Alt 描述會保持完整,段落則依句界切分,十進位小數點會被保留,而閱讀游標則只是由呼叫端持有的普通索引
Version 1.50.0
新增 (Added)
ValidatePdfA現在也能檢查將 catalog、OutputIntent 或其他字典存放在壓縮物件串流(/Type /ObjStm)內的 PDF 1.5+ 文件。這些物件串流會先解壓縮,其所承載的物件也會被解析,因此這類文件能依其實際內容進行驗證,而不會被誤報為缺少 PDF/A 標記
Version 1.49.5
修復 (Fixed)
ValidatePdfA不再把缺少pdfaExtension:schemas說明回報為問題。PDF/A 識別碼 schema(pdfaid)是眾所周知的,因此 veraPDF 與 PDF/A-2/-3 都不要求為其提供延伸 schema 說明,而標示其缺漏會把每一份合規的第三方 PDF/A 誤判為有問題。本程式庫自身產生的文件仍會包含該說明
Version 1.49.4
修復 (Fixed)
ValidatePdfA現在能在 PDF/A 識別碼以 XML 屬性形式(pdfaid:part="2")而非子元素形式撰寫時偵測出合規等級,因此屬性形式的文件不再被回報為等級未知。這同時修正了一個連鎖問題:未偵測到等級會使各 part 專屬的檢查退回採用嚴格的 PDF/A-1 規則,進而誤報 PDF/A-2 與 PDF/A-3 所允許的內嵌檔案與透明度
Version 1.49.3
修復 (Fixed)
ValidatePdfA現在會檢查交互參照資料採用 cross-reference stream 的 PDF 1.5+ 文件(即沒有trailer關鍵字的檔案)。合規等級、trailer 的/ID以及其他標記會從 cross-reference stream 字典讀取,因此這類文件能依其實際內容進行驗證,而不會被整份回報為不合規
Version 1.49.2
修復 (Fixed)
ValidatePdfA不再於已內嵌所有字型的文件上誤報未內嵌字型問題。先前的啟發式做法會把/FontDescriptor標記的數量與內嵌字型程式進行比對,但每個內嵌字型會貢獻兩個/FontDescriptor標記(字型字典參照加上 descriptor 物件),因此每一份內嵌字型的檔案都被誤判。此檢查現在只會回報參照了字型卻完全未內嵌任何字型程式的文件,與對應的ValidatePdfUa修正保持一致
Version 1.49.1
修復 (Fixed)
- PDF/A 輸出現在能通過 veraPDF 的合規 PDF/A-1b 與 PDF/A-1a 驗證:內嵌的 sRGB OutputIntent ICC 設定檔串流(由
/DestOutputProfile參照)現在會依 ISO 19005-1 6.2.3.2 的要求宣告必要的/N元件數量(內建 RGB 設定檔為 3)。先前由SaveAsPdfA產生的文件無法通過嚴格的 PDF/A-1 驗證,原因是目的設定檔串流略去了/N;此值是從 ICC 設定檔標頭推導而來,因此呼叫端提供的 CMYK 或 Gray 設定檔也會取得正確的數量
Version 1.49.0
修復 (Fixed)
ValidatePdfUa不再於合規的標記 PDF 上誤報缺少 XMP 識別資訊——PDF/UA 識別碼(pdfuaid:part)、dc:title、XMP 日期以及 trailer 的/ID現在會從原始文件位元組讀取,而非從重新儲存的副本讀取;該副本會略去/MetadataXMP 串流,且對於 cross-reference-stream 檔案還會略去 trailer 的/ID- 修正
ValidatePdfUa的字型內嵌檢查,使內嵌了所有字型的文件不再被誤報為含有未內嵌字型;現在只會標示參照了字型卻完全未內嵌任何字型程式的文件 ValidatePdfUa現在接受Formula結構元素,其替代文字透過ActualText提供,而不是使用Alt項目(ISO 14289-1 §7.7),與既有的Figure規則一致
Version 1.48.0
新增 (Added)
TPdfView上的程式化文字選取:SelectTextRange(依頁碼與字符範圍)與SetSelection(依各頁明確指定的範圍)可從程式碼選取文字——例如用來讀取並反白一段文句;兩者在選取範圍變更時都會重繪並引發OnSelectionChange。SelectionRanges會以各頁字符範圍的形式讀取目前的選取範圍,而SelectionRectangles則以頁面座標回傳其矩形,供自訂反白或捲動定位使用
Version 1.47.0
新增 (Added)
- 於
TPdf與TPdfView上新增供語音驅動填表使用的表單欄位巡覽:FormFieldTabOrder、FocusedFormFieldIndex、FocusFormField、FocusNextFormField、FocusPreviousFormField、ClearFormFieldFocus與FocusedFormFieldText。這些會依標籤順序在頁面的 widget 欄位上移動一個邏輯欄位游標(到頭尾時會循環回繞),讓輔助朗讀器得以逐一巡覽表單、透過FormFieldInfo[Index].AlternateName(即 /TU 工具提示)播報每個欄位,並經由FormField[Index]填入內容 - 新增
TPdfView.OnFormFieldFocusChange事件,會在欄位游標移動時觸發(攜帶新的欄位索引,清除時為 -1)
Version 1.46.0
新增 (Added)
- 輔助聆聽朗讀的內容串流:
TPdf.ReadableContent、TPdf.ReadablePageContent、TPdf.DocumentReadableContent與TPdfView.ReadableContent會回傳一份依序排列的語意TPdfContentFragment項目清單,每一項都帶有要朗讀的文字(真實字符,或圖形的ActualText/Alt)、片段種類(含層級的標題、段落、圖形、清單項目、表格儲存格、連結、純文字)、語言、以 1 起算的頁碼,以及區塊與逐行的醒目提示矩形。已加標籤的 PDF 會依照結構樹的邏輯閱讀順序線性化;未加標籤的頁面則退回彩現順序,因此任何文件都能朗讀出來 TPdfView上的同步閱讀醒目提示:SetReadingHighlight、ClearReadingHighlight以及已發佈的ReadingHighlightColor會在搜尋與選取覆疊層之上,醒目提示目前正在朗讀的區塊- 新增公開型別
TPdfContentFragment、TPdfContentFragments、TPdfReadableContent、TPdfContentFragmentKind與TPdfReadingOrderSource,以及新的輔助方法ClassifyStructType
Version 1.45.0
新增 (Added)
ValidatePdfUa現在也會遍歷即時標記結構樹,並回報三項高可信度的內容違規(純位元組掃描無法偵測):缺少 Alt 項目且無 ActualText 的Figure元素(ISO 14289-1, 7.3)、缺少 Alt 屬性的Formula元素(7.7),以及缺少唯一 ID 的Note元素(7.9)。三個新的TPdfUaValidationIssue值對應上述問題:pvuaiFigureMissingAlt、pvuaiFormulaMissingAlt與pvuaiNoteMissingId。未加標記的文件將跳過結構樹遍歷- 新增公開輔助方法
ValidatePdfUaStructureElements,可將上述結構樹規則套用至扁平元素清單(如TPdf.StructureElements所回傳),讓這些檢查無需載入完整文件即可執行或進行單元測試
Version 1.44.5
修復 (Fixed)
ValidatePdfA的字型嵌入檢查(pvaiFontNotEmbedded,ISO 19005-1, 6.3.4)現在也能偵測未嵌入且不含/FontDescriptor的簡單字型,最重要的是 14 種標準 Type 1 字型(Helvetica、Times、Courier 等),PDF/A 規範要求這些字型必須嵌入,不得有任何豁免。過去此類字型不會被察覺;此檢查現在也會將簡單字型字典(/Type1、/TrueType、/MMType1)納入已嵌入字型程式的計數,與 1.44.3 的 PDF/UA 修復保持一致
Version 1.44.4
修復 (Fixed)
ValidatePdfVT現在會拒絕格式錯誤的 ISO 16612-2 §6.5 DPart 樹:例如/DParts是扁平參照陣列而不是規範要求的陣列的陣列,或 leaf DPart 在只包含一頁的範圍內把/Start頁面重複寫成/EndValidatePdfVT現在會在將/NodeNameList名稱的 PDF name#xxescape 展開後,將其校驗為 XML NMTOKEN 值,因此無效的層級名稱會透過pvviMissingDPartRoot回報,而不會被當作可用 DPart 結構接受
Version 1.44.3
修正 (Fixed)
ValidatePdfUa的字型嵌入檢查(pvuaiFontNotEmbedded,ISO 14289-1, 7.21.4)現在也能偵測未嵌入且不含/FontDescriptor的簡單字型,最重要的是 14 種標準 Type 1 字型(Helvetica、Times、Courier 等),PDF/UA 對這些字型並未授予嵌入豁免。過去此類字型不會被察覺,使用這些字型的文件可能被誤報為合規;此檢查現在也會將簡單字型字典(/Type1、/TrueType、/MMType1)納入已嵌入字型程式的計數
Version 1.44.2
修復 (Fixed)
ValidatePdfVT現在會在存在但無法識別的pdfvtid:GTS_PDFVTVersion標記時保留pvcUnknown,而不是降級為pvcNone。這讓PDF/VT-2s這類無效的檔案級字串能與完全沒有 PDF/VT 標記的文件區分;PDF/VT-2s 依 ISO 16612-2 Annex A 由 MIME stream header 標識,而不是由 PDF 檔案的 XMP 標記標識/DPartRoot檢查現在會更嚴格地驗證 ISO 16612-2 §6.5 tree semantics:/DPartRootNode與/NodeNameList必須描述實際的 DPart 深度,DPart parent links 必須形成一棵樹,/Start與/DParts互斥,且每一頁的/DPart必須指向覆蓋該頁的 leaf DPart,並與 page tree 的 depth-first 順序一致
Version 1.44.1
修復 (Fixed)
SaveAsPdfVT現在會在來源 PDF 缺少可用/DPartRoot時寫入最小的 ISO 16612-2 §6.5 Document Part Hierarchy。產生的樹會透過/DPart連結每一頁,保留既有的有效階層,並將更豐富的收件者/DPM 中繼資料留給呼叫端工作流程ValidatePdfVT現在會驗證可用的 DPart 結構,從 RDF 屬性與元素文字兩種形式讀取 PDF/VT XMP 值,並強制精確的 PDF/VT 與 PDF/X 基礎配對:PDF/VT-1 必須是 PDF/X-4,而 PDF/VT-2 必須是 PDF/X-4p、PDF/X-5g 或 PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2不再寫出無效的單檔 PDF/VT-2 標記。單檔寫入器會將輸出正規化為 PDF/VT-1,因為 PDF/VT-2 需要檔案集語義
Version 1.44.0
新增 (Added)
ValidatePdfUa現在除了檔案格式標記外,亦會回報可透過位元組檢查的內容層級 PDF/UA 違規:字型程式未嵌入(ISO 14289-1, 7.21.4)、字型在沒有豁免簡單字型編碼的情況下缺少/ToUnicodeCMap(7.21.7),以及文件包含標註但未在任何頁面宣告/Tabs /S索引標籤順序(7.18.3)- 三個新的
TPdfUaValidationIssue值——pvuaiFontNotEmbedded、pvuaiFontMissingToUnicode與pvuaiMissingTabsOrder——可由ValidatePdfUa及預檢報告呈現。這些是粗略的啟發式檢查,僅作為預檢提示,而非完整的 ISO 14289-1 驗證
Version 1.43.1
修正 (Fixed)
SaveAsPdfUa現在即使來源文件已提供相關字典但其中有值缺失或相互矛盾的情況,仍會強制寫入 ISO 14289-1, 7.1 所要求的/ViewerPreferences/DisplayDocTitle true、/MarkInfo/Marked true及/Suspects false目錄項目。先前這些標記僅在字典完全不存在時才會注入,因此若來源文件帶有/ViewerPreferences但缺少DisplayDocTitle,或帶有/MarkInfo且其中為/Marked false,轉換後的檔案將不符合規範- 既有
/ViewerPreferences或/MarkInfo字典中原有的鍵值會被保留;若字典以間接參照方式提供,則會在套用必要鍵值之前先行解析
Version 1.43.0
新增 (Added)
ValidatePdfA現在會針對嵌入檔案與關聯檔案以及 Level U 文字套用 PDF/A-2 / PDF/A-3 規則。PDF/A-1 仍然拒絕嵌入檔案;對於 PDF/A-3,缺少所需/AFRelationship鍵(ISO 19005-3 附錄 E)的嵌入檔案會被標記出來,而 PDF/A-2 的附件則被允許(不會遞迴校驗其自身的合規性)。新增的pvaiUnicodeMappingMissing問題會報告其字型不帶任何/ToUnicode對應的 PDF/A-2u 或 PDF/A-3u 文件(ISO 19005-2 6.2.11.7)。透明度與可選內容仍然僅針對 PDF/A-1 標記
Version 1.42.0
新增 (Added)
- 現在
SaveAsPdfA、ValidatePdfA以及PdfAConformance屬性已在全部三個合規級別(a、b 和 u)上支援 PDF/A-2(ISO 19005-2)和 PDF/A-3(ISO 19005-3)。TPdfAConformance列舉新增pac2a、pac2u、pac3a和pac3u(PDF/A-1 沒有 Level u)。儲存時會寫入相匹配的pdfaid:part(2 或 3)和pdfaid:conformance(A、B 或 U),並保留 ISO 19005-2 出於相容性而沿用的GTS_PDFA1OutputIntent 子類型。當文件缺少某級別所要求的標記結構時,Level A 請求仍會降級為相匹配的 Level B(適用於任何 part)
Version 1.41.0
新增 (Added)
ValidatePdfA現在會偵測標記注入無法修復的內容級 PDF/A 違規,作為對它原本就已報告的結構性標記的補充:JavaScript 及其他被禁止的動作、附加動作(/AA)、嵌入檔案、LZWDecode、透明度(軟遮罩與透明群組)、可選內容(/OCProperties)、被禁止的註解子類型(FileAttachment、Sound、Movie、3D、Screen)、AcroForm 的/NeedAppearances true與/XFA、其字型描述符缺少嵌入字型程式的字型,以及在缺少 ISO 19005-1 6.8 所要求的標記結構的情況下作出的 Level A 聲明。透明度、可選內容與嵌入檔案檢查僅適用於 PDF/A-1(這些特性在 PDF/A-2 和 PDF/A-3 中是允許的)。新增的TPdfAValidationIssue值會呈現每一種情況;現有的值保持不變
Version 1.40.3
修復 (Fixed)
SaveAsPdfA現在會在產生 PDF/A 輸出之前剝離來源文件的任何加密。ISO 19005-1 6.1.3 禁止 trailer 中出現/Encrypt鍵,但此前的儲存路徑會保留來源文件的安全處理器,因此將加密文件另存為 PDF/A 會產生一個加密且不合規的檔案。PDF/A 儲存現在會先解密文件。未加密的文件不受影響
Version 1.40.2
修復 (Fixed)
- 阻止
SaveAsPdfA發出虛假的 PDF/A Level A 合規聲明。當請求 Level A(pac1a)但來源文件缺少 ISO 19005-1 6.8 所要求的標記結構標識,也就是目錄中的/StructTreeRoot以及/MarkInfo字典中的/Marked true時,儲存後的檔案現在會被標識為與之相符的 Level B(pdfaid:conformance=B),而不再宣稱 Level A。純視覺的 PDF/A-1b 輸出不受影響
Version 1.40.1
修復 (Fixed)
- 收緊 PDF 版本合規驗證,使
SetOCGState(set-optional-content-group-state)動作被辨識為 PDF 1.5 特性。當目標為 PDF 1.2、1.3 或 1.4 且包含SetOCGState動作時,儲存現在會被拒絕,以符合 ISO 32000-1(Table 198);此前這類動作可能混入較低版本輸出。與之相區別的、已廢棄的 PDF 1.2SetState動作仍從 PDF 1.2 起繼續被接受
Version 1.40.0
新增 (Added)
- 綁定 PDFium
FPDFPageObj_AddExistingMark()API:將一個既有的內容標記附加到頁面物件上。當連續的頁面物件共用同一個標記時,儲存後的 PDF 會將它們合併為一個橫跨全部物件的標記;非連續物件則各自取得獨立副本 - 綁定 PDFium
FPDFTextObj_SetFontSize()API:用於變更既有文字物件的字級(磅值),與既有的FPDFTextObj_GetFontSize()綁定相對應
變更 (Changed)
- 將隨附的 PDFium 執行時 DLL(Win32 與 Win64,標準版與 V8 版)更新至 2026-06-02 PDFium 快照
Version 1.39.53
變更 (Changed)
- 將 Delphi
PDFViewer、SplitView和MultiPageViewer範例改為預設以Zoom to Page模式開啟文件 - 初始算繪現在會先把整頁適配到檢視器區域,使用者再視需要選擇手動縮放等級
- 更新
TPdf.AboutInfo、Lazarus 套件中繼資料和安裝程式版本中繼資料到 1.39.53
Version 1.39.52
變更 (Changed)
- 增強
Demo\Lazarus\CreatePDF,入門範例現在會產生包含向量路徑、表格內容、內嵌影像、文字註解、旋轉文字和更清楚文件建構導覽的兩頁 PDF - 為所有 Delphi、C++Builder 和 Lazarus demo folder 新增美觀的
README.html頁面,並將剩餘純文字 demo README 替換為瀏覽器可讀指南 - 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.52
Version 1.39.51
- 增強
Demo\Delphi\PreflightReportCli批次摘要,現在會依所選標準彙總 Pass、Action required 和 Review 三類標準狀態總計 - TXT / HTML / JSON / CSV summary 的 per-file rows 現在包含 action-required count 與 review count,CI artifacts 不必開啟每個 generated report 也能快速檢查狀態分佈
- 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.51
Version 1.39.50
- 增強
Demo\Delphi\PreflightReportClidirectory batch mode,batchdir=folder現在會先收集 discovered PDF paths、排序,然後按穩定順序生成 reports - Recursive directory scans 現在會生成可復現的 report order 和 summary rows,而顯式
batch=list.txtprocessing 繼續保留 list file order - 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.50
Version 1.39.49
- 增強
Demo\Delphi\PreflightReportCli批次摘要,現在會記錄執行設定:來源類型、來源路徑、遞迴狀態、輸出目錄、報告格式、所選標準與failon=模式 - JSON summary 新增
runobject,TXT 與 HTML summary 顯示 run settings section,CSV rows 重複同一組 audit columns,方便 spreadsheet 和 CI pipelines 使用 - 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.49
Version 1.39.48
- 增強
Demo\Delphi\PreflightReportClibatch output naming,當 duplicate input file names 共用同一個outdir=時,生成的 reports 不再互相覆蓋 - Batch runs 會在同一次執行中已分配的 report path 衝突時追加
-2、-3及後續字尾,並在 summaries 中記錄最終 collision-safe report path - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.48
Version 1.39.47
- 增強
Demo\Delphi\PreflightReportClibatch summaries,使 TXT 與 JSON 輸出現在包含 total files、processed files、failed files、issues 與failon=matches 的 aggregate totals - CSV summaries 繼續保持純 row table,相容現有 consumers;HTML summaries 繼續在 dashboard header 中顯示同一組 aggregate metrics
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.47
Version 1.39.46
- 增強
Demo\Delphi\PreflightReportCli,加入summary=batch.html/.htm,讓 batch runs 可在 TXT / CSV / JSON manifests 之外輸出 browser-readable dashboard - HTML summaries 會顯示 total、processed、failed、issue 與
failon=match metrics,並逐項列出 input、report links、status、counts 與 error text - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.46
Version 1.39.45
- 增強
Demo\Delphi\PreflightReportCli,加入batchdir=folder與recursive,讓指令碼可直接掃描 PDF 資料夾,而不必先寫清單檔 - 目錄批次模式複用以清單為基礎的批次模式之
outdir=、summary=、standards=與failon=行為;非遞迴模式只掃描選定資料夾,recursive會包含子資料夾 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.45
Version 1.39.44
- 增強
Demo\Delphi\PreflightReportCli,加入summary=batch.csv|json|txt,讓 batch runs 可在 per-file reports 旁輸出 machine-readable manifest - Batch summaries 包含每個 input path、report path、status、standard count、passed count、issue count、
failon=match state 與 error text,便於 CI jobs 和外部指令碼使用 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.44
Version 1.39.43
- 增強
Demo\Delphi\PreflightReportCli,加入batch=list.txt與outdir=reports,方便指令碼在一次執行中為一組 PDF 檔案生成 preflight reports - Batch mode 會跳過空行和
#註釋行,按輸入 PDF 派生每個.preflight.<ext>report name,在單個檔案失敗後繼續處理,並在返回前彙總 processed 與 failed files - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.43
Version 1.39.42
- 增強
Demo\Delphi\PreflightReportCli,新增failon=none|issues|action|review,使 CI jobs 可把生成的 preflight results 轉換為確定性的 exit codes - CLI 會在 report file 和 optional attached-report PDF 生成完成後,根據選中的
failon=rule 命中情況返回 exit code 2;runtime errors 仍返回 exit code 1 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.42
Version 1.39.41
- 增強
Demo\Delphi\PreflightReportCli,新增attach=output.pdf,可把生成的 preflight report 作為 document-level attachment 嵌入新的 PDF copy - CLI 會保留落盤的 TXT / HTML / Markdown / JSON / CSV report file,並拒絕把附件寫回原始 input PDF path,以降低誤覆蓋風險
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.41
Version 1.39.40
- 新增
Demo\Delphi\PreflightReportCli,作為 Delphi 主控台配套,可在不開啟檢視器的情況下以可指令化工作流程產生FPdfPreflightReport - CLI 支援無引數範例建立,以及輸入 / 輸出引數、選用密碼、
text/html/md/json/csv輸出格式,並可透過standards=篩選選擇 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R 與 PDF/VT - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.40
Version 1.39.39
- 增強
FPdfPreflightReport,新增TPdfPreflightReport.ToMarkdown與SaveMarkdownToFile,使 preflight reports 可匯出為適合 issue tracker 的 Markdown - 更新 Delphi、C++Builder 與 Lazarus
PreflightReport範例,在現有 TXT / HTML / JSON / CSV workflow 之外增加 Markdown preview switching 與 Save MD actions - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.39
Version 1.39.38
- 增強 Delphi、C++Builder 與 Lazarus
SecurityAudit範例,在現有 TXT save / copy workflow 之外增加 JSON audit report export - JSON report 包含
format、generatedAt、summary、findingCount,以及帶 severity、area、detail 欄位的結構化findingsrows - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,以報告 1.39.38
Version 1.39.37
- 增強
FPdfPreflightReport,新增TPdfPreflightReport.ToCsv與SaveCsvToFile,使 preflight reports 可以匯出為 spreadsheet-friendly CSV - 更新 Delphi、C++Builder 與 Lazarus
PreflightReportsamples,在現有 TXT / HTML / JSON workflow 之外增加 CSV preview switching 與 Save CSV actions - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.37
Version 1.39.36
- 增強
FPdfPreflightReport,新增TPdfPreflightReport.IssueCategoryCounts以及可複用的TPdfPreflightIssueCategoryCount和TPdfPreflightIssueCategoryCounts型別,用於按 category 聚合 marker-level issues - 更新
TPdfPreflightReport.ToText、ToHtml與ToJson,使生成的 PreflightReport 輸出在 per-standard rows 與 detailed issue recommendations 之外包含 issue-category count summaries - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.36
Version 1.39.35
- 將已擴充套件的
PrintDialogsample 在 Delphi、C++Builder 與 Lazarus 三端重新命名為PrintPreferences,讓 demo name 與 PDF author print preferences、N-up printing、odd / even filtering、grayscale、cell border 和 duplex mapping workflow 對齊 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.35
Version 1.39.34
- 增強
Demo\Delphi\PrintPDF,支援拖放載入 PDF,並將已有Demo\CBuilder\PrintPDFworkflow 與 Delphi、Lazarus PrintPDF 範例一起寫入文件 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.34
Version 1.39.33
- 新增
Demo\CBuilder\SplitView,補齊 Delphi、C++Builder 與 Lazarus 三端 SplitView sample matrix - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.33
Version 1.39.32
- 新增
Demo\Lazarus\SplitView,讓並排 PDF 比對覆蓋 Lazarus,包含雙欄或三欄版面、作用中檢視導覽、同步命令、縮放預設與旋轉 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.32
Version 1.39.31
- 新增
Demo\Lazarus\PrintPDF,讓標準 PDF print workflow 覆蓋 Lazarus,包含 preview navigation、page ranges、copies、collate mode、progress 與 cancellation - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.31
Version 1.39.30
- 新增
Demo\Lazarus\FontProperties,補齊 Delphi、C++Builder 與 Lazarus 三端 FontProperties sample matrix - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.30
Version 1.39.29
- 新增
Demo\CBuilder\FontProperties,讓 indexed character 與 font metadata 檢查在 Delphi sample 之外也覆蓋 C++Builder - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.29
Version 1.39.28
- 新增
Demo\Delphi\ExtractTextPages,補齊 Delphi、C++Builder 與 Lazarus 三端 per-page text extraction sample matrix - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.28
Version 1.39.27
- 新增
Demo\Lazarus\PrintDialog,補齊 Delphi、C++Builder 與 Lazarus 三端 PrintDialog sample matrix - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.27
Version 1.39.26
- 新增
Demo\CBuilder\PrintDialog,讓 N-up printing 與 PDF author print preferences workflow 在 Delphi sample 之外也覆蓋 C++Builder - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.26
Version 1.39.25
- 新增
Demo\CBuilder\ViewerInteractionLab,補齊 Delphi、C++Builder 與 Lazarus 三端 ViewerInteractionLab sample matrix - 更新 library build workflow 與 Win64 C++Builder package outputs,使
TPdfViewviewer interaction methods 可在 Win64 demos 中正確連結 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.25
Version 1.39.24
- 新增
Demo\Lazarus\ViewerInteractionLab,讓 focused viewer interaction workflow 在 Delphi sample 之外也覆蓋 Lazarus - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.24
Version 1.39.23
- 新增
Demo\Lazarus\SearchAndSelect,補齊 Delphi、C++Builder 與 Lazarus 三端 SearchAndSelect sample matrix - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.23
Version 1.39.22
- 新增
Demo\CBuilder\ContentExtractionLab與Demo\Lazarus\ContentExtractionLab,讓 multi-category content extraction workflow 覆蓋所有支援的 demo IDE - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.22
Version 1.39.21
- 增強
Demo\Delphi\PreflightReport、Demo\Lazarus\PreflightReport與Demo\CBuilder\PreflightReport,新增 preview format selector,讓使用者在儲存報告前可檢查 text 或 JSON output - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.21
Version 1.39.20
- 為
FPdfPreflightReport增加 JSON 匯出,可通過TPdfPreflightReport.ToJson與SaveJsonToFile生成機器可讀的 summary、per-standard status / priority、next action 與 issue detail - 更新
Demo\Delphi\PreflightReport、Demo\Lazarus\PreflightReport與Demo\CBuilder\PreflightReport,在 TXT / HTML 匯出之外加入 Save JSON 操作 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.20
Version 1.39.19
- 增強
FPdfPreflightReport,在 TXT / HTML report 中加入TPdfPreflightStatus、issue category、per-standard priority 與 next-action guidance - 更新
Demo\Delphi\PreflightReport、Demo\Lazarus\PreflightReport與Demo\CBuilder\PreflightReport,summary grid 現在顯示 status、priority、issue count 與 next action - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.19
Version 1.39.18
- 新增
Demo\Lazarus\SecurityAudit,補齊 Delphi、C++Builder 與 Lazarus 的唯讀 PDF 風險面稽核工作流程範例矩陣 - Lazarus 範例列舉 permissions、attachments、JavaScript actions、URI / Launch link annotations、web links、signatures、XFA state、V8 / XFA helper availability 與 unsupported-feature callbacks,並可把 finding list 儲存或複製為 TXT report
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.18
Version 1.39.17
- 新增
Demo\CBuilder\SecurityAudit,在現有 Delphi 範例之外,把只讀 PDF risk-surface audit workflow 帶到 C++Builder - C++Builder 範例列舉 permissions、attachments、JavaScript actions、URI / Launch link annotations、web links、signatures、XFA state、V8 / XFA helper availability 與 unsupported-feature callbacks,並可把 finding list 儲存或複製為 TXT report
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.17
Version 1.39.16
- 新增
Demo\CBuilder\SearchAndSelect,在現有 Delphi 範例之外,把獨立 SearchAndSelect viewer workflow 帶到 C++Builder - C++Builder 範例可建立或開啟 PDF,按全頁列出帶 page / character-index preview 的 matches,支援 Previous / Next 與 double-click navigation,並用
HighlightSearchText高亮當前頁 matches - 範例也暴露
AllowUserTextSelection、SelectedText、SelectAll、CopySelectionToClipboard、ClearSelection、OnSelectionChange與 spreadDisplayMode選項;版本後設資料同步為 1.39.16
Version 1.39.15
- 新增
Demo\CBuilder\WatermarkStamp,補齊 reusable Form XObject watermark 與 stamp workflows 的 Delphi、Lazarus、C++Builder 範例矩陣 - C++Builder 範例會建立 target 與 stamp PDF,通過
CreateXObjectFromPage複用 stamp page,應用TPdfMatrixtransforms,並儲存 centered watermarks、corner stamps 與 page number labels - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.15
Version 1.39.14
- 新增
Demo\Lazarus\WatermarkStamp,把可複用 Form XObject watermark 與 stamp workflow 帶到 Lazarus - Lazarus 範例會建立 target 與 stamp PDF,通過
CreateXObjectFromPage複用 stamp page,應用TPdfMatrixtransforms,並儲存 centered watermarks、corner stamps 與 page number labels - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.14
Version 1.39.13
- 新增
Demo\CBuilder\PreflightReport,補齊可複用FPdfPreflightReportworkflow 的 Delphi、Lazarus、C++Builder 範例矩陣 - C++Builder 範例使用
FPdfPreflightReport.hpp生成 standard summaries、TXT report previews、TXT / HTML report files,並提供 Open Last Report 行為 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.13
Version 1.39.12
- 新增
Demo\Lazarus\PreflightReport,把 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R、PDF/VT 預檢報告工作流程帶到 Lazarus - Lazarus 範例可開啟或建立 PDF、選擇目標標準、預覽摘要列與 TXT 報告輸出、儲存 TXT / HTML 報告,並開啟最近一次儲存的報告
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.12
Version 1.39.11
- 增強
Demo\Delphi\SearchAndSelect,新增全頁搜尋結果列表,記錄 page number、character index 與 preview text - 新增 Previous / Next match navigation 與 double-click result jumping,同時保留當前頁
HighlightSearchText行為 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.11
Version 1.39.10
- 增強
Demo\Delphi\SecurityAudit,新增 Save Report 與 Copy Report 操作,可將當前 summary 和 finding rows 匯出為 TXT audit report - 當 audit panel 被 reset 時,範例現在會清除 report export state,確保複製或儲存的 reports 與可見 findings 一致
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.10
Version 1.39.9
- 增強
Demo\Delphi\ContentExtractionLab,新增來源 PDF 儲存、報告複製到剪貼簿以及全部 / 全不類別選取操作 - 當類別選取變化時,範例現在會讓當前報告失效,確保 TXT / JSON 匯出與可見擷取範圍一致
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.9
Version 1.39.8
- 新增
Demo\Delphi\ContentExtractionLab,提供統一的 content extraction workflow sample,覆蓋 document metadata、page text、page objects、images、attachments、links、annotations、bookmarks 和 font / character metrics - 該範例可開啟現有 PDF,或建立包含 text、image、attachment、annotation 內容的 synthetic PDF,然後生成 summary rows 以及詳細 TXT / JSON reports
- 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata,使其報告 1.39.8
Version 1.39.7
- 新增
Lib\FPdfPreflightReport.pas,提供可複用報告 helper,將ValidatePdfA、ValidatePdfUa、ValidatePdfE、ValidatePdfX、ValidatePdfR、ValidatePdfVT統一包裝為TPdfPreflightReport物件 - 新增
Demo\Delphi\PreflightReport工作流程範例,可開啟或建立 PDF、選擇目標標準、預覽摘要列與問題建議,並儲存 TXT 或 HTML 報告 - 生成的報告會明確說明內建校驗的 marker-level validation 邊界,方便應用在需要時配合專用 content-level preflight tools
- 更新
TPdf.AboutInfo、Lazarus package metadata、package project lists 與 installer version metadata,使其報告 1.39.7
Version 1.39.6
- 新增
Demo\Delphi\SearchAndSelect,這是一個聚焦搜尋反白、文字選取、已選文字預覽、複製、清除與跨頁顯示模式的檢視器工作流程範例 - 該範例展示
HighlightSearchText、比對大小寫 / 全字搜尋選項、AllowUserTextSelection、SelectedText、SelectAll、CopySelectionToClipboard和ClearSelection,不新增庫 API - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.6
Version 1.39.5
- 擴充套件
Demo\Delphi\ViewerInteractionLab,形成 SearchAndSelect 風格的 viewer UX 範例,包含HighlightSearchText、match-case / whole-word 選項、選中文字預覽,以及既有 selection / clipboard controls - 擴充套件
Demo\Delphi\PrintDialog,用於檢查 PDF author print preferences:PrintCopies、PrintPageRanges、PrintScaling、PrintPaperHandling,並顯示SetPdfPrintPaperHandlingDevModeduplex mapping - 新增
Demo\Delphi\SecurityAudit,這是一個只讀 risk-surface 範例,會列出 permissions、attachments、document JavaScript、URI / Launch links、web links、signatures、XFA state,以及 V8 / XFA helper availability - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.5
Version 1.39.4
- 新增
Demo\CBuilder\ImageToPDF與Demo\Lazarus\ImageToPDF,補齊 Delphi、C++Builder、Lazarus 三端 ImageToPDF 範例矩陣 - 新範例展示多圖片選擇、選中圖片預覽、每張圖片生成一個 PDF 頁面、A4 portrait / landscape 頁面尺寸選擇、居中縮放放置、逐圖片進度,以及儲存後開啟生成的 PDF
- 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.4
Version 1.39.3
- 新增
Demo\CBuilder\BatchExport,讓 C++Builder 與既有 Delphi、Lazarus 範例一樣覆蓋多檔案 PDF 轉 JPG 匯出工作流 - 該範例展示
LoadCustomDocument、IPdfCancellationTokenSource、流式TFileStream輸入、每檔案與每頁進度、取消處理、DPI / quality / password 輸入,以及完成後開啟輸出目錄 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.3
Version 1.39.2
- 新增
Demo\Delphi\WatermarkStamp,這是一個可執行的 Form XObject 工作流範例,會建立目標 PDF 與可複用 stamp PDF,並在每一頁應用居中水印、右上角蓋章和頁碼標籤 - 該範例演示
CreateXObjectFromPage、InsertFormObjectFromXObject、TPdfMatrix和FPDFPageObj_SetMatrix,不新增庫 API - 更新
Docs\en-us\Examples.html,改為在將TPdfMatrix.Handle傳給FPDFPageObj_SetMatrix時使用目前的寫法 - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.2
Version 1.39.1
- 新增
Demo\Delphi\ViewerInteractionLab,集中演示TPdfView的 display modes、fit modes、page colors、rotation、user text selection、clipboard actions 與DeviceToPage座標反饋 - 新增
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLab,讓 Lazarus 使用者也能執行 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R、PDF/VT 校驗與 marker-output 工作流 - 在
Lib\37.0\PDFiumPas.dproj與Lib\FPC\PDFiumLaz.lpk中列出標準單元,並移除 DelphiSplitView範例中重複的Winapi.ShellAPI匯入以修復建置 - 修復
BatchExport、PDFViewer、MultiPageViewer與SplitView中的 Delphi demo 批次構建阻塞,且不改變其執行行為 - 修復
PDFViewer與MultiPageViewer的 C++Builder demo 批次構建相容性:在當前 project mode 下將nullptr改為NULL - 更新
TPdf.AboutInfo、Lazarus package metadata 與 installer version metadata,使其報告 1.39.1
Version 1.39.0
- 新增
Demo\Delphi\StandardsLab,這是一個可執行的標準工作流程範例:載入或建立 PDF,執行ValidatePdfA、ValidatePdfUa、ValidatePdfE、ValidatePdfX、ValidatePdfR、ValidatePdfVT,並在同一列表中顯示檢測到的一致性、通過狀態和問題數量 - StandardsLab 的儲存按鈕會呼叫
SaveAsPdfA、SaveAsPdfUa、SaveAsPdfE、SaveAsPdfX、SaveAsPdfR、SaveAsPdfVT,無需編寫自訂測試程式即可檢視 PDF 標準標記輸出流程 - 更新
TPdf.AboutInfo、Lazarus 包後設資料與安裝器版本後設資料到 1.39.0
Version 1.38.0
TPdfView搜尋與文字選擇覆蓋層現在使用真正的 alpha blending,而不是邏輯 mask 繪製,因此高亮下方的頁面內容會被保留- 新增
SetPdfPrintPaperHandlingDevMode,可將TPrintPaperHandling對映到 WindowsDEVMODE.dmDuplex值:DMDUP_SIMPLEX、DMDUP_HORIZONTAL、DMDUP_VERTICAL TPdfView.SmoothScroll現在會用計時器驅動的分段對行 / 頁捲軸命令做動畫;滑塊追蹤仍保持即時響應- 更新
TPdf.AboutInfo與安裝器版本後設資料到 1.38.0
Version 1.37.0
TPdf新增例項級渲染鎖,序列化RenderPage、RenderTile、RenderPageProgressive、頁面過載與文件解除安裝路徑。應用現在可以更實際地通過共享元件做 worker 渲染,但仍需自行協調文件修改與生命週期- 修復 zero-copy bitmap 包裝器:遇到 bottom-up
TBitmapDIB 時改走 PDFium 自有緩衝並在結束後 copy out,消除 VCL 渲染測試中的 stride 破壞 / access violation - 收緊
TPdfView選區行為:AllowUserTextSelection只限制使用者輸入,程式碼級選區 API 仍會繪製;SelectAll改按真實可見 spread 選擇,封面頁不再誤選第 2 頁。Delphi、Lazarus、C++Builder 測試同步擴充套件 - 更新
TPdf.AboutInfo與安裝器版本後設資料到 1.37.0
Version 1.36.0
- 啟用
TPdfView終端使用者文字選取功能:v1.17.0 預留的AllowUserTextSelection屬性現在會驅動完整的拖曳選取流程。左鍵點到文字字元時會進入選取模式(會自動做 hit-test);左鍵點到空白區域時仍和過去一樣繼續平移。表單填寫 widget 仍保有優先權,因此點擊表單欄位時仍會聚焦欄位,而不是開始選取 - 雙擊會選取整個詞,三擊會選取整行,
Ctrl+A會選取目前頁面(在 spread 顯示模式下會同時選取兩頁),而Ctrl+C會把選取內容以CF_UNICODETEXT複製到 Windows 剪貼簿 Shift+Left/Shift+Right會一次延伸一個字元的選取範圍(在 spread 模式下可延伸到相鄰頁);Shift+Home/Shift+End會使用種子字元框高度作為行群組容差,將選取延伸到視覺行邊界,因此混合字級的同一行仍能正確視為同一群- 游標停在文字上方時會切換成
crIBeam;離開文字後會恢復預設游標。當文字拖曳選取進行中時,如果拖到檢視器任一邊緣的 20 像素死區,頁面會自動捲動(50 ms tick、每 tick 16 px,並套用與平移路徑相同的邊界限制),讓選取範圍能在不先放開滑鼠的情況下延伸到目前視窗外 - 跨頁選取現在可用於 spread 顯示模式(
dmTwoPageContinuous、dmTwoPageContinuousWithCover):從左頁開始拖曳、在右頁結束時,會選取橫跨兩頁的連續範圍。SelectedText會用 CR/LF 串接各頁片段,讓往返複製出的文字讀起來就像一般多行內容 - 新增 published 屬性
SelectionColor(預設為clHighlight,也就是 Windows 系統選取色)— 它與將搜尋結果塗成黃色的HighlightColor相互獨立。搜尋反白與即時拖曳選取現在可同時顯示,且不會有顏色衝突 - 新增 published 事件
OnSelectionChange,只會在選取已具體化的範圍真的發生變化時觸發 — 若只是重複套用相同結果則不會觸發,因此宿主應用可直接拿它驅動狀態列文字或按鈕 enabled 狀態,而不必再做去抖動 TPdfView新增 public API:HasSelection、SelectionCharCount、SelectedText、ClearSelection、SelectAll、CopySelectionToClipboard。這些都是程式碼層級入口,無論AllowUserTextSelection是否開啟都可使用 — 該旗標只限制使用者輸入(滑鼠、Ctrl+C、Ctrl+A、Shift+arrows),因此 kiosk 宿主即使停用使用者自行選取,仍可建立會驅動同一組 API 的「全選 / 複製」工具列按鈕- 系統會自動掛接預設的右鍵
Copy/复制選單,前提是宿主尚未指派自己的PopupMenu— 也就是開箱即可使用標準的「選文字、按右鍵、複製」流程。標題會依SysLocale.PriLangID在英文與中文之間切換;若宿主需要完整本地化(或更豐富的選單),只要自行指派PopupMenu,就會抑制預設選單 - 當發生
SetPdf、SetPageNumber、SetActive(False)與DisplayMode轉換時,選取內容會自動清除;若先前選取非空,OnSelectionChange只會精確觸發一次。表單填寫子系統仍保有優先權 — 當表單欄位正在編輯時,所有選取快捷鍵都會延後處理,讓欄位本身接收Ctrl+C/Ctrl+A/Shift+arrows來操作自己的選取 - 將 Delphi 與 Lazarus 的迴歸測試擴充為各 202 個案例,C++Builder 套件則擴充為 159 個案例,涵蓋預設值、round-trip、public API 行為、狀態變更清除、滑鼠拖曳(點到文字 / 點到空白)、click 與 drag 的區別、IBeam 游標切換、雙擊選詞、三擊選行、鍵盤快捷鍵、預設彈出選單的掛接 / 延後 / 標題,以及 spread 跨頁選取,並包含剪貼簿 CR/LF round-trip 檢查
Version 1.35.0
- 新增 PDF/VT(ISO 16612-2:2010)標記注入支援:TPdf.SaveAsPdfVT 可將目前文件轉為符合 PDF/VT-1 或 PDF/VT-2 的檔案,供可變資料與交易文件列印使用;PDF/VT 以 PDF/X-4 為基礎,ISO 16612-2 §6.2.1 要求每份 PDF/VT-1 檔案也符合 PDF/X-4,因此注入器除了 PDF/VT 專用屬性,也會寫入完整的 PDF/X-4 標記:XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4"、Info/GTS_PDFXVersion (PDF/X-4)與/Trapped,以及 catalog/OutputIntents,參照含有內嵌 ICC profile 的 OutputIntent 字典 - PDF/VT 專用標記包含 XMP
pdfvtid:GTS_PDFVTVersion(依 §6.3 Table 2 設為 "PDF/VT-1" 或 "PDF/VT-2")與pdfvtid:GTS_PDFVTModDate(依 §6.3 NOTE 1 與xmp:ModifyDate保持同步),以及宣告 pdfxid、pdfvtid 命名空間的 pdfaExtension:schemas 描述,使用 NPES URIhttp://www.npes.org/pdfx/ns/id/與http://www.npes.org/pdfvt/ns/id/;trailer 也會包含/ID陣列 - 新增 TPdf.SaveAsPdfVTToStream,可在記憶體中輸出 PDF/VT;另提供使用預設選項的簡便呼叫
TPdf.SaveAsPdfVT(FileName),輸出 PDF/VT-1,搭配隨附的 sRGB IEC61966-2.1 OutputIntent(3144 位元組,與 SaveAsPdfA / SaveAsPdfX 使用相同的 profile)及/Trapped /False - 新增 TPdf.ValidatePdfVT,檢查已開啟 PDF 的 PDF/VT 規範標記:XMP
pdfvtid:GTS_PDFVTVersion與GTS_PDFVTModDate是否存在、pdfvtid:GTS_PDFVTModDate是否等於xmp:ModifyDate、底層pdfxid:GTS_PDFXVersion識別碼是否存在、catalog 是否具備 §6.5 要求的/DPartRoot、/OutputIntents是否包含/DestOutputProfile、trailer /ID、加密狀態,以及xmp:CreateDate/ModifyDate是否存在;回傳的 TPdfVTValidationResult 包含判定出的符合性等級與發現的問題 - 新增 TPdf.PdfVTConformance 屬性,可直接取得目前開啟文件的符合性等級(pvc1、pvc2、pvcNone 或 pvcUnknown),不必另外呼叫 ValidatePdfVT
- 新增 FPdfPdfvt 單元,匯出 TPdfVTConformance(pvcUnknown/None/1/2)、TPdfVTTrappedState(ptvUnspecified/True/False/Unknown)、TPdfVTValidationResult、TPdfVTValidationIssue 與 TPdfVTSaveOptions 型別
- Document Part Hierarchy(§6.5 的
DPartRoot/DPart樹)屬於應用程式層的結構,取決於可變資料列印流程如何對應收件者與頁面範圍;SaveAsPdfVT 不會自動建立 DPart 樹,ValidatePdfVT 會以pvviMissingDPartRoot回報缺少/DPartRoot,讓呼叫端將 PDF/VT 檔案交給獨立的 DPart 建立步驟;內容層的 PDF/X-4 要求,包括字型嵌入、透明度、ICC 色彩管理,以及禁止 OPI / JavaScript / Reference XObject 等,仍由文件作者與 PDFium 算繪流程負責 - 更新 TPdf.AboutInfo 字串,回報目前的產品版本
Version 1.34.0
- 新增 PDF/R-1(ISO 23504-1:2020)標記注入支援:TPdf.SaveAsPdfR 可將目前文件轉為符合 PDF/R-1 的檔案;這是用於掃描文件的 PDF 點陣影像傳輸子集;注入涵蓋可透過後處理附加的檔案格式要求:在 trailer 字典與 startxref 關鍵字之間寫入專用的
%PDF-raster-1.0版本識別註解(§5),依 §6.3 允許清單精簡 catalog 字典(僅保留 Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata),依 §6.4.3 允許清單精簡 Document Information Dictionary(僅保留 Creator / Producer / CreationDate / ModDate),在 catalog /Metadata XMP 串流寫入 §6.4.4 Table 1 的四個項目(xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate),以及 trailer /ID 陣列 - 新增 TPdf.SaveAsPdfRToStream,可在記憶體中輸出 PDF/R;常見用法也可透過
TPdf.SaveAsPdfR(FileName)簡便呼叫,使用預設選項 - 新增 TPdf.ValidatePdfR,檢查已開啟 PDF 的 PDF/R-1 規範標記:檔案尾端的
%PDF-raster-x.y註解、標頭版本、是否沒有 /Type /ObjStm、catalog 與 Info 字典是否符合允許清單、XMP 中繼資料串流是否存在,以及 trailer /ID;回傳的 TPdfRValidationResult 包含判定出的符合性等級與發現的問題 - 新增 TPdf.PdfRConformance 屬性,可直接取得目前開啟文件的符合性等級(prc1、prcNone 或 prcUnknown),不必另外呼叫 ValidatePdfR
- 新增 FPdfPdfr 單元,匯出 TPdfRConformance、TPdfRValidationResult、TPdfRValidationIssue 與 TPdfRSaveOptions 型別;
TPdfRSaveOptions.Default將 StripInfoOptionalEntries 與 StripCatalogOptionalEntries 設為 True,讓注入器預設產生符合 §6.3 / §6.4.3 的 catalog 與 Info 字典;呼叫端可設為 False 以保留原始項目,此時輸出便不符合這些 PDF/R 條款,但仍會附上其他標記 - 內容層的要求仍須由原始 PDF 滿足:每頁 Contents 結構(§6.5.1)、MediaBox 的
[0 0 w h]格式(§6.5.3)、Filter 限制(§6.2.2,僅允許 FlateDecode、CCITTFaxDecode bitonal、DCTDecode 8-bit gray/RGB)、不得包含物件串流(§6.2.4),以及 §6.6 的 strip 配置;後處理無法強制滿足這些要求,PDF/R 的結構限制比其他 PDF/x 標準更嚴格,必須在產生原始位元組時就正確處理;ValidatePdfR 會回報本單元能查出的檔案格式問題,完整的內容層檢查請搭配 TWAIN Working Group PDF/R 驗證器 - 更新 TPdf.AboutInfo 字串,回報目前的產品版本
Version 1.33.0
- 新增 PDF/X(ISO 15930 系列)標記注入支援:TPdf.SaveAsPdfX 會以增量更新後處理基礎 PDF,將目前文件轉為符合 PDF/X-1a:2001、PDF/X-3:2002 或 PDF/X-4 的檔案;注入涵蓋可透過後處理附加的檔案格式要求:XMP 中繼資料串流中的
pdfxid:GTS_PDFXVersion(PDF/X-1a / PDF/X-3 另有pdfxid:GTS_PDFXConformance)與對應的 pdfaExtension:schemas 描述,重新寫入含有/GTS_PDFXVersion、/GTS_PDFXConformance及/Trapped的 Document Information Dictionary,更新 catalog/OutputIntents [N 0 R]以參照帶有/S /GTS_PDFX與內嵌 ICC profile 的 OutputIntent 字典,以及 trailer/ID陣列 - 新增 TPdf.SaveAsPdfXToStream,可在記憶體中輸出 PDF/X;另提供使用預設選項的簡便呼叫
TPdf.SaveAsPdfX(FileName),輸出 PDF/X-4,搭配內建 sRGB IEC61966-2.1 OutputIntent(3144 位元組,與 SaveAsPdfA 使用相同的 profile) - 新增 TPdf.ValidatePdfX,檢查已開啟 PDF 的 PDF/X 規範標記:XMP pdfxid 識別碼是否存在且與 Info 字典的值一致、pdfxid 擴充 schema 描述、含有 /DestOutputProfile 的 /OutputIntents 陣列、Title 是否存在、trailer /ID、加密狀態,以及 xmp:CreateDate / xmp:ModifyDate 是否存在;回傳的 TPdfXValidationResult 包含判定出的等級與發現的問題
- 新增 TPdf.PdfXConformance 屬性,可直接取得目前開啟文件的符合性等級(pxc1a、pxc3、pxc4、pxcNone 或 pxcUnknown),不必另外呼叫 ValidatePdfX;透過解析 XMP 版本字串,區分這三種符合性等級
- 新增 FPdfPdfx 單元,匯出 TPdfXConformance(pxcUnknown/None/1a/3/4)、TPdfXTrappedState(ptUnspecified/True/False/Unknown)、TPdfXValidationResult、TPdfXValidationIssue 與 TPdfXSaveOptions 型別;
TPdfXSaveOptions.Default預設輸出 PDF/X-4,搭配 sRGB OutputIntent 與/Trapped /False;呼叫端可改設Conformance、為商業印刷流程提供 CMYKIccProfileData資料,或調整OutputCondition/OutputConditionIdentifier/RegistryName,指定 ICC 色彩特性登錄項目,例如 FOGRA39、GRACoL2006_Coated1v2 - 內容層的要求,包括所有字型都須嵌入、禁止 JavaScript、禁止可見註解、禁止 OPI,以及 PDF/X-1a / PDF/X-3 的透明度規則等,仍由文件作者與 PDFium 算繪流程負責;完整的符合性驗證,請將 ValidatePdfX 搭配 callas pdfaPilot 或 Ghent PDF Workgroup Output Suite 等 preflight 工具使用
- 更新 TPdf.AboutInfo 字串,回報目前的產品版本
Version 1.32.0
- 新增 PDF/E-1(ISO 24517-1:2008)標記注入支援:TPdf.SaveAsPdfE 會以增量更新後處理基礎 PDF,將目前文件轉為符合 PDF/E-1 的檔案;注入涵蓋可透過後處理附加的檔案格式要求:XMP 中繼資料串流中的
pdfe:ISO_PDFEVersion = "PDF/E-1"與對應的 pdfaExtension:schemas 描述,重新寫入包含 §5 必要項目/ISO_PDFEVersion (PDF/E-1)的 Document Information Dictionary,透過 §13.1 沿用 ISO 19005-1 §6.7 的 Info-XMP 對應區塊(dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool),以及 §6.2 要求的 trailer/ID陣列 - 新增 TPdf.SaveAsPdfEToStream,可在記憶體中輸出 PDF/E;常見用法也可透過
TPdf.SaveAsPdfE(FileName)簡便呼叫,使用預設選項 - 新增 TPdf.ValidatePdfE,檢查已開啟 PDF 的 PDF/E-1 規範標記:XMP pdfe:ISO_PDFEVersion 是否存在且與 Info 字典的值一致、pdfe 擴充 schema 描述、Info 字典的 /ISO_PDFEVersion 項目、trailer /ID,以及 xmp:CreateDate / xmp:ModifyDate 是否存在;回傳的結構化結果包含判定出的符合性等級與發現的問題
- 新增 TPdf.PdfEConformance 屬性,可直接取得目前開啟文件的符合性等級(pec1、pecNone 或 pecUnknown),不必另外呼叫 ValidatePdfE
- 新增 FPdfPdfe 單元,匯出 TPdfEConformance、TPdfEValidationResult、TPdfEValidationIssue 與 TPdfESaveOptions 型別
- 這是 PDFium Delphi Component 的 PDF/x 後處理流程首次支援重新寫入 Info 字典;既有 Info 物件會沿用相同的物件編號,讓 xref 子區段與 trailer /Info 參照維持有效,原始 trailer 若沒有 /Info 項目,就會建立新的 Info 字典;PDFium 每次 SaveAs 輸出都會產生 Info 字典,因此通常會走重新寫入的處理路徑
- 內容層的要求,包括字型嵌入、ToUnicode CMaps,以及禁止特定 XObjects / ExtGState 索引鍵 / XFA 表單等,仍由文件作者負責;SaveAsPdfE 只會附上檔案格式標記,不會改動頁面內容或移除不允許的功能
- 更新 TPdf.AboutInfo 字串,回報目前的產品版本
Version 1.31.0
- 新增 PDF/UA-1 (ISO 14289-1:2014) 標記注入支援:TPdf.SaveAsPdfUa 通過對基礎 PDF 做增量更新後處理,將當前文件提升為符合 PDF/UA-1 的檔案。注入覆蓋後處理可達成的檔案格式級要求 —— XMP 後設資料流攜帶
pdfuaid:part = 1及匹配的 pdfaExtension:schemas 描述、必填的dc:title、catalog/MarkInfo << /Marked true /Suspects false >>與/ViewerPreferences << /DisplayDocTitle true >>(僅在源 catalog 中不存在時注入)、catalog/Lang(呼叫方提供 BCP 47 標籤時)以及 trailer/ID陣列 - 新增 TPdf.SaveAsPdfUaToStream 實現記憶體中 PDF/UA 輸出,以及預設選項的簡化過載
TPdf.SaveAsPdfUa(FileName)適用於常見場景 - 新增 TPdf.ValidatePdfUa:檢查已開啟 PDF 的 PDF/UA-1 合規標記(StructTreeRoot 是否存在、/Lang、/MarkInfo /Marked true 且 /Suspects = false、/ViewerPreferences /DisplayDocTitle true、XMP pdfuaid:part 標識、dc:title、trailer /ID、加密狀態),返回結構化結果,包含檢測到的合規級別與問題集合
- 新增 TPdf.PdfUaConformance 屬性:直接返回當前文件的合規級別(puc1、pucNone 或 pucUnknown),無需顯式呼叫 ValidatePdfUa
- 新單元 FPdfPdfua 中匯出的新型別:TPdfUaConformance、TPdfUaValidationResult、TPdfUaValidationIssue、TPdfUaSaveOptions
- TPdfUaSaveOptions 中 Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language 欄位留空時,會自動從 FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage 填充,因此常見情況只需一行就能儲存
- 內容級要求(StructTreeRoot 標籤完整性、Figure Alt 文字、ToUnicode CMap、字型嵌入等)仍由文件作者負責 —— SaveAsPdfUa 只附加檔案格式標記,不會修改頁面內容或自動生成標籤。ValidatePdfUa 在缺少 StructTreeRoot 時以
pvuaiMissingStructTreeRoot報告,方便呼叫方將未標籤化文件轉入獨立的標籤化流程 - 更新 TPdf.AboutInfo 字串,使其報告當前產品版本號
Version 1.30.0
- PDF/A-1b 輸出現在滿足 ISO 19005-1 (含 Cor.1:2007) 關於文件資訊字典與 XMP 等價性的要求:PDFium 寫入基礎 PDF 的每個 Info 字典條目都會映象到 XMP 包中,包括 Title (dc:title)、Author (dc:creator)、Subject (按 Cor.1 修正對映為 dc:description)、Keywords (pdf:Keywords)、Creator (xmp:CreatorTool)、Producer (pdf:Producer)、CreationDate (xmp:CreateDate)、ModDate (xmp:ModifyDate),並額外補齊 xmp:MetadataDate
- PDF/A 文件的 trailer 現在始終包含 /ID 陣列(ISO 19005-1 6.1.3 硬性要求)。當 TPdf.SaveAsPdfA 處理的源 PDF 已有 file identifier 時,會複用其 16 位元組的 permanent / changing ID;否則從源位元組派生確定性的 16 位元組回退 ID
- 注入的 XMP 現在嵌入 pdfaid extension schema 描述(ISO 19005-1 6.7.8,Cor.1 修訂)—— pdfaid 相對 XMP Specification 2004 屬於擴充套件 schema,所有合規檔案必須在 pdfaExtension:schemas 容器中宣告其屬性名、值型別與類別
- TPdfASaveOptions 新增 5 個可選欄位:Producer、CreationDate、ModDate(PDF 日期字串 “D:YYYYMMDDHHmmSSOHH'mm'” 形式)、DocumentId、InstanceId(trailer /ID 陣列的 16 位元組字串)。TPdf.SaveAsPdfA / SaveAsPdfAToStream 會自動從 FPDF_GetMetaText 與 FPDF_GetFileIdentifier 填充未指定欄位,已有呼叫程式碼無需修改
- TPdf.ValidatePdfA / TPdf.PdfAConformance 新增三種問題報告:pvaiMissingTrailerId(trailer 缺少 /ID)、pvaiMissingXmpDates(xmp:CreateDate 或 xmp:ModifyDate 缺失)、pvaiMissingExtensionSchema(缺少 pdfaid 擴充套件 schema 描述)
- Title、Author、Subject、Keywords、Creator、Producer 中的非 ASCII 字元,現在會以 UTF-8 編碼寫入 XMP packet(XMP Specification 要求使用 UTF-8),讓多語言中繼資料在 SaveAsPdfA 處理後仍能完整保留
- 更新 TPdf.AboutInfo 字串,使其報告當前產品版本號
Version 1.29.0
- 更新內建 PDFium DLL(Win32 與 Win64,含標準版與 V8 版)至 2026-05-22 PDFium 快照,納入 FPDFText_SetText / FPDFText_SetCharcodes 崩潰路徑修復及若干內部加固
- 在 FPdfPageOps.pas 中暴露 PDFium 新增的 FPDF_SUBSET_NEW_FONTS 儲存標誌,允許 FPDF_SaveAsCopy 呼叫者對新增文字物件引用的嵌入字型執行自動子集化。FPDF_INCREMENTAL、FPDF_NO_INCREMENTAL、FPDF_REMOVE_SECURITY 三個常量改為 PDFium 位移定義(保留舊數值 3 為 FPDF_REMOVE_SECURITY_DEPRECATED,保證二進位制相容)
- 在 FPdfView.pas 中新增 FPDF_FONT_BACKEND_TYPE 列舉(FREETYPE / FONTATIONS)以及配套的 FPDF_LIBRARY_CONFIG.m_FontLibraryType 欄位,使用 Skia 渲染器初始化 PDFium 的應用可在啟動時選擇字型後端
- 同步 TFPDFPage_InsertObject 簽名,比照 PDFium 的 C 匯出函式:函式現在返回 FPDF_BOOL(成功為 TRUE,page_object 為 NULL 或所有權轉移失敗時為 FALSE)而非 void。PDFium Delphi Component 已有呼叫點無需修改即可繼續編譯,Delphi / FPC 允許忽略函式返回值
- 修正 TPdf.AboutInfo 字串,使其報告當前產品版本(v1.28.0 僅修改文件時遺漏更新,導致一直停留在 v1.27.0)
Version 1.28.0
- 大幅充實整份 API 參考文件的頁面內容:每個屬性、方法、事件與全域函式項目,現在都有 3 段 Description、Remarks 清單、多行 Delphi Example,以及更完整的 See Also 區塊;涵蓋 200+ 個先前內容較少的頁面,包括所有 TPdf 計數器、中繼資料讀取方法、字型與字元存取方法、頁面屬性、索引記錄、文件層方法,以及 TPdfView 的完整狀態、顯示與事件介面
- 微調說明文件版面,對齊 losLab 的視覺基準:統一 h1/h2 尺寸,將 API 導覽格線樣式整合至共用 StyleSheet,並移除 Navigation.html 各頁的行內 CSS 覆寫
- 文件現在隨附輔助指令稿 Docs\Build-Expand-Entries.ps1,可從單一資料表重新產生各項目頁的補充內容,方便重複執行維護作業
Version 1.27.0
- 新增 PDF/A-1b 建立支援:TPdf.SaveAsPdfA 將當前開啟的文件儲存為 PDF/A-1b 合規檔案——通過增量更新注入 XMP 後設資料流、sRGB ICC OutputIntent 及更新後的文件目錄,無需額外 DLL API,全平臺可用
- 新增 TPdf.SaveAsPdfAToStream:記憶體流方式輸出 PDF/A 檔案
- 新增 TPdf.ValidatePdfA:檢查當前文件的 PDF/A 合規性(XMP pdfaid 標記、帶嵌入 ICC 的 OutputIntent、加密檢測),返回檢測到的合規級別及具體問題集
- 新增 TPdf.PdfAConformance 屬性:直接返回當前文件的合規級別(pac1b、pac1a、pac2b、pac3b、pacNone 或 pacUnknown)
- 新增型別(在新單元 FPdfPdfa.pas 中):TPdfAConformance、TPdfAValidationResult、TPdfAValidationIssue、TPdfASaveOptions
- SaveAsPdfA 支援通過 TPdfASaveOptions.IccProfileData 指定自定義 ICC 配置檔案;留空時自動使用內建 sRGB IEC61966-2.1(HP/Microsoft,3144 位元組)
- 將單體 HTML 參考手冊重構為結構化 Web 幫助系統:302 個獨立 API 入口頁面(TPdf 和 TPdfView 每個屬性、方法、事件、全域性函式各一頁),每頁含完整說明、參數列、Delphi 程式碼範例和 See Also 連結
- 新增 Navigation.html:分六節(TPdf 屬性/方法/事件、TPdfView 屬性/方法/事件、全域性函式)的 5 列彈性網格導航總覽頁,方便快速定位 API
- 將 TPdf.html 和 TPdfView.html 重寫為精簡元件概覽頁,保留型別參考章節(Types、Constants、Global Variables),成員列表改為連結至各入口頁面
- 基於 Search.js 新增全文搜尋,在 312 個已索引頁面上做增量客戶端匹配
- 全站所有導航欄連結統一指向 Navigation.html
Version 1.26.0
- 新增 Demo/Lazarus/BatchExport,v1.14.0 Delphi BatchExport 的 LCL 移植版。功能一致:多檔案 PDF→JPG 批次匯出 + 每檔案總體進度 + 每頁當前進度 + DPI / 質量 / 密碼輸入 + 基於 IPdfCancellationToken 的合作式取消。匯出成功後用平臺檔案管理器開啟輸出目錄
Version 1.25.0
- 為 TPdf 增加 Form XObject 頁面複用能力,支援水印、模板疊加、“一頁蓋多頁” 等場景:CreateXObjectFromPage 把其它文件的某一頁打包成可重用控制代碼;InsertFormObjectFromXObject 把控制代碼的一份副本插入當前頁面。返回插入的 FPDF_PAGEOBJECT,呼叫方可結合 FPDFPageObj_SetMatrix 與 v1.9.0 的 TPdfMatrix 輔助類做定位、縮放、旋轉
- 新增 Pascal 類 TPdfXObject 封裝 PDFium 的 FPDF_XOBJECT 控制代碼,析構時自動調 FPDF_CloseXObject,無需手工管理資源
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 147 個用例,C++Builder 套件擴充套件到 123 個用例,覆蓋控制代碼建立與頁面物件插入兩類契約
Version 1.24.0
- 新增 TPdf.RenderPageProgressive:可取消的 RenderPage 變種,驅動 PDFium 的漸進式渲染迴圈,在迭代間輪詢 v1.7.0 的 IPdfCancellationToken。高 DPI 長時間渲染可以在頁面繪製過程中中斷,而不是等到完成才返回
- 返回 TPdfProgressiveStatus 列舉:prsDone / prsCancelled / prsFailed。傳 AToken = nil 表示渲染到完成、不輪詢取消(不會返回 prsCancelled)
- 使用 v1.21.0 引入的 zero-copy fast path —— PDFium 直接寫入目標 TBitmap 的 DIB 緩衝。同樣保留 legacy fallback 應對無法 wrap DIB 的少數情況
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 145 個用例,C++Builder 套件擴充套件到 121 個用例,覆蓋 nil token(完成)、預取消 token(prsCancelled)、以及與同步 RenderPage 畫素一致性
Version 1.23.0
- 為 TPdfView 增加六個新方法,把 PDFium 的表單欄位文字選擇 + Undo/Redo 能力暴露給應用:GetSelectedFormText 返回當前聚焦表單欄位中的選中文字;SelectAllFormText 全選;FormUndo / FormRedo / FormCanUndo / FormCanRedo 驅動聚焦欄位的編輯歷史。底層 PDFium API 早已繫結,但沒有 Pascal 風格高層入口。檢視非 Active 或文件沒有 AcroForm 聚焦欄位時,六個方法都安全短路返回空串 / False,不會崩潰
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 142 個用例,C++Builder 套件擴充套件到 119 個用例,覆蓋“無表單 / 無聚焦”場景下每個方法的契約
Version 1.22.0
- 為 TPdf 增加頁面組合操作便捷介面:ImportPagesByIndex 通過零基索引陣列從源文件複製指定頁;ImportNPagesToOne 返回一個全新 TPdf,其頁面是當前文件的 N-up 拼版;MovePages 原地重排頁面。底層 PDFium API 早已繫結,但沒有 Pascal 風格高層入口
- ImportPagesByIndex 接受空陣列以匯入全部源頁面(對應 C ABI 的 nil 引數)
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 136 個用例,C++Builder 套件擴充套件到 115 個用例,覆蓋子集匯入、全文件匯入、頁面重排、N-up 拼版四類場景
Version 1.21.0
- 渲染效能最佳化:TPdf.RenderPage / TPdf.RenderTile(以及對應的 TPdfView 輔助方法)切換到 zero-copy 輸出路徑。PDFium 現在直接寫入目標 TBitmap 的 DIB 緩衝,不再寫入內部緩衝後再逐行 copy,每次渲染節省一份 width × height × 4 位元組的記憶體複製。高 DPI 場景(縮略圖面板、列印質量匯出、批次匯出)收益最明顯
- 保留舊的 per-scanline 路徑作為安全 fallback,應對極端尺寸 / 異常 stride / OOM 等無法 wrap DIB 的少數場景。兩條路徑輸出位元組一致,fallback 只是慢一點
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 132 個用例,C++Builder 套件擴充套件到 112 個用例,覆蓋呼叫方 bitmap 自動升級 pf32bit、尺寸 round-trip、以及大尺寸 stride sanity 測試
Version 1.20.0
- 為 TPdfView 增加查詢結果高亮:HighlightSearchText(Text, MatchCase, MatchWholeWord) 掃描檢視當前頁,返回找到的匹配數,並在每次重繪時為每個匹配畫 HighlightColor 高亮矩形。ClearHighlight 清除高亮;切換到其他頁面自動清除(匹配按頁面繫結)
- HighlightColor 預設 clYellow,published 屬性讓應用可以根據 UI 主題調整高亮色
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 129 個用例,C++Builder 套件擴充套件到 109 個用例,覆蓋預設色、色 round-trip、對 sample.pdf 中存在單詞的真實匹配數檢測、以及對不存在單詞返回 0 的約束
Version 1.19.0
- 為 TPdfView 增加 FitMode 屬性,四種模式:pfmNone(手動縮放)、pfmActualSize(100%)、pfmFitPage(整頁適應視口)、pfmFitWidth(頁面寬度匹配視口寬度)。Resize 時與切頁時自動重新應用 fit 模式,混合頁面尺寸的長文件也能保持穩定的視覺填充
- 直接設 Zoom 會自動取消當前 fit 模式(FitMode 退回 pfmNone),符合主流 PDF viewer 的“輸入縮放值就退出 Fit Page / Fit Width”慣例
- 預設 pfmNone,舊應用的顯式 Zoom 行為不受影響
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 124 個用例,C++Builder 套件擴充套件到 106 個用例,覆蓋預設值、模式 round-trip、實際載入文件時 fit-page 產生真實縮放比、以及手動 Zoom 取消 fit 模式四類場景
Version 1.18.0
- 為 TPdfView 增加 PageColor 屬性,把渲染出來的 PDF 頁面底色與控制元件自身 Color 解耦。預設 clWhite,使 PDF 頁面無論宿主主題如何都以“紙白”渲染。dark mode viewer 可以讓滾動區維持深色背景,同時 PDF 頁面仍然是白(或應用層指定的任何顏色)
- 行為變化:之前通過 TPdfView.Color 間接換頁面底色的應用,應改成 PageColor。常見場景(主題化控制元件 + 白色 PDF 頁面)的預設體驗在不改一行程式碼的情況下變好
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 120 個用例,C++Builder 套件擴充套件到 103 個用例,覆蓋預設值與顏色 round-trip
Version 1.17.0
- 為 TPdfView 增加使用者輸入鎖定開關,方便把 viewer 嵌入到 kiosk、預覽面板、只讀場景時無需 subclass 即可停用導航手勢:AllowUserPageChange 控制新增的 PgUp / PgDn / Ctrl+Home / Ctrl+End 鍵盤快捷鍵;ChangePageOnMouseScrolling 控制新增的滾輪上/下翻頁;AllowUserTextSelection 為將來的滑鼠拖選文字路徑預留。三個屬性預設 True,舊應用升級無任何行為變化
- 滾輪翻頁路徑跳過 Ctrl+滾輪,方便應用層繼續把 Ctrl+滾輪保留給縮放
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 118 個用例,C++Builder 套件擴充套件到 101 個用例,覆蓋預設值與開關 round-trip
Version 1.16.2
- 擴充套件 TPdfView 註釋連結點選迴歸覆蓋:當 viewer 當前頁與關聯 TPdf 當前頁不一致時,通過真實無介面滑鼠點選路徑驗證自動跳轉行為,覆蓋 Delphi、Lazarus 與 C++Builder
- Delphi 與 Lazarus 套件現在各 114 個用例,C++Builder 套件現在 99 個用例
Version 1.16.1
- 修復 TPdfView 連結點選處理:自動註釋連結與網頁連結動作現在使用 viewer 當前顯示頁,即使關聯的 TPdf 元件停留在其它頁也不會錯取快取
- 加固 TPdfThumbnailView 的 Pdf 引用生命週期,關聯的 TPdf 元件銷燬時會自動清空引用,避免懸掛指標
- 新增縮圖 Pdf 引用生命週期迴歸覆蓋;Delphi 與 Lazarus 套件現在各 113 個用例,C++Builder 套件現在 98 個用例
- 同步 README、測試說明、HTML Help 搜尋/索引內容以及 C++ 包生成輸出,使其覆蓋 v1.7.0 到 v1.16.0 的整合更新
Version 1.16.0
- 新增 Delphi PrintDialog 範例(Demo/Delphi/PrintDialog),重點演示 N-up 列印(1 / 2 / 4 / 9 頁拼一張)+ 奇偶頁過濾 + 灰度渲染 + 可選的 1 畫素單元格邊框。作為既有 PrintPDF demo 的輕量夥伴,PrintPDF 已經覆蓋了預覽、最近檔案、縮放、scaling 等大件功能
Version 1.15.0
- 新增 TPdfThumbnailView 元件(FPdfThumbnail 單元),垂直滾動側欄,每行一個頁面縮圖,支援滑鼠懸停高亮、當前選中頁高亮、單擊切頁。設計為與 TPdfView 並排放置,讓使用者能快速翻閱長 PDF
- 元件已註冊到 losLab 元件面板,與 TPdf、TPdfView 同 tab。主要屬性:Pdf、CurrentPageIndex、ThumbnailWidth、ThumbnailHeight、TextColor、HoverColor、SelectionColor、BorderColor,以及 OnPageClick 事件
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 112 個用例,C++Builder 套件擴充套件到 97 個用例,覆蓋預設值、縮圖尺寸 round-trip、極值截斷、顏色 round-trip、以及事件處理器賦值
Version 1.14.0
- 新增 Delphi BatchExport 範例(Demo/Delphi/BatchExport),演示如何一次性把多個 PDF 檔案批次轉換為 JPG,使用 TPdf.LoadCustomDocument 流式載入、IPdfCancellationToken 合作式取消、以及“按檔案整體進度 + 按頁當前進度”兩個進度條。每個檔案用獨立 TPdf 例項(PDFium 本身不是執行緒安全),匯出成功後自動開啟輸出資料夾
Version 1.13.0
- 為 TPdfView 增加非同步渲染 UI 提示:新增 AsyncRendering、LoadingText、LoadingColor 三個屬性。AsyncRendering = True 時,單頁 paint 路徑在頁面中央繪製一個 “Loading...” 小提示框,便於應用層在自己的 worker 做長渲染時與庫統一 UI 標識
- 預設 AsyncRendering = False 保持向後相容,不引入新視覺
- 文件明確說明:PDFium 本身不是執行緒安全的,把渲染真正搬到 worker 必須保證每個 worker 持有獨立的 TPdf 例項;後續的 v1.14.0 批次匯出 demo 展示該模式
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 106 個用例,C++Builder 套件擴充套件到 93 個用例,覆蓋預設值與三屬性 round-trip
Version 1.12.0
- 為 TPdfView 增加基於點選的連結處理:新增 LinkOptions 屬性控制四類 PDF 連結動作的自動行為 —— goto(頁面跳轉)、URI(ShellExecute)、launch(ShellExecute)、嵌入 GotoR(保留)。預設開啟 loAutoGoto 與 loAutoOpenURI;loAutoLaunch 與 loAutoEmbeddedGoto 預設關閉,避免誤點觸發任意程式
- 新增 OnAnnotationLinkClick 與 OnWebLinkClick 事件,在自動動作之前觸發,允許應用層檢查連結、標記 Handled、或重定向(例如彈出安全確認)
- 連結點選檢測僅在 click(非 drag)時觸發,使用獨立的 MouseDown 錨點判斷,panning 等長拖拽手勢繼續走原有滾動路徑不受影響
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 102 個用例,C++Builder 套件擴充套件到 91 個用例,覆蓋 LinkOptions 預設值、集合 round-trip、以及事件處理器賦值
Version 1.11.0
- 為 TPdfView 增加視覺增強:PageShadowSize、PageShadowColor、PageBorderColor 三個屬性,可選地在頁面矩形下方繪製陰影,並在四周繪製一畫素邊框。預設值保持舊的平面外觀(PageShadowSize = 0;邊框顏色預設 clBlack,但在白底控制元件上不顯眼,直到呼叫方修改顏色)
- 新增 SmoothScroll 屬性,作為將來分段滾動動畫的選用開關;屬性可讀寫並可持久化,渲染邏輯保持現有即時滾動行為以避免破壞舊應用
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 98 個用例,C++Builder 套件擴充套件到 89 個用例,覆蓋預設值、屬性 round-trip、以及負陰影尺寸截斷為 0 的約束
Version 1.10.0
- 新增直接的影像插入介面:TPdf.AddImage 與 TPdfView.AddImage 接受檔案路徑或 TBitmap,是既有 AddPicture(TPicture) 的簡化版。AddImage(FileName) 識別 VCL 與 LCL 註冊過的所有影像格式(BMP、通過 PngImage 單元的 PNG、JPG 等),並走與 AddPicture 完全相同的內部管線,行為一致
- AddImage(TBitmap) 跳過 TPicture 中間層,方便已經持有 TBitmap 的渲染或批次生成場景
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 92 個用例,C++Builder 套件擴充套件到 84 個用例,覆蓋點陣圖插入、頁面物件 bounds、nil 點陣圖拒絕、以及 BMP 檔案載入
Version 1.9.0
- 新增高階變換矩陣支援,透過 FPdfMatrix 單元的 TPdfMatrix 類別提供;TPdfMatrix 以物件導向 API 封裝 PDFium 的 FS_MATRIX,支援 Translate、Scale、Rotate、HorizontalFlip、VerticalFlip、CentralFlip、Skew 與 Multiply,方便在交給 FPDFPageObj_SetMatrix 等 PDFium API 前先組合變換
- TPdfMatrix.Multiply 現在會先保存六個矩陣元素,再計算新列的值;修正其他 Pascal 實作在同一次呼叫中先覆寫部分元素的潛在問題,避免純平移以外的矩陣組合算出錯誤結果
- Delphi 與 Lazarus 迴歸測試套件各擴充至 88 個案例,C++Builder 套件擴充至 81 個案例,涵蓋 identity、reset、translate / scale / flip、後乘的組合順序,以及 Multiply 迴歸案例
Version 1.8.0
- 新增按需流式載入:TPdf.LoadCustomDocument(AStream, AOwnsStream) 方法配合 TPdfStreamAdapter 輔助類,底層接入 PDFium 的 FPDF_LoadCustomDocument。PDFium 在需要時才從外部 TStream 讀取資料塊,超大 PDF 或遠端流不再需要先完整拷入記憶體
- 支援可選的 stream 所有權:AOwnsStream = True 時把 TStream 生命週期交給 TPdf,UnloadDocument 時自動釋放
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 79 個用例,C++Builder 套件擴充套件到 75 個用例,覆蓋 TFileStream 流式載入、owned-stream 解除安裝釋放、以及外部所有 stream 在解除安裝後仍存活三類場景
Version 1.7.0
- 新增 FPdfAsync 單元,提供合作式非同步取消原語:IPdfCancellationToken / IPdfCancellationTokenSource,以及全域性 PdfNoCancellationToken 單例,使長任務渲染、批次匯出等流程具備從 UI 端發起乾淨取消的能力
- 新增輕量 TPdfFuture<T> 助手,在後臺執行緒跑 worker,把 TPdfFutureResult<T> 結果信封 dispatch 回主執行緒,區分成功、取消與失敗三種結果
- Delphi 與 Lazarus 迴歸測試套件擴充套件到 76 個用例,C++Builder 套件擴充套件到 73 個用例,共享覆蓋取消狀態、冪等 Cancel、回撥批次觸發、取消後註冊回撥四類行為
Version 1.6.10
- 新增高層 TPdf.PrintPageRanges,可讀取 PDF viewer preference 中的列印頁碼範圍,並以一基頁碼範圍返回給應用層
- 新增 TPdf.SetFormFieldFlags / SetFormFieldFlagsAt 以及對應 TPdfView 輔助方法,應用可通過公開 API 修改 AcroForm 欄位標誌,並補齊 password 與 multi-select 標誌覆蓋
- 加強 PDFium 繫結 ABI 覆蓋,固定 Windows 下 FPDF_DWORD、FPDF_FILEACCESS 回撥和 V8 embedder slot 欄位的尺寸約束
Version 1.6.9
- 新增低層 Skia 渲染繫結,開放當前標準版與 V8 版 bundled PDFium DLL 新匯出的 FPDF_RenderPageSkia 和 FPDF_FFLDrawSkia
- 擴充套件 public 繫結覆蓋檢查,現在標準 DLL 與 V8 DLL 載入測試會與既有 V8/XFA 能力探測一起驗證 Skia 渲染入口
Version 1.6.8
- 新增 TPdf.SetTextPositions 與 TPdfSingleArray,可通過當前 DLL 新匯出的 FPDFText_SetPositions 為既有文字物件設定逐字元位置
- 將 FPDFText_SetPositions 提升為當前隨包 PDFium DLL 的必需繫結;同時確認 Skia 渲染入口仍不可用,因為當前 DLL 仍未匯出這兩個函式
- Delphi、C++Builder、Lazarus 三套迴歸測試擴充套件到每套 65 個用例,覆蓋文字位置設定
Version 1.6.7
- 新增 TPdf 對文件級 JavaScript name-tree action 的高層讀取能力,可通過 JavaScriptAction 與 JavaScriptActions 取得 action 名稱和指令碼內容
- 新增 TPdf.FileIdentifier,以不含 PDFium 終止位元組的二進位制 TBytes 讀取 trailer 中的 permanent / changing 檔案 ID
- 新增 TPdf.PageBox、GetPageBox、SetPageBox,可讀寫當前頁的 MediaBox、CropBox、BleedBox、TrimBox 和 ArtBox
- 重新確認當前隨包 PDFium DLL 只剩 Skia 渲染入口無法在執行時開放,因為這些匯出並不存在於當前 DLL
- Delphi、C++Builder、Lazarus 三套迴歸測試擴充套件到每套 64 個用例,覆蓋文件 JavaScript、trailer ID 與頁面 box 讀寫
Version 1.6.6
- 新增隨執行時 DLL 選擇的 V8 版 PDFium 支援。載入前設定 EnableV8Engine 後,會從 DLLs\Win32 或 DLLs\Win64 目錄樹選擇 pdfium.v8.dll,並在該 DLL 實際匯出對應入口時開放 V8/XFA 專用繫結
- 新增 V8FeaturesAvailable、XfaBStrHelpersAvailable、GetRecommendedV8Flags,並開放 FPDF_BStr_*、FPDF_GetRecommendedV8Flags、FPDF_GetArrayBufferAllocatorSharedInstance 等低層可選繫結
- 將 FPDFText_SetPositions 改為可選繫結,讓 PDFium Delphi Component 在所載入 PDFium DLL 不匯出該實驗性文字位置 setter 時仍可正常載入
- Delphi、C++Builder、Lazarus 三套迴歸測試擴充套件到每套 61 個用例,覆蓋標準 DLL 與 V8 DLL 的能力探測