Reading PDF Font Properties with PDFium Component in Delphi
在 Delphi 中使用 PDFium 元件檢查 PDF 內部的字型:讀取字形的字型家族名稱、基本名稱、粗細、斜體角度以及該字型是否已嵌入 PDF 中的每個可見字元都攜帶對繪製它的字型的引用,而 PDFium 元件允許您沿著該引用追蹤回字型物件並讀取它所知道的資訊;存取的單位是字元,而不是文件:您透過分頁文字中的索引選
losLab 軟體開發部落格
Software Development Blog
在 Delphi 中使用 PDFium 元件檢查 PDF 內部的字型:讀取字形的字型家族名稱、基本名稱、粗細、斜體角度以及該字型是否已嵌入 PDF 中的每個可見字元都攜帶對繪製它的字型的引用,而 PDFium 元件允許您沿著該引用追蹤回字型物件並讀取它所知道的資訊;存取的單位是字元,而不是文件:您透過分頁文字中的索引選
在信任 PDF 之前,先列舉其風險表面。了解 PDFium 如何在 Delphi 中讀取檔案 JavaScript、啟動動作和簽名權限以進行稽核 PDF 不僅僅是紙張。它是一個容器,可以攜帶在檔案開啟時執行的指令碼、啟動外部程式的連結、連線到網頁伺服器的連結、巢狀在檔案內部的檔案,以及聲明自有人擔保以來檔案未曾改變的簽
在 Delphi 中使用 PDFium 元件組合出一個可用的 PDF 檢視器:將 TPdf 連接到 TPdfView、載入與算繪文件,然後新增分頁、縮放與符合模式導覽 在 Delphi 中,PDF 檢視器可以歸結為兩個元件以及它們之間的連接; 擁有文件:它開啟檔案、對其進行解密,並回答有關頁數和中介資料的提問;
一個實用的 Delphi 解決方案,用於使用 PDFium 元件將掃描頁面的資料夾合併為單一 PDF:建立文件、為每張影像新增頁面、縮放以符合大小並儲存 理賠處理團隊擁有三十年的紙本檔案,需要透過饋紙式掃描器進行處理;掃描器將每頁輸出一個 JPEG 檔案到資料夾中,命名為 、 等;而歸檔實際需要的是每個案卷一個
在 Delphi 中使用 PDFium 元件將 PDF 頁面點陣化為 JPEG:將 DPI 轉換為像素大小、將每個頁面轉譯為點陣圖,然後使用 TJPEGImage 以選定的品質進行編碼 將 PDF 頁面轉譯為 JPEG 是兩個通常會被混在一起執行、然後被分開偵錯的操作;首先,您需要以選定的解析度將頁面點陣化為像素點陣圖
in Delphi, build a PDF from nothing with PDFium Component: CreateDocument, AddPage, AddText, and CreatePath, plus the coordinate and font embedding rules that
在 Delphi 中使用 PDFium 建立螢光筆和底線註解:QuadPoints 順序、為什麼 FPDFAnnot_SetAttachmentPoints 傳回 false,以及 Append 的修復方法 Technical Article 在 Delphi 中使用 PDFium QuadPoints
在 Delphi 中診斷 pdfium.dll 載入失敗:修正 32/64 位元 ERROR_BAD_EXE_FORMAT 193 錯誤、識別過期的 DLL,以及跨執行緒安全地載入 PDFium 元件 當 pdfium.dll 拒絕在客戶的電腦上載入時,適用於 Delphi 和 Lazarus 的 PDFium
在 Delphi 中使用 PDFium 元件偵測 XFA 表單並將其範本、資料集和設定封包解開為原始 XML——靜態封包讀取無需 V8 執行階段 是的——PDFium 支援 XFA 表單,但有一個重要的區分。PDFium 元件可以使用標準 DLL 偵測 XFA 表單,並將其 、 和 封包(packets)解開為原始
使用 PDFium 元件在 Delphi 中匯出與匯入 XFDF 表單資料與註解:ISO 19444-1 雙向轉換、18 種註解子類型,以及地區安全數字 適用於 Delphi 與 Lazarus 的 PDFium 元件透過 XFDF(ISO 19444-1 定義的 XML 交換格式)交換表單資料與註解;
在 Delphi 中使用 PDFium 元件擷取 PDF 中內嵌的影像:讀取 BitmapCount、取得各個 Bitmap[]、處理靜默開啟失敗,並將輸出儲存為 JPEG 或 BMP PDF 將影像作為一等物件儲存在其內容串流中;當頁面引用照片、掃描影像或圖表時,像素資料會與頁面幾何形狀一起保存在 XObject
在 Delphi 中使用 PDFium 元件擷取 PDF 文字:透過 Character[] 存取原始字符、透過 ReadablePageContent 取得段落結構,以及 Active 靜默失敗防護 PDF 文字擷取看似簡單,直到您遇到文字層不存在、損毀,或是被拆分到數十個毫無意義順序的微小字元組的文檔為止;PDFi
將 C 函式庫包在 Pascal 裡會把尖銳邊角藏起來。看看 PDFium 繫結中的真實缺陷,從 cdecl 回呼到 FPC Win64 指標寬度截斷,以及它們的修正方式。 建構在 C 函式庫之上的 Pascal 綁定讀起來就像普通的 Pascal。您呼叫一個方法,獲得一個記錄作為回傳,然後釋放您分配的記憶體
在 Delphi 和 Lazarus 中使用 PDFium 元件讀取 PDF 簽章:檢查 SubFilter、ByteRange 和 CMS,然後偵測 PAdES B-B 至 B-LTA 基準等級 您收到了一份已簽署的 PDF,且需要在檢視器中顯示是誰簽署的、何時簽署的、簽章是否覆蓋了整個檔案,以及它在長期合規性方面達
在 Delphi 中使用 PDFium 元件加入長期 PAdES 簽章:適用於 B-T、B-LT 和 B-LTA 的 RFC 3161 時間戳記、DSS 驗證存放區和 DocTimeStamps 為了使已簽署的 PDF 在多年後仍能通過驗證(在簽署憑證過期且其 CA 輪替之後),PDFium 元件可以在
在 Delphi 中使用 PDFium 元件合併 PDF 檔案:ImportPages、頁面範圍字串、插入位置、損壞檔案的靜默失敗,以及表單欄位行為 PDFium 元件透過單一方法公開了 PDF 合併功能: ;該模式始終相同:建立一個空的目標文件、依序開啟每個來源檔案、呼叫 複製頁面、關閉來源檔案,然後重複該步驟;當迴
把多個 PDF 頁面排到一張紙上、就地重排頁面,或擷取子集;了解 PDFium 在 Delphi 中的拼版與頁面移動 API,以及它們傳回的控制代碼 合併和分割是每個人最先接觸的兩個頁面操作,且它們涵蓋了很大的範圍;但它們並非涵蓋一切;還有一個獨立的工作系列是重新排列頁面,而不是移動整個檔案:將四張投影片放到一張紙上作
為什麼子字串鍵值尋找會毀壞 Delphi 中的 PDF 字典解析:依據 ISO 32000-1 的完整名稱 Token 匹配以及針對惡意 PDF 的資源限制 諸如 之類的子字串搜尋是讀取 PDF 字典的錯誤工具,因為 PDF 名稱鍵值(keys)共享前綴: 是 的前綴,而 是 的前綴
讓 Delphi PDF 檢視器能配合螢幕報讀軟體:擷取具標記的閱讀順序、以逐字 TTS 反白,並為未標記的 PDF 提供誠實的退路 在 Delphi 和 C++Builder 應用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL Component
面向 Delphi/C++Builder 的 PDFium Component 註解審閱介面實戰指南,涵蓋架構決策、驗證證據、診斷、邊界情況與上線檢查 在 Delphi 和 C++Builder 應用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL
長時間的 PDF 渲染不應在 UI 執行緒上進行。瞭解 PDFium 綁定如何在 Delphi 中使用可取消的 Future 在背景執行緒上執行工作。 在 PDFium 中渲染頁面是同步的。您呼叫函式庫,它會將其光柵化為您傳遞的點陣圖,並在寫入像素後返回控制權。對於單一螢幕大小、單一縮放級別的頁面,這需要幾毫秒,沒有人
緩慢的頁面渲染不應該凍結 UI 或執行到底。了解在 Delphi 中,PDFium 的漸進式渲染如何透過 IFSDK_PAUSE 成為可取消的。 大多數 PDF 頁面會在幾毫秒內光柵化,而您甚至不會考慮這個過程。但是,當使用者開啟一張 A1 尺寸的工程圖、充滿數以萬計向量筆觸的頁面,或擠滿透明度群組和柔和遮罩的海報時,
說明為何從元件註解讀取 /V 時,PDFium Component 會把核取方塊平面化成未勾選狀態,因為依 ISO 32000-1 規定 /V 屬於父欄位字典
Delphi 和 FPC/Lazarus 之間的四個隱藏差距影響了相同的 PDFium 程式碼:紀錄暫時生命週期、範圍檢查、E2010 TBytes 轉型,以及 AnsiString 位元組遺失 同樣的 Object Pascal 原始碼在 Delphi 和 FPC/Lazarus
FPDFText_GetUnicode 會傳回完整的 32 位元碼點,但 WideChar 只有 16 位元,因此 Delphi 的 PDFium Component 可能損壞 emoji 與罕見 CJK 表意文字
PDFium Component 在 Delphi 中會拒絕不安全的加密 PDF 增量更新、合規標記注入與 PAdES 簽章操作
PDFiumPas 會解析有效的交叉參照修訂鏈與 Adobe Extension Level,讓 Delphi PDF 能以 1.3 至 1.7 之間的精確版本儲存,同時不破壞合規性
說明 WaitForIdle 與 padSynchronize 回覆如何讓 PDFium Component 中的 Delphi 主執行緒陷入死結,並涵蓋佇列容量、關閉順序與 TPdf 所有權限制
Delphi 或 FPC 函式結果中的 FillChar 會在未釋放字串時清零受管理記錄,讓迴圈呼叫可能洩漏記憶體
面向 Delphi/C++Builder 的 PDFium Component 表單欄位導覽與檢視器端驗證實戰指南,涵蓋架構決策、驗證證據、診斷、邊界情況與上線檢查 在 Delphi 和 C++Builder 應用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium
Delphi 與 FPC PDF 檢視器中的三層列印迴圈在點選 Cancel 後仍繼續轉譯,因為 Free Pascal 會在迴圈開始時鎖定 for 迴圈上限
面向 Delphi/C++Builder 的 PDFium Component Lazarus 與 Free Pascal 檢視器整合實戰指南,涵蓋架構決策、驗證證據、診斷、邊界情況與上線檢查 在 Delphi 和 C++Builder 應用中嵌入 PDFium Component 工作流,或在
為 Delphi PDF 檢視器加入深色模式與低視力閱讀模式:渲染後反轉、兩種灰階,以及保持可見的覆疊色彩 低視力的讀者在預設對比度下無法辨識白紙上的黑色文字,因此他們會要求深色模式。天真的做法是將渲染出的頁面上每個像素都反轉。這功能一週就發布了,但隔天就壞了:掃描的相片看起來像底片,讀者的黃色螢光筆標記變成了難以辨認
說明 PDF 列向量慣例如何讓 Delphi 中的 Multiply 變成後置、PreMultiply 變成前置,為何 PreTranslate 需要線性部分,以及樞軸輔助函式如何組合運算
說明 FlateDecode 為何不足以還原 PDF 物件串流,以及 PDFiumPas 如何在 Delphi 中重建 PNG 與 TIFF Predictor 資料
在 Delphi 中使用 PDFium Component 對傳入的 PDF 進行分流:檢查 Info 字典與 XMP 中繼資料,找出加密、JavaScript 與 XFA,並及早路由有風險的檔案 PDF 接收審查工作台是一個只有一項工作的小程式:在任何下游程式被允許接觸檔案之前,先檢查每個檔案
在 Delphi 中使用 PDFium Component 產生通過 veraPDF 驗證的 PDF/A 封存檔:SaveAsPdfA、XMP 與 ICC OutputIntent 注入、a/b/u 一致性,以及其中的陷阱。 您釋出了一個會將每個檔案標記為 PDF/A-1b 的轉換器,客戶的紀錄系統將它們攝取
使用 PDFium 元件 (PDFium Component) 在 Delphi 中建置 PDF/A 預檢檢查器:透過標記掃描 (token-scan) 29 個驗證問題、感知各部分的門檻 (part-aware gating)、物件串流 (object streams),且無需進行完整的內容解析
使用 PDFium VCL 走訪即時的 PDF 標籤樹,以捕捉位元組等級 (byte-level) 掃描遺漏的 PDF/UA 內容錯誤:圖形替代文字 (Figure Alt)、公式文字 (Formula text) 以及獨一無二的註解識別碼 (Note IDs)。 您的預檢報告指出檔案符合 PDF/UA 標準
在 Delphi 中使用 PDFium VCL 產生並驗證 PDF/VT-1 變動資料列印檔案:DPart 樹狀結構、強制性的 PDF/X-4 配對以及 ISO 16612-2 的陷阱。 一家交易列印廠 (transactional print shop) 退回了您 80,000
使用 PDFium 元件在 Delphi 中自動化 PDF/A 和 PDF/UA 預檢:批次迴圈、退出代碼、JSON 和 HTML 報告,以及為何沒有發現問題並不等同於通過 批次預檢工具是一個沒有視窗的主控台程式,指向一個 PDF 資料夾,根據您指定的合規標準對每個檔案進行驗證,並留下機器可讀的發現證明
使用 PDFium 在 Delphi PDF 檢視器中保持縮放和滾動的平滑:正確的快取鍵、點陣圖擁有權、漸進式渲染以及高 DPI 記憶體預算 在一個天真的 PDF 檢視器中按住縮放按鈕,然後觀察 CPU 圖表。單按一次自動重複的縮放控制項會在一秒內觸發十幾次或更多的縮放步驟,如果每個步驟都啟動可見頁面的全品質重新渲染,
說明 PDFiumPas 的轉譯鎖如何保護 Delphi 中的頁面生命週期,以及六個遺漏鎖定的 PDFium 呼叫
面向 Delphi/C++Builder 的 PDFium Component 安全 PDF 預覽介面實戰指南,涵蓋架構決策、驗證證據、診斷、邊界情況與上線檢查 在 Delphi 和 C++Builder 應用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL
PDF 版面配置需要先知道字串寬度才能繪製。了解 PDFium Component 如何在 Delphi 中不碰頁面的情況下量測文字,用來做自動換行。 把文字放到 PDF 頁面上的呼叫很直覺。您把字串、字型、大小和位置傳給 ,字形就會出現。它不會告訴您該字串一旦繪製出來會有多寬,也不會把長字串拆成多行
說明 PDFiumPas 在 Delphi 中如何管理 FPDF_TEXTPAGE 快取,以及 AddText、SetText 或 AddPath 編輯後如何重新載入文字頁
使用 PDFium 修正 Delphi 中縮圖重複旋轉與適合縮放錯誤,了解轉譯旋轉參數為何會疊加,以及 90 或 270 度頁面為何必須交換寬高後再計算縮圖比例與檢視尺寸
說明 PDFium Component 如何在 Delphi 中把表單欄位索引與註解索引區分開來:篩選 Widget 子型別、在原生邊界做映射,並修復無介面環境下的表單焦點問題
使用 PDFium 詞彙方塊在 Delphi 中同步語音轉換與頁面上的單字標示:TrackReadingWordAt、渲染順序、自動捲動和 Unicode 陷阱 朗讀功能在語音之外還有一個可見的任務:當讀出每個單字時,必須在頁面上標示該單字並保持其在視野中。要做到這一點,您需要每個單字的邊界方塊(bounding
PDFium Component 只把 XFA 欄位編輯寫入記憶體緩衝區,因此 Delphi 應用程式儲存後會遺失欄位值;AcroForm 可以持續儲存,而 XFA 不可
在 Delphi 中使用 PDFium 元件列印 PDF:使用 RenderPage 與 rePrinting 轉譯頁面、透過 StretchDIBits 傳送點陣圖至 TPrinter、符合紙張大小,以及處理旋轉 PDF 座標以點(points)為單位,印表機座標以裝置單位為單位,除非您刻意轉換,否則這兩者毫無關聯;
繪製一次浮水印或標誌,將其放置在每個頁面上。了解 PDFium 的表單 XObject 如何在 Delphi 中建立可重複使用的頁面戳記,以及控制代碼生命週期規則 在檔案的每一頁上蓋上浮水印或標誌看起來像是五分鐘的工作,直到您在檔案大小檢查器中開啟結果。顯而易見的方法是遍歷頁面,並在每一頁上再次建立相同的文字或影像物件
在 Delphi 中使用 PDFium 元件執行 AcroForm JavaScript:為什麼欄位計算會保持靜止、V8 DLL 的需求,以及否決高風險 PDF 行為的主機事件 在 Acrobat 中會重新計算總計,但在您自己的 Delphi 檢視器中卻凍結不動的表單,幾乎絕不是轉譯 Bug
在 Delphi 中使用 PDFium 元件為 PDF 加入 PAdES B-B 數位簽章:自建 SHA-256、CMS,以及用於位元組級簽署的 Windows CNG 後端 PDFium 元件透過其 方法為 PDF 進行 PAdES B-B 數位簽章:它載入文件、計算已簽署位元組範圍的雜湊值、建立 CAdES
如何在 Delphi 中使用 PDFium 元件按頁面、範圍或書籤分割 PDF:TPdf.ImportPages、CreateDocument、SaveAs 結果檢查,以及 Active 旗標重設 PDFium 元件為您提供了一個用於分割 PDF 的方法: ;其他的一切操作,不論您是隔離單一頁面、在任意邊界上進行剪切,
數 GB 的 PDF 不需要全部載入;了解 TStream 配接器如何提供 PDFium 的按需 FPDF_FILEACCESS 回呼,以及為什麼 4 GiB 的限制在 Delphi 中需要防護 掃描的封存檔案在單個 PDF 中可能達到數 GB;開啟此類檔案的檢視器通常只想顯示一頁,可能是目錄,也可能是使用者從書籤跳轉
在 Delphi 中使用 PDFium 元件建立雙頁 PDF 檢視器:兩個或三個獨立的面板、透過 TPdfView.Zoom 進行個別檢視的縮放,以及同步的頁面巡覽 同時開啟兩個文件、相同的頁碼、各自顯示在獨立的捲動面板中:這正是比較檢視器的核心;PDFium 元件透過簡單的物件模型來實現此功能,其中 擁有檔案,而
現代 PDF 將結構隱藏在壓縮的物件與 XRef 串流中。瞭解 Delphi 驗證器如何展開 ObjStm 並透過 PDFium 讀取 XRef 串流尾部。 您編寫了一個小型的驗證器。它開啟 PDF,尋找到末尾,找到 ,讀取偏移量,並期望定位到關鍵字 (其下方有一個固定寬度的交叉參照表)
在 Delphi 中驗證可供列印的 PDF/X 檔案:PDFium 元件的 ValidatePdfX 會執行 ISO 15930 檢查,涵蓋 TrimBox、Trapped、OPI、LZW 以及字型內嵌等。 Delphi 的 PDFium 元件透過 驗證可供列印的 PDF/X 文件
為什麼 PDF 驗證器會拒絕 PAdES 簽章:零 ByteRange 欄位、缺失的 D: 日期前綴,以及增量更新後遺失的 /Encrypt 項目(結合 PDFium 元件) 在我們使用 Delphi 中的 PDFium 元件所偵錯的幾乎每一個案例中,驗證器拒絕 PAdES 簽章的原因通常是以下三者之一:
PDFium 元件如何在 Delphi 中處理 PDF 檔案附件:AttachmentCount、Attachment、CreateAttachment、DeleteAttachment、路徑淨化,以及就地儲存 PDF 檔案附件儲存在文件的內嵌檔案樹中,大多數檢視器會將此結構呈現為迴紋針面板或附件側邊列;在