核心组件
- TPdf — 主 PDF 文档处理组件,用于打开、导航、提取文本以及编辑 PDF 文档
- TPdfView — 用于显示并与 PDF 页面交互的可视化组件
- TPdfReadingSession — 面向宿主 TTS 引擎与 TPdfView 逐词跟踪的朗读编排组件
- TPdfThumbnailView — 用于翻页导航的可滚动缩略图侧栏
- 原生 LCL 平台 - Linux Qt6 和 macOS Cocoa 使用原生 PDFium、正确的 LP64 绑定、平台字体与文件服务,以及实际位图通道布局;已验收的 Free Pascal/LCL 配置与能力边界见原生配置
文档操作
- 文档加载 — 通过
LoadCustomDocument从磁盘、内存流、完整字节数组、零基Index/Count字节数组窗口或按需 TStream 适配器加载 PDF 文件;兼容、严格与恢复三种策略提供有界的经典、混合与 xref-stream 诊断,同时不替换 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 in)- 页面重排 —
MovePages原地按零基索引数组重排页面,并指定首个被移动页面的目标位置- 页面方案验证 —
ValidatePagePlan预览删除、移动、插入、拆分与合并映射,清点导航、页标签、表单、结构树、导入特性与签名的影响,并拒绝会留下悬空目标或未经显式授权修改已签名内容的方案- 两遍式布局生成 —
GenerateLayout先度量并分页折行文本、标尺、图像、页面 XObject、页眉与页脚,再原子性地输出原生页面对象;稳定的{page}与{pages}占位符会保留度量得到的页数- 磁盘支撑的分页布局 —
GeneratePagedLayout把命令写入调用方选择的可寻址存储,从紧凑的非连续段恢复每一页,用 LRU 缓存限制保留的页面数组,并顺序追加 PDFium 页面- 跨页表格布局 —
TPdfLayoutTable一次性解析固定、分数与内容自适应列宽,重复连续的表头行,拆分符合条件的正文行,保持跨行分组完整,并输出标题、单元格边框、链接以及跨页连续的 Table / TR / TH / TD 语义层级- 布局节点缓存 — 布局方案按完整的约束、内容、字体、样式、来源与度量器标识缓存;
TPdfLayoutCachedNode延迟构建重复模板,并从单个可复用的原生 Form XObject 输出每个放置- 自动 Tagged PDF 布局 —
GenerateTaggedLayout基于同一份度量布局方案输出原生 MCID、Artifact、Document 结构树、ParentTree 与 IDTree 映射、标题、列表、带替换文本的图形、表头,以及带 OBJR 归属的 Link 注释;条目约束让块与标题保持同页、执行孤行 / 寡行下限并强制物理分页- 标记内容编辑 —
PageObjectMarks、AddPageObjectMark、SetPageObjectMarkParam、RemovePageObjectMarkParam与RemovePageObjectMark通过稳定的原生标记检查和修改 BDC 属性列表- 双向文字与复杂文种文本 —
AddShapedText把方向性运行、上下文字形、连字、步进与偏移转换为定位好的 CID Type 2 字形,同时用生成的 ToUnicode 映射与ActualText保留逻辑 Unicode 语义- CID Type 2 字体编写 —
AddCidType2Text嵌入调用方提供的 TrueType 数据,带显式的 CID 到 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 结构树 — 检查逻辑结构元素、无障碍文本、语言、标记内容 ID 与层级,针对带标签的 PDF 页面
- 查看器首选项 — 从文档查看器首选项字典读取
PrintCopies、PrintPageRanges、PrintScaling和PrintPaperHandling;保存的 PDF 默认带一个 Fit Height 首页打开动作
文本操作
- 文本提取 — 通过
Text、TextInRectangle、索引化的Character、CharacterRectangle和CharacterOrigin属性按字符精度从 PDF 页面提取文本- 结构化文本模型 —
GetStructuredText依据原生字符几何、字体元数据、文本对象标识、Tagged PDF 语义与物理版式回退排序,构建有界的页面、块、行与样式跨度层级- 表格检测与提取 —
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为已有文本对象设置逐字符位置- 字体信息 — 在按页面对象级别上读取字体属性:族名、是否嵌入、斜体角度、ascent / descent 和原始字体数据
注释支持
- 注释类型 — 支持文本、链接、高亮、下划线、删除线以及多种其他注释类型
- 注释创建 — 以编程方式创建新注释
- 注释编辑 — 修改已有注释属性,包括颜色、透明度和内容
- 链接注释 — 处理内部与外部链接,支持动作
表单支持
- 语音表单填写访问器 - 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 字节流,作为 /DCTDecode XObject 直接嵌入,无需重新编码- Picture 支持 —
AddPicture接收TPicture,通过注册的 VCL/LCL 图形类自动转换格式- 直接图像插入 —
AddImage(FileName)识别任何在 VCL 或 LCL 图形单元中注册的格式(BMP、PNG via PngImage、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在 PascalTStream与 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对核心保存后处理采用同一策略,而默认的打开动作与页标签 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 混合模式
- 线样式 — 配置 line cap、line join 和描边宽度
数字签名
- 签名检测 — 检测并枚举 PDF 文档中的数字签名
- 签名信息 — 读取签名 contents、字节范围、sub-filter、原因和时间
- MDP 权限 — 查询文档修改检测与防止权限
- 签名后修订分析 —
AnalyzeSignatureRevisions依据 DocMDP 与 FieldMDP 对原始字节的增量变更分类,识别验证材料更新,并在不重新保存文档的情况下报告影子定义或未解析的压缩对象- PDF 2.0 椭圆曲线配置 — PAdES 验证可识别 NIST、Brainpool、Ed25519 与 Ed448 签名,检查曲线与摘要的一致性以及 AlgorithmIdentifier 参数,并把不支持的原生密码学与无效组合分开报告
附件支持
- 附件访问 — 读取、创建、修改并删除嵌入的文件附件
- 有界批量提取 —
ReadAttachmentMetadata一次性清点附件,ExtractAttachmentsToStreams在逐文件、聚合、分块与取消控制下每次写出一个解码后的载荷- 附件名称 — 访问附件文件名
- 附件类型 — 在存在时读取嵌入文件的 MIME subtype 值
- 书签 — 通过
Bookmarks数组、BookmarkChildren、HasBookmarkChildren和BookmarkFrom等遍历辅助方法以层级方式导航文档书签- 命名目标 — 通过
Destination、DestinationByName和DestinationCount按索引或名称访问命名目标- 页面标签 — 通过
PageLabel读取每页的页面标签;当文档对前言部分使用罗马数字时尤为有用- Web 链接 — 通过
WebLink、WebLinkCount和TPdfView.WebLinkAtPos检测并导航页面上的 Web 链接- 链接注释 — 通过
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、pass-through、image-mask 和 Type 42 等 PDFium 打印模式- 异步遮罩层 — TPdfView 可在应用拥有的 worker 通过独立 TPdf 实例进行渲染时,显示一个可选的加载遮罩
- 页面旋转 — 支持 0、90、180 和 270 度旋转(
ro0、ro90、ro180、ro270)- 透明度检测 —
Transparent属性报告当前页面上是否存在带透明度的对象,包括混合模式与部分 alpha
查看(TPdfView)
- 显示模式 —
dmSingleContinuous、dmTwoPageContinuous和dmTwoPageContinuousWithCover(封面页单独显示,然后继续双页跨页)。单元级的ComputeSpreadPages辅助方法暴露跨页数学,无需实例化查看器- Fit 模式 —
FitMode决定页面在视口中的呈现方式:pfmNone(手动缩放)、pfmActualSize(100%)、pfmFitPage(整页适应视口)、pfmFitWidth(页面宽度对齐视口宽度)以及pfmFitHeight(页面高度对齐视口高度);当前 Fit 模式会在 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时,自动附加默认的右键 Copy 弹出菜单。受 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 表
- 零开销 — 如果所有流都已经压缩,数据将原样通过
安全
- 密码支持 — 打开密码保护的 PDF 文档
- 权限 — 读取文档和用户权限;
SecurityAuditdemo 把权限、附件、文档 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持久化 SHA-256 文档摘要、精确 ByteRange、占位符坐标与已准备 PDF 的指纹,供 HSM 或云端签名使用;CompletePadesRemoteSignature在写出结果前拒绝被修改、重复使用、超大或摘要不匹配的会话- 签名修订策略分析 —
AnalyzeSignatureRevisions重建经典、混合与 xref-stream 修订链,按签名应用 DocMDP 与 FieldMDP,并对畸形、影子、压缩或超出预算的变更采取默认失败- 抗歧义签名配置 — PAdES 验证只在顶层签名字典级别统计必需键,拒绝重复项与不一致的 Sig 或 DocTimeStamp 配置,并要求 ByteRange 恰好排除直接的十六进制 Contents 令牌
- 多签名证据导出 —
BuildPadesEvidenceReport把 PDFium 事实、CMS 策略、信任与时间戳状态、证书路径哈希、DSS/VRI 覆盖以及修订决策关联为有界的 JSON 与 CSV 输出- 归档时间戳续期 —
RenewPadesArchiveTimestamp在既有的完整签名历史上追加一个 RFC 3161 文档时间戳,可选地先刷新完整 DSS,并在输出前验证得到的 B-LTA 链- 异步信任验证 —
ValidatePadesTrust与ValidatePadesTrustAsync验证原始字节的分离签名、签名者与 TSA 链、可选的在线吊销证据以及 RFC 3161 时间戳令牌,提供分阶段进度、有界检索与协作式取消- 合格信任 —
TPdfEuropeanTrustedList只解析经调用方认证的 ETSI 信任列表,对缓存的 XML 重新认证,接受调用方持有的更新源,并通过QualifiedTrustEvaluator提供离线的合格服务评估- 移除安全 — 在授权情况下保存为移除安全的文档
打印
- 打印模式 — 通过全局
SetPdfPrintMode函数在 EMF、纯文本、PostScript Level 2 / 3、PostScript pass-through、EMF image-mask、Type 42 等打印模式间切换- 查看器首选项 — 通过
PrintCopies、PrintPageRanges(基于一的页面范围)、PrintScaling和PrintPaperHandling呈现文档作者意图;SetPdfPrintPaperHandlingDevMode将双面打印提示映射到 WindowsDEVMODE.dmDuplex- N-up 打印 — Delphi、C++Builder 和 Lazarus 的
PrintPreferencesdemo 展示 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 对比;这些查看器 demo 也是面向数 GB PDF 的实用速度测试——2.x GB 文档几乎可以立即获得可用的首屏视图,同时页面渲染保持响应
- ViewerInteractionLab — Delphi、C++Builder 和 Lazarus 专注 TPdfView 交互的样例,覆盖显示模式、Fit 模式、页面颜色、旋转、搜索高亮、文本选择、所选文本预览、剪贴板操作以及 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 demo 加上控制台工作流提供预览、批量路由、汇总、报告附件与 CI 退出码闸口- ContentExtractionLab — Delphi、Lazarus 和 C++Builder 统一的内容清点工作流,覆盖文档元数据、页面文本、页面对象、图像、附件、链接、注释、书签以及字体 / 字符指标,提供 TXT / JSON 导出、整批 / 取消所有分类选择、源 PDF 保存与报告复制操作
- WatermarkStamp — Delphi、Lazarus 和 C++Builder 可复用的 Form XObject 工作流,覆盖多页目标 PDF 上的居中水印、角部印章和页码标签
- CreatePDF — 从零构建多页 PDF,含文本、图像、路径、表格与水印合成;可勾选“欧洲文本”选项写入带重音的捷克语 / 法语 / 德语 / 西班牙语 / 葡萄牙语 / 波兰语 / 土耳其语文本,用于检查字体选择与 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),含预览、页面范围、份数、collate、进度与取消;以及 Delphi、C++Builder 和 Lazarus 的 N-up 拼版打印(PrintPreferences),含奇/偶页过滤与 PDF 作者打印首选项
- SecurityAudit — Delphi、C++Builder 和 Lazarus 的只读风险面板样例:权限、附件、JavaScript 动作、URI / Launch 链接、Web 链接、签名、XFA 状态、V8 / XFA 辅助可用性,以及 TXT / JSON 审计报告
- Attachment — 创建 PDF;添加 / 列举 / 提取 / 删除 / 保存嵌入文件附件,并显示 MIME subtype
- ImageToPDF — Delphi、C++Builder 和 Lazarus 的图像批量转换,每张图一页合并到一份 PDF,含预览与逐图进度
Delphi、C++Builder 和 Lazarus 的回归测试套件覆盖 147(Pas)/ 123(C++)个用例,共享同一组 fixture 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,并识别灰度图像