PDFiumVCL Release Notes
Version history for PDFiumVCL user-visible features, fixes, viewer improvements, document generation, PDF/A output, rendering, and documentation updates.
Version 1.39.52
Changed
- Enhanced
Demo\Lazarus\CreatePDFso the introductory sample now generates a two-page PDF with vector paths, table content, an embedded image, a text annotation, rotated text, and a clearer document-building walkthrough. - Added polished
README.htmlpages for every Delphi, C++Builder, and Lazarus demo folder, replacing the remaining text-only demo README with a browser-readable guide. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.52.
Version 1.39.51
- Enhanced
Demo\Delphi\PreflightReportClibatch summaries with standard status totals for Pass, Action required, and Review results across the selected standards. - Per-file rows now include action-required and review counts in TXT / HTML / JSON / CSV summaries, making CI artifacts easier to inspect without opening each generated report.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.51.
Version 1.39.50
- Enhanced
Demo\Delphi\PreflightReportClidirectory batch mode sobatchdir=foldercollects discovered PDF paths, sorts them, and then generates reports in a stable order. - Recursive directory scans now produce reproducible report order and summary rows, while explicit
batch=list.txtprocessing continues to preserve the list file order. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.50.
Version 1.39.49
- Enhanced
Demo\Delphi\PreflightReportClibatch summaries to record run settings: source kind, source path, recursive state, output directory, report format, selected standards, andfailon=mode. - JSON summaries now include a
runobject, TXT and HTML summaries show a run settings section, and CSV rows repeat the same audit columns for spreadsheet and CI pipelines. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.49.
Version 1.39.48
- Enhanced
Demo\Delphi\PreflightReportClibatch output naming so duplicate input file names that share oneoutdir=no longer overwrite each other's generated reports. - Batch runs now append
-2,-3, and later suffixes when a generated report path has already been assigned in the same run, and summaries record the final collision-safe report path. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.48.
Version 1.39.47
- Enhanced
Demo\Delphi\PreflightReportClibatch summaries so TXT and JSON outputs now include aggregate totals for total files, processed files, failed files, issues, andfailon=matches. - CSV summaries remain a pure row table for existing consumers, while HTML summaries continue to show the same aggregate metrics in the dashboard header.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.47.
Version 1.39.46
- Enhanced
Demo\Delphi\PreflightReportCliwithsummary=batch.html/.htmso batch runs can emit a browser-readable dashboard alongside TXT / CSV / JSON manifests. - HTML summaries show total, processed, failed, issue, and
failon=match metrics, then list each input with report links, status, counts, and error text. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.46.
Version 1.39.45
- Enhanced
Demo\Delphi\PreflightReportCliwithbatchdir=folderandrecursiveso scripts can scan PDF folders directly without first writing a list file. - Directory batch mode reuses
outdir=,summary=,standards=, andfailon=behavior from list-based batch mode, while non-recursive scans only the selected folder andrecursiveincludes subfolders. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.45.
Version 1.39.44
- Enhanced
Demo\Delphi\PreflightReportCliwithsummary=batch.csv|json|txtso batch runs can emit a machine-readable manifest beside the per-file reports. - Batch summaries include each input path, report path, status, standard count, passed count, issue count,
failon=match state, and error text for CI jobs and external scripts. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.44.
Version 1.39.43
- Enhanced
Demo\Delphi\PreflightReportCliwithbatch=list.txtandoutdir=reportsso scripts can generate preflight reports for a list of PDF files in one run. - Batch mode skips blank and
#comment lines, derives each.preflight.<ext>report name from the input PDF, continues after per-file errors, and summarizes processed and failed files before returning. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.43.
Version 1.39.42
- Enhanced
Demo\Delphi\PreflightReportCliwithfailon=none|issues|action|reviewso CI jobs can turn generated preflight results into deterministic exit codes. - The CLI now returns exit code 2 when a selected
failon=rule matches after the report file and optional attached-report PDF have been generated, while runtime errors still return exit code 1. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.42.
Version 1.39.41
- Enhanced
Demo\Delphi\PreflightReportCliwithattach=output.pdfso a generated preflight report can be embedded as a document-level attachment in a new PDF copy. - The CLI keeps the generated TXT / HTML / Markdown / JSON / CSV report file on disk and refuses to attach back into the original input PDF path, reducing accidental overwrite risk.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.41.
Version 1.39.40
- Added
Demo\Delphi\PreflightReportCli, a Delphi console companion for scriptableFPdfPreflightReportgeneration without opening a viewer. - The CLI supports no-argument sample creation plus input / output arguments, optional password,
text/html/md/json/csvoutput formats, andstandards=filtering for PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, and PDF/VT. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.40.
Version 1.39.39
- Enhanced
FPdfPreflightReportwithTPdfPreflightReport.ToMarkdownandSaveMarkdownToFileso preflight reports can be exported as issue-tracker-friendly Markdown. - Updated the Delphi, C++Builder, and Lazarus
PreflightReportsamples with Markdown preview switching and Save MD actions alongside the existing TXT / HTML / JSON / CSV workflow. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.39.
Version 1.39.38
- Enhanced the Delphi, C++Builder, and Lazarus
SecurityAuditsamples with JSON audit report export alongside the existing TXT save / copy workflow. - The JSON report contains
format,generatedAt,summary,findingCount, and structuredfindingsrows with severity, area, and detail fields. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.38.
Version 1.39.37
- Enhanced
FPdfPreflightReportwithTPdfPreflightReport.ToCsvandSaveCsvToFileso preflight reports can be exported as spreadsheet-friendly CSV. - Updated the Delphi, C++Builder, and Lazarus
PreflightReportsamples with CSV preview switching and Save CSV actions alongside the existing TXT / HTML / JSON workflow. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.37.
Version 1.39.36
- Enhanced
FPdfPreflightReportwithTPdfPreflightReport.IssueCategoryCountsplus reusableTPdfPreflightIssueCategoryCountandTPdfPreflightIssueCategoryCountstypes for aggregating marker-level issues by category. - Updated
TPdfPreflightReport.ToText,ToHtml, andToJsonso generated PreflightReport output includes issue-category count summaries alongside per-standard rows and detailed issue recommendations. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.36.
Version 1.39.35
- Renamed the expanded
PrintDialogsample toPrintPreferencesacross Delphi, C++Builder, and Lazarus so the demo name now matches its PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border, and duplex mapping workflow. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.35.
Version 1.39.34
- Enhanced
Demo\Delphi\PrintPDFwith drag-and-drop PDF loading and documented the existingDemo\CBuilder\PrintPDFworkflow alongside the Delphi and Lazarus PrintPDF samples. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.34.
Version 1.39.33
- Added
Demo\CBuilder\SplitView, completing the SplitView sample matrix across Delphi, C++Builder, and Lazarus. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.33.
Version 1.39.32
- Added
Demo\Lazarus\SplitView, bringing side-by-side PDF comparison to Lazarus with two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets, and rotation. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.32.
Version 1.39.31
- Added
Demo\Lazarus\PrintPDF, bringing the standard PDF print workflow to Lazarus with preview navigation, page ranges, copies, collate mode, progress, and cancellation. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.31.
Version 1.39.30
- Added
Demo\Lazarus\FontProperties, completing the FontProperties sample matrix across Delphi, C++Builder, and Lazarus. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.30.
Version 1.39.29
- Added
Demo\CBuilder\FontProperties, bringing indexed character and font metadata inspection to C++Builder alongside the Delphi sample. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.29.
Version 1.39.28
- Added
Demo\Delphi\ExtractTextPages, completing the per-page text extraction sample matrix across Delphi, C++Builder, and Lazarus. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.28.
Version 1.39.27
- Added
Demo\Lazarus\PrintDialog, completing the PrintDialog sample matrix across Delphi, C++Builder, and Lazarus. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.27.
Version 1.39.26
- Added
Demo\CBuilder\PrintDialog, bringing the N-up printing and PDF author print preferences workflow to C++Builder alongside the Delphi sample. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.26.
Version 1.39.25
- Added
Demo\CBuilder\ViewerInteractionLab, completing the ViewerInteractionLab sample matrix across Delphi, C++Builder, and Lazarus. - Updated the library build workflow and Win64 C++Builder package outputs so
TPdfViewviewer interaction methods link correctly in Win64 demos. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.25.
Version 1.39.24
- Added
Demo\Lazarus\ViewerInteractionLab, bringing the focused viewer interaction workflow to Lazarus alongside the Delphi sample. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.24.
Version 1.39.23
- Added
Demo\Lazarus\SearchAndSelect, completing the SearchAndSelect sample matrix across Delphi, C++Builder, and Lazarus. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.23.
Version 1.39.22
- Added
Demo\CBuilder\ContentExtractionLabandDemo\Lazarus\ContentExtractionLab, bringing the multi-category content extraction workflow to all supported demo IDEs. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.22.
Version 1.39.21
- Enhanced
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport, andDemo\CBuilder\PreflightReportwith a preview format selector so users can inspect text or JSON output before saving reports. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.21.
Version 1.39.20
- Added JSON export to
FPdfPreflightReportthroughTPdfPreflightReport.ToJsonandSaveJsonToFile, producing machine-readable summaries, per-standard status / priority, next actions, and issue details. - Updated
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport, andDemo\CBuilder\PreflightReportwith Save JSON actions alongside TXT / HTML export. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.20.
Version 1.39.19
- Enhanced
FPdfPreflightReportwithTPdfPreflightStatus, issue categories, per-standard priority, and next-action guidance in TXT / HTML reports. - Updated
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport, andDemo\CBuilder\PreflightReportto show status, priority, issue count, and next action in the summary grid. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.19.
Version 1.39.18
- Added
Demo\Lazarus\SecurityAudit, completing the Delphi, C++Builder, and Lazarus demo matrix for the read-only PDF risk-surface audit workflow. - The Lazarus sample enumerates permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability, and unsupported-feature callbacks, then saves or copies the finding list as a TXT report.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.18.
Version 1.39.17
- Added
Demo\CBuilder\SecurityAudit, bringing the read-only PDF risk-surface audit workflow to C++Builder alongside the existing Delphi sample. - The C++Builder sample enumerates permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability, and unsupported-feature callbacks, then saves or copies the finding list as a TXT report.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.17.
Version 1.39.16
- Added
Demo\CBuilder\SearchAndSelect, bringing the standalone SearchAndSelect viewer workflow to C++Builder alongside the existing Delphi sample. - The C++Builder sample creates or opens PDFs, lists all-page matches with page / character-index previews, supports Previous / Next and double-click navigation, and highlights current-page matches with
HighlightSearchText. - It also exposes
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChange, and spreadDisplayModeoptions; version metadata now reports 1.39.16.
Version 1.39.15
- Added
Demo\CBuilder\WatermarkStamp, completing the Delphi, Lazarus, and C++Builder demo matrix for reusable Form XObject watermark and stamp workflows. - The C++Builder sample creates target and stamp PDFs, reuses the stamp page through
CreateXObjectFromPage, appliesTPdfMatrixtransforms, and saves centered watermarks, corner stamps, and page number labels. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.15.
Version 1.39.14
- Added
Demo\Lazarus\WatermarkStamp, bringing the reusable Form XObject watermark and stamp workflow to Lazarus. - The Lazarus sample creates target and stamp PDFs, reuses the stamp page through
CreateXObjectFromPage, appliesTPdfMatrixtransforms, and saves centered watermarks, corner stamps, and page number labels. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.14.
Version 1.39.13
- Added
Demo\CBuilder\PreflightReport, completing the Delphi, Lazarus, and C++Builder demo matrix for the reusableFPdfPreflightReportworkflow. - The C++Builder sample uses
FPdfPreflightReport.hppto generate standard summaries, TXT report previews, TXT / HTML report files, and Open Last Report behavior. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.13.
Version 1.39.12
- Added
Demo\Lazarus\PreflightReport, bringing the PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, and PDF/VT preflight report workflow to Lazarus. - The Lazarus sample can open or create a PDF, select target standards, preview summary rows and TXT report output, save TXT / HTML reports, and open the most recently saved report.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.12.
Version 1.39.11
- Enhanced
Demo\Delphi\SearchAndSelectwith an all-page search results list that records page number, character index, and preview text. - Added Previous / Next match navigation and double-click result jumping while preserving current-page
HighlightSearchTextbehavior. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.11.
Version 1.39.10
- Enhanced
Demo\Delphi\SecurityAuditwith Save Report and Copy Report actions that export the current summary and finding rows as a TXT audit report. - The demo now clears report export state when the audit panel is reset, keeping copied or saved reports aligned with the visible findings.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.10.
Version 1.39.9
- Enhanced
Demo\Delphi\ContentExtractionLabwith source-PDF save, report copy-to-clipboard, and all / none category selection actions. - The demo now invalidates the current report when category selections change, so TXT / JSON exports reflect the visible extraction scope.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.9.
Version 1.39.8
- Added
Demo\Delphi\ContentExtractionLab, a unified content extraction workflow sample for document metadata, page text, page objects, images, attachments, links, annotations, bookmarks, and font / character metrics. - The sample can open an existing PDF or create a synthetic PDF with text, image, attachment, and annotation content, then generate summary rows and detailed TXT / JSON reports.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.8.
Version 1.39.7
- Added
Lib\FPdfPreflightReport.pas, a reusable report helper that wrapsValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR, andValidatePdfVTinto oneTPdfPreflightReportobject. - Added
Demo\Delphi\PreflightReport, a workflow sample that opens or creates a PDF, selects target standards, previews summary rows and issue recommendations, and saves TXT or HTML reports. - The generated reports explicitly describe the built-in marker-level validation boundary so applications can pair them with dedicated content-level preflight tools when required.
- Updated
TPdf.AboutInfo, Lazarus package metadata, package project lists, and installer version metadata to report 1.39.7.
Version 1.39.6
- Added
Demo\Delphi\SearchAndSelect, a focused viewer workflow sample for search highlighting, text selection, selected-text preview, copy, clear, and spread display modes. - The sample demonstrates
HighlightSearchText, match-case / whole-word search options,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard, andClearSelectionwithout adding new library API. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.6.
Version 1.39.5
- Expanded
Demo\Delphi\ViewerInteractionLabinto a SearchAndSelect-style viewer UX sample withHighlightSearchText, match-case / whole-word options, selected-text preview, and existing selection / clipboard controls. - Extended
Demo\Delphi\PrintDialogto inspect PDF author print preferences:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandling, and visibleSetPdfPrintPaperHandlingDevModeduplex mapping. - Added
Demo\Delphi\SecurityAudit, a read-only risk-surface sample that lists permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state, and V8 / XFA helper availability. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.5.
Version 1.39.4
- Added
Demo\CBuilder\ImageToPDFandDemo\Lazarus\ImageToPDF, completing the ImageToPDF sample matrix across Delphi, C++Builder, and Lazarus. - The new samples demonstrate multi-image selection, selected-image preview, one PDF page per image, A4 portrait / landscape page sizing, centered image scaling, per-image progress, and opening the generated PDF after saving.
- Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.4.
Version 1.39.3
- Added
Demo\CBuilder\BatchExport, bringing the multi-file PDF to JPG export workflow to C++Builder alongside the existing Delphi and Lazarus samples. - The sample demonstrates
LoadCustomDocument,IPdfCancellationTokenSource, streamingTFileStreaminput, per-file and per-page progress, cancel handling, DPI / quality / password inputs, and output-folder opening after completion. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.3.
Version 1.39.2
- Added
Demo\Delphi\WatermarkStamp, a runnable Form XObject workflow sample that creates a target PDF and reusable stamp PDF, then applies centered watermarks, top-right stamps, and page-number labels across every page. - The sample demonstrates
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrix, andFPDFPageObj_SetMatrixwithout adding new library API. - Updated
Docs\en-us\Examples.htmlto use the currentTPdfMatrix.Handlepattern when passing matrices toFPDFPageObj_SetMatrix. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.2.
Version 1.39.1
- Added
Demo\Delphi\ViewerInteractionLab, a focusedTPdfViewsample for display modes, fit modes, page colors, rotation, user text selection, clipboard actions, andDeviceToPagecoordinate feedback. - Added
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabso Lazarus users can run the PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, and PDF/VT validation and marker-output workflow. - Listed the standards units in
Lib\37.0\PDFiumVcl.dprojandLib\FPC\PDFiumLaz.lpkand fixed the DelphiSplitViewdemo build by removing a duplicateWinapi.ShellAPIimport. - Fixed Delphi demo batch-build blockers in
BatchExport,PDFViewer,MultiPageViewer, andSplitViewwithout changing their runtime behavior. - Fixed C++Builder demo batch-build compatibility in
PDFViewerandMultiPageViewerby replacingnullptrwithNULLfor the current project mode. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.1.
Version 1.39.0
- Added
Demo\Delphi\StandardsLab, a runnable standards workflow sample that loads or creates a PDF, runsValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR, andValidatePdfVT, and displays detected conformance, pass/fail status, and issue counts in one grid. - The StandardsLab save buttons call
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfR, andSaveAsPdfVT, making PDF standards marker output visible without writing a custom harness. - Updated
TPdf.AboutInfo, Lazarus package metadata, and installer version metadata to report 1.39.0.
Version 1.38.0
TPdfViewsearch and text-selection overlays now use real alpha blending instead of logical mask painting, preserving page content under highlights.- Added
SetPdfPrintPaperHandlingDevModeto mapTPrintPaperHandlinginto WindowsDEVMODE.dmDuplexvalues:DMDUP_SIMPLEX,DMDUP_HORIZONTAL, andDMDUP_VERTICAL. TPdfView.SmoothScrollnow animates line/page scrollbar commands in timer-driven segments; thumb tracking remains immediate.- Updated
TPdf.AboutInfoand installer version metadata to report 1.38.0.
Version 1.37.0
TPdfnow owns a per-instance render lock that serializesRenderPage,RenderTile,RenderPageProgressive, page reload, and document unload paths. Worker-driven rendering through a shared component is now practical, while applications still coordinate document mutation and lifetime.- Fixed the zero-copy bitmap wrapper to reject bottom-up
TBitmapDIB layouts and fall back to a PDFium-owned buffer before copying out, eliminating stride-corruption / access-violation failures in VCL render tests. - Tightened
TPdfViewselection behavior:AllowUserTextSelectiongates user input only, code-level selection APIs still paint, andSelectAllfollows the actual visible spread so the cover page no longer selects page 2. Delphi, Lazarus, and C++Builder tests were expanded accordingly. - Updated
TPdf.AboutInfoand installer version metadata to report 1.37.0.
Version 1.36.0
- Activated end-user text selection in
TPdfView— theAllowUserTextSelectionproperty reserved in v1.17.0 now drives a complete drag-select pipeline. Left-click on a text character enters select mode (hit-test auto); left-click on a blank area continues to pan as before. The form-fill widget keeps priority, so clicking on a form field still focuses the field rather than starting a selection. - Double-click selects the word, triple-click selects the line,
Ctrl+Aselects the current page (both pages in spread display modes), andCtrl+Ccopies the selection to the Windows clipboard asCF_UNICODETEXT. Shift+Left/Shift+Rightextends the selection one character at a time (spilling to the adjacent page in spread mode);Shift+Home/Shift+Endextends to the visual line edge using the seed character's box height as the line-cluster tolerance, so mixed-font-size lines stay clustered correctly.- Hovering over text changes the cursor to
crIBeam; hovering off text restores the default cursor. While a text-selection drag is in progress, dragging into a 20-pixel dead zone at any viewer edge auto-scrolls the page (50 ms tick, 16 px / tick, clamped to the same bounds the pan path uses) so the selection can extend past the current viewport without first releasing the mouse. - Cross-page selection works in spread display modes (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): a drag started on the left page and ending on the right page selects the contiguous range spanning both.SelectedTextjoins the per-page slices with CR/LF so the round-tripped text reads like normal multi-line content. - New published property
SelectionColor(defaultclHighlight, the Windows system selection color) — independent fromHighlightColorwhich colors search results in yellow. Search highlights and a live drag-selection can be shown on screen simultaneously without color conflict. - New published event
OnSelectionChangefires whenever the selection's materialised ranges actually mutate — never on identical re-application, so host applications can wire it directly to status-bar text or button enabled state without debouncing. - New public API on
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. These are code-level entry points and always work regardless ofAllowUserTextSelection— the flag only gates user input (mouse, Ctrl+C, Ctrl+A, Shift+arrows), so kiosk hosts can disable user-driven selection while still building "Select All / Copy" toolbar buttons that drive the same API. - A default right-click
Copy/复制popup menu is auto-attached when the host has not assigned its ownPopupMenu— standard "select text, right-click, copy" works out of the box. The caption is picked between English and Chinese bySysLocale.PriLangID; hosts that need full localization (or a richer menu) just assign their ownPopupMenuand the default is suppressed. - Selection is automatically cleared on
SetPdf,SetPageNumber,SetActive(False), andDisplayModetransitions, withOnSelectionChangefiring exactly once when the previous selection was non-empty. The form-fill subsystem keeps priority — while a form field is being edited, all selection keyboard shortcuts defer so the field receivesCtrl+C/Ctrl+A/Shift+arrowsfor its own selection. - Expanded the Delphi and Lazarus regression suites to 202 cases each, and the C++Builder suite to 159 cases, covering default values, round-trip, public API behavior, state-change clears, mouse drag (hit-text / hit-blank), click vs drag, IBeam cursor switching, double-click word, triple-click line, keyboard shortcuts, default popup attach / defer / caption, and spread cross-page selection — including a clipboard CR/LF round-trip check.
Version 1.35.0
- Added PDF/VT (ISO 16612-2:2010) marker injection support: TPdf.SaveAsPdfVT promotes the current document to a PDF/VT-1 or PDF/VT-2 conformant file (the variable and transactional printing PDF subset). PDF/VT is built on top of PDF/X-4 — ISO 16612-2 §6.2.1 requires every PDF/VT-1 file to also conform to PDF/X-4 — so the injector writes the full PDF/X-4 marker set (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)and/Trapped, catalog/OutputIntentsreferencing an OutputIntent dictionary with embedded ICC profile) alongside the PDF/VT-specific properties. - The PDF/VT-specific injection covers XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" or "PDF/VT-2" per §6.3 Table 2) andpdfvtid:GTS_PDFVTModDate(kept in sync withxmp:ModifyDateper §6.3 NOTE 1), plus a pdfaExtension:schemas description that declares both the pdfxid and pdfvtid namespaces (NPES URIshttp://www.npes.org/pdfx/ns/id/andhttp://www.npes.org/pdfvt/ns/id/). The trailer carries an/IDarray. - Added TPdf.SaveAsPdfVTToStream for in-memory PDF/VT output, and a default-options shorthand
TPdf.SaveAsPdfVT(FileName)that produces PDF/VT-1 with the bundled sRGB IEC61966-2.1 OutputIntent (3144 bytes, same profile as SaveAsPdfA / SaveAsPdfX) and/Trapped /False. - Added TPdf.ValidatePdfVT: checks an open PDF for PDF/VT compliance markers (XMP
pdfvtid:GTS_PDFVTVersionandGTS_PDFVTModDatepresence, equality betweenpdfvtid:GTS_PDFVTModDateandxmp:ModifyDate, presence of the underlyingpdfxid:GTS_PDFXVersionidentifier, catalog/DPartRootpresence per §6.5,/OutputIntentswith/DestOutputProfile, trailer /ID, encryption status,xmp:CreateDate/ModifyDatepresence) and returns TPdfVTValidationResult with the detected conformance level and the set of issues found. - Added TPdf.PdfVTConformance property: returns the conformance level of the currently open document (pvc1, pvc2, pvcNone, or pvcUnknown) without needing to call ValidatePdfVT explicitly.
- New types exported in the new unit FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions.
- Document Part Hierarchy (
DPartRoot/DParttree per §6.5) is application-level structure that depends on the variable-data print workflow's recipient / page-range mapping. SaveAsPdfVT does NOT synthesise a DPart tree — ValidatePdfVT surfaces a missing/DPartRootaspvviMissingDPartRootso callers can route PDF/VT files through a separate DPart-building step. Content-level PDF/X-4 requirements (font embedding, transparency, ICC managed color, OPI / JavaScript / Reference XObject prohibitions, etc.) remain the responsibility of the document author and PDFium's rendering pipeline. - Updated TPdf.AboutInfo string to report the current product version.
Version 1.34.0
- Added PDF/R-1 (ISO 23504-1:2020) marker injection support: TPdf.SaveAsPdfR promotes the current document to a PDF/R-1 conformant file (the raster-image transport subset of PDF used for scanned documents). The injection covers the file-format level requirements that can be attached by post-processing — the unique
%PDF-raster-1.0version-identification comment written between the trailer dictionary and the startxref keyword (§5), the catalog dictionary stripped down to the §6.3 white list (only Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata survive), the Document Information Dictionary stripped to the §6.4.3 white list (only Creator / Producer / CreationDate / ModDate), a catalog /Metadata XMP stream carrying the four §6.4.4 Table 1 entries (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate), and a trailer /ID array. - Added TPdf.SaveAsPdfRToStream for in-memory PDF/R output, and a default-options shorthand
TPdf.SaveAsPdfR(FileName)for the common case. - Added TPdf.ValidatePdfR: checks an open PDF for PDF/R-1 compliance markers (the
%PDF-raster-x.yfooter comment, header version, /Type /ObjStm absence, catalog white-list compliance, Info dictionary white-list compliance, XMP metadata stream presence, trailer /ID) and returns TPdfRValidationResult with the detected conformance level and the set of issues found. - Added TPdf.PdfRConformance property: returns the conformance level of the currently open document (prc1, prcNone, or prcUnknown) without needing to call ValidatePdfR explicitly.
- New types exported in the new unit FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions.
TPdfRSaveOptions.Defaultsets StripInfoOptionalEntries and StripCatalogOptionalEntries to True, so the injector defaults to producing a §6.3 / §6.4.3 compliant catalog and Info dictionary; callers may set these to False to preserve source entries (the output then won't satisfy those PDF/R clauses, but other markers stay attached). - Content-level requirements remain the responsibility of the source PDF: per-page Contents structure (§6.5.1), MediaBox
[0 0 w h]form (§6.5.3), filter restrictions (§6.2.2 — only FlateDecode, CCITTFaxDecode bitonal, DCTDecode 8-bit gray/RGB), absence of object streams (§6.2.4), and strip layout per §6.6. These cannot be enforced by post-processing — PDF/R is structurally a much stricter subset than the other PDF/x standards and requires generating the source bytes correctly. ValidatePdfR surfaces the file-format issues this unit can detect; pair with a TWAIN Working Group PDF/R validator for full content-level checks. - Updated TPdf.AboutInfo string to report the current product version.
Version 1.33.0
- Added PDF/X (ISO 15930 family) marker injection support: TPdf.SaveAsPdfX promotes the current document to a PDF/X-1a:2001, PDF/X-3:2002, or PDF/X-4 conformant file by post-processing the base PDF with an incremental update. The injection covers the file-format level requirements that can be attached by post-processing — XMP metadata stream carrying
pdfxid:GTS_PDFXVersion(andpdfxid:GTS_PDFXConformancefor PDF/X-1a / PDF/X-3) plus the matching pdfaExtension:schemas description, a rewritten Document Information Dictionary with/GTS_PDFXVersion,/GTS_PDFXConformance, and/Trappedentries, an updated catalog with/OutputIntents [N 0 R]referencing an OutputIntent dictionary with/S /GTS_PDFXand an embedded ICC profile, and a trailer/IDarray. - Added TPdf.SaveAsPdfXToStream for in-memory PDF/X output, and a default-options shorthand
TPdf.SaveAsPdfX(FileName)that produces PDF/X-4 with the built-in sRGB IEC61966-2.1 OutputIntent (3144 bytes, identical to the profile used by SaveAsPdfA). - Added TPdf.ValidatePdfX: checks an open PDF for PDF/X compliance markers (XMP pdfxid identifier and equality with the Info-dictionary value, pdfxid extension schema description, /OutputIntents array with /DestOutputProfile, Title presence, trailer /ID, encryption status, xmp:CreateDate / xmp:ModifyDate presence) and returns TPdfXValidationResult with the detected level and the set of issues found.
- Added TPdf.PdfXConformance property: returns the conformance level of the currently open document (pxc1a, pxc3, pxc4, pxcNone, or pxcUnknown) without needing to call ValidatePdfX explicitly. The XMP version string is parsed to disambiguate among the three conformance levels.
- New types exported in the new unit FPdfPdfx: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions.
TPdfXSaveOptions.Defaulttargets PDF/X-4 with sRGB OutputIntent and/Trapped /False; callers may overrideConformance, supply a CMYKIccProfileDatablob for commercial print workflows, or changeOutputCondition/OutputConditionIdentifier/RegistryNameto point at a specific ICC characterisation registry entry (e.g. FOGRA39, GRACoL2006_Coated1v2). - Content-level requirements (all fonts embedded, no JavaScript, no visible annotations, OPI prohibition, transparency rules for PDF/X-1a / PDF/X-3, etc.) remain the responsibility of the document author and PDFium's rendering pipeline. Pair ValidatePdfX with a preflight tool such as callas pdfaPilot or the Ghent PDF Workgroup Output Suite for complete conformance verification.
- Updated TPdf.AboutInfo string to report the current product version.
Version 1.32.0
- Added PDF/E-1 (ISO 24517-1:2008) marker injection support: TPdf.SaveAsPdfE promotes the current document to a PDF/E-1 conformant file by post-processing the base PDF with an incremental update. The injection covers the file-format level requirements that can be attached by post-processing — an XMP metadata stream carrying
pdfe:ISO_PDFEVersion = "PDF/E-1"plus the matching pdfaExtension:schemas description, a rewritten Document Information Dictionary with the mandatory/ISO_PDFEVersion (PDF/E-1)entry required by §5, the Info-XMP bridging blocks inherited from ISO 19005-1 §6.7 via §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool), and a trailer/IDarray required by §6.2. - Added TPdf.SaveAsPdfEToStream for in-memory PDF/E output and a default-options shorthand
TPdf.SaveAsPdfE(FileName)for the common case. - Added TPdf.ValidatePdfE: checks an open PDF for PDF/E-1 compliance markers (XMP pdfe:ISO_PDFEVersion presence and equality with the Info-dictionary value, pdfe extension schema description, Info-dictionary /ISO_PDFEVersion entry, trailer /ID, xmp:CreateDate / xmp:ModifyDate presence) and returns a structured result with the detected conformance level and the set of issues found.
- Added TPdf.PdfEConformance property: returns the conformance level of the currently open document (pec1, pecNone, or pecUnknown) without needing to call ValidatePdfE explicitly.
- New types exported in the new unit FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions.
- The Info-dictionary rewrite is a first for PDFiumVCL's PDF/x post-processing path — it rewrites the existing Info object with the same object number (so xref subsection / trailer /Info reference stay valid) and synthesises a fresh Info dictionary when the source trailer has no /Info entry. PDFium itself emits an Info dictionary in every SaveAs output, so the common case is the rewrite path.
- Content-level requirements (font embedding, ToUnicode CMaps, prohibited XObjects / ExtGState keys / XFA forms, etc.) remain the responsibility of the document author — SaveAsPdfE attaches the file-format markers but does not alter page content or remove prohibited features.
- Updated TPdf.AboutInfo string to report the current product version.
Version 1.31.0
- Added PDF/UA-1 (ISO 14289-1:2014) marker injection support: TPdf.SaveAsPdfUa promotes the current document to a PDF/UA-1 conformant file by post-processing the base PDF with an incremental update. The injection covers the file-format level requirements that can be enforced by post-processing — an XMP metadata stream carrying
pdfuaid:part = 1plus the matching pdfaExtension:schemas description, mandatorydc:title, catalog/MarkInfo << /Marked true /Suspects false >>and/ViewerPreferences << /DisplayDocTitle true >>(only when the source has none), catalog/Lang(when caller supplies a BCP 47 tag), and a trailer/IDarray. - Added TPdf.SaveAsPdfUaToStream for in-memory PDF/UA output, and a default-options shorthand
TPdf.SaveAsPdfUa(FileName)for the common case. - Added TPdf.ValidatePdfUa: checks an open PDF for PDF/UA-1 compliance markers (StructTreeRoot existence, /Lang, /MarkInfo /Marked true with /Suspects = false, /ViewerPreferences /DisplayDocTitle true, XMP pdfuaid:part identifier, dc:title presence, trailer /ID, encryption status) and returns a structured result with the detected conformance level and the set of issues found.
- Added TPdf.PdfUaConformance property: returns the conformance level of the currently open document (puc1, pucNone, or pucUnknown) without needing to call ValidatePdfUa explicitly.
- New types exported in the new unit FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions.
- Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language fields left empty in TPdfUaSaveOptions are auto-populated from FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage, so existing callers can save with a single line.
- Content-level requirements (StructTreeRoot tagging completeness, Figure Alt text, ToUnicode CMaps, font embedding, etc.) remain the responsibility of the document author — SaveAsPdfUa attaches the file-format markers but does not alter page content or invent tags. ValidatePdfUa surfaces the absence of StructTreeRoot as
pvuaiMissingStructTreeRootso callers can route untagged documents through a separate tagging pipeline. - Updated TPdf.AboutInfo string to report the current product version.
Version 1.30.0
- PDF/A-1b output now satisfies the ISO 19005-1 (with Cor.1:2007) requirements for Document Information Dictionary / XMP equivalence: every Info dictionary entry PDFium writes into the base PDF is mirrored into the XMP packet, including Title (dc:title), Author (dc:creator), Subject (dc:description per Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate), and ModDate (xmp:ModifyDate). xmp:MetadataDate is also emitted.
- The trailer of a PDF/A document now always contains an /ID array (ISO 19005-1 6.1.3 hard requirement). When TPdf.SaveAsPdfA processes a document whose source already has a file identifier, the existing 16-byte permanent and changing IDs are reused; otherwise a deterministic 16-byte fallback ID is derived from the source bytes.
- The injected XMP now embeds the pdfaid extension schema description required by ISO 19005-1 6.7.8 (replaced by Cor.1) — pdfaid is treated as an extension schema relative to XMP Specification 2004, so all conforming files must declare its property names, value types, and categories in the pdfaExtension:schemas container.
- TPdfASaveOptions gained five new optional fields: Producer, CreationDate, ModDate (PDF date strings in “D:YYYYMMDDHHmmSSOHH'mm'” form), DocumentId, and InstanceId (16-byte byte strings for the trailer /ID array). TPdf.SaveAsPdfA / SaveAsPdfAToStream auto-populate the missing fields from FPDF_GetMetaText and FPDF_GetFileIdentifier, so existing callers continue to work without changes.
- TPdf.ValidatePdfA / TPdf.PdfAConformance now report three additional issues: pvaiMissingTrailerId (no /ID in the trailer), pvaiMissingXmpDates (xmp:CreateDate or xmp:ModifyDate missing), and pvaiMissingExtensionSchema (pdfaid extension schema description absent).
- Non-ASCII characters in Title, Author, Subject, Keywords, Creator, and Producer are now encoded as UTF-8 in the XMP packet (XMP Specification requires UTF-8), preserving multilingual metadata round-trip through SaveAsPdfA.
- Updated TPdf.AboutInfo string to report the current product version.
Version 1.29.0
- Refreshed the bundled PDFium DLLs (Win32 and Win64, both standard and V8 builds) to the 2026-05-22 upstream snapshot, picking up upstream fixes to FPDFText_SetText / FPDFText_SetCharcodes crash paths and assorted internal hardening from the PDFium project.
- Exposed PDFium’s new FPDF_SUBSET_NEW_FONTS save flag in FPdfPageOps.pas, allowing FPDF_SaveAsCopy callers to request automatic subsetting of embedded font files for newly added text objects. The existing FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL, and FPDF_REMOVE_SECURITY constants are now defined using the upstream bit-shift form (the legacy numeric value 3 is preserved as FPDF_REMOVE_SECURITY_DEPRECATED for binary compatibility).
- Added the FPDF_FONT_BACKEND_TYPE enum (FREETYPE / FONTATIONS) and the matching m_FontLibraryType field on FPDF_LIBRARY_CONFIG in FPdfView.pas, so applications that initialize PDFium with the Skia renderer can now pick the font backend at startup.
- Updated the TFPDFPage_InsertObject signature to match upstream: the C function now returns FPDF_BOOL (TRUE on success, FALSE if page_object is NULL or ownership transfer fails) instead of void. Existing PDFiumVCL callers continue to compile unchanged since Delphi / FPC allow ignoring a function’s return value.
- Corrected the TPdf.AboutInfo string to report the current product version (was stale at v1.27.0 since the v1.28.0 documentation-only release).
Version 1.28.0
- Substantially expanded the in-page documentation across the entire API reference: every property, method, event, and global function entry now carries a 3-paragraph Description, a Remarks list, a multi-line Delphi Example, and a richer See Also block — covering 200+ previously thin pages including all TPdf counters, metadata getters, font and character accessors, page-level properties, indexed records, document-level methods, and the full TPdfView state / display / event surface.
- Fine-tuned the help layout to match the losLab visual baseline used in the HotXLS reference: matched h1/h2 sizes, consolidated the API navigation grid styles into the shared StyleSheet, and removed the per-page inline CSS overrides on Navigation.html.
- Documentation now ships with a helper script (Docs\Build-Expand-Entries.ps1) that regenerates the entry-page enrichment from a single data table for repeatable maintenance.
Version 1.27.0
- Added PDF/A-1b creation support: TPdf.SaveAsPdfA saves any open document as a PDF/A-1b conformant file by post-processing the base PDF with an incremental update that injects an XMP metadata stream, an sRGB ICC OutputIntent, and an updated document catalog — all without requiring extra DLL APIs. Works on any platform supported by PDFiumVCL.
- Added TPdf.SaveAsPdfAToStream for in-memory PDF/A output.
- Added TPdf.ValidatePdfA: checks an open PDF for PDF/A compliance (XMP pdfaid markers, OutputIntent with embedded ICC profile, encryption) and returns a structured result with the detected conformance level and a set of specific issues found.
- Added TPdf.PdfAConformance property: returns the conformance level of the currently open document (pac1b, pac1a, pac2b, pac3b, pacNone, or pacUnknown) without needing to call ValidatePdfA explicitly.
- New types exported: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (in new unit FPdfPdfa.pas).
- SaveAsPdfA supports a custom ICC profile via TPdfASaveOptions.IccProfileData; when left empty the built-in sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes) profile is used automatically.
- Replaced the monolithic HTML reference with a restructured web help system: 302 individual API entry pages (one per property, method, event, and global function) covering TPdf and TPdfView, each with a full description, parameter table, Delphi code example, and See Also links.
- Added Navigation.html: a comprehensive one-page API navigation index organised into six sections (TPdf properties/methods/events, TPdfView properties/methods/events, global functions) with a 5-column flex grid for fast scanning.
- Rebuilt TPdf.html and TPdfView.html as compact component overview pages retaining the type-reference sections (Types, Constants, Global Variables) and linking out to the individual entry pages for all members.
- Added full-text search powered by Search.js with incremental client-side matching across all 312 indexed pages.
- Updated all navigation bars site-wide to point to Navigation.html.
Version 1.26.0
- Added Demo/Lazarus/BatchExport, the LCL port of the v1.14.0 Delphi BatchExport demo. Same feature set: multi-file PDF -> JPG export with per-file overall progress, per-page current progress, DPI / quality / password inputs, and a cooperatively-cancellable batch backed by IPdfCancellationToken. The output folder is opened in the platform file manager when extraction finishes successfully.
Version 1.25.0
- Added Form XObject page reuse to TPdf, enabling watermark, template overlay, and “stamp one page onto many” workflows: CreateXObjectFromPage manufactures a reusable handle from any page of another document; InsertFormObjectFromXObject inserts ONE copy of the wrapped page into the current page. Returns the inserted FPDF_PAGEOBJECT so the caller can position / scale / rotate it with FPDFPageObj_SetMatrix and the v1.9.0 TPdfMatrix helpers.
- The new TPdfXObject Pascal class wraps PDFium’s FPDF_XOBJECT handle and closes it automatically in its destructor, eliminating the manual FPDF_CloseXObject ceremony.
- Expanded the Delphi and Lazarus regression suites to 147 cases each, and the C++Builder suite to 123 cases, covering handle creation and page-object insertion contracts.
Version 1.24.0
- Added TPdf.RenderPageProgressive — a cancellable variant of RenderPage that drives PDFium’s progressive rendering loop and polls a v1.7.0 IPdfCancellationToken between iterations, so long high-DPI renders can abort mid-page instead of blocking the caller until completion.
- Returns a TPdfProgressiveStatus value: prsDone, prsCancelled, or prsFailed. Pass AToken = nil to render to completion without ever pausing (no possibility of prsCancelled).
- Uses the same zero-copy fast path introduced in v1.21.0 — PDFium renders directly into the destination TBitmap’s DIB. The same legacy fallback applies when the DIB can’t be wrapped.
- Expanded the Delphi and Lazarus regression suites to 145 cases each, and the C++Builder suite to 121 cases, covering nil-token (completes), pre-cancelled token (prsCancelled), and pixel-equivalence with sync RenderPage on a live token.
Version 1.23.0
- Added six new TPdfView methods that expose PDFium’s form-widget text selection and Undo/Redo to applications: GetSelectedFormText returns the currently selected text inside the focused form widget; SelectAllFormText selects every character; FormUndo / FormRedo / FormCanUndo / FormCanRedo drive the focused widget’s edit history. The underlying PDFium APIs were already bound but had no high-level entry point. All six short-circuit safely when the view is inactive or the document has no AcroForm widget focused.
- Expanded the Delphi and Lazarus regression suites to 142 cases each, and the C++Builder suite to 119 cases, covering the no-form-no-focus contract for every new method.
Version 1.22.0
- Added page composition wrappers to TPdf: ImportPagesByIndex takes a zero-based index array to copy specific pages from a source document; ImportNPagesToOne returns a brand-new TPdf whose pages are N-up composites of this document; MovePages reorders pages in place. The underlying PDFium APIs were already bound but had no Pascal-friendly entry point.
- ImportPagesByIndex accepts an empty array to import every source page (equivalent to passing nil at the C ABI level).
- Expanded the Delphi and Lazarus regression suites to 136 cases each, and the C++Builder suite to 115 cases, covering subset import, whole-document import, page reorder, and N-up composite.
Version 1.21.0
- Improved rendering performance by switching TPdf.RenderPage / TPdf.RenderTile (and the corresponding TPdfView helpers) to a zero-copy output path. PDFium now writes directly into the destination TBitmap’s DIB buffer instead of into an internal buffer that was then copied row by row, saving one width x height x 4 bytes memory copy per render. The improvement is most noticeable at high DPI (thumbnail panels, print-quality export, batch export).
- The legacy per-scanline path is kept as a safety fallback for the unlikely case where the destination DIB cannot be wrapped (extreme dimensions, unusual stride, OOM). Behavior is byte-identical between the two paths, just slower in the fallback.
- Expanded the Delphi and Lazarus regression suites to 132 cases each, and the C++Builder suite to 112 cases, covering caller-bitmap pf32bit upgrade, dimensions round-trip, and a large-bitmap stride sanity test.
Version 1.20.0
- Added search-result highlighting to TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) scans the current view page and returns the number of matches found, painting a HighlightColor mask over each match on every redraw. ClearHighlight removes the highlights; switching the view to a different page clears them automatically since matches are page-specific.
- HighlightColor defaults to clYellow and is published so applications can theme the highlight to match their UI palette.
- Expanded the Delphi and Lazarus regression suites to 129 cases each, and the C++Builder suite to 109 cases, covering default color, color round-trip, “real fixture word matches” against the sample.pdf string, and the “missing word returns zero matches” contract.
Version 1.19.0
- Added FitMode property to TPdfView with four values: pfmNone (manual zoom), pfmActualSize (100%), pfmFitPage (whole page fits in the viewport), and pfmFitWidth (page width matches viewport width). The active fit mode is re-applied automatically on Resize and when the current page changes, so long documents with mixed page sizes stay perfectly framed.
- Setting Zoom directly cancels the active fit mode (FitMode reverts to pfmNone), matching the standard PDF viewer convention where typing a zoom value drops out of Fit Page / Fit Width.
- Default is pfmNone so existing applications keep their explicit-zoom behavior.
- Expanded the Delphi and Lazarus regression suites to 124 cases each, and the C++Builder suite to 106 cases, covering default value, mode round-trip, fit-page producing a real zoom on a loaded document, and manual-zoom-cancels-fit-mode.
Version 1.18.0
- Added PageColor property to TPdfView, decoupling the rendered PDF page background from the surrounding control’s Color. Default is clWhite, so PDF pages now render as paper-white regardless of the host application’s theme. Dark-mode viewers can now keep the scroll area dark while leaving the actual PDF page white (or any color the application picks).
- Behavior change: applications that used to set TPdfView.Color in order to recolor the PDF page should set PageColor instead. The default experience improves for the common case (white pages on themed control backgrounds) without any code change.
- Expanded the Delphi and Lazarus regression suites to 120 cases each, and the C++Builder suite to 103 cases, covering default value and color round-trip.
Version 1.17.0
- Added user-input lock-down toggles to TPdfView so applications embedding the viewer in kiosks, preview panes, or read-only contexts can disable navigation gestures without subclassing: AllowUserPageChange controls the new PgUp / PgDn / Ctrl+Home / Ctrl+End keyboard shortcuts; ChangePageOnMouseScrolling controls the new wheel-up / wheel-down page jumps; AllowUserTextSelection is reserved for the future mouse-drag text-selection path. All three default to True so existing applications upgrade with no behavioral change.
- Mouse wheel page navigation skips Ctrl+wheel so applications can keep Ctrl+wheel reserved for zoom.
- Expanded the Delphi and Lazarus regression suites to 118 cases each, and the C++Builder suite to 101 cases, covering default values and toggle round-trip.
Version 1.16.2
- Expanded TPdfView regression coverage for annotation link clicks when the viewer page differs from the associated TPdf page, using a real headless mouse click path across Delphi, Lazarus, and C++Builder.
- The Delphi and Lazarus suites now run 114 cases each, and C++Builder now runs 99 cases.
Version 1.16.1
- Fixed TPdfView link-click handling so automatic annotation and web-link actions use the page currently displayed by the viewer, even when the associated TPdf component is parked on a different page.
- Hardened TPdfThumbnailView against dangling Pdf references when the linked TPdf component is destroyed.
- Added thumbnail-reference lifetime regression coverage; the Delphi and Lazarus suites now run 113 cases each, and C++Builder now runs 98 cases.
- Synchronized README, test documentation, HTML Help search/index content, and generated C++ package outputs with the v1.7.0 through v1.16.0 integration updates.
Version 1.16.0
- Added a new Delphi PrintDialog demo (Demo/Delphi/PrintDialog) that focuses on N-up printing (1 / 2 / 4 / 9 pages per sheet) with odd / even page filtering, grayscale rendering, and optional 1-pixel cell borders. It is a deliberate small companion to the existing PrintPDF demo, which already covers preview, recent files, zoom, and scaling.
Version 1.15.0
- Added a new TPdfThumbnailView component (FPdfThumbnail unit) that renders one page thumbnail per row in a scrollable side panel with hover and selection highlighting plus click-to-go navigation. Designed to sit next to a TPdfView so end users can browse a long document by page.
- The component is registered on the losLab palette tab alongside TPdf and TPdfView; key properties: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor, and the OnPageClick event.
- Expanded the Delphi and Lazarus regression suites to 112 cases each, and the C++Builder suite to 97 cases, covering defaults, thumbnail-size round-trip, extreme-value clamping, color round-trip, and event handler assignment.
Version 1.14.0
- Added a new Delphi BatchExport demo (Demo/Delphi/BatchExport) showing how to convert many PDF files to JPG in one pass using TPdf.LoadCustomDocument for streaming load, IPdfCancellationToken for cooperative cancellation, and per-file overall + per-page progress bars. The demo uses one TPdf instance per file (PDFium itself is not thread safe) and opens the output folder in Explorer when extraction finishes successfully.
Version 1.13.0
- Added an async-rendering UI overlay to TPdfView through three new properties: AsyncRendering, LoadingText, and LoadingColor. When AsyncRendering is True the single-page paint path draws a small “Loading...” indicator over the rendered page so applications using their own worker for long renders share a consistent visual affordance.
- Defaults preserve the existing behavior: AsyncRendering is False, so applications that do not opt in see no visual change.
- Documentation clarifies that PDFium itself is not thread safe — actually offloading the render to a worker requires the caller to keep one TPdf per worker; the upcoming batch-export demo shows that pattern.
- Expanded the Delphi and Lazarus regression suites to 106 cases each, and the C++Builder suite to 93 cases, covering default values and the three-property round-trip.
Version 1.12.0
- Added click-driven link handling to TPdfView. The new LinkOptions property controls automatic behavior for the four PDF link action types: goto (page jump), URI (ShellExecute), launch (ShellExecute), and embedded GotoR (reserved). Defaults enable loAutoGoto and loAutoOpenURI; loAutoLaunch and loAutoEmbeddedGoto stay off so a stray click cannot run an arbitrary program.
- Added OnAnnotationLinkClick and OnWebLinkClick events that fire before any automatic action and let applications inspect the link, mark it Handled, or redirect it (for example, to a security prompt).
- Link click detection runs only when the gesture is a click rather than a drag, using a fresh MouseDown anchor so panning gestures still flow through the existing scroll path unchanged.
- Expanded the Delphi and Lazarus regression suites to 102 cases each, and the C++Builder suite to 91 cases, covering default LinkOptions, set round-trip, and event-handler assignment.
Version 1.11.0
- Added visual polish to TPdfView: PageShadowSize, PageShadowColor, and PageBorderColor properties paint an optional drop shadow under the page rectangle and a one-pixel border around it. Defaults preserve the previous flat look (PageShadowSize = 0; border is drawn in the default clBlack but blends into the default white background until callers change the colors).
- Added a SmoothScroll property as an opt-in flag for future incremental scroll animation; the property round-trips today and is wired up so applications can persist the preference, while the rendering side still uses the existing immediate scroll behavior.
- Expanded the Delphi and Lazarus regression suites to 98 cases each, and the C++Builder suite to 89 cases, covering default values, property round-trip, and the negative-shadow-size clamp.
Version 1.10.0
- Added direct image insertion through new TPdf.AddImage and TPdfView.AddImage overloads that take either a file path or a TBitmap, in addition to the existing TPicture-based AddPicture. AddImage(FileName) recognizes any format registered with the VCL or LCL graphics units (BMP, PNG via the PngImage unit, JPG, etc.) and goes through the same pipeline as AddPicture so behavior is identical.
- AddImage(TBitmap) skips the TPicture intermediary, which simplifies callers that already hold a TBitmap from rendering or batch generation work.
- Expanded the Delphi and Lazarus regression suites to 92 cases each, and the C++Builder suite to 84 cases, covering bitmap insertion, page-object bounds, nil bitmap rejection, and BMP file loading.
Version 1.9.0
- Added high-level transformation matrix support through the new TPdfMatrix class in the FPdfMatrix unit. TPdfMatrix wraps PDFium’s FS_MATRIX with an OO API for Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew, and Multiply, suitable for composing transforms before handing them to FPDFPageObj_SetMatrix and similar PDFium APIs.
- TPdfMatrix.Multiply correctly snapshots the six matrix elements before computing the new row values, fixing a latent issue where the alternative Pascal implementations overwrite earlier elements during the same call and produce incorrect results for any composition beyond pure translation.
- Expanded the Delphi and Lazarus regression suites to 88 cases each, and the C++Builder suite to 81 cases, covering identity, reset, translate / scale / flip, post-multiplicative composition order, and the Multiply regression case.
Version 1.8.0
- Added on-demand stream loading through the new TPdf.LoadCustomDocument(AStream, AOwnsStream) method and TPdfStreamAdapter helper class, backed by PDFium’s FPDF_LoadCustomDocument. PDFium now reads blocks from the supplied TStream only when needed, so very large or remote PDFs no longer require an up-front in-memory copy.
- Added optional stream ownership: passing AOwnsStream = True hands the TStream’s lifetime to TPdf, which frees it when UnloadDocument runs.
- Expanded the Delphi and Lazarus regression suites to 79 cases each, and the C++Builder suite to 75 cases, covering streaming load via TFileStream, owned-stream cleanup, and the externally-owned-stream survives-unload contract.
Version 1.7.0
- Added cooperative async cancellation primitives in the new FPdfAsync unit, exposing IPdfCancellationToken / IPdfCancellationTokenSource and a reusable PdfNoCancellationToken singleton so long-running rendering and export workflows can support clean cancel-from-UI semantics.
- Added a lightweight TPdfFuture<T> helper that runs a worker on a background thread and posts the TPdfFutureResult<T> envelope back to the main thread, distinguishing success, cancellation, and failure cases.
- Expanded the Delphi and Lazarus regression suites to 76 cases each, and the C++Builder suite to 73 cases, with shared coverage of cancellation state, idempotent cancel, callback fan-out, and post-cancel registration.
Version 1.6.10
- Added high-level TPdf.PrintPageRanges access to the PDF viewer preference print page range, returning one-based page ranges for application code.
- Added TPdf.SetFormFieldFlags / SetFormFieldFlagsAt and matching TPdfView helpers so applications can update AcroForm field flags through the public API, including password and multi-select flag coverage.
- Hardened PDFium binding ABI coverage for Windows-sized FPDF_DWORD, FPDF_FILEACCESS callbacks, and V8 embedder slot fields.
Version 1.6.9
- Added low-level Skia rendering bindings for the newly exported FPDF_RenderPageSkia and FPDF_FFLDrawSkia APIs in the bundled standard and V8 PDFium DLLs.
- Expanded the public binding coverage checks so standard and V8 DLL loading now verifies the Skia render entry points alongside the existing V8/XFA capability probes.
Version 1.6.8
- Added TPdf.SetTextPositions and TPdfSingleArray to set per-character positions on existing text objects through the newly exported FPDFText_SetPositions API.
- Promoted FPDFText_SetPositions to a required binding for the current bundled PDFium DLLs, while confirming the Skia render entry points remain unavailable because the DLLs still do not export them.
- Expanded the Delphi, C++Builder, and Lazarus regression suites to 65 cases each with text-position coverage.
Version 1.6.7
- Added high-level TPdf access to document JavaScript name-tree actions, returning action names and scripts through JavaScriptAction and JavaScriptActions.
- Added TPdf.FileIdentifier to read permanent and changing trailer IDs as binary TBytes without the PDFium terminator byte.
- Added TPdf.PageBox, GetPageBox, and SetPageBox for MediaBox, CropBox, BleedBox, TrimBox, and ArtBox on the current page.
- Confirmed the current bundled PDFium DLLs leave only the Skia render entry points unavailable at runtime because those exports are not present.
- Expanded the Delphi, C++Builder, and Lazarus regression suites to 64 cases each with document JavaScript, trailer ID, and page-box coverage.
Version 1.6.6
- Added runtime support for the bundled V8-enabled PDFium DLL. Setting EnableV8Engine before loading now selects pdfium.v8.dll from the DLLs\Win32 or DLLs\Win64 tree and exposes V8/XFA-only bindings when the loaded DLL provides them.
- Added V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags, and low-level optional bindings for FPDF_BStr_*, FPDF_GetRecommendedV8Flags, and FPDF_GetArrayBufferAllocatorSharedInstance.
- Made FPDFText_SetPositions optional so PDFiumVCL keeps loading with PDFium DLLs that do not export that experimental text-position setter.
- Expanded the Delphi, C++Builder, and Lazarus regression suites to 61 cases each with standard-DLL and V8-DLL capability coverage.
Version 1.6.5
- Added tagged PDF structure-tree inspection through TPdf.StructureElements and TPdfView.StructureElements, including element type, title, alternate text, actual text, expansion text, language, marked-content IDs, child counts, and attribute counts.
- Added Windows PDFium print mode selection through TPdfPrintMode and SetPdfPrintMode, covering EMF, text-only, PostScript, pass-through, image-mask, and Type 42 print modes.
- Added low-level bindings for the remaining standard-DLL PDFium public exports covering JavaScript actions, annotation form flags/font color, page-object active state, indexed insertion, content-mark float values, image ICC profile data, form-object removal, and text positions.
- Expanded the Delphi, C++Builder, and Lazarus regression suites to 59 cases each with tagged PDF structure-tree, print mode, and public export binding coverage.
Version 1.6.4
- Updated the Delphi, C++Builder, and Lazarus demos to automatically open generated PDFs, exported text/images, and batch output folders after successful creation.
Version 1.6.3
- Expanded the aligned Delphi, C++Builder, and Lazarus regression suites to 56 cases each with TPdfView GUI coverage for fit-zoom helpers, device/page coordinate round-trips, character hit-testing, and mouse panning through hidden-window viewer controls.
- The TPdfView fixtures now use an explicit viewer size and test-only subclasses that exercise protected mouse handlers while keeping the suites fully headless.
Version 1.6.2
- Fixed TPdf.AddPage(0, ...) so the inserted first page becomes the active page immediately. Existing sample code keeps working, while PageNumber now reports a valid one-based page after insertion.
- Synchronized the Lazarus package version and expanded the aligned Delphi, C++Builder, and Lazarus regression suites to 52 cases each.
Version 1.6.1
- Fixed an incorrect minimum-version requirement in the v1.6.0 PDF version compliance validator: the SetState action was reclassified from PDF 1.5 down to PDF 1.2, matching PDF 1.2 Reference 6.9.9. PDF 1.3 / 1.4 SaveAs targets that contain SetState actions now save correctly rather than being rejected.
- Added matching PDF 1.2 lexical checks per the same spec section: the Sound, Movie, and NOP actions plus the Separation color space are now blocked when the chosen target version is older than PDF 1.2.
- Expanded the Delphi, C++Builder, and Lazarus regression suites to 50 cases each by adding a positive PDF 1.4 SetState acceptance test that locks in the corrected boundary.
Version 1.6.0
- Hardened explicit PDF 1.0 through PDF 1.7 SaveAs targets with a full version-feature validator that covers the entire PDF 1.1 through ISO 32000-1 feature timeline. The validator now blocks saves that contain dictionary entries, filter names, annotation subtypes, action types, fonts, color spaces, or encryption parameters introduced after the chosen target version. Examples: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), Polygon / PolyLine / Caret / Screen / Watermark / Redact annotations, AES and AES-256 encryption (CFM AESV2 / AESV3), Perms / Legal / Requirements / NeedsRendering catalog entries, and version-gated actions such as JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView are all rejected when the target PDF version cannot represent them.
Version 1.5.13
- Expanded the Delphi, C++Builder, and Lazarus regression suites to 49 cases each, adding direct coverage for rejection of ICCBased color spaces, Tagged PDF MarkInfo, Polygon annotations, AES (V2) encryption, and Redact annotations against PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 targets respectively.
Version 1.5.12
- Fixed SaveAs post-processing for incremental catalog rewrites. PDFiumVCL now validates the latest repeated indirect object, so existing catalog /Version overrides are replaced correctly when saving to an explicit older PDF target version.
- Expanded the Delphi, C++Builder, and Lazarus regression suites to 44 cases each, adding direct coverage for stale catalog /Version replacement, PDF 1.4 catalog version normalization, and rejection of transparency and portable-collection features when the selected PDF target version cannot represent them.
Version 1.5.11
- Hardened versioned SaveAs output for explicit PDF 1.3, 1.4, 1.5, 1.6, and 1.7 targets. PDFiumVCL now normalizes catalog version markers, keeps the default Fit Height OpenAction version-safe, and rejects newer PDF features when the selected target version cannot represent them.
- Added Delphi, C++Builder, and Lazarus regression coverage that saves and reloads explicit PDF 1.3 through PDF 1.7 files, verifying the final header, the default Fit Height OpenAction, and the reported PDF version.
Version 1.5.10
- Stepped from the spec’s option B to option C by adding TPdfView smoke tests in all three IDE suites (Tests.PdfView). Each suite builds a hidden parent TForm (via TForm.CreateNew on Pascal sides and
new TForm(NULL, 0)on the C++Builder side), reparents a TPdfView, sets Active := True, and then verifies the round-trip surface for PageCount, PageNumber default, Zoom, Rotation, DisplayMode, and that View.Text matches the underlying TPdf.Text. Each IDE suite now runs 39 cases.
Version 1.5.9
- Stepped from the spec’s option A to option B by adding render smoke tests in all three IDE suites. Each Tests.Render suite calls TPdf.RenderPage on sample.pdf and verifies three robust signals instead of byte-for-byte checksums: the returned bitmap exactly matches the requested pixel size; different requested sizes (200x100, 64x256) produce matching bitmaps; and the rendered page is at least 95% white background with at least 50 (Lazarus: 20) non-white pixels marking the antialiased text. Each IDE suite now runs 33 cases.
Version 1.5.8
- Closed out the original A(2) test plan groups by adding seven more regressions per IDE: TPdf.CreateAnnotation building an anHighlight annotation plus a SaveAs/LoadDocument round-trip, the AcroForm read path on Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (FormType is ftAcroForm, FormFieldCount > 0, FlattenAllPages drops the fields to zero), and quiet read-path coverage for Bookmarks, LinkAnnotationCount, and WebLinkCount on a document that has none of those features. Each IDE suite now runs 30 cases.
Version 1.5.7
- Expanded the Delphi (DUnitX), Lazarus (FPCUnit), and C++Builder (GoogleTest) suites with seven new regressions per IDE: PdfVersion, PageRotation, TPdf.FindFirst / FindNext substring lookup, CharacterOrigin / CharacterRectangle agreement against the AddText origin, CreateAttachment registration plus a SaveAs/LoadDocument round-trip, and an accented-text AddText round-trip that verifies the v1.3.0 European TrueType embedding path keeps Latin-1 supplemental code points intact.
Version 1.5.6
- Saved PDFs now get a default first-page Fit Height open action when no existing OpenAction is present, so PDF readers initially display generated documents at page-height zoom.
- Added Delphi, Lazarus, and C++Builder regression coverage for the generated OpenAction and Fit Height setting.
Version 1.5.5
- Added regression tests across the Delphi (DUnitX), Lazarus (FPCUnit), and C++Builder (GoogleTest) suites for the indexed character and font inspection API surface (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). The Lazarus suite intentionally skips FontData, which currently access-violates inside FPDFFont_GetFontData under FPC.
Version 1.5.4
- Added a C++Builder Attachment demo ported from the Delphi sample, covering creating PDFs, adding, listing, extracting, deleting, and saving embedded file attachments with MIME subtype display.
Version 1.5.3
- Exposed the spread-page calculation that backs TPdfView two-page modes as the unit-level helper ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). Behavior is unchanged; the helper makes the cover-aware rule independently testable without instantiating a viewer.
- Added five regression tests across the Delphi (DUnitX), Lazarus (FPCUnit), and C++Builder (GoogleTest) suites covering empty documents, the standard two-page pairing, the cover page standing alone in dmTwoPageContinuousWithCover, post-cover pairs, and last-page / out-of-range clamping behavior.
Version 1.5.2
- Added document language support through TPdf.Language, mapped to the PDF catalog /Lang entry.
- Added attachment MIME subtype access with TPdf.AttachmentType.
- Added anRedact to TPdfAnnotationSubtype and added page-object removal helpers for TPdf and TPdfView.
- Updated viewer and attachment demos to display the new language and attachment type information when available.
Version 1.5.1
- Added dmTwoPageContinuousWithCover for TPdfView so viewer layouts can show the first page alone and then continue with two-page spreads.
- Updated the Delphi, C++Builder, and Lazarus MultiPageViewer demos to expose the cover-aware two-page display mode.
Version 1.5.0
- Added smoke-level automated test suites for Delphi (DUnitX), Lazarus (FPCUnit), and C++Builder (GoogleTest). The three suites share a single fixture PDF in Tests\TestData and run the same seven cases each, covering document loading, page info, text extraction, metadata, save round-trip, PDF header validation, and the Compressed property.
Version 1.4.3
- Enhanced the FontProperties demo to show both TPdfView and TPdf font metadata APIs, including font handles, font data size, and character metrics.
- Added indexed TPdfView character and font inspection properties and updated the FontProperties demo to query text-object font metadata.
Version 1.4.2
- Added indexed character and font inspection properties to TPdf for text analysis without requiring a viewer. Character-indexed properties (CharacterAngle, CharacterFontSize, CharacterFontWeight) query per-character metrics from the current page’s text stream. Page-object-indexed properties (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) query font metadata for any text object on the current page.
- Non-text page objects return safe zero or empty values for all Font* properties rather than raising an error, making it straightforward to iterate every page object and inspect only the text ones.
- FontBaseName reads the PostScript base font name directly rather than falling back to the font family name, giving a more accurate identifier for embedded fonts.
Version 1.4.1
- Added C++Builder and Lazarus versions of the EuropeanText demo so all supported IDE families can verify accented European text generation with system TrueType fonts.
- Added C++Builder and Lazarus versions of the FormFill demo, including sample form PDFs, field editing, appearance regeneration, filled saving, and flattened saving workflows.
Version 1.4.0
- Added Lazarus / Free Pascal support: the new PDFiumLaz package provides the same TPdf, TPdfView, and related components under the LCL widget set, extending the library to the Lazarus IDE and the Free Pascal compiler alongside the existing Delphi and C++Builder packages.
- Added Lazarus versions of the demos so Lazarus developers can explore every feature with runnable examples.
- Fixed a Lazarus compilation issue where Free Pascal conditional defines were evaluated together with Delphi compiler-version checks, causing FPC builds to attempt resolving Delphi-specific unit names and fail.
Version 1.3.1
- Documented the form flattening workflow in the help set: GenerateFormAppearances, FlattenPage, FlattenAllPages, and the related FLAT_* / FLATTEN_* constants are now covered in TPdf, TPdfView, the API reference, the feature matrix, and the programming examples.
- Fixed the architecture table in the overview page so it lists the actual binding units shipped in the Lib folder.
Version 1.3.0
- Improved European character support when creating PDFs. TPdf.AddText now loads and caches the matching system TrueType font before creating a text object, preserving accented characters from Czech, French, German, Spanish, Portuguese, Polish, and Turkish that PDFium’s built-in standard fonts cannot represent.
- Applications that previously produced question marks or replacement glyphs for non-ASCII Latin text will now render correctly without any code change. Added the EuropeanText demo to illustrate the feature.
Version 1.2.0
- Added AcroForm appearance refresh to TPdf: calling GenerateFormAppearances after modifying FormField[] values updates the widget appearance so filled values are visible in standard PDF readers without requiring an interactive edit session.
- Added form flattening helpers to TPdf (FlattenPage / FlattenAllPages) and TPdfView (FlattenPage for the current view page). Flattening permanently embeds filled field values as ordinary page content and removes the interactive form layer, producing a static document that renders consistently across all viewers.
- Added Demo\Delphi\FormFill to demonstrate the fill-and-save and fill-and-flatten workflows with a sample AcroForm PDF.
Version 1.1.2
- Added save-time PDF stream compression. The new TPdf.Compressed property (enabled by default) rewrites uncompressed content streams as FlateDecode-compressed streams on save, significantly reducing file size for programmatically generated PDFs. Applications that require plain uncompressed output can set Compressed to False before calling SaveAs.
Version 1.1.1
- Win64 package builds no longer include design-time registration units, preventing build-time failures when the Win64 package is deployed in a runtime-only context.
- The PDFium DLL loader now searches the Win32 or Win64 application subdirectory first, using the standard pdfium.dll and pdfium.v8.dll names, and falls back to the application’s flat directory and the Windows system directory. This matches the DLL layout bundled with the component package, making installation straightforward.
Version 1.1.0
- Fixed a visual clipping defect in TPdfView two-page mode: page content was bleeding across the gutter because both left and right page tiles shared a single clipping rectangle. Each tile now clips independently so content stays within its page boundary.
- Improved the Delphi demo error message when the PDFium DLL cannot be found, providing a clearer prompt with the expected DLL name and location.