losLab 軟體開發部落格

Delphi PDF 函式庫

Software Development Blog

Delphi PDF 函式庫

Delphi 中可存取 PDF 的自動結構標記

PDF Library for Delphi 在繪製文件的同時,自動為文字、標題、圖片與表格加上結構標記,讓 Delphi 開發者不必再把每個繪圖呼叫手動包進 BeginTag,即可產出可存取的 PDF 輸出

Delphi PDF 函式庫

將 PDF 轉換為 PDF/A 並修復其中繼資料

ConvertToPDFA 在 Delphi 中修復文件並聲明所屬的 PDF/A 部分,唯有內部檢查通過才回報符合,RepairDocumentMetadata 讓 Info 字典與 XMP 封包保持一致,整個封存轉換流程不需外部工具或人工判讀 只靠一次呼叫就把一份普通文件變成封存文件:它移除所選部分禁止的東西、加入該

Delphi PDF 函式庫

在 Delphi 中將 TDataSet 和報表匯出為 PDF

使用 losLab PDF Library 在 Delphi 中將任何 TDataSet、FastReport、QuickReport 或 ReportBuilder 報表匯出為 PDF,支援分頁表格 and 無介面(headless)輸出 若要在 Delphi 中將 TDataSet 或報表匯出為

Delphi PDF 函式庫

Delphi 決定性 PDF ID:可重現建置

用決定性 trailer ID 讓 Delphi PDF 輸出逐位元組相同:種子如何推導、為何加密檔案保留自己的 ID、還有其他該釘死的項目 losLab PDF Library 只要呼叫 ,就能對相同輸入產生逐位元組相同的 PDF 輸出。預設情況下 trailer 的 陣列是掛鐘時間的 MD5

Delphi PDF 函式庫

以純 Pascal 為 PDF 實作 Ed448 與 Brainpool ECDSA

了解 PDFlibPas 如何在不依賴外部加密程式庫的前提下,以純 Object Pascal 實作 RFC 8032 Ed448 與 RFC 5639 三條 Brainpool 曲線,並整理實作過程中找出六個錯誤根因的除錯歷程與實用教訓

Delphi PDF 函式庫

在 Delphi 中驗證電子發票:veraPDF 與 Mustang

符合 PDF/A 標準不代表符合電子發票標準。了解 PDF Library for Delphi 產生的電子發票如何在 Delphi 中同時通過 veraPDF 容器格式檢查與 Mustang 業務規則的雙重驗證

Delphi PDF 函式庫

以 PDFlibPas 在 Free Pascal 上匯入 EMF 向量圖形

了解 6500 行的 EMF 轉 PDF 轉換器為何只需改動一個條件編譯而非整個重寫,以及 ULONG_PTR hatch 欄位如何在 Win64 上讓中繼檔記錄從錯誤偏移讀取、無聲畫出錯誤的圖像

Delphi PDF 函式庫

Delphi 中的 Factur-X 與 ZUGFeRD 混合發票

電子發票本質上是一份內嵌發票 XML 資料的 PDF/A-3 檔案。了解 PDF Library for Delphi 如何在 Delphi 中跨越不同設定檔建立 Factur-X 與 ZUGFeRD 混合式發票

Delphi PDF 函式庫

PDFlibPas 的 FPC Win32 OMF 轉 COFF 物件連結

Free Pascal 在 Win32 上需要 COFF 物件檔,PDFlibPas 為此維護獨立的 FPC 物件集,轉換後再正規化區段名稱與區段定義符號,並改以 Clang 重建依賴 Delphi 64 位元輔助常式的 OpenJPEG 物件

Delphi PDF 函式庫

Delphi PDF 中的 GoToR、GoToE 與 Launch 動作

在 Delphi 中使用 PDF Library for Delphi 建立 GoToR、GoToE 與 Launch 三種動作:遠端頁面跳轉、嵌入式 PDF 目標定位、外部程式啟動,以及容易忽略的零起始頁碼陷阱

Delphi PDF 函式庫

Delphi 就地表單編輯器中的 OnExit 重入

PDF Library for Delphi 的 TPDFlibViewer 透過 OnExit 提交就地表單欄位編輯,必須先將 FInplaceEditor 設為 nil,否則焦點移失會重新進入提交流程並損壞資料

Delphi PDF 函式庫

JBIG2 編碼器後端與 Free Pascal 連結器

PDFlibPas 同時提供原生 Pascal JBIG2 編碼器與可選的外部編碼器,而把外部後端帶到 Free Pascal 需要 DLL 而不是目標檔,文中完整記錄連結器層面的取捨過程

Delphi PDF 函式庫

在 Delphi 中合併與分割 GB 級 PDF

以 PDF Library for Delphi 的直接存取層在毫秒內開啟 GB 級 PDF:頁面控制代碼、串流合併清單、頁碼範圍擷取與 xref 修復

Delphi PDF 函式庫

Delphi 中的 LZW EarlyChange:編碼器領先解碼器

LZW 編碼器的字典永遠比解碼器領先一筆條目,因此兩側無法共用同一個碼寬門檻,直到最後一個資料碼才收斂,PDFlibPas 用同一個 EarlyChange 旗標分別推導出兩套門檻,把這個不對稱做對

Delphi PDF 函式庫

Delphi PDF 垃圾回收:標記與清除演算法

說明為何刪除 PDF 頁面之後,檔案的實際大小依然不會跟著縮小,以及 Delphi 中的標記清除垃圾回收機制如何透過 trailer 根物件集合,找出並捨棄不再被任何頁面參照的孤立物件

Delphi PDF 函式庫

Delphi 記憶體映射 PDF 滑動視窗讀取

PDFlibPas 透過單一滑動唯讀視窗讀取 GB 級 PDF,讓 LoadFromMappedFile 以絕對偏移提供 Delphi 物件切片,無需頻繁 Seek 或額外緩衝區

Delphi PDF 函式庫

在 Delphi 中合併 PDF 表單:重複欄位規則

合併 AcroForm 時同名欄位會互相污染。PDF Library for Delphi 的 MergeDocumentEx 先比對欄位名稱再搬動物件,以 dfsReject、dfsMerge 或 dfsAutoNumber 決定拒絕、共用或重新命名

Delphi PDF 函式庫

分類 PDF 簽章之後發生的內容變更

PDFlibPas 會將簽章後的文件與較早版本逐物件比對,把每個差異歸入白名單或未分類,讓 DocMDP 政策的執行化約成單一次層級比較,並說明指紋比對引擎、誤拒優先與自我比較陷阱的設計取捨

Delphi PDF 函式庫

在 Delphi 中將 PDF 頁面渲染為 1 位元單色

在 Delphi 中使用 PDF Library for Delphi 將 PDF 頁面渲染為 1 位元單色點陣圖,同時可裁剪指定的子區域範圍,整個過程透過 GDI 半色調向下轉換完成,完全無需觸碰渲染器核心邏輯

Delphi PDF 函式庫

在 Delphi 中做多引擎 PDF 算繪

在 PDF Library for Delphi 中逐檔切換內建、Cairo 與 PDFium 算繪引擎:引擎探測、DPI 縮放陷阱,以及會自我記錄的後備鏈

Delphi PDF 函式庫

Delphi 中的 PDF 圖層:選用內容群組 (OCG)

PDF 圖層機制可驅動地圖套疊顯示、CAD 工程圖版本管理與多語言內容切換等應用場景。了解 PDF Library for Delphi 如何在 Delphi 中建立並讀取選用內容群組(OCG)及其顯示設定

Delphi PDF 函式庫

在 Delphi 中讀取 PDF 書籤與註解動作

多數 Delphi PDF 函式庫寫得出書籤與註解動作,卻讀不回來。PDF Library for Delphi 以 GetOutlineActionInfo 與 GetAnnotActionInfo 型別化讀回 GoTo、URI、Launch 與 JavaScript 動作及目的地幾何

Delphi PDF 函式庫

在 Delphi 中製作 PAdES 數位簽章

以 PDF Library for Delphi 產生 PAdES B-B、B-T 與 B-LT 簽章:時間戳記空間預留、DSS 組裝,以及信任檔案前的 ByteRange 稽核

Delphi PDF 函式庫

Delphi PDF 中的頁面拼貼與浮水印範本

在 Delphi 中使用 losLab PDF 函式庫的 Form XObject 擷取與可組合的浮水印範本,以向量保真度並排拼貼或重疊 PDF 頁面 頁面拼貼是在共享的畫布上組合現有頁面的 內容 ,這與合併檔案是不同的操作。losLab PDF 函式庫為 Delphi 實作了 Form XObject

Delphi PDF 函式庫

Delphi 中的平行 PDF 頁面轉譯:執行緒安全

使用 losLab PDF Library 在 Delphi 中平行渲染 PDF 頁面:為何每個工作執行緒都需要獨立的 TPDFlib 執行個體、GDI+ 的 CoInitialize 設定,以及安全的日誌記錄方式

Delphi PDF 函式庫

在 Delphi 中縮減 PDF 檔案大小:字型、圖片、LZW

使用 losLab PDF 函式庫在 Delphi 中縮減 PDF 檔案大小:將嵌入字型子集化 (subset)、將過大的圖片降取樣 (downsample),並在單一通道中將舊版的 LZW 串流轉換為 Flate。 為了在 Delphi 中縮減 PDF 檔案大小,losLab PDF

Delphi PDF 函式庫

在 Delphi 中做 PDF/A 與 PDF/UA 預檢

以 PDF Library for Delphi 在 Delphi 中執行 PDF/A 與 PDF/UA 預檢:結構化檢出項、可比對的報告、存檔時的修正,以及 veraPDF 交叉核對

Delphi PDF 函式庫

Delphi 中 Factur-X XMP 的 PDF/A-3 延伸結構描述

容器檢查全過,veraPDF 仍判定 Factur-X 發票不是有效的 PDF/A-3:問題出在 fx 自訂 XMP 屬性未經宣告。本文說明 PDF Library for Delphi 如何補上 PDF/A-3 延伸結構描述

Delphi PDF 函式庫

用 PDFlibPas 在 Delphi 中產出 PDF/E-1 工程文件

PDF/E-1 有自己的 XMP 命名空間、要求完整的生命週期詮釋資料,並封掉 BX 相容段落這條逃生口,PDFlibPas 以作者模式加有界 preflight 逐運算子檢查內容,在存檔關卡擋下不符項

Delphi PDF 函式庫

PDFlibPas 在 Delphi 的漸進式 PDF 範圍載入

PDFlibPas 如何在 Delphi 中從 HTTP range 伺服器與物件儲存開啟數 GB 級 PDF 而不下載整個檔案:讀取回呼、按區塊對齊的快取、請求合併、可用性探測與迭代式預取排程

Delphi PDF 函式庫

重建受損 PDF Xref 表:Delphi 復原掃描

說明 PDF Library for Delphi 這套 Delphi PDF 函式庫,如何以單次掃描的 token 掃描器重建已受損的 xref 表格內容,過程中自動略過字串、註解與串流內部的所有位元組內容

Delphi PDF 函式庫

在 Delphi 中將 PDF 轉換為單一色彩空間

PDF Library for Delphi 的 RecolorDocument 不必重繪即可把整份 PDF 轉換成灰階、RGB 或 CMYK 色彩空間,同時一致處理色彩運算子、點陣圖、索引色盤與漸層停駐點

Delphi PDF 函式庫

在 Delphi 中替換 PDF 頁面且不破壞書籤

使用 PDF Library for Delphi 在 Delphi 中原地替換既有 PDF 檔案內的頁面內容:只搬移與視覺呈現相關的鍵值資料,同時完整保留目標頁面物件本身不變,讓書籤、連結與表單元件都能繼續維持完好無損

Delphi PDF 函式庫

使用 CryptoAPI 在 Delphi 中建立自我簽署測試憑證

簽署冒煙測試不必把 PFX 提交進儲存庫。PLCreateSelfSignedCertificate 只用 Win32 CryptoAPI 產生自我簽署 RSA 憑證並匯出 PFX,本文說明 CryptGenKey 的金鑰長度旗標與 CRYPT_EXPORTABLE 陷阱

Delphi PDF 函式庫

Delphi 中的 SHAKE256 XOF:Keccak 領域分離

PDFlibPas 在單一 Keccak-f[1600] 排列上同時實作 SHA-3 與 SHAKE256,兩者只靠 pad10*1 領域位元組與 rate 規則區分,並附上串流式 XOF 給 Delphi,讓輸出長度不被單次 136 位元組的上限綁住

Delphi PDF 函式庫

診斷 Pascal PDF 程式庫中的無聲 stub 失敗

空的替代實作有三種形狀,拋例外、回空資料與回報成功,其中回報成功的那一種最難發現,本文說明如何透過檢查輸出位元組而非回傳碼來診斷這類無聲失敗,並給出採用替身路徑之前可以照做的完整檢查清單

Delphi PDF 函式庫

Delphi 中的標籤化 PDF 結構樹

以 PDF Library for Delphi 從 Delphi 產生標籤化 PDF:邊繪製邊建結構樹、表格標頭語意、裝飾內容標記,以及存檔前的 PDF/UA 診斷

Delphi PDF 函式庫

Delphi PDF 文字、影像與字型擷取

以 PDF Library for Delphi 從 PDF 擷取帶座標的文字、原始影像串流與字型中繼資料,並附搜尋索引與稽核工作適用的擷取選項

Delphi PDF 函式庫

Delphi PDF 文字搜尋與命中座標:PDF Library for Delphi

在 Delphi 中使用 PDF Library for Delphi 依指定頁面範圍搜尋 PDF 文字內容:每個命中結果都會傳回其所在頁面編號與邊界矩形座標數值,並可進一步列舉頁面上的每個文字區塊與圖片物件

Delphi PDF 函式庫

強化 Pascal PDF 解析器以防禦惡意檔案

PDF 剖析器本身就是一種相當值得留意的潛在攻擊面所在。檢視字型解碼器與影像解碼器中真實存在的整數溢位、越界寫入與無限制遞迴等各類已知安全缺陷,以及對應的完整 Delphi 修正做法

Delphi PDF 函式庫

Delphi 中的 PDF 向量圖形:路徑與漸層

PDF 檔案本質上就是一張完整的 2D 向量繪圖畫布。了解 PDF Library for Delphi 如何在 Delphi 中繪製路徑、貝茲曲線與軸向漸層效果,並比較奇偶填滿與非零填滿這兩種填色規則的差異

Delphi PDF 函式庫

用 Delphi 在 PDF 中直排日文與中文

PDF Library for Delphi 透過 Type0 字型內建的直排書寫排版模式,在 Delphi 應用程式開發中把日文與中文文字內容由頁面上方往下依序排入,並自動採用字型本身所提供的直排字符形式