losLab 軟體開發部落格

PDFium 元件

Software Development Blog

PDFium 元件

在 Delphi 中使用 PDFium 稽核 PDF 安全風險

在真正信任一份 PDF 檔案之前,應該先完整列舉其所有潛在風險面。了解 PDFium 如何在 Delphi 中讀取文件內的 JavaScript、啟動動作與簽章權限,供稽核作業使用

PDFium 元件

Build a PDF Viewer in Delphi with PDFium Component

在 Delphi 中使用 PDFium 元件組合出一個可用的 PDF 檢視器:將 TPdf 連接到 TPdfView、載入與算繪文件,然後新增分頁、縮放與符合模式導覽 在 Delphi 中,PDF 檢視器可以歸結為兩個元件以及它們之間的連接; 擁有文件:它開啟檔案、對其進行解密,並回答有關頁數和中介資料的提問;

PDFium 元件

使用 PDFium 元件將多個 PDF 檔案合併為單一文件

在 Delphi 中使用 PDFium 元件合併 PDF 檔案:ImportPages、頁面範圍字串、插入位置、損壞檔案的靜默失敗,以及表單欄位行為 PDFium 元件透過單一方法公開了 PDF 合併功能: ;該模式始終相同:建立一個空的目標文件、依序開啟每個來源檔案、呼叫 複製頁面、關閉來源檔案,然後重複該步驟;當迴

PDFium 元件

使用 PDFium 進行多頁合一拼版與頁面重排

把多個 PDF 頁面統一排到同一張紙上、就地重新排序頁面顯示順序,或擷取指定的子集內容。了解 PDFium 在 Delphi 中的拼版與頁面移動 API,以及它們各自傳回的控制代碼

PDFium 元件

在 Delphi 中安全地解析 PDF 字典:名稱 Token

為什麼子字串鍵值尋找會毀壞 Delphi 中的 PDF 字典解析:依據 ISO 32000-1 的完整名稱 Token 匹配以及針對惡意 PDF 的資源限制 諸如 之類的子字串搜尋是讀取 PDF 字典的錯誤工具,因為 PDF 名稱鍵值(keys)共享前綴: 是 的前綴,而 是 的前綴

PDFium 元件

用 PDFium Component 在 Delphi 中審閱 PDF 註記

在 Delphi 中打造一個 PDF 註記審閱面板:依頁面替標註建立索引、面對外觀串流的否決仍能存活下來,並在不留下殘影的情況下替註記改色或刪除它們

PDFium 元件

Delphi 分帶 PDF 渲染中的負 Y 偏移

PDFium Delphi 元件如何按水平帶渲染超大頁面:負 Y 偏移如何維持整頁幾何關係,以及 PNG 和 TIFF 如何串流輸出並控制峰值記憶體

PDFium 元件

在 Delphi 中可取消的漸進式 PDF 渲染 (PDFium)

緩慢的頁面渲染作業原本就不應凍結整個使用者操作介面,也不該被迫執行到底才能停止。了解 PDFium 的漸進式渲染如何在 Delphi 中透過 IFSDK_PAUSE 變成可隨時取消

PDFium 元件

PDFium 中 CMS signedAttrs 的 DER SET OF 排序

PDFium Component 依 X.690 11.6 的要求把 signedAttrs 排成 DER SET OF;自我驗證永遠抓不到第三方驗證器會拒絕的缺陷,因為兩端共用同一套編碼規則

PDFium 元件

在任何目標平台上載入 PDFium 原生程式庫

PDFium 元件在各目標平台上尋找原生程式庫的有序搜尋鏈,以及目標巨集中一個大寫字母如何在區分大小寫的 Linux 檔案系統上讓整個查找無聲失靈,附探測程式做法與部署檢查清單的完整教訓

PDFium 元件

Delphi 中無法靜默修改加密 PDF

依照 ISO 32000-1 第 7.5.6 節的增量更新規範,Delphi 中的 PDFium Component 會拒絕以明文標記或 PAdES 簽章方式修補已加密的 PDF 檔案內容

PDFium 元件

eIDAS 信任清單與合格 PDF 簽章

PDFium 元件如何在剖析歐洲 eIDAS 信任清單之前先驗證其真偽,把合格狀態與一般憑證鏈信任分開記錄,按歷史時間評估服務狀態,並以單調更新不變式與無 DTD 剖析守住安全底線

PDFium 元件

Lazarus 與 Free Pascal 的 PDFium PDF 檢視器

把 Delphi 的 PDF 檢視器移植到 Lazarus 與 Free Pascal:字串編碼陷阱、以程式碼建構表單、PDFium 二進位檔的載入,以及離開 Windows 之後的語音朗讀

PDFium 元件

FPC 上 PDFium VCL 的 libcurl 時間戳記後端

PDFium VCL 在非 Windows 目標上經 libcurl 發送 RFC 3161 時間戳記查詢,動態繫結八個符號,另有兩個設定決定它在負載下會不會卡死;驗證不可編譯分支的受控副本手法也一併說明

PDFium 元件

在 Delphi 中使用 PDFium 的低視力 PDF 色彩濾鏡

為 Delphi PDF 檢視器同時加入深色模式與低視力閱讀輔助這兩種顯示模式選項:渲染後色彩反轉處理方式、兩種不同的灰階轉換方式,以及在任何背景下都能持續保持清楚可見的覆疊色彩效果

PDFium 元件

在 Delphi 用 macOS Keychain 身分簽署 PAdES

PDFium VCL 在執行階段以 dlopen 與 dlsym 繫結 Security framework 符號,讓 macOS Keychain 簽署後端在任何平台都編得過,並指名每一個解析不到的符號

PDFium 元件

在 Delphi 中讀寫 PDF 標記內容

標記內容是標記 PDF 與 PDF/UA 背後的 BDC 與 EMC 成對運算子,PDFium Component 從普通 Delphi 程式碼讀取標記名稱強型別屬性表與 MCID,並能把結構樹接回它所描述的頁面內容,供可存取性檢查修復與稽核使用 標記內容是 ISO 32000-1 §14.6

PDFium 元件

在 PDFium VCL 用 OpenSSL 驗證 PDF 簽章

PDFium VCL 把 OpenSSL CMS 驗證器接進 PAdES 驗證;底下有三種 OpenSSL 行為,不處理就會默默給出錯誤的判定,介面則拆出三個獨立判定與兩種驗證形狀,後端可按平台替換

PDFium 元件

PDFium 選填匯出:Delphi 中的能力關卡

當 pdfium.dll 的版本比綁定程式碼還舊時,單一缺少的匯出函式就足以讓整個載入程序失敗。了解 PDFium Component 如何在 Delphi 中為選填匯出設關卡並安全降級

PDFium 元件

在 Delphi 中編輯 PDF 大綱並重新對應頁面

PDFiumPas 在 Delphi 中如何於頁面移動或消失後重寫 PDF 大綱項目:帶正負號的 /Count、兄弟鏈結修補、ApplyPageMap 頁面對映、懸空項目處置,以及經過獨立重載驗證的增量儲存

PDFium 元件

Delphi 中 PDFium 頁面物件控制代碼在變換後過期

為何在 Delphi 中 FPDFPage_TransFormWithClip 之後 PDFium 頁面物件控制代碼讀到的是舊座標,以及重新載入順序與 getter 崗哨值的修法 當 重寫一頁時,你手上已持有的每個 控制代碼,描述的依然是變換之前那次剖析。Delphi 與 C++Builder 版的 PDFium

PDFium 元件

PDF/A 實作限制與字型編碼檢查

為什麼 PDF/A 檔案會卡在 ISO 19005-1 Annex C 的容器限制或符號式 TrueType 字型帶有的 Encoding 項目,PDFium Component 在 Delphi 中不載入 PDFium DLL 就能從位元組掃描路徑回報這兩類缺陷並附帶具體的補救建議

PDFium 元件

在 Delphi 中驗證 PDF/raster 掃描文件

PDF/R 讓每一頁掃描只帶一張條帶影像,沒有文字也沒有字型,PDFium Component 在 Delphi 與 C++Builder 中驗證 ISO 23504-1 一致性並回報每項拒絕的具體成因與對應的補救路徑 PDF/R,標準化為 ISO 23504-1,是針對掃描文件的 PDF

PDFium 元件

Delphi PKCS#11:CK_ULONG 與打包陷阱

PDFiumPas 在 Delphi 中透過 PKCS#11 權杖簽署 PAdES:Windows 上 CK_ULONG 為 4 位元組、LP64 上為 8 位元組,打包不同時函式表也會移位

PDFium 元件

PDFium Delphi 檢視器:渲染快取與平滑縮放策略

使用 PDFium 讓 Delphi PDF 檢視器的縮放與捲動操作全程能隨時保持流暢:正確的快取鍵設計方式、點陣圖所有權管理、漸進式渲染機制,以及高 DPI 情境下的記憶體預算控制

PDFium 元件

在 Delphi 中用 PDFiumPas 做稀疏延遲 PDF 物件索引

PDFiumPas 如何在不載入整個檔案的情況下讀取單一 PDF 物件:稀疏 xref 區段描述元、延遲物件串流、混合式 XRefStm、1 MiB 有界讀取視窗,以及不隨尾頁物件 /Size 成長的記憶體用量

PDFium 元件

在 Delphi 中量測 PDF 文字以進行版面配置和自動換行

PDF 版面配置需要先知道字串寬度才能繪製。了解 PDFium Component 如何在 Delphi 中不碰頁面的情況下量測文字,用來做自動換行。 把文字放到 PDF 頁面上的呼叫很直覺。您把字串、字型、大小和位置傳給 ,字形就會出現。它不會告訴您該字串一旦繪製出來會有多寬,也不會把長字串拆成多行

PDFium 元件

Delphi 中的 PDFium 雙重旋轉與適合縮放錯誤

使用 PDFium 修正 Delphi 中縮圖重複旋轉造成的顯示問題:說明渲染旋轉參數為何是疊加計算方式,以及 90 或 270 度頁面為何需要交換寬高後才能算出正確的適合縮放比例

PDFium 元件

不靠 Uniscribe 的 PDF 文字 BiDi 內嵌層級

為什麼把 PDF 文字排版搬離 Windows 意味著自己實作 UAX #9 雙向演算法,以及會把增補平面字元拆成未配對代理、或讓重排整段悄悄失效的兩個典型錯誤,與字碼點單位重排等對應修法

PDFium 元件

Delphi 中用 PDFium 字元框做 PDF 文字行選取

PDF 文字頁面本身其實沒有行物件的概念。了解 PDFium Component 如何運用 FPDFText_GetCharBox 幾何資料建構出視覺行,並讓所有選取路徑共用同一個輔助函式

PDFium 元件

為什麼 Delphi 中 PDFium 的 XFA 欄位編輯儲存後會消失

PDFium Component 只把 XFA 欄位編輯寫入記憶體緩衝區,因此 Delphi 應用程式儲存後會遺失欄位值;AcroForm 可以持續儲存,而 XFA 不可 PDFium Component 中的 會寫入目前取得焦點的表單欄位即時編輯緩衝區;對於 XFA 表單,這個緩衝區永遠不會進入會被序列化到磁碟的

PDFium 元件

在 Delphi 中使用 PDFium 進行 PAdES B-B 簽署 PDF

在 Delphi 中使用 PDFium 元件為 PDF 加入 PAdES B-B 數位簽章:自建 SHA-256、CMS,以及用於位元組級簽署的 Windows CNG 後端 PDFium 元件透過其 方法為 PDF 進行 PAdES B-B 數位簽章:它載入文件、計算已簽署位元組範圍的雜湊值、建立 CAdES

PDFium 元件

在 Delphi 中使用 PDFium 元件分割 PDF 文件

如何在 Delphi 中使用 PDFium 元件按頁面、範圍或書籤分割 PDF:TPdf.ImportPages、CreateDocument、SaveAs 結果檢查,以及 Active 旗標重設 PDFium 元件為您提供了一個用於分割 PDF 的方法: ;其他的一切操作,不論您是隔離單一頁面、在任意邊界上進行剪切,

PDFium 元件

驗證壓縮的 PDF:物件和 XRef 串流

現代 PDF 將結構隱藏在壓縮的物件與 XRef 串流中。瞭解 Delphi 驗證器如何展開 ObjStm 並透過 PDFium 讀取 XRef 串流尾部。 您編寫了一個小型的驗證器。它開啟 PDF,尋找到末尾,找到 ,讀取偏移量,並期望定位到關鍵字 (其下方有一個固定寬度的交叉參照表)

PDFium 元件

PDFium 元件在 Delphi 中的 PDF/X 驗證

在 Delphi 中驗證可供列印的 PDF/X 檔案:PDFium 元件的 ValidatePdfX 會執行 ISO 15930 檢查,涵蓋 TrimBox、Trapped、OPI、LZW 以及字型內嵌等。 Delphi 的 PDFium 元件透過 驗證可供列印的 PDF/X 文件