核心元件
- TPdf — 主要的 PDF 文件處理元件,用於開啟、導覽、擷取文字並編輯 PDF 文件
- TPdfView — 用於顯示 PDF 頁面並與之互動的視覺元件
- TPdfReadingSession — 朗讀協調元件,用於主控端 TTS 引擎與 TPdfView 詞游標追蹤
- TPdfThumbnailView — 用於頁面導覽的可捲動縮圖側邊面板
- 原生 LCL 平台 - Linux Qt6 與 macOS Cocoa 使用原生 PDFium、正確的 LP64 繫結、平台字型與檔案服務,以及實際的點陣圖通道配置;通過驗收的 Free Pascal/LCL 設定與功能邊界請參閱原生設定
文件操作
- 文件載入 — 從磁碟、記憶體串流、完整位元組陣列、零基
Index/Count位元組陣列視窗載入 PDF 檔案,或透過LoadCustomDocument使用隨選 TStream 介面卡載入。相容、嚴格與復原原則額外提供有界的傳統、混合與 xref 串流診斷,且不取代 PDFium 的語意解析器- 經驗證的修復輸出 —
SaveAsRepaired建立完整的單一修訂副本,並在傳回位元組或以原子方式取代檔案之前,獨立以嚴格模式重新載入其 xref 與頁面結構- 具型別物件圖 —
ExportObjectGraph以有界的具型別 JSON 輸出直接與物件串流值,而SaveAsObjectGraphPatched以暫存的增量修訂套用已驗證的頂層字典變更,並在交付前對結果執行嚴格載入- 密碼保護 — 開啟密碼保護的 PDF 文件,並回報已驗證工作階段的有效
UserPermissions- 文件建立 — 使用
CreateDocument、AddPage、AddText、AddImage、AddPicture、AddJpegImage與CreatePath從頭建立新的 PDF 文件- 文件儲存 — 使用多種選項儲存修改後的文件(增量儲存、移除安全性),並可明確指定 PDF 1.0 至 PDF 1.7 之間的目標版本
- PDF/A-1b 輸出 —
SaveAsPdfA/SaveAsPdfAToStream會以增量更新的方式對基本儲存進行後處理,注入 XMP 中繼資料串流、sRGB ICC OutputIntent 與更新後的文件 catalog,使結果符合 PDF/A-1b 規範。可透過TPdfASaveOptions.IccProfileData使用自訂 ICC 設定檔- PDF/A 驗證 —
ValidatePdfA與唯讀的PdfAConformance屬性會掃描已開啟的文件,檢查 XMPpdfaid標記、含內嵌 ICC 的 OutputIntent、是否存在加密,並回報合規層級(pac1a、pac1b、pac2b、pac3b、pacNone或pacUnknown),以及描述各個發現問題的TPdfAValidationIssue項目清單- PDF 版本合規性驗證器 — 當 SaveAs 以 PDF 1.0 至 PDF 1.7 為目標時,寫入器會拒絕所有在所選目標版本之後才引入的字典項目、過濾器、註解子類型、動作類型、字型、色彩空間或加密參數(例如 JBIG2Decode、MarkInfo、OutputIntents、AES / AES-256、Polygon / Caret / Watermark / Redact 註解、JavaScript / Trans / SetState 動作)
- 串流壓縮 — 自動 FlateDecode 壓縮可確保儲存時所有 PDF 串流都得到最佳壓縮;設定
Compressed := False可在偵錯流程中略過壓縮- 可擴充的批次合併 —
MergeFiles匯入檔案型來源並支援各來源的頁面範圍與密碼,最多同時保持一份來源文件開啟,並公開進度、取消、停止或跳過處理、回滾,以及表單、大綱、資源與檢視器偏好原則- 頁面子集匯入 —
ImportPagesByIndex會從來源文件複製明確的零基索引陣列;InsertAt = 0 會插入第 1 頁之前,InsertAt = PageCount 會附加到尾端。傳入空索引陣列則匯入所有來源頁面- N-up 組合 —
ImportNPagesToOne會傳回一個全新的TPdf,其頁面為來源文件頁面的 NumX×NumY 組合,大小以 PDF 使用者單位(1 單位 = 1/72 英吋)指定- 頁面重新排列 —
MovePages使用零基索引陣列與第一個移動頁面的目標索引,於原地重新排列頁面- 頁面計畫驗證 —
ValidatePagePlan預覽刪除、移動、插入、拆分與合併的映射,清查導覽、標籤、表單、結構樹、匯入功能與簽章影響,並拒絕會留下懸空目標、或未經明確授權就修改已簽署內容的計畫- 兩階段版面產生 —
GenerateLayout先量測並分頁換行文字、線條、影像、頁面 XObject、頁首與頁尾,再以原子方式發出原生頁面物件,而穩定的{page}與{pages}佔位符可保留量測到的頁數- 磁碟後援的分頁版面 —
GeneratePagedLayout將命令寫入呼叫端選定的可搜尋儲存區、從緊湊的非連續區段還原每一頁、以 LRU 快取限制保留的頁面陣列,並依序附加 PDFium 頁面- 跨頁表格版面 —
TPdfLayoutTable一次性解析固定、比例與依內容大小的欄位、重複連續的表頭列、拆分符合條件的內容列、保持跨列群組完整,並發出圖說、儲存格框線、連結,以及跨頁連續的 Table / TR / TH / TD 語意階層- 快取版面節點 — 版面計畫依完整的約束、內容、字型、樣式、來源與量測器身分進行快取,而
TPdfLayoutCachedNode延遲建置重複的範本,並從單一可重複使用的原生 Form XObject 發出每次放置- 自動 Tagged PDF 版面 —
GenerateTaggedLayout從同一份量測過的版面計畫,發出原生 MCID、artifacts、Document 結構樹、ParentTree 與 IDTree 映射、標題、清單、含替代文字的圖片、表格標頭,以及具 OBJR 擁有權的 Link 註解;項目限制可讓區塊與標題保持在一起、強制孤行 / 寡行下限,並強迫實際分頁- 標記內容編輯 —
PageObjectMarks、AddPageObjectMark、SetPageObjectMarkParam、RemovePageObjectMarkParam與RemovePageObjectMark透過穩定的原生標記檢查並修改 BDC 屬性清單- Bidi 與複雜文字 —
AddShapedText將方向性文字段、上下文形式、連字、前進量與位移轉換為定位過的 CID Type 2 字形,同時以產生的 ToUnicode 映射與ActualText保留邏輯 Unicode 語意- CID Type 2 字型製作 —
AddCidType2Text內嵌呼叫端提供的 TrueType 資料,附明確的 CID-to-GID 與 ToUnicode 映射、安全的選用子集化、受控的完整字型回退,以及擷取完整性檢查- 統一的快取位元組預算 —
TPdf.CacheBudgetBytes透過單一可量化的全域 LRU 協調已解析的頁面場景、縮圖、結構資料、文字快照與頁面物件快照,而TPdfTileCache與系統字型快取可加入呼叫端選定的調度器- 宿主系統字型提供者 —
ConfigureSystemFontProvider將原生的缺字請求路由到應用程式提供的提供者,附位元組驗證、有界 LRU 快取、可選的共用位元組治理、原生回退、表格擷取與生命週期統計- Form XObject 頁面重複使用 —
CreateXObjectFromPage會從另一份文件的任一頁面建立可重複使用的TPdfXObject控制代碼;InsertFormObjectFromXObject會將該包裝頁面的一份複本插入目前頁面。非常適合用於浮水印、樣板重疊以及「單一頁面戳印到多頁」的工作流程。可透過FPDFPageObj_SetMatrix與TPdfMatrix輔助工具來定位、縮放並旋轉目標頁面物件- 頁面管理 — 新增、刪除並操作個別頁面;
AddPage(0, ...)會插入第一頁並立即啟動該頁面- 頁面框 — 讀取與寫入目前頁面的 MediaBox、CropBox、BleedBox、TrimBox 與 ArtBox
- Catalog 語言 — 讀取與寫入 catalog /Lang 項目中所儲存的文件語言
- Trailer 檔案 ID — 以二進位位元組形式讀取永久與變動的 trailer /ID 項目
- 文件 JavaScript 動作 — 列舉文件層級 JavaScript 名稱樹的動作名稱與指令碼
- Tagged PDF 結構樹 — 檢查 tagged PDF 頁面的邏輯結構元素、無障礙文字、語言、標記內容識別碼以及階層
- 檢視器偏好設定 — 從文件的檢視器偏好設定字典讀取
PrintCopies、PrintPageRanges、PrintScaling與PrintPaperHandling;儲存的 PDF 預設採用 Fit Height 首頁開啟動作
文字操作
- 文字擷取 — 透過
Text、TextInRectangle、索引式Character、CharacterRectangle與CharacterOrigin屬性以字元層級精確度從 PDF 頁面擷取文字- 結構化文字模型 —
GetStructuredText從原生字元幾何、字型中繼資料、文字物件身分、Tagged PDF 語意與實體版面回退順序,建立有界的頁面、區塊、行與樣式化 span 階層- 表格偵測與擷取 —
ExtractTables與ExtractDocumentTables結合原生詞框與變換後的路徑框線,偵測有框線或以空白對齊的表格、保留合併跨距、評估信心度、標記跨頁連續,並輸出 CSV 或 JSON- 語意重排與回應式 HTML —
BuildReflowDocument結合 Tagged PDF 語意、實體版面推論與表格擷取,產生可重複使用的有界節點樹,其安全的 HTML 輸出會保留標題、段落、清單、圖片、頁面區段與表格跨距- 可搜尋 OCR 圖層 —
ApplyOcrSearchLayer將有界、由上而下的 BGRA 頁面算繪交給應用程式提供的辨識器,透過原生頁面幾何映射信心度四邊形,並加入隱形的可搜尋文字而不重新編碼掃描影像- 句子級朗讀單元 — TPdf.ReadingUnits、TPdf.DocumentReadingUnits、TPdfView.ReadingUnits 與 BuildReadingUnits 提供句子大小的 TPdfReadingUnit 記錄,用於同步 TTS 聽讀
- 視覺行選取 —
TPdfView.SelectLineAt透過與三擊選取及Shift+Home或Shift+End相同的行邊界模型,選取包含一基頁碼與零基字元索引的視覺文字行- 逐詞朗讀反白 —
TPdf.PageWordBoxes、TPdfView.PageWordBoxes、BuildWordBoxes、WordBoxIndexAtCharIndex、TPdfView.SelectWordBox、TPdfView.SelectWordSpan、TPdfView.TrackReadingWordAt、TPdfView.SetReadingWord、TPdfView.ClearReadingWord、ReadingWordColor、ReadingWordFollow將頁面字元偏移對應到包含它的 TPdfWordBox、予以反白並傳回詞索引;在 TPdfView 上將一個 TPdfWordBox 反白為目前朗讀詞;清除 TPdfView 上目前的逐詞朗讀游標疊加層;控制目前逐詞朗讀游標使用的疊加層顏色;控制 TPdfView 在追蹤朗讀時是否將目前朗讀詞捲動到檢視中- 朗讀工作階段協調 —
TPdfReadingSession、TPdfSpokenText、SpokenTextAppend、BuildSpokenTextFromWords、SpokenToPageChar與EstimateSpokenWordIndex協調主控端 TTS 引擎、朗讀區塊、詞位置回呼、節奏估算、暫停 / 繼續處理與 TPdfView 詞游標更新- 文字搜尋 — 使用
FindFirst、FindNext、FindPrevious並結合區分大小寫、整字與連續搜尋等選項來尋找文字,或以TPdf.CreateDocumentSearch在整份文件中串流前向與後向相符項,附頁面座標結果矩形、合作式取消與固定的頁面控制代碼記憶體- 搜尋標示疊加層 —
TPdfView.HighlightSearchText會取代目前頁面的符合項疊加層,而AddSearchTextHighlight會為其他搜尋詞附加不重複的範圍,讓多個查詢可以同時保持可見。ClearHighlight會移除整組標示;導覽到其他頁面時會自動清除,因為字元範圍是頁面專屬的。HighlightColor預設為clYellow,並公開發布讓應用程式可為疊加層設定主題- 字元屬性 — 透過
CharacterAngle、CharacterFontSize、CharacterFontWeight、CharacterGenerated、CharacterIsHyphen與CharacterMapError索引式屬性存取個別字元的字型大小、粗細、角度與定位- 歐洲字元支援 —
AddText會在建立文字物件之前自動載入並快取相符的系統 TrueType 字型,因此 PDFium 內建標準字型無法表示的捷克文、法文、德文、西班牙文、葡萄牙文、波蘭文與土耳其文重音字元,毋須變更任何程式碼即可正確算繪- 文字新增 — 將新文字加入 PDF 頁面,可使用自訂字型、色彩、透明度與旋轉
- 文字物件定位 — 透過
SetTextPositions與TPdfSingleArray設定既有文字物件的逐字元位置- 字型資訊 — 以每個頁面物件為基礎擷取字型屬性,包括家族名稱、嵌入狀態、斜體角度、上升 / 下降值與原始字型資料
註解支援
- 註解類型 — 支援文字、連結、標示、底線、刪除線以及許多其他註解類型
- 註解建立 — 以程式化方式建立新註解
- 註解編輯 — 修改既有註解屬性,包括色彩、透明度與內容
- 連結註解 — 處理具動作支援的內部與外部連結
表單支援
- 語音表單填寫存取器 — TPdf 和 TPdfView 上的 FocusedFormFieldValue、FocusedFormFieldName 與 FocusedFormFieldDetails 公開目前邏輯表單欄位的值、名稱與 TPdfFormFieldInfo,供鍵盤或語音驅動的表單填寫使用
- 表單類型 — 支援 AcroForm 與 XFA 表單
- 表單填寫 — 含 JavaScript 支援的互動式表單填寫
- V8 DLL 選擇 — 載入前設定
EnableV8Engine即可從對應的DLLs\Win32或DLLs\Win64資料夾使用pdfium.v8.dll,並透過V8FeaturesAvailable、XfaBStrHelpersAvailable與GetRecommendedV8Flags查詢 V8/XFA 輔助可用性- 欄位存取 — 依索引或位置讀取與寫入表單欄位值
- 欄位資訊 — 存取欄位類型、旗標、名稱與其他屬性
- 欄位旗標 — 透過
SetFormFieldFlags/SetFormFieldFlagsAt依索引或位置更新 AcroForm 欄位旗標,包括唯讀、必填、密碼與多選旗標- 表單扁平化 —
GenerateFormAppearances會重新產生每頁每個表單控制項的 /AP 外觀串流,而FlattenPage/FlattenAllPages會將註解與表單欄位燒入靜態頁面內容(無法再編輯)- 表單控制項文字選取、剪貼簿與復原 / 重做 — 在取得焦點的 AcroForm 控制項上,檢視器公開
GetSelectedFormText、CopySelectedFormTextToClipboard、CutSelectedFormTextToClipboard、PasteFormTextFromClipboard、SelectAllFormText,以及FormUndo/FormRedo/FormCanUndo/FormCanRedo。編輯器支援Ctrl+A、Ctrl+C、Ctrl+Insert、Ctrl+X、Shift+Delete、Ctrl+V與Shift+Insert;剪下與貼上會拒絕唯讀欄位,或沒有表單填寫與修改權限的工作階段- 文件編輯交易與復原 / 重做 —
BeginEditTransaction、CommitEditTransaction與RollbackEditTransaction將任意的頁面、物件、註解、附件與中繼資料編輯分組,而UndoEdit、RedoEdit與可攜的編輯日誌使用有界、經 SHA-256 驗證的雙向差異- 當機復原與提交驅動自動儲存 — 含加總檢查的復原套件將來源與復原指紋繫結到有界的編輯日誌,而原子式自動儲存會在提交、復原或重做後更新明確的側車檔,不重寫來源 PDF
影像操作
- 影像擷取 — 透過索引式
Bitmap屬性從 PDF 頁面擷取點陣圖;走訪BitmapCount即可將每張影像儲存至磁碟- JPEG 插入 —
AddJpegImage接受一個內含原始 JPEG 位元組的 TStream,並以 /DCTDecode XObject 形式嵌入影像,毋須重新編碼- Picture 支援 —
AddPicture接受TPicture物件,並透過已註冊的 VCL/LCL 圖形類別自動進行格式轉換- 直接影像插入 —
AddImage(FileName)可辨識所有以 VCL 或 LCL 圖形單元註冊的格式(BMP、透過 PngImage 的 PNG、JPG 等),並共用 AddPicture 管線。AddImage(TBitmap)會略過 TPicture 中介,簡化已持有從算繪或批次產生工作而來之 TBitmap 的呼叫端- 影像 ICC 設定檔 — 影像頁面物件會在存在時公開其嵌入的 ICC 設定檔資料(
FPDFImageObj_GetIccProfileDataDecoded的繫結)- 縮圖產生 — 透過
Thumbnail屬性產生目前頁面的縮圖點陣圖,或透過TPdf.RenderPageThumbnail算繪任一以一為基底的頁面且不變更PageNumber,並使用以項目數與像素位元組上限為界、感知修訂的 LRU- 已解析頁面場景快取 —
TPdf.RenderPageByIndex、RenderPageThumbnail與ExtractThumbnail重用有界 LRU 快取的 PDFium 頁面場景,而頁面編輯、頁面樹變更、表單狀態與文件卸除會讓過期項目失效
輔助單元
- 非同步基礎設施 —
FPdfAsync結合結構化的合作式取消、可移除的回呼與期限來源、可設定的TPdfFuture<T>結果分派,以及可重複使用的TPdfAsyncExecutor,後者提供固定 worker、四條 FIFO 優先序通道、有界佇列回壓、每個工作的控制代碼、計時診斷、彙總統計與順利關機- 串流介面卡 —
TPdfStreamAdapter將 Pascal 的TStream橋接到 PDFium 的FPDF_FILEACCESS回呼,因此LoadCustomDocument可依需求讀取區塊,毋須將整個 PDF 緩衝於記憶體中- 漸進下載工作階段 —
TPdfProgressiveDocument保持 PDFium 原生可用性提供者存活,將文件、表單與頁面提示餵入TPdfRangeRequestScheduler,合併缺失範圍、為頁面關鍵位元組搶佔背景傳輸、限制請求大小與重試、取消多餘傳輸,並在完整 PDF 抵達前開啟線性化頁面- 有界串流檢查 —
TPdfStreamInspector清查實體串流物件、公開安全的原始視窗與有序的一般篩選器解碼、回報影像與附件的原生存取路徑,並強制來源、輸出、字典、數量與膨脹比預算- 內容串流正規化 —
TPdf.SaveAsNormalizedContent對邏輯頁面內容做語彙基元化、移除註解、驗證狀態與容器平衡、保留不支援的運算子與行內影像資料,並合併安全的/Contents陣列- Fast Web View 輸出 —
TPdf.SaveAsLinearized將首頁物件寫在後續頁面之前、輸出兩個交互參考節區,並建立頁面偏移與共用物件提示表,讓 HTTP Range 用戶端無需下載完整檔案即可開啟所請求的頁面- 物件串流輸出 —
TPdf.SaveAsObjectStream將合格的值打包進有界的 PDF 1.5+ ObjStm 群組、讓開啟關鍵的物件保持直接,並寫出自適應的 type-2 xref 項目,在不犧牲隨機存取的前提下縮小檔案- 髒物件增量儲存 —
TPdf.BeginIncrementalSave與CommitIncrementalSave比較穩定的語意快照、保留先前每個加密或未加密位元組、沿用 R5、R6 或 R7 安全性參數、只附加已變更的物件、對每個結果執行嚴格重新載入,並在檔案提交時使用持久的附屬檔案與原子取代- 選擇性內容控制 —
TPdf.InspectOptionalContent清查圖層、組態、使用方式中繼資料、單選群組、順序、鎖定、OCMD 原則與可見性運算式,而SaveAsOptionalContentConfigured寫入 PDFium 透過原生算繪內容套用的確定性圖層狀態- 有界工作儲存 —
TPdfRandomAccessStore將小量資料保持在記憶體中,到達呼叫端選定的上限時一次性溢寫到私人的關閉時刪除暫存檔,並提供不變動共用游標的定位讀取;TPdf.SaveMemoryLimit將相同原則套用於核心儲存後處理,而預設 open-action 與 page-label catalog 更新則使用固定大小視窗與稀疏的延遲物件索引- 原生版本查詢 —
TPdf.PdfVersion重複使用FPDF_GetFileVersion剖析器狀態來處理標頭與 catalog 語意,並以一次八位元組標頭防護拒絕格式錯誤的 catalog 降級- 矩陣幾何工具組 —
FPdfMatrix透過後合成與前合成、樞紐感知變換、延伸 / 包含 / 覆蓋矩形貼合、感知縮放的可逆性診斷、分解、非變異的反矩陣輔助、向量與四邊形映射、單一配置的點或矩形批次、原地變體與單次掃描的變換邊界,封裝 PDFium 的FS_MATRIX- 可取消的漸進式算繪 —
TPdf.RenderPageProgressive會驅動 PDFium 的FPDF_RenderPageBitmap_Start+RenderPage_Continue迴圈,並透過IFSDK_PAUSE回呼在迭代之間輪詢IPdfCancellationToken,讓長時間的高 DPI 算繪可在頁面中途中止,而非封鎖至完成為止。傳回值為TPdfProgressiveStatus,可能為prsDone、prsCancelled或prsFailed- 零複製算繪路徑 —
RenderPage/RenderTile/RenderPageProgressive會將 PDFium 的輸出直接寫入目標TBitmap的 DIB 緩衝區,而非透過內部緩衝區轉送,每次算繪可節省一份 width × height × 4 位元組的記憶體複本 — 在高 DPI(縮圖面板、列印品質匯出、批次匯出)情境下最為明顯。當目標 DIB 無法安全包裝時,仍保留逐掃描線的後備路徑- 低視力點陣圖變換 — InvertPdfBitmap、GrayscalePdfBitmap 與 DuotonePdfBitmap 原地變換已算繪的 32 位元 TBitmap 像素,用於反色、灰階或雙色低視力檢視
- 即時低視力檢視 —
TPdfView.Options支援reInvert與reNightDuotone,其中NightDuotoneInk與NightDuotonePaper會在疊加層繪製前控制即時夜間配色
繪製操作
- 路徑繪製 — 以線條、貝茲曲線與封閉形狀建立路徑
- 物件移除 — 從 TPdf 或 TPdfView 移除頁面物件並重新產生頁面內容
- 填滿與筆觸 — 設定填滿模式、色彩、透明度與筆觸屬性
- 混合模式 — 支援各種 PDF 混合模式
- 線條樣式 — 設定線條端點、線條接合與筆觸寬度
數位簽章
- 簽章偵測 — 偵測並列舉 PDF 文件中的數位簽章
- 簽章資訊 — 存取簽章內容、位元組範圍、子過濾器、原因與時間
- DocMDP 權限 — 查詢文件修改偵測與防止權限
- 簽章後修訂分析 —
AnalyzeSignatureRevisions依 DocMDP 與 FieldMDP 對原始位元組的增量變更進行分類、識別驗證材料更新,並回報影子定義或未解析的壓縮物件,且不需重新儲存文件- PDF 2.0 橢圓曲線設定檔 — PAdES 驗證識別 NIST、Brainpool、Ed25519 與 Ed448 簽章,檢查曲線與摘要的搭配及 AlgorithmIdentifier 參數,並將不支援的原生密碼學與無效組合分開回報
附件支援
- 附件存取 — 讀取、建立、修改並刪除嵌入式檔案附件
- 有界批次擷取 —
ReadAttachmentMetadata一次性清查所有附件,ExtractAttachmentsToStreams在逐檔、彙總、區塊與取消控制下每次寫出一個已解碼的承載- 附件名稱 — 存取附件檔名
- 附件類型 — 在存在時讀取嵌入式檔案的 MIME 子類型值
- 書籤 — 透過
Bookmarks陣列、BookmarkChildren、HasBookmarkChildren與BookmarkFrom走訪輔助方法,以階層方式導覽文件書籤- 具名目的地 — 透過
Destination、DestinationByName與DestinationCount依索引或名稱存取具名目的地- 頁面標籤 — 透過
PageLabel擷取每頁的頁面標籤;適用於文件前置內容使用羅馬數字的情況- 網頁連結 — 使用
WebLink、WebLinkCount與TPdfView.WebLinkAtPos偵測並導覽頁面上的網頁連結- 連結註解 — 透過
LinkAnnotation、LinkAnnotationCount與TPdfView.LinkAnnotationAtPos存取連結註解及其動作與目的地資訊- 安全連結點按處理 — TPdfView 會在自動 goto / URI 處理之前引發
OnAnnotationLinkClick/OnWebLinkClick事件,且預設停用 launch 動作。連結點按偵測只有在手勢為點按而非拖曳時才會執行,使用全新的 MouseDown 錨點,因此平移手勢仍可順暢地通過既有的捲動路徑而不受影響
算繪
- 高品質算繪 — 透過
RenderPage/RenderTile將頁面算繪至裝置內容、點陣圖或圖塊,並以零複製方式直接寫入目標 DIB 緩衝區- 可取消的漸進式算繪 —
RenderPageProgressive會驅動 PDFium 的漸進式迴圈,並於迭代之間輪詢IPdfCancellationToken,傳回prsDone、prsCancelled或prsFailed。取消時點陣圖會保留目前已完成的部分工作- 平行頁面算繪 —
RenderPagesParallel一次擷取目前文件,為每個 worker 提供獨立載入的 PDFium 模組與文件、保留請求順序,並限制單頁與總計的保留輸出記憶體- 安全內容編校 —
SaveAsRedacted對隔離的快照套用/Redact矩形、保守地移除相交的頂層頁面物件與重疊註解、繪製不透明取代內容、移除內嵌附件,並寫出清理過的單一修訂結果而不變更已載入的文件- 算繪選項 — LCD 文字最佳化(
reLcd)、註解(reAnnotations)、灰階以及列印模式旗標- Skia 掛鉤 — 當呼叫端提供外部 SkCanvas 時,可使用低階
FPDF_RenderPageSkia與FPDF_FFLDrawSkia繫結(視隨附 DLL 匯出而定)- 列印模式選擇 — 透過
SetPdfPrintMode配合TPdfPrintMode設定 EMF、純文字、PostScript、直通、影像遮罩與 Type 42 等 PDFium 列印模式- 非同步重疊 — TPdfView 可在應用程式自有 worker 使用獨立 TPdf 執行個體進行算繪時,顯示選用的載入重疊
- 頁面旋轉 — 支援 0、90、180 與 270 度旋轉(
ro0、ro90、ro180、ro270)- 透明度偵測 —
Transparent屬性會回報目前頁面上是否有任何物件具備透明度,包括混合模式與部分 alpha
檢視(TPdfView)
- 顯示模式 —
dmSingleContinuous、dmTwoPageContinuous與dmTwoPageContinuousWithCover(封面頁獨立顯示,接著以雙頁跨頁顯示)。單元層級的ComputeSpreadPages輔助函式可在不建立檢視器執行個體的情況下公開跨頁的數學計算- 符合模式 —
FitMode決定頁面於檢視區中的呈現方式:pfmNone(手動縮放)、pfmActualSize(100%)、pfmFitPage(整頁符合檢視區)、pfmFitWidth(頁面寬度符合檢視區寬度)與pfmFitHeight(頁面高度符合檢視區高度)。啟用的符合模式會於 Resize 與目前頁面變更時自動重新套用;直接設定 Zoom 會取消啟用的符合模式(FitMode 還原為pfmNone),符合標準 PDF 檢視器的慣例- 縮放控制 — 透過
PageZoom、PageWidthZoom、PageHeightZoom與ActualSizeZoom逐頁輔助方法進行可變縮放- 頁面色彩 —
PageColor將算繪的 PDF 頁面背景與外層控制項的Color解耦。預設為clWhite,因此 PDF 頁面現在無論主應用程式的主題為何,都會以紙白色算繪。深色模式檢視器可保持捲動區域為深色,而實際的 PDF 頁面則保持白色(或應用程式選擇的任何色彩)- 互動式文字選取 — 終端使用者可在 PDF 頁面上拖曳選取文字,並自動在選取與平移之間進行命中測試:點按字元會開始選取拖曳,點按空白處則平移。連按兩下選取字詞、連按三下選取行、
Ctrl+A選取頁面(跨頁模式下為雙頁),Ctrl+C以CF_UNICODETEXT複製,Shift+arrows延伸選取,游標停留於文字上時切換為crIBeam,拖曳至檢視器邊緣會自動捲動頁面。新增已發布的SelectionColor與OnSelectionChange;以及新的公開成員HasSelection、SelectedText、SelectionCharCount、ClearSelection、SelectAll、CopySelectionToClipboard。跨頁顯示模式會跨越兩個可見頁面進行選取,並以 CR/LF 串接。當主應用程式未指派自有PopupMenu時,會自動附加預設的滑鼠右鍵「複製」快顯功能表。於自助服務終端主應用中,可由 v1.17.0 的AllowUserTextSelection旗標控管- 座標對應 — 透過
DeviceToPage/PageToDevice在檢視器裝置座標與 PDF 頁面座標之間轉換,包括可接受TRect並傳回TPdfRectangle的多載版本- 文字選取與命中測試 — 透過
CharacterIndexAtPos解析檢視器點下方的字元,並透過PaintSelection繪製文字選取標示- 滑鼠與鍵盤 — 完整的輸入裝置支援,包含滑鼠拖曳捲動、PgUp / PgDn / Ctrl+Home / Ctrl+End 快捷鍵,以及滾輪上 / 滾輪下頁面導覽。Ctrl+滾輪保留給應用程式縮放使用,導覽處理常式會略過
- 使用者輸入鎖定 —
AllowUserPageChange控管鍵盤頁面快捷鍵、ChangePageOnMouseScrolling控管滾輪頁面跳轉,AllowUserTextSelection控管滑鼠 / 鍵盤的文字選取輸入。以上三者均預設為 True;將其設為 False 即可在不繼承的情況下鎖定自助服務終端、預覽窗格或唯讀嵌入- 非同步算繪重疊 —
AsyncRendering、LoadingText與LoadingColor會在已算繪頁面上繪製小型「Loading...」指示符,讓使用自有 worker 進行長時間算繪的應用程式可共用一致的視覺提示。預設值會保留既有行為。TPdf現在會逐執行個體序列化算繪與頁面卸載呼叫;應用程式仍負責 worker 排程,且必須避免在算繪進行中變更文件- 安全連結點按處理 —
LinkOptions是公開發布的集合,控管四種 PDF 連結動作類型的自動行為:loAutoGoto(頁面跳轉)、loAutoOpenURI(ShellExecute)、loAutoLaunch(ShellExecute)與loAutoEmbeddedGoto(保留)。預設只啟用loAutoGoto與loAutoOpenURI;loAutoLaunch與loAutoEmbeddedGoto保持關閉,如此誤觸點按即無法執行任意程式。OnAnnotationLinkClick與OnWebLinkClick會在任何自動動作之前觸發,並允許應用程式將事件標記為 Handled 或將其重新導向- 表單互動 — 在檢視器內進行互動式表單編輯,加上 v1.23.0 的選取 / 復原 / 重做輔助方法
- 視覺樣式 —
PageShadowSize、PageShadowColor與PageBorderColor會在頁面矩形下方繪製選用的投影,並於其周圍繪製一像素邊框;SmoothScroll現在會以計時器驅動的分段方式為行 / 頁捲軸命令製作動畫,而拖曳捲軸滑塊則仍維持即時反應- 縮圖導覽 —
TPdfThumbnailView(單元FPdfThumbnail)會在可捲動的側邊面板中每列繪製一個頁面縮圖,具備懸停與選取標示,並支援點按即跳轉的導覽。設計用於放在 TPdfView 旁邊。屬性:CurrentPageIndex、ThumbnailWidth、ThumbnailHeight、TextColor、HoverColor、SelectionColor、BorderColor;事件:OnPageClick
壓縮
- 自動壓縮 — 當
Compressed屬性為 True(預設)時,儲存時會確保所有 PDF 串流皆採用 FlateDecode 壓縮- 後處理 — 壓縮引擎會掃描儲存後的 PDF 資料,並使用 zlib 最大壓縮率壓縮任何未壓縮的串流
- 交互參照重建 — 當串流壓縮變更位元組偏移時自動重建 xref 表
- 零負擔 — 若所有串流皆已壓縮,資料會原樣通過不作修改
安全性 (Security)
- 密碼支援 — 開啟密碼保護的 PDF 文件
- 權限 — 讀取文件與使用者權限;
SecurityAudit範例將權限、附件、文件 JavaScript、URI / Launch 連結、簽章、XFA 與 V8 可用性整合為唯讀的風險面,並支援 TXT / JSON 報告儲存與 TXT 複製動作- 有界 DER 工具組 —
FPdfAsn1可編碼低位與高位標籤號碼、具型別值、排序過的 SET OF 集合,以及標準時間或字串形式;其零複製讀取視窗、具型別解碼器與資源受限的驗證器支援 CMS、PAdES、憑證與時間戳工作流程- 簽章專屬的長期驗證 —
TPadesDssOptions.Vris寫入以雜湊為鍵的間接 VRI 字典,而共用的憑證、OCSP 與 CRL 串流會依內容雜湊去重;PAdES B-LT 或 B-LTA 簽署會自動建立新簽章的 VRI- 遠端與中斷簽署 —
PreparePadesRemoteSignature為 HSM 或雲端簽署持久保存 SHA-256 文件摘要、精確 ByteRange、佔位座標與預備 PDF 指紋,而CompletePadesRemoteSignature會在寫入輸出前拒絕被修改、重複使用、過大或摘要不符的工作階段- 簽章修訂原則分析 —
AnalyzeSignatureRevisions重建傳統、混合與 xref 串流修訂鏈,對每個簽章套用 DocMDP 與 FieldMDP,並對格式錯誤、影子、壓縮或超出預算的變更採取失敗即關閉策略- 防歧異的簽章設定檔 — PAdES 驗證只在最上層簽章字典層級計算必要的鍵值、拒絕重複與不一致的 Sig 或 DocTimeStamp 設定檔,並要求 ByteRange 恰好排除直接的十六進位 Contents 權杖
- 多簽章證據匯出 —
BuildPadesEvidenceReport將 PDFium 事實、CMS 原則、信任與時間戳狀態、憑證路徑雜湊、DSS/VRI 涵蓋範圍與修訂決策相互關聯,並以有界的 JSON 與 CSV 輸出- 封存時間戳更新 —
RenewPadesArchiveTimestamp對既有的精確簽章歷史附加 RFC 3161 Document Time-stamp,可先選擇刷新完整 DSS,並在輸出前驗證產生的 B-LTA 鏈- 非同步信任驗證 —
ValidatePadesTrust與ValidatePadesTrustAsync驗證原始位元組的分離式簽章、簽署者與 TSA 鏈結、可選的線上撤銷證據,以及 RFC 3161 時間戳權杖,附分階段進度、有界擷取與合作式取消- 合格信任 —
TPdfEuropeanTrustedList只剖析經呼叫端驗證的 ETSI 信任清單、重新驗證快取的 XML、接受呼叫端自有的更新來源,並透過QualifiedTrustEvaluator提供離線的合格服務評估- 移除安全性 — 儲存文件並移除安全性(於授權時)
列印
- 列印模式 — 透過全域
SetPdfPrintMode函式於 EMF、純文字、PostScript Level 2 / 3、PostScript 直通、EMF 影像遮罩與 Type 42 列印模式之間選擇- 檢視器偏好設定 — 透過
PrintCopies、PrintPageRanges(以一為基底的頁面範圍)、PrintScaling與PrintPaperHandling呈現文件作者的意圖;SetPdfPrintPaperHandlingDevMode會將雙面提示對應至 WindowsDEVMODE.dmDuplex- N-up 列印 — Delphi、C++Builder 與 Lazarus 的
PrintPreferences範例展示 N-up 紙張組合(每張 1 / 2 / 4 / 9 頁),具備奇數 / 偶數頁面過濾、灰階算繪、選用 1 像素儲存格邊框、PDF 作者列印偏好設定,以及透過SetPdfPrintPaperHandlingDevMode對應雙面意圖
隨附範例
Demo\Delphi、Demo\CBuilder與Demo\Lazarus樹狀目錄隨附可執行的範例專案,在所有三大 IDE 家族中演練實際的 API 介面。重點包括:
- PDFViewer / MultiPageViewer / SplitView — 端對端的 TPdfView 用法:載入、導覽、縮放、旋轉、雙頁跨頁、感知封面的版面配置,以及 Delphi / C++Builder / Lazarus 帶同步命令的並排 PDF 比對;檢視器範例也是多 GB 大小 PDF 的實用速度測試,2.x GB 的文件幾乎可立即達到可用的首次檢視狀態,而頁面算繪仍保持回應
- ViewerInteractionLab — Delphi、C++Builder 與 Lazarus 著重於 TPdfView 互動的範例,涵蓋顯示模式、符合模式、頁面色彩、旋轉、搜尋標示、文字選取、選取文字預覽、剪貼簿動作以及 DeviceToPage 座標回饋
- SearchAndSelect — Delphi、Lazarus 與 C++Builder 著重於工作流程的範例,涵蓋全頁面搜尋結果列表、上一個 / 下一個符合導覽、連按兩下結果跳轉、
HighlightSearchText、區分大小寫 / 整字搜尋、AllowUserTextSelection、SelectedText、SelectAll、CopySelectionToClipboard、ClearSelection與跨頁顯示模式- PreflightReport — 可重複使用的
FPdfPreflightReport物件收集 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R 與 PDF/VT 結果,附狀態、Info / Warning / Error 嚴重性、查詢、搜尋、篩選、確定性彙總、穩定的 SHA-256 指紋、TXT / HTML / Markdown / JSON / CSV 輸出,以及 SARIF 2.1.0 / JUnit XML / NDJSON / XML 自動化格式;Delphi、Lazarus 與 C++Builder 範例加上主控台工作流程提供預覽、批次路由、摘要、報告附件與 CI 結束代碼閘控- ContentExtractionLab — Delphi、Lazarus 與 C++Builder 整合的內容清單工作流程,涵蓋文件中繼資料、頁面文字、頁面物件、影像、附件、連結、註解、書籤以及字型 / 字元度量;支援 TXT / JSON 匯出、全部 / 全不選類別選擇、儲存來源 PDF 與報告複製動作
- WatermarkStamp — Delphi、Lazarus 與 C++Builder 可重複使用的 Form XObject 工作流程,適用於多頁目標 PDF 上的置中浮水印、角落戳印與頁碼標籤
- CreatePDF — 從頭建立含文字、影像、路徑、表格與浮水印組合的多頁 PDF;包含「European Text」選項,可寫入帶重音的捷克文 / 法文 / 德文 / 西班牙文 / 葡萄牙文 / 波蘭文 / 土耳其文文字,用於驗證字型選擇與 Unicode 處理
- ExtractText / ExtractImages / ContentExtractionLab — 將擷取的文字(包含依每頁分割的輸出)或嵌入式影像儲存至磁碟,或在一次處理中產生多類別內容清單報告
- FormFill — 讀取 AcroForm 欄位中繼資料、寫入值、重新產生 /AP 外觀,並儲存可編輯或扁平化的結果
- FontProperties — 在 Delphi、C++Builder 與 Lazarus 中透過 TPdf 與 TPdfView 檢查索引式字元 / 字型中繼資料
- MergePDF / SplitPDF — 合併多個來源 PDF(支援逐檔頁面範圍選擇、選用輸出路徑、執行記錄、取消按鈕與合併完成摘要),或將一個 PDF 分割為逐頁輸出檔案
- PDFtoJpg / BatchExport — Delphi、C++Builder 與 Lazarus 一次性或批次多檔 PDF 轉 JPG,具備逐檔整體進度、逐頁目前進度、DPI / 品質 / 密碼輸入,以及由
IPdfCancellationToken支援的可合作式取消批次- StandardsLab — Delphi、C++Builder 與 Lazarus 適用於 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R 與 PDF/VT 驗證、問題回報與標準導向儲存輸出的工作流程範例
- PrintPDF / PrintPreferences — Delphi、C++Builder 與 Lazarus 的標準 PDF 列印,具備預覽、頁面範圍、份數、自動分頁、進度與取消(PrintPDF),加上 Delphi、C++Builder 與 Lazarus 的 N-up 紙張組合,具備奇數 / 偶數過濾與 PDF 作者列印偏好設定(PrintPreferences)
- SecurityAudit — Delphi、C++Builder 與 Lazarus 唯讀的風險面範例,涵蓋權限、附件、JavaScript 動作、URI / Launch 連結、網頁連結、簽章、XFA 狀態、V8 / XFA 輔助可用性與 TXT / JSON 稽核報告
- Attachment — 建立 PDF、新增 / 列舉 / 擷取 / 刪除 / 儲存嵌入式檔案附件,並顯示 MIME 子類型
- ImageToPDF — Delphi、C++Builder 與 Lazarus 影像批次轉換為單一 PDF,每張影像一頁,具備預覽與逐影像進度
Delphi、C++Builder 與 Lazarus 回歸測試套件涵蓋 147 個(Pas)/ 123 個(C++)案例,共用相同的測試 PDF 檔案,以確保行為在所有三大 IDE 家族中皆能逐位元組對齊
平台支援
- Delphi — Delphi XE5(RAD Studio XE5)至 Delphi 13.1 Florence(RAD Studio 13.1)
- C++Builder — C++Builder XE5(RAD Studio XE5)至 C++Builder 13.1 Florence
- Lazarus — Free Pascal / Lazarus 支援
- Win32 / Win64 — 32 位元與 64 位元 Windows 平台皆支援
頁面對齊比較可辨識新增、刪除與移動的頁面,並在資源上限內提供 Unicode 文字差異與多個視覺區域;疊圖則讓這些變更可以匯出
交易式導覽合併可在匯入選定頁面或調整頁面順序時,保留大綱階層、樣式、URI 動作與重新對應的頁面目的地
可選用的 Tesseract OCR為掃描頁面加入可搜尋文字,並提供明確的相依項目診斷、取消操作與資源上限
以交易方式合併選定頁面的 AcroForm,支援明確的名稱策略與資源隔離;可選用的條碼提供者可產生 Code128、QR、DataMatrix 與 PDF417,並辨識灰階影像