PDFiumVCL 发布说明
PDFiumVCL 用户可见功能、修复、查看器改进、文档生成、PDF/A 输出、渲染和文档更新的版本历史。
Version 1.39.52
变更 (Changed)
- 增强
Demo\Lazarus\CreatePDF,入门示例现在会生成包含 vector paths、table content、embedded image、text annotation、rotated text 和更清晰 document-building walkthrough 的两页 PDF。 - 为所有 Delphi、C++Builder 和 Lazarus demo folder 新增美观的
README.html页面,并将剩余 text-only demo README 替换为 browser-readable guide。 - 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.52。
Version 1.39.51
- 增强
Demo\Delphi\PreflightReportClibatch summary,现在会按 selected standards 汇总 Pass、Action required 和 Review 三类 standard status totals。 - TXT / HTML / JSON / CSV summary 的 per-file rows 现在包含 action-required count 与 review count,CI artifacts 不必打开每个 generated report 也能快速检查状态分布。
- 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.51。
Version 1.39.50
- 增强
Demo\Delphi\PreflightReportClidirectory batch mode,batchdir=folder现在会先收集 discovered PDF paths、排序,然后按稳定顺序生成 reports。 - Recursive directory scans 现在会生成可复现的 report order 和 summary rows,而显式
batch=list.txtprocessing 继续保留 list file order。 - 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.50。
Version 1.39.49
- 增强
Demo\Delphi\PreflightReportClibatch summary,现在会记录 run settings:source kind、source path、recursive state、output directory、report format、selected standards 和failon=mode。 - JSON summary 新增
runobject,TXT 与 HTML summary 显示 run settings section,CSV rows 重复同一组 audit columns,方便 spreadsheet 和 CI pipelines 使用。 - 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata 到 1.39.49。
Version 1.39.48
- 增强
Demo\Delphi\PreflightReportClibatch output naming,当 duplicate input file names 共用同一个outdir=时,生成的 reports 不再互相覆盖。 - Batch runs 会在同一次运行中已分配的 report path 冲突时追加
-2、-3及后续后缀,并在 summaries 中记录最终 collision-safe report path。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.48。
Version 1.39.47
- 增强
Demo\Delphi\PreflightReportClibatch summaries,使 TXT 与 JSON 输出现在包含 total files、processed files、failed files、issues 与failon=matches 的 aggregate totals。 - CSV summaries 继续保持纯 row table,兼容现有 consumers;HTML summaries 继续在 dashboard header 中显示同一组 aggregate metrics。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.47。
Version 1.39.46
- 增强
Demo\Delphi\PreflightReportCli,加入summary=batch.html/.htm,让 batch runs 可在 TXT / CSV / JSON manifests 之外输出 browser-readable dashboard。 - HTML summaries 会显示 total、processed、failed、issue 与
failon=match metrics,并逐项列出 input、report links、status、counts 与 error text。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.46。
Version 1.39.45
- 增强
Demo\Delphi\PreflightReportCli,加入batchdir=folder与recursive,让脚本可直接扫描 PDF folders,而不必先写 list file。 - Directory batch mode 复用 list-based batch mode 的
outdir=、summary=、standards=与failon=行为;non-recursive 只扫描选定 folder,recursive会包含 subfolders。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.45。
Version 1.39.44
- 增强
Demo\Delphi\PreflightReportCli,加入summary=batch.csv|json|txt,让 batch runs 可在 per-file reports 旁输出 machine-readable manifest。 - Batch summaries 包含每个 input path、report path、status、standard count、passed count、issue count、
failon=match state 与 error text,便于 CI jobs 和外部脚本使用。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.44。
Version 1.39.43
- 增强
Demo\Delphi\PreflightReportCli,加入batch=list.txt与outdir=reports,方便脚本在一次运行中为一组 PDF 文件生成 preflight reports。 - Batch mode 会跳过空行和
#注释行,按输入 PDF 派生每个.preflight.<ext>report name,在单个文件失败后继续处理,并在返回前汇总 processed 与 failed files。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.43。
Version 1.39.42
- 增强
Demo\Delphi\PreflightReportCli,新增failon=none|issues|action|review,使 CI jobs 可把生成的 preflight results 转换为确定性的 exit codes。 - CLI 会在 report file 和 optional attached-report PDF 生成完成后,根据选中的
failon=rule 命中情况返回 exit code 2;runtime errors 仍返回 exit code 1。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.42。
Version 1.39.41
- 增强
Demo\Delphi\PreflightReportCli,新增attach=output.pdf,可把生成的 preflight report 作为 document-level attachment 嵌入新的 PDF copy。 - CLI 会保留落盘的 TXT / HTML / Markdown / JSON / CSV report file,并拒绝把附件写回原始 input PDF path,以降低误覆盖风险。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.41。
Version 1.39.40
- 新增
Demo\Delphi\PreflightReportCli,作为 Delphi console companion,可在不打开 viewer 的情况下以 scriptable workflow 生成FPdfPreflightReport。 - CLI 支持无参数 sample creation,以及 input / output arguments、optional password、
text/html/md/json/csvoutput formats,并可通过standards=filtering 选择 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R 与 PDF/VT。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.40。
Version 1.39.39
- 增强
FPdfPreflightReport,新增TPdfPreflightReport.ToMarkdown与SaveMarkdownToFile,使 preflight reports 可导出为适合 issue tracker 的 Markdown。 - 更新 Delphi、C++Builder 与 Lazarus
PreflightReport示例,在现有 TXT / HTML / JSON / CSV workflow 之外增加 Markdown preview switching 与 Save MD actions。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.39。
Version 1.39.38
- 增强 Delphi、C++Builder 与 Lazarus
SecurityAudit示例,在现有 TXT save / copy workflow 之外增加 JSON audit report export。 - JSON report 包含
format、generatedAt、summary、findingCount,以及带 severity、area、detail 字段的结构化findingsrows。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,以报告 1.39.38。
Version 1.39.37
- 增强
FPdfPreflightReport,新增TPdfPreflightReport.ToCsv与SaveCsvToFile,使 preflight reports 可以导出为 spreadsheet-friendly CSV。 - 更新 Delphi、C++Builder 与 Lazarus
PreflightReportsamples,在现有 TXT / HTML / JSON workflow 之外增加 CSV preview switching 与 Save CSV actions。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.37。
Version 1.39.36
- 增强
FPdfPreflightReport,新增TPdfPreflightReport.IssueCategoryCounts以及可复用的TPdfPreflightIssueCategoryCount和TPdfPreflightIssueCategoryCounts类型,用于按 category 聚合 marker-level issues。 - 更新
TPdfPreflightReport.ToText、ToHtml与ToJson,使生成的 PreflightReport 输出在 per-standard rows 与 detailed issue recommendations 之外包含 issue-category count summaries。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.36。
Version 1.39.35
- 将已扩展的
PrintDialogsample 在 Delphi、C++Builder 与 Lazarus 三端重命名为PrintPreferences,让 demo name 与 PDF author print preferences、N-up printing、odd / even filtering、grayscale、cell border 和 duplex mapping workflow 对齐。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.35。
Version 1.39.34
- 增强
Demo\Delphi\PrintPDF,支持拖放加载 PDF,并将已有Demo\CBuilder\PrintPDFworkflow 与 Delphi、Lazarus PrintPDF 示例一起写入文档。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.34。
Version 1.39.33
- 新增
Demo\CBuilder\SplitView,补齐 Delphi、C++Builder 与 Lazarus 三端 SplitView sample matrix。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.33。
Version 1.39.32
- 新增
Demo\Lazarus\SplitView,让 side-by-side PDF comparison 覆盖 Lazarus,包含 two- or three-pane layouts、active-view navigation、synchronized commands、zoom presets 与 rotation。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.32。
Version 1.39.31
- 新增
Demo\Lazarus\PrintPDF,让标准 PDF print workflow 覆盖 Lazarus,包含 preview navigation、page ranges、copies、collate mode、progress 与 cancellation。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.31。
Version 1.39.30
- 新增
Demo\Lazarus\FontProperties,补齐 Delphi、C++Builder 与 Lazarus 三端 FontProperties sample matrix。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.30。
Version 1.39.29
- 新增
Demo\CBuilder\FontProperties,让 indexed character 与 font metadata 检查在 Delphi sample 之外也覆盖 C++Builder。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.29。
Version 1.39.28
- 新增
Demo\Delphi\ExtractTextPages,补齐 Delphi、C++Builder 与 Lazarus 三端 per-page text extraction sample matrix。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.28。
Version 1.39.27
- 新增
Demo\Lazarus\PrintDialog,补齐 Delphi、C++Builder 与 Lazarus 三端 PrintDialog sample matrix。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.27。
Version 1.39.26
- 新增
Demo\CBuilder\PrintDialog,让 N-up printing 与 PDF author print preferences workflow 在 Delphi sample 之外也覆盖 C++Builder。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.26。
Version 1.39.25
- 新增
Demo\CBuilder\ViewerInteractionLab,补齐 Delphi、C++Builder 与 Lazarus 三端 ViewerInteractionLab sample matrix。 - 更新 library build workflow 与 Win64 C++Builder package outputs,使
TPdfViewviewer interaction methods 可在 Win64 demos 中正确链接。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.25。
Version 1.39.24
- 新增
Demo\Lazarus\ViewerInteractionLab,让 focused viewer interaction workflow 在 Delphi sample 之外也覆盖 Lazarus。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.24。
Version 1.39.23
- 新增
Demo\Lazarus\SearchAndSelect,补齐 Delphi、C++Builder 与 Lazarus 三端 SearchAndSelect sample matrix。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.23。
Version 1.39.22
- 新增
Demo\CBuilder\ContentExtractionLab与Demo\Lazarus\ContentExtractionLab,让 multi-category content extraction workflow 覆盖所有支持的 demo IDE。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.22。
Version 1.39.21
- 增强
Demo\Delphi\PreflightReport、Demo\Lazarus\PreflightReport与Demo\CBuilder\PreflightReport,新增 preview format selector,让用户在保存报告前可检查 text 或 JSON output。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.21。
Version 1.39.20
- 为
FPdfPreflightReport增加 JSON 导出,可通过TPdfPreflightReport.ToJson与SaveJsonToFile生成机器可读的 summary、per-standard status / priority、next action 与 issue detail。 - 更新
Demo\Delphi\PreflightReport、Demo\Lazarus\PreflightReport与Demo\CBuilder\PreflightReport,在 TXT / HTML 导出之外加入 Save JSON 操作。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.20。
Version 1.39.19
- 增强
FPdfPreflightReport,在 TXT / HTML report 中加入TPdfPreflightStatus、issue category、per-standard priority 与 next-action guidance。 - 更新
Demo\Delphi\PreflightReport、Demo\Lazarus\PreflightReport与Demo\CBuilder\PreflightReport,summary grid 现在显示 status、priority、issue count 与 next action。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.19。
Version 1.39.18
- 新增
Demo\Lazarus\SecurityAudit,补齐 Delphi、C++Builder 与 Lazarus 的 read-only PDF risk-surface audit workflow 示例矩阵。 - Lazarus 示例枚举 permissions、attachments、JavaScript actions、URI / Launch link annotations、web links、signatures、XFA state、V8 / XFA helper availability 与 unsupported-feature callbacks,并可把 finding list 保存或复制为 TXT report。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.18。
Version 1.39.17
- 新增
Demo\CBuilder\SecurityAudit,在现有 Delphi 示例之外,把只读 PDF risk-surface audit workflow 带到 C++Builder。 - C++Builder 示例枚举 permissions、attachments、JavaScript actions、URI / Launch link annotations、web links、signatures、XFA state、V8 / XFA helper availability 与 unsupported-feature callbacks,并可把 finding list 保存或复制为 TXT report。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.17。
Version 1.39.16
- 新增
Demo\CBuilder\SearchAndSelect,在现有 Delphi 示例之外,把独立 SearchAndSelect viewer workflow 带到 C++Builder。 - C++Builder 示例可创建或打开 PDF,按全页列出带 page / character-index preview 的 matches,支持 Previous / Next 与 double-click navigation,并用
HighlightSearchText高亮当前页 matches。 - 示例也暴露
AllowUserTextSelection、SelectedText、SelectAll、CopySelectionToClipboard、ClearSelection、OnSelectionChange与 spreadDisplayMode选项;版本元数据同步为 1.39.16。
Version 1.39.15
- 新增
Demo\CBuilder\WatermarkStamp,补齐 reusable Form XObject watermark 与 stamp workflows 的 Delphi、Lazarus、C++Builder 示例矩阵。 - C++Builder 示例会创建 target 与 stamp PDF,通过
CreateXObjectFromPage复用 stamp page,应用TPdfMatrixtransforms,并保存 centered watermarks、corner stamps 与 page number labels。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.15。
Version 1.39.14
- 新增
Demo\Lazarus\WatermarkStamp,把可复用 Form XObject watermark 与 stamp workflow 带到 Lazarus。 - Lazarus 示例会创建 target 与 stamp PDF,通过
CreateXObjectFromPage复用 stamp page,应用TPdfMatrixtransforms,并保存 centered watermarks、corner stamps 与 page number labels。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.14。
Version 1.39.13
- 新增
Demo\CBuilder\PreflightReport,补齐可复用FPdfPreflightReportworkflow 的 Delphi、Lazarus、C++Builder 示例矩阵。 - C++Builder 示例使用
FPdfPreflightReport.hpp生成 standard summaries、TXT report previews、TXT / HTML report files,并提供 Open Last Report 行为。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.13。
Version 1.39.12
- 新增
Demo\Lazarus\PreflightReport,把 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R、PDF/VT preflight report workflow 带到 Lazarus。 - Lazarus 示例可打开或创建 PDF、选择目标 standards、预览 summary rows 与 TXT report output、保存 TXT / HTML reports,并打开最近一次保存的 report。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.12。
Version 1.39.11
- 增强
Demo\Delphi\SearchAndSelect,新增全页搜索结果列表,记录 page number、character index 与 preview text。 - 新增 Previous / Next match navigation 与 double-click result jumping,同时保留当前页
HighlightSearchText行为。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.11。
Version 1.39.10
- 增强
Demo\Delphi\SecurityAudit,新增 Save Report 与 Copy Report 操作,可将当前 summary 和 finding rows 导出为 TXT audit report。 - 当 audit panel 被 reset 时,示例现在会清除 report export state,确保复制或保存的 reports 与可见 findings 一致。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.10。
Version 1.39.9
- 增强
Demo\Delphi\ContentExtractionLab,新增 source-PDF save、report copy-to-clipboard 以及 all / none category selection 操作。 - 当 category selection 变化时,示例现在会让当前 report 失效,确保 TXT / JSON exports 与可见 extraction scope 一致。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.9。
Version 1.39.8
- 新增
Demo\Delphi\ContentExtractionLab,提供统一的 content extraction workflow sample,覆盖 document metadata、page text、page objects、images、attachments、links、annotations、bookmarks 和 font / character metrics。 - 该示例可打开现有 PDF,或创建包含 text、image、attachment、annotation 内容的 synthetic PDF,然后生成 summary rows 以及详细 TXT / JSON reports。
- 更新
TPdf.AboutInfo、Lazarus package metadata 和 installer version metadata,使其报告 1.39.8。
Version 1.39.7
- 新增
Lib\FPdfPreflightReport.pas,提供可复用报告 helper,将ValidatePdfA、ValidatePdfUa、ValidatePdfE、ValidatePdfX、ValidatePdfR、ValidatePdfVT统一包装为TPdfPreflightReport对象。 - 新增
Demo\Delphi\PreflightReportworkflow 示例,可打开或创建 PDF、选择目标 standards、预览 summary rows 与 issue recommendations,并保存 TXT 或 HTML 报告。 - 生成的报告会明确说明内置校验的 marker-level validation 边界,方便应用在需要时配合专用 content-level preflight tools。
- 更新
TPdf.AboutInfo、Lazarus package metadata、package project lists 与 installer version metadata,使其报告 1.39.7。
Version 1.39.6
- 新增
Demo\Delphi\SearchAndSelect,这是一个聚焦 search highlighting、text selection、selected-text preview、copy、clear 与 spread display modes 的 viewer workflow 示例。 - 该示例展示
HighlightSearchText、match-case / whole-word 搜索选项、AllowUserTextSelection、SelectedText、SelectAll、CopySelectionToClipboard和ClearSelection,不新增库 API。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.6。
Version 1.39.5
- 扩展
Demo\Delphi\ViewerInteractionLab,形成 SearchAndSelect 风格的 viewer UX 示例,包含HighlightSearchText、match-case / whole-word 选项、选中文本预览,以及既有 selection / clipboard controls。 - 扩展
Demo\Delphi\PrintDialog,用于检查 PDF author print preferences:PrintCopies、PrintPageRanges、PrintScaling、PrintPaperHandling,并显示SetPdfPrintPaperHandlingDevModeduplex mapping。 - 新增
Demo\Delphi\SecurityAudit,这是一个只读 risk-surface 示例,会列出 permissions、attachments、document JavaScript、URI / Launch links、web links、signatures、XFA state,以及 V8 / XFA helper availability。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.5。
Version 1.39.4
- 新增
Demo\CBuilder\ImageToPDF与Demo\Lazarus\ImageToPDF,补齐 Delphi、C++Builder、Lazarus 三端 ImageToPDF 示例矩阵。 - 新示例展示多图片选择、选中图片预览、每张图片生成一个 PDF 页面、A4 portrait / landscape 页面尺寸选择、居中缩放放置、逐图片进度,以及保存后打开生成的 PDF。
- 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.4。
Version 1.39.3
- 新增
Demo\CBuilder\BatchExport,让 C++Builder 与既有 Delphi、Lazarus 示例一样覆盖多文件 PDF 转 JPG 导出工作流。 - 该示例展示
LoadCustomDocument、IPdfCancellationTokenSource、流式TFileStream输入、每文件与每页进度、取消处理、DPI / quality / password 输入,以及完成后打开输出目录。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.3。
Version 1.39.2
- 新增
Demo\Delphi\WatermarkStamp,这是一个可运行的 Form XObject 工作流示例,会创建目标 PDF 与可复用 stamp PDF,并在每一页应用居中水印、右上角盖章和页码标签。 - 该示例演示
CreateXObjectFromPage、InsertFormObjectFromXObject、TPdfMatrix和FPDFPageObj_SetMatrix,不新增库 API。 - 更新
Docs\en-us\Examples.html,在向FPDFPageObj_SetMatrix传递矩阵时使用当前的TPdfMatrix.Handle模式。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.2。
Version 1.39.1
- 新增
Demo\Delphi\ViewerInteractionLab,集中演示TPdfView的 display modes、fit modes、page colors、rotation、user text selection、clipboard actions 与DeviceToPage坐标反馈。 - 新增
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLab,让 Lazarus 用户也能运行 PDF/A、PDF/UA、PDF/E、PDF/X、PDF/R、PDF/VT 校验与 marker-output 工作流。 - 在
Lib\37.0\PDFiumVcl.dprojandLib\FPC\PDFiumLaz.lpk中列出 standards 单元,并移除 DelphiSplitView示例中重复的Winapi.ShellAPIimport 以修复构建。 - 修复
BatchExport、PDFViewer、MultiPageViewer与SplitView中的 Delphi demo 批量构建阻塞,且不改变其运行行为。 - 修复
PDFViewer与MultiPageViewer的 C++Builder demo 批量构建兼容性:在当前 project mode 下将nullptr改为NULL。 - 更新
TPdf.AboutInfo、Lazarus package metadata 与 installer version metadata,使其报告 1.39.1。
Version 1.39.0
- 新增
Demo\Delphi\StandardsLab,这是一个可运行的标准工作流示例:加载或创建 PDF,运行ValidatePdfA、ValidatePdfUa、ValidatePdfE、ValidatePdfX、ValidatePdfR、ValidatePdfVT,并在同一列表中显示检测到的 conformance、通过状态和 issue 数量。 - StandardsLab 的保存按钮会调用
SaveAsPdfA、SaveAsPdfUa、SaveAsPdfE、SaveAsPdfX、SaveAsPdfR、SaveAsPdfVT,无需编写自定义测试程序即可查看 PDF 标准 marker 输出流程。 - 更新
TPdf.AboutInfo、Lazarus 包元数据与安装器版本元数据到 1.39.0。
Version 1.38.0
TPdfView搜索与文本选择覆盖层现在使用真正的 alpha blending,而不是逻辑 mask 绘制,因此高亮下方的页面内容会被保留。- 新增
SetPdfPrintPaperHandlingDevMode,可将TPrintPaperHandling映射到 WindowsDEVMODE.dmDuplex值:DMDUP_SIMPLEX、DMDUP_HORIZONTAL、DMDUP_VERTICAL。 TPdfView.SmoothScroll现在会用 timer-driven segments 对 line/page scrollbar commands 做动画;thumb tracking 仍保持即时响应。- 更新
TPdf.AboutInfo与安装器版本元数据到 1.38.0。
Version 1.37.0
TPdf新增实例级渲染锁,串行化RenderPage、RenderTile、RenderPageProgressive、页面重载与文档卸载路径。应用现在可以更实际地通过共享组件做 worker 渲染,但仍需自行协调文档修改与生命周期。- 修复 zero-copy bitmap 包装器:遇到 bottom-up
TBitmapDIB 时改走 PDFium 自有缓冲并在结束后 copy out,消除 VCL 渲染测试中的 stride 破坏 / access violation。 - 收紧
TPdfView选区行为:AllowUserTextSelection只限制用户输入,代码级选区 API 仍会绘制;SelectAll改按真实可见 spread 选择,封面页不再误选第 2 页。Delphi、Lazarus、C++Builder 测试同步扩展。 - 更新
TPdf.AboutInfo与安装器版本元数据到 1.37.0。
Version 1.36.0
- 启用
TPdfView终端用户文本选择:v1.17.0 预留的AllowUserTextSelection现在驱动完整拖选流程,支持鼠标拖选、双击词、三击行、Ctrl+A、Ctrl+C与Shift+arrows。 - 新增
SelectionColor、OnSelectionChange与代码级选择 API:HasSelection、SelectionCharCount、SelectedText、ClearSelection、SelectAll、CopySelectionToClipboard。 - spread 显示模式支持跨可见页选择,默认右键 Copy 菜单会在宿主未指定
PopupMenu时自动挂接;切换文档、页码、Active 或 DisplayMode 时会清除选区。 - 扩展 Delphi、Lazarus、C++Builder 回归测试,覆盖选择属性、鼠标路径、键盘快捷键、默认弹出菜单、clipboard round-trip 与 spread 选择。
Version 1.35.0
- 新增 PDF/VT (ISO 16612-2:2010) 标记注入支持:TPdf.SaveAsPdfVT 将当前文档提升为符合 PDF/VT-1 或 PDF/VT-2 的文件(可变数据与事务性印刷的 PDF 子集)。PDF/VT 基于 PDF/X-4 构建 —— ISO 16612-2 §6.2.1 要求每个 PDF/VT-1 文件也必须符合 PDF/X-4 —— 因此注入器在 PDF/VT 专用属性之外同时写入完整的 PDF/X-4 标记集(XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4"、Info/GTS_PDFXVersion (PDF/X-4)与/Trapped、catalog/OutputIntents引用含内嵌 ICC profile 的 OutputIntent 字典)。 - PDF/VT 专用注入包括 XMP
pdfvtid:GTS_PDFVTVersion(按 §6.3 Table 2 取 "PDF/VT-1" 或 "PDF/VT-2")和pdfvtid:GTS_PDFVTModDate(按 §6.3 NOTE 1 与xmp:ModifyDate保持同步)以及同时声明 pdfxid 与 pdfvtid 两个命名空间的 pdfaExtension:schemas 描述(NPES URIhttp://www.npes.org/pdfx/ns/id/和http://www.npes.org/pdfvt/ns/id/)。trailer 含/ID数组。 - 新增 TPdf.SaveAsPdfVTToStream 实现内存中 PDF/VT 输出,以及默认选项简化重载
TPdf.SaveAsPdfVT(FileName)—— 生成 PDF/VT-1 + 内置 sRGB IEC61966-2.1 OutputIntent(3144 字节,与 SaveAsPdfA / SaveAsPdfX 同一份 profile)+/Trapped /False。 - 新增 TPdf.ValidatePdfVT:检查已打开 PDF 的 PDF/VT 合规标记(XMP
pdfvtid:GTS_PDFVTVersion与GTS_PDFVTModDate存在性、pdfvtid:GTS_PDFVTModDate与xmp:ModifyDate相等、底层pdfxid:GTS_PDFXVersion标识、§6.5 catalog/DPartRoot存在性、/OutputIntents含/DestOutputProfile、trailer /ID、加密状态、xmp:CreateDate/ModifyDate存在性),返回 TPdfVTValidationResult,包含检测到的合规级别与问题集合。 - 新增 TPdf.PdfVTConformance 属性:直接返回当前文档的合规级别(pvc1、pvc2、pvcNone 或 pvcUnknown),无需显式调用 ValidatePdfVT。
- 新单元 FPdfPdfvt 中导出的新类型:TPdfVTConformance(pvcUnknown/None/1/2)、TPdfVTTrappedState(ptvUnspecified/True/False/Unknown)、TPdfVTValidationResult、TPdfVTValidationIssue、TPdfVTSaveOptions。
- 文档部分层次结构(§6.5
DPartRoot/DPart树)是应用级结构,由可变数据印刷工作流的收件人 / 页面范围映射决定。SaveAsPdfVT **不会**生成 DPart 树 —— ValidatePdfVT 在缺少/DPartRoot时以pvviMissingDPartRoot报告,方便调用方将 PDF/VT 文件转入独立的 DPart 构建流程。内容级 PDF/X-4 要求(字体嵌入、透明度、ICC 颜色管理、OPI / JavaScript / Reference XObject 禁用等)仍由文档作者与 PDFium 渲染端负责。 - 更新 TPdf.AboutInfo 字符串,使其报告当前产品版本号。
Version 1.34.0
- 新增 PDF/R-1 (ISO 23504-1:2020) 标记注入支持:TPdf.SaveAsPdfR 通过对基础 PDF 做增量更新后处理,将当前文档提升为符合 PDF/R-1 的文件(PDF 的 raster image 传输子集,用于扫描文档)。注入覆盖后处理可达成的文件格式级要求 —— 独特的
%PDF-raster-1.0版本标识注释行写在 trailer 字典与 startxref 关键字之间(§5)、catalog 字典精简到 §6.3 白名单(只保留 Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata)、文档信息字典精简到 §6.4.3 白名单(只保留 Creator / Producer / CreationDate / ModDate)、catalog /Metadata XMP 流携带 §6.4.4 Table 1 的 4 个映射条目(xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate),以及 trailer /ID 数组。 - 新增 TPdf.SaveAsPdfRToStream 实现内存中 PDF/R 输出,以及默认选项简化重载
TPdf.SaveAsPdfR(FileName)适用于常见场景。 - 新增 TPdf.ValidatePdfR:检查已打开 PDF 的 PDF/R-1 合规标记(
%PDF-raster-x.yfooter 注释、header 版本、/Type /ObjStm 不存在、catalog 白名单合规、Info 字典白名单合规、XMP 元数据流存在、trailer /ID),返回 TPdfRValidationResult,包含检测到的合规级别与问题集合。 - 新增 TPdf.PdfRConformance 属性:直接返回当前文档的合规级别(prc1、prcNone 或 prcUnknown),无需显式调用 ValidatePdfR。
- 新单元 FPdfPdfr 中导出的新类型:TPdfRConformance、TPdfRValidationResult、TPdfRValidationIssue、TPdfRSaveOptions。
TPdfRSaveOptions.Default设置 StripInfoOptionalEntries 与 StripCatalogOptionalEntries 为 True,注入器默认生成符合 §6.3 / §6.4.3 的 catalog 与 Info 字典;调用方可设为 False 保留源条目(这样不再满足那些 PDF/R 条款,但其余标记仍附加)。 - 内容级要求仍由源 PDF 负责:每页 Contents 结构(§6.5.1)、MediaBox
[0 0 w h]形式(§6.5.3)、Filter 限制(§6.2.2 仅允许 FlateDecode、CCITTFaxDecode bitonal、DCTDecode 8-bit gray/RGB)、不允许 object streams(§6.2.4)、§6.6 strip 布局。后处理无法强制这些 —— PDF/R 在结构上比其他 PDF/x 标准更严格,需要源字节就按合规方式生成。ValidatePdfR 暴露本单元能检测到的文件格式问题;完整内容级检查请配合 TWAIN Working Group PDF/R 验证器。 - 更新 TPdf.AboutInfo 字符串,使其报告当前产品版本号。
Version 1.33.0
- 新增 PDF/X (ISO 15930 系列) 标记注入支持:TPdf.SaveAsPdfX 通过对基础 PDF 做增量更新后处理,将当前文档提升为符合 PDF/X-1a:2001、PDF/X-3:2002 或 PDF/X-4 的文件。注入覆盖后处理可达成的文件格式级要求 —— XMP 元数据流携带
pdfxid:GTS_PDFXVersion(PDF/X-1a / PDF/X-3 还附带pdfxid:GTS_PDFXConformance)及匹配的 pdfaExtension:schemas 描述、重写后的文档信息字典含/GTS_PDFXVersion、/GTS_PDFXConformance、/Trapped,更新后的 catalog 携带/OutputIntents [N 0 R]引用/S /GTS_PDFX的 OutputIntent 字典与嵌入的 ICC profile,以及 trailer/ID数组。 - 新增 TPdf.SaveAsPdfXToStream 实现内存中 PDF/X 输出,以及默认选项简化重载
TPdf.SaveAsPdfX(FileName)—— 生成 PDF/X-4 输出并使用内置 sRGB IEC61966-2.1 OutputIntent(3144 字节,与 SaveAsPdfA 使用同一份 profile)。 - 新增 TPdf.ValidatePdfX:检查已打开 PDF 的 PDF/X 合规标记(XMP pdfxid 标识与 Info 字典值相等、pdfxid 扩展模式描述、含 /DestOutputProfile 的 /OutputIntents 数组、Title 存在性、trailer /ID、加密状态、xmp:CreateDate / xmp:ModifyDate 存在性),返回 TPdfXValidationResult,包含检测到的合规级别与问题集合。
- 新增 TPdf.PdfXConformance 属性:直接返回当前文档的合规级别(pxc1a、pxc3、pxc4、pxcNone 或 pxcUnknown),无需显式调用 ValidatePdfX。XMP 版本字符串被解析以区分三个合规级别。
- 新单元 FPdfPdfx 中导出的新类型:TPdfXConformance(pxcUnknown/None/1a/3/4)、TPdfXTrappedState(ptUnspecified/True/False/Unknown)、TPdfXValidationResult、TPdfXValidationIssue、TPdfXSaveOptions。
TPdfXSaveOptions.Default目标为 PDF/X-4 + sRGB OutputIntent +/Trapped /False;调用方可覆盖Conformance、为商业印刷工作流提供 CMYKIccProfileData字节流,或修改OutputCondition/OutputConditionIdentifier/RegistryName指向特定 ICC 特征化注册项(如 FOGRA39、GRACoL2006_Coated1v2)。 - 内容级要求(所有字体嵌入、不允许 JavaScript、不允许可见 annotations、OPI 禁用、PDF/X-1a / PDF/X-3 的透明度规则等)仍由文档作者与 PDFium 渲染端负责。完整合规校验请配合 callas pdfaPilot 或 Ghent PDF Workgroup Output Suite 等专业预检工具。
- 更新 TPdf.AboutInfo 字符串,使其报告当前产品版本号。
Version 1.32.0
- 新增 PDF/E-1 (ISO 24517-1:2008) 标记注入支持:TPdf.SaveAsPdfE 通过对基础 PDF 做增量更新后处理,将当前文档提升为符合 PDF/E-1 的文件。注入覆盖后处理可达成的文件格式级要求 —— XMP 元数据流携带
pdfe:ISO_PDFEVersion = "PDF/E-1"及匹配的 pdfaExtension:schemas 描述、重写后的文档信息字典含 §5 强制的/ISO_PDFEVersion (PDF/E-1)条目、按 §13.1 从 ISO 19005-1 §6.7 继承的 Info-XMP 等价桥接(dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool),以及 §6.2 要求的 trailer/ID数组。 - 新增 TPdf.SaveAsPdfEToStream 实现内存中 PDF/E 输出,以及默认选项简化重载
TPdf.SaveAsPdfE(FileName)适用于常见场景。 - 新增 TPdf.ValidatePdfE:检查已打开 PDF 的 PDF/E-1 合规标记(XMP pdfe:ISO_PDFEVersion 存在并与 Info 字典值相等、pdfe 扩展模式描述、Info 字典 /ISO_PDFEVersion 条目、trailer /ID、xmp:CreateDate / xmp:ModifyDate 存在),返回结构化结果,包含检测到的合规级别与问题集合。
- 新增 TPdf.PdfEConformance 属性:直接返回当前文档的合规级别(pec1、pecNone 或 pecUnknown),无需显式调用 ValidatePdfE。
- 新单元 FPdfPdfe 中导出的新类型:TPdfEConformance、TPdfEValidationResult、TPdfEValidationIssue、TPdfESaveOptions。
- Info 字典重写是 PDFiumVCL 的 PDF/x 后处理路径首次实现 —— 它用相同对象号重写现有 Info 对象(保持 xref 子区段 / trailer /Info 引用有效),当源 trailer 无 /Info 条目时则合成新的 Info 字典。PDFium 自身在每次 SaveAs 输出中都生成 Info 字典,所以常见情况下走重写路径。
- 内容级要求(字体嵌入、ToUnicode CMap、禁用的 XObject / ExtGState 键 / XFA 表单等)仍由文档作者负责 —— SaveAsPdfE 只附加文件格式标记,不修改页面内容或删除禁用特性。
- 更新 TPdf.AboutInfo 字符串,使其报告当前产品版本号。
Version 1.31.0
- 新增 PDF/UA-1 (ISO 14289-1:2014) 标记注入支持:TPdf.SaveAsPdfUa 通过对基础 PDF 做增量更新后处理,将当前文档提升为符合 PDF/UA-1 的文件。注入覆盖后处理可达成的文件格式级要求 —— XMP 元数据流携带
pdfuaid:part = 1及匹配的 pdfaExtension:schemas 描述、必填的dc:title、catalog/MarkInfo << /Marked true /Suspects false >>与/ViewerPreferences << /DisplayDocTitle true >>(仅在源 catalog 中不存在时注入)、catalog/Lang(调用方提供 BCP 47 标签时)以及 trailer/ID数组。 - 新增 TPdf.SaveAsPdfUaToStream 实现内存中 PDF/UA 输出,以及默认选项的简化重载
TPdf.SaveAsPdfUa(FileName)适用于常见场景。 - 新增 TPdf.ValidatePdfUa:检查已打开 PDF 的 PDF/UA-1 合规标记(StructTreeRoot 是否存在、/Lang、/MarkInfo /Marked true 且 /Suspects = false、/ViewerPreferences /DisplayDocTitle true、XMP pdfuaid:part 标识、dc:title、trailer /ID、加密状态),返回结构化结果,包含检测到的合规级别与问题集合。
- 新增 TPdf.PdfUaConformance 属性:直接返回当前文档的合规级别(puc1、pucNone 或 pucUnknown),无需显式调用 ValidatePdfUa。
- 新单元 FPdfPdfua 中导出的新类型:TPdfUaConformance、TPdfUaValidationResult、TPdfUaValidationIssue、TPdfUaSaveOptions。
- TPdfUaSaveOptions 中 Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language 字段留空时,会自动从 FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage 填充,因此常见情况只需一行就能保存。
- 内容级要求(StructTreeRoot 标签完整性、Figure Alt 文本、ToUnicode CMap、字体嵌入等)仍由文档作者负责 —— SaveAsPdfUa 只附加文件格式标记,不会修改页面内容或自动生成标签。ValidatePdfUa 在缺少 StructTreeRoot 时以
pvuaiMissingStructTreeRoot报告,方便调用方将未标签化文档转入独立的标签化流程。 - 更新 TPdf.AboutInfo 字符串,使其报告当前产品版本号。
Version 1.30.0
- PDF/A-1b 输出现在满足 ISO 19005-1 (含 Cor.1:2007) 关于文档信息字典与 XMP 等价性的要求:PDFium 写入基础 PDF 的每个 Info 字典条目都会镜像到 XMP 包中,包括 Title (dc:title)、Author (dc:creator)、Subject (按 Cor.1 修正映射为 dc:description)、Keywords (pdf:Keywords)、Creator (xmp:CreatorTool)、Producer (pdf:Producer)、CreationDate (xmp:CreateDate)、ModDate (xmp:ModifyDate),并额外补齐 xmp:MetadataDate。
- PDF/A 文档的 trailer 现在始终包含 /ID 数组(ISO 19005-1 6.1.3 硬性要求)。当 TPdf.SaveAsPdfA 处理的源 PDF 已有 file identifier 时,会复用其 16 字节的 permanent / changing ID;否则从源字节派生确定性的 16 字节回退 ID。
- 注入的 XMP 现在嵌入 pdfaid extension schema 描述(ISO 19005-1 6.7.8,Cor.1 修订)—— pdfaid 相对 XMP Specification 2004 属于扩展 schema,所有合规文件必须在 pdfaExtension:schemas 容器中声明其属性名、值类型与类别。
- TPdfASaveOptions 新增 5 个可选字段:Producer、CreationDate、ModDate(PDF 日期字符串 “D:YYYYMMDDHHmmSSOHH'mm'” 形式)、DocumentId、InstanceId(trailer /ID 数组的 16 字节字符串)。TPdf.SaveAsPdfA / SaveAsPdfAToStream 会自动从 FPDF_GetMetaText 与 FPDF_GetFileIdentifier 填充未指定字段,已有调用代码无需修改。
- TPdf.ValidatePdfA / TPdf.PdfAConformance 新增三种问题报告:pvaiMissingTrailerId(trailer 缺少 /ID)、pvaiMissingXmpDates(xmp:CreateDate 或 xmp:ModifyDate 缺失)、pvaiMissingExtensionSchema(缺少 pdfaid 扩展 schema 描述)。
- Title、Author、Subject、Keywords、Creator、Producer 中的非 ASCII 字符现在以 UTF-8 编码写入 XMP 包(XMP Specification 要求),保证多语言元数据通过 SaveAsPdfA 后能完整保留。
- 更新 TPdf.AboutInfo 字符串,使其报告当前产品版本号。
Version 1.29.0
- 更新内置 PDFium DLL(Win32 与 Win64,含标准版与 V8 版)至 2026-05-22 上游快照,纳入 FPDFText_SetText / FPDFText_SetCharcodes 崩溃路径修复及若干内部加固。
- 在 FPdfPageOps.pas 中暴露 PDFium 新增的 FPDF_SUBSET_NEW_FONTS 保存标志,允许 FPDF_SaveAsCopy 调用者对新增文本对象引用的嵌入字体执行自动子集化。FPDF_INCREMENTAL、FPDF_NO_INCREMENTAL、FPDF_REMOVE_SECURITY 三个常量改为上游位移定义(保留旧数值 3 为 FPDF_REMOVE_SECURITY_DEPRECATED,保证二进制兼容)。
- 在 FPdfView.pas 中新增 FPDF_FONT_BACKEND_TYPE 枚举(FREETYPE / FONTATIONS)以及配套的 FPDF_LIBRARY_CONFIG.m_FontLibraryType 字段,使用 Skia 渲染器初始化 PDFium 的应用可在启动时选择字体后端。
- 同步 TFPDFPage_InsertObject 签名:C 函数现在返回 FPDF_BOOL(成功为 TRUE,page_object 为 NULL 或所有权转移失败时为 FALSE)而非 void。PDFiumVCL 已有调用点无需修改即可继续编译,Delphi / FPC 允许忽略函数返回值。
- 修正 TPdf.AboutInfo 字符串,使其报告当前产品版本(v1.28.0 仅修改文档时遗漏更新,导致一直停留在 v1.27.0)。
Version 1.28.0
- 大幅扩充 API 参考页面内容:每个属性、方法、事件、全局函数条目现在均包含三段 Description、Remarks 列表、多行 Delphi Example、以及更丰富的 See Also 链接,覆盖 200+ 个先前内容较薄的页面,包括所有 TPdf 计数属性、元数据访问器、字体/字符索引属性、页面级属性、索引记录、文档级方法,以及 TPdfView 的完整状态、显示、事件 API。
- 微调帮助布局对齐 losLab HotXLS 参考的视觉基线:统一 h1/h2 字号,把 API 导航网格样式整合到共用 StyleSheet,并移除 Navigation.html 的内联 CSS 重写。
- 文档构建附带辅助脚本 Docs\Build-Expand-Entries.ps1,可基于单一数据表重新生成条目页内容,便于后续维护。
Version 1.27.0
- 新增 PDF/A-1b 创建支持:TPdf.SaveAsPdfA 将当前打开的文档保存为 PDF/A-1b 合规文件——通过增量更新注入 XMP 元数据流、sRGB ICC OutputIntent 及更新后的文档目录,无需额外 DLL API,全平台可用。
- 新增 TPdf.SaveAsPdfAToStream:内存流方式输出 PDF/A 文件。
- 新增 TPdf.ValidatePdfA:检查当前文档的 PDF/A 合规性(XMP pdfaid 标记、带嵌入 ICC 的 OutputIntent、加密检测),返回检测到的合规级别及具体问题集。
- 新增 TPdf.PdfAConformance 属性:直接返回当前文档的合规级别(pac1b、pac1a、pac2b、pac3b、pacNone 或 pacUnknown)。
- 新增类型(在新单元 FPdfPdfa.pas 中):TPdfAConformance、TPdfAValidationResult、TPdfAValidationIssue、TPdfASaveOptions。
- SaveAsPdfA 支持通过 TPdfASaveOptions.IccProfileData 指定自定义 ICC 配置文件;留空时自动使用内置 sRGB IEC61966-2.1(HP/Microsoft,3144 字节)。
- 将单体 HTML 参考手册重构为结构化 Web 帮助系统:302 个独立 API 入口页面(TPdf 和 TPdfView 每个属性、方法、事件、全局函数各一页),每页含完整说明、参数表、Delphi 代码示例和 See Also 链接。
- 新增 Navigation.html:分六节(TPdf 属性/方法/事件、TPdfView 属性/方法/事件、全局函数)的 5 列弹性网格导航总览页,方便快速定位 API。
- 将 TPdf.html 和 TPdfView.html 重写为精简组件概览页,保留类型参考章节(Types、Constants、Global Variables),成员列表改为链接至各入口页面。
- 基于 Search.js 新增全文搜索,在 312 个已索引页面上做增量客户端匹配。
- 全站所有导航栏链接统一指向 Navigation.html。
Version 1.26.0
- 新增 Demo/Lazarus/BatchExport,v1.14.0 Delphi BatchExport 的 LCL 移植版。功能一致:多文件 PDF→JPG 批量导出 + 每文件总体进度 + 每页当前进度 + DPI / 质量 / 密码输入 + 基于 IPdfCancellationToken 的合作式取消。导出成功后用平台文件管理器打开输出目录。
Version 1.25.0
- 为 TPdf 增加 Form XObject 页面复用能力,支持水印、模板叠加、“一页盖多页” 等场景:CreateXObjectFromPage 把其它文档的某一页打包成可重用句柄;InsertFormObjectFromXObject 把句柄的一份副本插入当前页面。返回插入的 FPDF_PAGEOBJECT,调用方可结合 FPDFPageObj_SetMatrix 与 v1.9.0 的 TPdfMatrix 辅助类做定位、缩放、旋转。
- 新增 Pascal 类 TPdfXObject 封装 PDFium 的 FPDF_XOBJECT 句柄,析构时自动调 FPDF_CloseXObject,无需手工管理资源。
- Delphi 与 Lazarus 回归测试套件扩展到 147 个用例,C++Builder 套件扩展到 123 个用例,覆盖句柄创建与页面对象插入两类契约。
Version 1.24.0
- 新增 TPdf.RenderPageProgressive:可取消的 RenderPage 变种,驱动 PDFium 的渐进式渲染循环,在迭代间轮询 v1.7.0 的 IPdfCancellationToken。高 DPI 长时间渲染可以在页面绘制过程中中断,而不是等到完成才返回。
- 返回 TPdfProgressiveStatus 枚举:prsDone / prsCancelled / prsFailed。传 AToken = nil 表示渲染到完成、不轮询取消(不会返回 prsCancelled)。
- 使用 v1.21.0 引入的 zero-copy fast path —— PDFium 直接写入目标 TBitmap 的 DIB 缓冲。同样保留 legacy fallback 应对无法 wrap DIB 的少数情况。
- Delphi 与 Lazarus 回归测试套件扩展到 145 个用例,C++Builder 套件扩展到 121 个用例,覆盖 nil token(完成)、预取消 token(prsCancelled)、以及与同步 RenderPage 像素一致性。
Version 1.23.0
- 为 TPdfView 增加六个新方法,把 PDFium 的表单字段文本选择 + Undo/Redo 能力暴露给应用:GetSelectedFormText 返回当前聚焦表单字段中的选中文本;SelectAllFormText 全选;FormUndo / FormRedo / FormCanUndo / FormCanRedo 驱动聚焦字段的编辑历史。底层 PDFium API 早已绑定,但没有 Pascal 风格高层入口。视图非 Active 或文档没有 AcroForm 聚焦字段时,六个方法都安全短路返回空串 / False,不会崩溃。
- Delphi 与 Lazarus 回归测试套件扩展到 142 个用例,C++Builder 套件扩展到 119 个用例,覆盖“无表单 / 无聚焦”场景下每个方法的契约。
Version 1.22.0
- 为 TPdf 增加页面组合操作便捷接口:ImportPagesByIndex 通过零基索引数组从源文档复制指定页;ImportNPagesToOne 返回一个全新 TPdf,其页面是当前文档的 N-up 拼版;MovePages 原地重排页面。底层 PDFium API 早已绑定,但没有 Pascal 风格高层入口。
- ImportPagesByIndex 接受空数组以导入全部源页面(对应 C ABI 的 nil 参数)。
- Delphi 与 Lazarus 回归测试套件扩展到 136 个用例,C++Builder 套件扩展到 115 个用例,覆盖子集导入、全文档导入、页面重排、N-up 拼版四类场景。
Version 1.21.0
- 渲染性能优化:TPdf.RenderPage / TPdf.RenderTile(以及对应的 TPdfView 辅助方法)切换到 zero-copy 输出路径。PDFium 现在直接写入目标 TBitmap 的 DIB 缓冲,不再写入内部缓冲后再逐行 copy,每次渲染节省一份 width × height × 4 字节的内存拷贝。高 DPI 场景(缩略图面板、打印质量导出、批量导出)收益最明显。
- 保留旧的 per-scanline 路径作为安全 fallback,应对极端尺寸 / 异常 stride / OOM 等无法 wrap DIB 的少数场景。两条路径输出字节一致,fallback 只是慢一点。
- Delphi 与 Lazarus 回归测试套件扩展到 132 个用例,C++Builder 套件扩展到 112 个用例,覆盖调用方 bitmap 自动升级 pf32bit、尺寸 round-trip、以及大尺寸 stride sanity 测试。
Version 1.20.0
- 为 TPdfView 增加查找结果高亮:HighlightSearchText(Text, MatchCase, MatchWholeWord) 扫描视图当前页,返回找到的匹配数,并在每次重绘时为每个匹配画 HighlightColor 高亮矩形。ClearHighlight 清除高亮;切换到其他页面自动清除(匹配按页面绑定)。
- HighlightColor 默认 clYellow,published 属性让应用可以根据 UI 主题调整高亮色。
- Delphi 与 Lazarus 回归测试套件扩展到 129 个用例,C++Builder 套件扩展到 109 个用例,覆盖默认色、色 round-trip、对 sample.pdf 中存在单词的真实匹配数检测、以及对不存在单词返回 0 的约束。
Version 1.19.0
- 为 TPdfView 增加 FitMode 属性,四种模式:pfmNone(手动缩放)、pfmActualSize(100%)、pfmFitPage(整页适应视口)、pfmFitWidth(页面宽度匹配视口宽度)。Resize 时与切页时自动重新应用 fit 模式,混合页面尺寸的长文档也能保持稳定的视觉填充。
- 直接设 Zoom 会自动取消当前 fit 模式(FitMode 退回 pfmNone),符合主流 PDF viewer 的“输入缩放值就退出 Fit Page / Fit Width”惯例。
- 默认 pfmNone,旧应用的显式 Zoom 行为不受影响。
- Delphi 与 Lazarus 回归测试套件扩展到 124 个用例,C++Builder 套件扩展到 106 个用例,覆盖默认值、模式 round-trip、实际加载文档时 fit-page 产生真实缩放比、以及手动 Zoom 取消 fit 模式四类场景。
Version 1.18.0
- 为 TPdfView 增加 PageColor 属性,把渲染出来的 PDF 页面底色与控件自身 Color 解耦。默认 clWhite,使 PDF 页面无论宿主主题如何都以“纸白”渲染。dark mode viewer 可以让滚动区维持深色背景,同时 PDF 页面仍然是白(或应用层指定的任何颜色)。
- 行为变化:之前通过 TPdfView.Color 间接换页面底色的应用,应改成 PageColor。常见场景(主题化控件 + 白色 PDF 页面)的默认体验在不改一行代码的情况下变好。
- Delphi 与 Lazarus 回归测试套件扩展到 120 个用例,C++Builder 套件扩展到 103 个用例,覆盖默认值与颜色 round-trip。
Version 1.17.0
- 为 TPdfView 增加用户输入锁定开关,方便把 viewer 嵌入到 kiosk、预览面板、只读场景时无需 subclass 即可禁用导航手势:AllowUserPageChange 控制新增的 PgUp / PgDn / Ctrl+Home / Ctrl+End 键盘快捷键;ChangePageOnMouseScrolling 控制新增的滚轮上/下翻页;AllowUserTextSelection 为将来的鼠标拖选文本路径预留。三个属性默认 True,旧应用升级无任何行为变化。
- 滚轮翻页路径跳过 Ctrl+滚轮,方便应用层继续把 Ctrl+滚轮保留给缩放。
- Delphi 与 Lazarus 回归测试套件扩展到 118 个用例,C++Builder 套件扩展到 101 个用例,覆盖默认值与开关 round-trip。
Version 1.16.2
- 扩展 TPdfView 注释链接点击回归覆盖:当 viewer 当前页与关联 TPdf 当前页不一致时,通过真实无界面鼠标点击路径验证自动跳转行为,覆盖 Delphi、Lazarus 与 C++Builder。
- Delphi 与 Lazarus 套件现在各 114 个用例,C++Builder 套件现在 99 个用例。
Version 1.16.1
- 修复 TPdfView 链接点击处理:自动注释链接与网页链接动作现在使用 viewer 当前显示页,即使关联的 TPdf 组件停留在其它页也不会错取缓存。
- 加固 TPdfThumbnailView 的 Pdf 引用生命周期,关联的 TPdf 组件销毁时会自动清空引用,避免悬挂指针。
- 新增缩略图 Pdf 引用生命周期回归覆盖;Delphi 与 Lazarus 套件现在各 113 个用例,C++Builder 套件现在 98 个用例。
- 同步 README、测试说明、HTML Help 搜索/索引内容以及 C++ 包生成输出,使其覆盖 v1.7.0 到 v1.16.0 的整合更新。
Version 1.16.0
- 新增 Delphi PrintDialog 示例(Demo/Delphi/PrintDialog),重点演示 N-up 打印(1 / 2 / 4 / 9 页拼一张)+ 奇偶页过滤 + 灰度渲染 + 可选的 1 像素单元格边框。作为既有 PrintPDF demo 的轻量伙伴,PrintPDF 已经覆盖了预览、最近文件、缩放、scaling 等大件功能。
Version 1.15.0
- 新增 TPdfThumbnailView 组件(FPdfThumbnail 单元),垂直滚动侧栏,每行一个页面缩略图,支持鼠标悬停高亮、当前选中页高亮、单击切页。设计为与 TPdfView 并排放置,让用户能快速翻阅长 PDF。
- 组件已注册到 losLab 组件面板,与 TPdf、TPdfView 同 tab。主要属性:Pdf、CurrentPageIndex、ThumbnailWidth、ThumbnailHeight、TextColor、HoverColor、SelectionColor、BorderColor,以及 OnPageClick 事件。
- Delphi 与 Lazarus 回归测试套件扩展到 112 个用例,C++Builder 套件扩展到 97 个用例,覆盖默认值、缩略图尺寸 round-trip、极值截断、颜色 round-trip、以及事件处理器赋值。
Version 1.14.0
- 新增 Delphi BatchExport 示例(Demo/Delphi/BatchExport),演示如何一次性把多个 PDF 文件批量转换为 JPG,使用 TPdf.LoadCustomDocument 流式加载、IPdfCancellationToken 合作式取消、以及“按文件整体进度 + 按页当前进度”两个进度条。每个文件用独立 TPdf 实例(PDFium 本身不是线程安全),导出成功后自动打开输出文件夹。
Version 1.13.0
- 为 TPdfView 增加异步渲染 UI 提示:新增 AsyncRendering、LoadingText、LoadingColor 三个属性。AsyncRendering = True 时,单页 paint 路径在页面中央绘制一个 “Loading...” 小提示框,便于应用层在自己的 worker 做长渲染时与库统一 UI 标识。
- 默认 AsyncRendering = False 保持向后兼容,不引入新视觉。
- 文档明确说明:PDFium 本身不是线程安全的,把渲染真正搬到 worker 必须保证每个 worker 持有独立的 TPdf 实例;后续的 v1.14.0 批量导出 demo 展示该模式。
- Delphi 与 Lazarus 回归测试套件扩展到 106 个用例,C++Builder 套件扩展到 93 个用例,覆盖默认值与三属性 round-trip。
Version 1.12.0
- 为 TPdfView 增加基于点击的链接处理:新增 LinkOptions 属性控制四类 PDF 链接动作的自动行为 —— goto(页面跳转)、URI(ShellExecute)、launch(ShellExecute)、嵌入 GotoR(保留)。默认开启 loAutoGoto 与 loAutoOpenURI;loAutoLaunch 与 loAutoEmbeddedGoto 默认关闭,避免误点触发任意程序。
- 新增 OnAnnotationLinkClick 与 OnWebLinkClick 事件,在自动动作之前触发,允许应用层检查链接、标记 Handled、或重定向(例如弹出安全确认)。
- 链接点击检测仅在 click(非 drag)时触发,使用独立的 MouseDown 锚点判断,panning 等长拖拽手势继续走原有滚动路径不受影响。
- Delphi 与 Lazarus 回归测试套件扩展到 102 个用例,C++Builder 套件扩展到 91 个用例,覆盖 LinkOptions 默认值、集合 round-trip、以及事件处理器赋值。
Version 1.11.0
- 为 TPdfView 增加视觉增强:PageShadowSize、PageShadowColor、PageBorderColor 三个属性,可选地在页面矩形下方绘制阴影,并在四周绘制一像素边框。默认值保持旧的平面外观(PageShadowSize = 0;边框颜色默认 clBlack,但在白底控件上不显眼,直到调用方修改颜色)。
- 新增 SmoothScroll 属性,作为将来分段滚动动画的 opt-in 开关;属性可 read/write 持久化,渲染逻辑保持现有即时滚动行为以避免破坏旧应用。
- Delphi 与 Lazarus 回归测试套件扩展到 98 个用例,C++Builder 套件扩展到 89 个用例,覆盖默认值、属性 round-trip、以及负阴影尺寸截断为 0 的约束。
Version 1.10.0
- 新增直接的图像插入接口:TPdf.AddImage 与 TPdfView.AddImage 接受文件路径或 TBitmap,是既有 AddPicture(TPicture) 的简化版。AddImage(FileName) 识别 VCL 与 LCL 注册过的所有图像格式(BMP、通过 PngImage 单元的 PNG、JPG 等),并走与 AddPicture 完全相同的内部管线,行为一致。
- AddImage(TBitmap) 跳过 TPicture 中间层,方便已经持有 TBitmap 的渲染或批量生成场景。
- Delphi 与 Lazarus 回归测试套件扩展到 92 个用例,C++Builder 套件扩展到 84 个用例,覆盖位图插入、页面对象 bounds、nil 位图拒绝、以及 BMP 文件加载。
Version 1.9.0
- 新增高层变换矩阵支持:FPdfMatrix 单元提供 TPdfMatrix 类,OO 风格包装 PDFium 的 FS_MATRIX,支持 Translate / Scale / Rotate / 水平翻转 / 垂直翻转 / 中心翻转 / Skew / Multiply 等组合操作,方便在调用 FPDFPageObj_SetMatrix 等 PDFium API 之前先构造好复合变换。
- TPdfMatrix.Multiply 在写入新行之前完整 snapshot 六个矩阵元素,修正了已知的 Pascal 同类实现先覆写 m.a / m.c / m.e 再据此计算同行第二列的 bug —— 该 bug 会让除单纯 translate 之外的所有矩阵复合得到错误结果。
- Delphi 与 Lazarus 回归测试套件扩展到 88 个用例,C++Builder 套件扩展到 81 个用例,覆盖 identity、reset、translate/scale/flip、post-multiplicative 组合顺序、以及上述 Multiply 回归用例。
Version 1.8.0
- 新增按需流式加载:TPdf.LoadCustomDocument(AStream, AOwnsStream) 方法配合 TPdfStreamAdapter 辅助类,底层接入 PDFium 的 FPDF_LoadCustomDocument。PDFium 在需要时才从外部 TStream 读取数据块,超大 PDF 或远端流不再需要先完整拷入内存。
- 支持可选的 stream 所有权:AOwnsStream = True 时把 TStream 生命周期交给 TPdf,UnloadDocument 时自动释放。
- Delphi 与 Lazarus 回归测试套件扩展到 79 个用例,C++Builder 套件扩展到 75 个用例,覆盖 TFileStream 流式加载、owned-stream 卸载释放、以及外部所有 stream 在卸载后仍存活三类场景。
Version 1.7.0
- 新增 FPdfAsync 单元,提供合作式异步取消原语:IPdfCancellationToken / IPdfCancellationTokenSource,以及全局 PdfNoCancellationToken 单例,使长任务渲染、批量导出等流程具备从 UI 端发起干净取消的能力。
- 新增轻量 TPdfFuture<T> 助手,在后台线程跑 worker,把 TPdfFutureResult<T> 结果信封 dispatch 回主线程,区分成功、取消与失败三种结果。
- Delphi 与 Lazarus 回归测试套件扩展到 76 个用例,C++Builder 套件扩展到 73 个用例,共享覆盖取消状态、幂等 Cancel、回调批量触发、取消后注册回调四类行为。
Version 1.6.10
- 新增高层 TPdf.PrintPageRanges,可读取 PDF viewer preference 中的打印页码范围,并以一基页码范围返回给应用层。
- 新增 TPdf.SetFormFieldFlags / SetFormFieldFlagsAt 以及对应 TPdfView 辅助方法,应用可通过公开 API 修改 AcroForm 字段标志,并补齐 password 与 multi-select 标志覆盖。
- 加强 PDFium 绑定 ABI 覆盖,固定 Windows 下 FPDF_DWORD、FPDF_FILEACCESS 回调和 V8 embedder slot 字段的尺寸约束。
Version 1.6.9
- 新增低层 Skia 渲染绑定,开放当前标准版与 V8 版 bundled PDFium DLL 新导出的 FPDF_RenderPageSkia 和 FPDF_FFLDrawSkia。
- 扩展 public 绑定覆盖检查,现在标准 DLL 与 V8 DLL 加载测试会与既有 V8/XFA 能力探测一起验证 Skia 渲染入口。
Version 1.6.8
- 新增 TPdf.SetTextPositions 与 TPdfSingleArray,可通过当前 DLL 新导出的 FPDFText_SetPositions 为既有文本对象设置逐字符位置。
- 将 FPDFText_SetPositions 提升为当前随包 PDFium DLL 的必需绑定;同时确认 Skia 渲染入口仍不可用,因为当前 DLL 仍未导出这两个函数。
- Delphi、C++Builder、Lazarus 三套回归测试扩展到每套 65 个用例,覆盖文本位置设置。
Version 1.6.7
- 新增 TPdf 对文档级 JavaScript name-tree action 的高层读取能力,可通过 JavaScriptAction 与 JavaScriptActions 取得 action 名称和脚本内容。
- 新增 TPdf.FileIdentifier,以不含 PDFium 终止字节的二进制 TBytes 读取 trailer 中的 permanent / changing 文件 ID。
- 新增 TPdf.PageBox、GetPageBox、SetPageBox,可读写当前页的 MediaBox、CropBox、BleedBox、TrimBox 和 ArtBox。
- 重新确认当前随包 PDFium DLL 只剩 Skia 渲染入口无法在运行时开放,因为这些导出并不存在于当前 DLL。
- Delphi、C++Builder、Lazarus 三套回归测试扩展到每套 64 个用例,覆盖文档 JavaScript、trailer ID 与页面 box 读写。
Version 1.6.6
- 新增随运行时 DLL 选择的 V8 版 PDFium 支持。加载前设置 EnableV8Engine 后,会从 DLLs\Win32 或 DLLs\Win64 目录树选择 pdfium.v8.dll,并在该 DLL 实际导出对应入口时开放 V8/XFA 专用绑定。
- 新增 V8FeaturesAvailable、XfaBStrHelpersAvailable、GetRecommendedV8Flags,并开放 FPDF_BStr_*、FPDF_GetRecommendedV8Flags、FPDF_GetArrayBufferAllocatorSharedInstance 等低层可选绑定。
- 将 FPDFText_SetPositions 改为可选绑定,让 PDFiumVCL 在所加载 PDFium DLL 不导出该实验性文本位置 setter 时仍可正常加载。
- Delphi、C++Builder、Lazarus 三套回归测试扩展到每套 61 个用例,覆盖标准 DLL 与 V8 DLL 的能力探测。
Version 1.6.5
- 新增 tagged PDF 结构树读取能力:可通过 TPdf.StructureElements 与 TPdfView.StructureElements 读取元素类型、标题、替代文本、实际文本、expansion 文本、语言、marked-content ID、子节点数量和属性数量。
- 新增 Windows PDFium 打印模式选择能力:通过 TPdfPrintMode 与 SetPdfPrintMode 设置 EMF、纯文本、PostScript、pass-through、image-mask 和 Type 42 打印模式。
- 补齐标准 DLL 已导出的剩余 PDFium public 低层绑定,覆盖 JavaScript action、注释表单 flags / 字体颜色、page object active 状态、按索引插入、content mark 浮点值、图片 ICC profile 数据、form object 移除和文本位置。
- Delphi、C++Builder、Lazarus 三套回归测试扩展到每套 59 个用例,覆盖 tagged PDF 结构树、打印模式和 public 导出绑定。
Version 1.6.4
- 更新 Delphi、C++Builder 和 Lazarus 示例:生成 PDF、导出文本/图片以及批量输出完成后,自动打开生成文件或输出目录。
Version 1.6.3
- Delphi、C++Builder、Lazarus 三套回归测试扩展到每套 56 个用例,新增 TPdfView GUI 覆盖:适配缩放辅助值、设备/页面坐标往返、字符命中测试,以及隐藏窗口控件上的鼠标拖拽平移。
- TPdfView 测试夹具现在为隐藏 viewer 设置明确尺寸,并通过测试专用子类调用受保护鼠标处理器,在保持全自动无界面运行的同时覆盖真实 HWND 路径。
Version 1.6.2
- 修正 TPdf.AddPage(0, ...):插入第一页后会立即把该页设为当前页。既保留现有示例代码的兼容性,也让插入后的 PageNumber 返回有效的一基页号。
- 同步 Lazarus 包版本,并把 Delphi、C++Builder、Lazarus 三套回归测试扩展到每套 52 个用例。
Version 1.6.1
- 修正 v1.6.0 版本遵循性校验器对 SetState 动作的版本归属错误:按 PDF 1.2 参考手册 6.9.9 节,SetState action 从 PDF 1.2 起即可使用。之前误标记为 PDF 1.5 起,导致显式保存为 PDF 1.3 或 PDF 1.4 时若文档含 SetState 动作会被错误拒绝;本版改为 PDF 1.2 起允许。
- 按 PDF 1.2 规范同节同步补齐 1.2 引入特性的检查:Sound / Movie / NOP 动作以及 Separation 颜色空间,目标版本低于 1.2 时予以拒绝。
- Delphi / C++Builder / Lazarus 三套回归测试扩展到每套 50 个用例,新增 PDF 1.4 接受 SetState 动作的正向回归,固化修正后的版本边界。
Version 1.6.0
- 全面强化显式 PDF 1.0 ~ PDF 1.7 目标的 SaveAs 输出,按 PDF 1.1 到 ISO 32000-1 完整特性时间线扩展版本遵循性校验:保存结果中出现晚于目标版本才引入的字典项、过滤器名、注释/动作子类型、字体类型、颜色空间或加密参数时会被直接拒绝。覆盖例:JBIG2Decode (1.4+)、Tagged PDF / MarkInfo (1.4+)、OutputIntents (1.4+)、ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+)、Polygon / PolyLine / Caret / Screen / Watermark / Redact 注释、AES 与 AES-256 加密 (CFM AESV2 / AESV3)、Perms / Legal / Requirements / NeedsRendering catalog 条目,以及 JavaScript / Trans / SetState / Rendition / GoToE / GoTo3DView 等受版本限制的动作类型,目标版本表达不下时一律拒绝。
Version 1.5.13
- Delphi、C++Builder、Lazarus 三套回归测试扩展到每套 49 个用例,分别新增 PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 目标拒绝 ICCBased 颜色空间、Tagged PDF MarkInfo、Polygon 注释、AES (V2) 加密以及 Redact 注释的直接覆盖。
Version 1.5.12
- 修复 SaveAs 保存后处理中的增量 catalog 重写路径。PDFiumVCL 现在会校验最新的同号间接对象,因此在显式保存为较旧 PDF 目标版本时,已有 catalog /Version 覆盖项会被正确替换。
- Delphi、C++Builder 与 Lazarus 三套回归测试扩展到每套 44 个用例,新增对旧 catalog /Version 替换、PDF 1.4 catalog 版本规范化,以及低版本目标拒绝透明度和 portable collection 特性的直接覆盖。
Version 1.5.11
- 强化显式版本 SaveAs 输出:当选择 PDF 1.3、1.4、1.5、1.6 或 1.7 作为目标版本时,PDFiumVCL 会规范化 catalog 版本标记,让默认 Fit Height OpenAction 保持版本安全,并在目标版本无法表达较新 PDF 特性时直接拒绝保存。
- Delphi、C++Builder 与 Lazarus 三套回归测试新增显式 PDF 1.3 到 PDF 1.7 保存与重新加载覆盖,验证最终文件头、默认 Fit Height OpenAction 以及重新读取后的 PDF 版本。
Version 1.5.10
- 从测试规划的 B 选项升级到 C 选项:在三套 IDE 测试中新增 TPdfView 冒烟用例(Tests.PdfView)。每套测试在控制台 runner 中创建隐藏的父 TForm(Pascal 端用 TForm.CreateNew,C++Builder 端用
new TForm(NULL, 0)),把 TPdfView 重新挂到该窗体上,调 Active := True,再验证 PageCount、PageNumber 默认值、Zoom、Rotation、DisplayMode 的 set/get 往返,以及 View.Text 与底层 TPdf.Text 的一致性。每套测试现在跑 39 用例。
Version 1.5.9
- 从测试规划的 A 选项升级到 B 选项:在三套 IDE 测试中新增渲染冒烟用例。每套 Tests.Render 在 sample.pdf 上调用 TPdf.RenderPage,用三种稳健信号替代字节级校验和:返回的 bitmap 像素尺寸与请求完全一致;不同请求尺寸(200x100、64x256)都被精确遵守;渲染结果至少 95% 白底 + 至少 50(Lazarus 20)个非白像素标记抗锯齿文本。每套测试现在跑 33 用例。
Version 1.5.8
- 完成最初 A(2) 测试规划中余下的功能分组覆盖:在 Delphi、Lazarus、C++Builder 三套测试中再新增 7 个回归用例。包括 TPdf.CreateAnnotation 构造 anHighlight 高亮注释 + SaveAs/LoadDocument 往返;针对 Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf 的 AcroForm 读取路径(FormType=ftAcroForm、首页 FormFieldCount > 0、FlattenAllPages 后字段归零);以及 Bookmarks、LinkAnnotationCount、WebLinkCount 在不带相应数据的文档上的“安静读取”路径。每套测试现在跑 30 用例。
Version 1.5.7
- 在 Delphi(DUnitX)、Lazarus(FPCUnit)、C++Builder(GoogleTest)三套测试中新增 7 个回归用例:PdfVersion 识别、PageRotation 默认值、TPdf.FindFirst / FindNext 子串定位、CharacterOrigin / CharacterRectangle 与 AddText 起点的一致性、CreateAttachment 注册、附件 SaveAs/LoadDocument 往返保留、以及 v1.3.0 的欧洲字符 AddText 往返(验证 Latin-1 supplemental 字符 é/à/ß 经过文本提取链路后仍完整保留)。
Version 1.5.6
- 保存 PDF 时,如果文档尚未定义 OpenAction,现在会自动加入第一页适应页高的默认打开动作,让阅读器初次打开生成文档时按页高缩放显示。
- 为 Delphi、Lazarus、C++Builder 三套测试补充 OpenAction 与适应页高设置的回归覆盖。
Version 1.5.5
- 在 Delphi(DUnitX)、Lazarus(FPCUnit)、C++Builder(GoogleTest)三套测试中新增字符与字体检查 API 的回归用例,覆盖 TPdf.FontBaseName、FontFamilyName、FontWeight、FontItalicAngle、FontData、FontIsEmbedded、CharacterFontWeight、CharacterAngle。Lazarus 套件暂不调用 FontData,因为 FPC 下 FPDFFont_GetFontData 当前会触发访问违例。
Version 1.5.4
- 新增从 Delphi 示例直接移植的 C++Builder Attachment 示例,覆盖创建 PDF、添加附件、列出附件、提取附件、删除附件、保存文档,以及显示附件 MIME subtype。
Version 1.5.3
- 把 TPdfView 双页模式背后的页码配对逻辑公开为 unit 级辅助函数 ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo)。行为完全不变,仅是把封面对齐规则解耦出来,方便在不实例化查看器的前提下做回归验证。
- 在 Delphi(DUnitX)、Lazarus(FPCUnit)、C++Builder(GoogleTest)三套测试中新增 5 个用例,覆盖空文档、常规双页配对、dmTwoPageContinuousWithCover 下封面单独显示、封面之后的页码配对,以及末页和越界 PageNumber 的钳位行为。
Version 1.5.2
- 新增 TPdf.Language,支持读取和设置 PDF Catalog 的 /Lang 文档语言。
- 新增 TPdf.AttachmentType,用于读取附件嵌入文件的 MIME subtype。
- TPdfAnnotationSubtype 新增 anRedact,并为 TPdf 与 TPdfView 新增页面对象移除辅助方法。
- 更新 viewer 与 attachment 示例,在可用时显示文档语言和附件类型信息。
Version 1.5.1
- 新增 TPdfView 的 dmTwoPageContinuousWithCover 显示模式,支持首页单独显示、后续页面按双页跨页连续显示。
- 更新 Delphi、C++Builder、Lazarus 的 MultiPageViewer 示例,开放新的封面双页显示模式并同步页面跳转行为。
Version 1.5.0
- 新增 Delphi(DUnitX)、Lazarus(FPCUnit)、C++Builder(GoogleTest)三套自动化冒烟测试。三套用例共享 Tests\TestData 下的同一份测试 PDF,分别覆盖文档加载、页面信息、文本提取、元数据、保存往返、PDF 文件头校验和 Compressed 属性。
Version 1.4.3
- 增强 FontProperties 示例,同时展示 TPdfView 与 TPdf 的字体元数据 API,包括字体句柄、字体数据大小和字符度量信息。
- 新增 TPdfView 的索引式字符与字体检查属性,并更新 FontProperties 示例,使用文本对象索引查询字体元数据。
Version 1.4.2
- 为 TPdf 新增索引式字符与字体检查属性,无需实例化 viewer 即可做文本分析。字符索引类属性(CharacterAngle、CharacterFontSize、CharacterFontWeight)从当前页文本流按字符索引查询逐字符度量数据;页面对象索引类属性(FontAscent、FontBaseName、FontData、FontDescent、FontFamilyName、FontHandle、FontIsEmbedded、FontItalicAngle、FontWeight)按页面对象索引查询文本对象的字体元数据。
- 非文本页面对象对所有 Font* 属性均返回安全的零值或空值,而非触发错误,方便遍历所有页面对象时仅针对文本对象进行筛查。
- FontBaseName 直接读取 PostScript base font 名称,不再用字体族名代替,提供更准确的嵌入字体标识符。
Version 1.4.1
- 补齐 EuropeanText 的 C++Builder 与 Lazarus 版示例,使三个 IDE 系列都能验证基于系统 TrueType 字体的欧洲重音字符生成流程。
- 补齐 FormFill 的 C++Builder 与 Lazarus 版示例,包含示例表单 PDF、字段编辑、外观流重新生成、填写后保存以及展平保存流程。
Version 1.4.0
- 新增 Lazarus / Free Pascal 支持:新的 PDFiumLaz 包在 LCL 控件集下提供与 Delphi 版相同的 TPdf、TPdfView 及相关组件,使 Lazarus IDE 和 Free Pascal 编译器用户可以与 Delphi / C++Builder 用户共享同一套 PDF 库。
- 新增各主要功能的 Lazarus 版示例,方便 Lazarus 开发者即开即用地体验各个特性。
- 修正 Lazarus 包编译问题:将 Free Pascal 条件定义与 Delphi 编译器版本判断分离,避免 FPC 构建时尝试解析 Delphi 专用单元名称而失败。
Version 1.3.1
- 在帮助文档中补齐了表单展平相关功能的说明:GenerateFormAppearances、FlattenPage、FlattenAllPages 三个方法以及配套的 FLAT_* / FLATTEN_* 常量,已分别加入 TPdf、TPdfView、API 参考、功能列表与示例代码各章节。
- 修正概览页架构表中的几处单元文件名错误,使其与 Lib 目录实际发布的绑定单元一致。
Version 1.3.0
- 改进创建 PDF 时的欧洲字符支持。TPdf.AddText 在创建文本对象前会加载并缓存系统内对应的 TrueType 字体,使生成的文本能正确保留捷克语、法语、德语、西班牙语、葡萄牙语、波兰语、土耳其语等重音字符 —— 这些字符是 PDFium 内置标准字体所无法表示的。
- 之前在非 ASCII Latin 字符处输出问号或替换字形的应用,无需修改代码即可正确渲染。新增 EuropeanText 示例演示该功能。
Version 1.2.0
- 为 TPdf 新增 AcroForm 外观流刷新能力:修改 FormField[] 赋值后调用 GenerateFormAppearances,可立即更新字段外观,让填写结果在标准阅读器中无需进入编辑模式即可正常显示。
- 为 TPdf 新增表单展平功能(FlattenPage / FlattenAllPages),并在 TPdfView 提供当前页的对应方法。展平操作将已填写的字段值永久嵌入为普通页面内容并移除交互式表单层,生成的文档在所有阅读器中渲染一致。
- 新增 Demo\Delphi\FormFill 示例,展示表单填写保存与填写展平两套完整工作流。
Version 1.1.2
- 新增保存时 PDF 流压缩能力。新增的 TPdf.Compressed 属性(默认启用)在 SaveAs 时将未压缩的内容流重写为 FlateDecode 压缩流,可显著缩减程序生成的 PDF 文件体积。如需为特定工具保留非压缩格式,在调用 SaveAs 前将 Compressed 设为 False 即可。
Version 1.1.1
- Win64 包构建不再包含设计期注册单元,避免在仅运行时部署场景下引入不必要的设计期依赖,消除相关构建错误。
- PDFium DLL 加载顺序调整为:优先搜索 Win32 或 Win64 应用程序子目录(标准文件名 pdfium.dll 与 pdfium.v8.dll),找不到时再依次回退到程序同目录和 Windows 系统目录。该顺序与组件包附带的 DLL 布局一致,安装无需额外配置。
Version 1.1.0
- 修复 TPdfView 双页模式下的视觉裁剪缺陷:左右两个页面瓦片共用同一裁剪矩形,导致页面内容向中间装订线区域溢出。现在每个瓦片独立裁剪,内容始终限定在各自页面边界内。
- 改进 Delphi 示例在找不到 PDFium DLL 时的错误提示,明确告知应检查的 DLL 名称与目录位置。