v3.18.2 (2026-05-12) - The Delphi and C++Builder EditFormField demos now clear /NeedAppearances before updating field values, so every edited text field gets a refreshed normal appearance stream in the saved PDF. - This keeps the saved /AP stream in sync with the stored /V value and avoids viewer-dependent differences where focusing the field reveals text that was missing from the static field appearance. v3.18.1 (2026-05-10) - Save-time and load-time PDF version compliance now also recognises bit-level form-field /Ff flags and the AcroForm /SigFlags AppendOnly bit: /Ff bit 21 (FileSelect, mask 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, mask 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, mask 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, mask 8388608) -> PDF 1.4 /Ff bit 25 (Comb, mask 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, mask 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, mask 2) -> PDF 1.5 - /Parent inheritance is not followed: only dictionaries that explicitly carry /Ff or /SigFlags trigger the rules. - The PDFFeatureRules table now carries 95 rules (87 + 8 new bit-level). - Validation: Delphi Win32 and Win64 DUnitX suites passed 191/191 each, and C++Builder Win64x GoogleTest passed 57/57. v3.18.0 (2026-05-10) - Save-time and load-time PDF version compliance now also recognises nine more sub-key and bit-level features: bit-level annotation flags (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 distinctive catalog and page sub-keys: /BoxColorInfo (page) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (page geospatial viewport) -> PDF 1.6 /Collection (catalog portable collection) -> PDF 1.7 - The PDFFeatureRules table now carries 87 rules (78 chapter-level + 9 sub-key / bit-level). - Validation: Delphi Win32 and Win64 DUnitX suites passed 189/189 each, and C++Builder Win64x GoogleTest passed 57/57. v3.17.0 (2026-05-10) - Eight more PDFlib writer entry points now route through Phase 3 EnsureMinVersion so the document version auto-bumps to the minimum required by the feature being emitted: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - JavaScript actions) AddEmbeddedFile, AddFileAttachment (PDF 1.3 - file attachments) SetXFAFromString (PDF 1.5 - XFA forms) AddSWFAnnotationFromFile (PDF 1.7 - RichMedia annotation) - Combined with the v3.15.0 set (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) PDFlib now covers thirteen high-version writer entry points end-to-end. - Validation: Delphi Win32 and Win64 DUnitX suites passed 187/187 each, and C++Builder Win64x GoogleTest passed 57/57. v3.16.3 (2026-05-10) - New PDFlib API: LockSaveVersion(Version) pins the document at Version and stops Phase 3 writer-side EnsureMinVersion from auto-bumping above it. UnlockSaveVersion clears the lock. - The save-time gate is unchanged: writer-emitted features above the locked version still produce LastErrorCode 602 at save time, instead of silently bumping the header. - Validation: Delphi Win32 and Win64 DUnitX suites passed 184/184 each, and C++Builder Win64x GoogleTest passed 57/57. v3.16.2 (2026-05-10) - Loaded PDFs now expose a contributor-only view of the load-time feature detection through GetInformation(103) ("ContributorFeatures"). The list contains only features whose minimum required version is strictly greater than HeaderVersion (key 100), so it directly answers "why is the effective version higher than the file header?". - GetInformation(101) ("DetectedFeatures") is unchanged and still lists every matched feature regardless of contribution. - Validation: Delphi Win32 and Win64 DUnitX suites passed 181/181 each, and C++Builder Win64x GoogleTest passed 57/57. v3.16.1 (2026-05-10) - Expanded loader-side detection test coverage with six additional synthetic fixtures: in-page transparency ExtGState (no version bump), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), /OCProperties + OCG content (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), a multi-feature combination fixture, and a snapshot-stability check. - Validation: Delphi Win32 and Win64 DUnitX suites passed 179/179 each, and C++Builder Win64x GoogleTest passed 57/57. v3.16.0 (2026-05-10) - Loaded PDF documents now go through a content-driven version detection pass: every indirect object is walked through the feature-to-minimum- version table used by the save-time gate, and FVersion is bumped above the literal %PDF-X.Y header value when content actually requires a higher version. For example a /UserUnit page entry bumps the effective version to PDF 1.6 even when the file header says PDF 1.4. - New GetInformation keys: 100 returns HeaderVersion (literal %PDF-X.Y), 101 returns DetectedFeatures (CRLF-delimited features matched on load), 102 returns AutoBumpedFeatures (CRLF-delimited features that triggered writer-side EnsureMinVersion). - The save-time gate is unaffected: documents whose effective version was bumped on load, then explicitly downgraded with SetInformation(0, ...), still produce LastErrorCode 602 at save time. - Validation: Delphi Win32 and Win64 DUnitX suites passed 173/173 each, and C++Builder Win64x GoogleTest passed 57/57. v3.15.0 (2026-05-10) - Writer entry points that produce features requiring a particular minimum PDF version now auto-bump the document's PDF version automatically. Calling SetTransparency on a document marked as PDF 1.3 now promotes the header to PDF 1.4 instead of failing the save with LastErrorCode 602. - Wired the same auto-bump into SetPageUserUnit (>=1.6), Encrypt with Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 respectively), and the two-page variants of SetPageLayout (>=1.5). - Behaviour change versus 3.14.x: applications that previously relied on the v3.12.6 "save target rejects writer-emitted features" gate now succeed at the bumped version. Loaded PDFs that already contain higher- version features still go through the existing save-time gate, so loading a tagged PDF and selecting PDF 1.3 still fails with LastErrorCode 602. - Validation: Delphi Win32 and Win64 DUnitX suites passed 170/170 each, and C++Builder Win64x GoogleTest passed 57/57. v3.14.3 (2026-05-10) - Save-time PDF version compliance now also recognises the remaining PDF 1.6 3D dictionary types (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) and the PDF 1.7 Redact, RichMedia, and Projection annotation subtypes plus the /Type /Requirement and /ReqHandler companion dictionaries. - Validation: Delphi Win32 and Win64 DUnitX suites passed 168/168 each, and C++Builder Win64x GoogleTest passed 57/57. v3.14.2 (2026-05-10) - Save-time PDF version compliance now also recognises PDF 1.5 features: /XFA forms, /AlternatePresentations, /Renditions name tree, the /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers multimedia dictionaries, and the Screen annotation subtype. - Saving as PDF 1.4 now rejects documents that carry these features with LastErrorCode 602. - Validation: Delphi Win32 and Win64 DUnitX suites passed 166/166 each, and C++Builder Win64x GoogleTest passed 57/57. v3.14.1 (2026-05-10) - Save-time PDF version compliance now also recognises PDF 1.4 features: tagged-PDF /StructTreeRoot /MarkInfo and StructElem dictionaries, the document /Lang and page /Tabs entries, /OutputIntents and /OutputIntent dictionaries, the /UR3 usage-rights signature, and the PDF 1.4 annotation subtypes Polygon, PolyLine, Caret, Ink, Popup, and Watermark. - Saving as PDF 1.3 now rejects documents that carry these features with LastErrorCode 602. - Validation: Delphi Win32 and Win64 DUnitX suites passed 165/165 each, and C++Builder Win64x GoogleTest passed 57/57. v3.14.0 (2026-05-10) - Save-time PDF version compliance now also recognizes PDF 1.3 features such as smooth shading, function objects, ICCBased and DeviceN color spaces, /TrimBox /BleedBox /ArtBox page entries, /ToUnicode CMaps, file attachment and /Sound and /Movie annotations, /Type /Filespec and /Type /EmbeddedFile dicts, the /Group /EF /Alternates /Mask keys, and JavaScript actions. - PDF 1.2 callers now save under the PDF 1.3 contract: the literal %PDF-1.2 header is preserved, but the gate accepts PDF 1.3 features. PDF 1.4 and later features are still rejected with LastErrorCode 602. - Validation: Delphi Win32 and Win64 DUnitX suites passed 162/162 each, and C++Builder Win64x GoogleTest passed 57/57. v3.13.0 (2026-05-10) - Refactored the PDF version-compliance gate that rejects later-version features at save time into a dedicated module so the rule set can grow without churning the document core. - No user-visible behavior change versus v3.12.7: the same out-of-version features are still rejected with LastErrorCode 602. - Validation: Delphi Win32 and Win64 DUnitX suites passed 155/155 each, and C++Builder Win64x GoogleTest passed 57/57. v3.12.7 (2026-05-09) - Expanded automated test coverage for the PdfToImage direct-access rendering workflow in both Delphi DUnitX and C++Builder GoogleTest suites. - The Delphi VCL GUI test runner now registers the Syntax and XRef fixtures, matching the console runner coverage. - Validation: Delphi Win32 and Win64 DUnitX suites passed 147/147 each, and C++Builder Win64x GoogleTest passed 57/57. v3.12.6 (2026-05-09) - Saving as PDF 1.3, 1.4, 1.5, 1.6, or 1.7 now enforces the selected version as the full-save output contract. - Full saves remove catalog /Version overrides, remove unsupported catalog extension and metadata entries for lower targets, and suppress PDF 1.4 XMP metadata streams when saving as PDF 1.3. - SaveToFile, SaveToString, and SaveToStream now fail with LastErrorCode 602 when the selected PDF target version is lower than features still present in the document, such as transparency, optional content, JPX, UserUnit, 3D, or AES crypt-filter features. v3.12.5 (2026-05-09) - Improved PDF 1.7 literal string parsing so unknown escape sequences ignore the backslash as required by the standard. - Literal string octal escapes now consume only octal digits and preserve a following non-octal digit as regular string data. - Added regression coverage for unknown literal-string escapes and mixed octal/non-octal escape sequences. - Validation: Delphi Win32 and Win64 DUnitX suites passed 141/141 each. v3.12.4 (2026-05-09) - Improved PDF 1.7 lexical parsing so name objects now stop correctly at the right-brace delimiter. - Fixed SmartAccess loading of xref stream compressed-object entries whose object stream number is larger than the PDF byte length. - Added regression coverage for right-brace name delimiters and sparse compressed-object xref stream entries. - Validation: Delphi Win32 and Win64 DUnitX suites passed 139/139 each. v3.12.3 (2026-05-08) - Improved PDF 1.7 encrypted-document compatibility for standard security handler files that use StrF, StmF, EFF, Identity, None, or named StdCF-style crypt filters. - Metadata streams now honor EncryptMetadata=false during decrypt, encrypt, and copy/save workflows instead of being processed like ordinary streams. - Embedded file streams now carry /Type /EmbeddedFile and use the embedded-file crypt-filter decision path when encrypted documents are loaded or saved. - External embedded file streams now promote FDecodeParms to DecodeParms when FFilter is promoted to Filter, preserving stream decode parameters. - New AES encrypted PDFs now write crypt-filter Length values as bit lengths, matching the PDF 1.7 crypt filter dictionary contract. - XRef stream Prev/XRefStm values and large numeric offsets now keep 64-bit precision through parser and SmartAccess paths. - Validation: Delphi Win32 and Win64 DUnitX suites passed 137/137 each. v3.12.2 (2026-05-08) - Improved PDF 1.7 stream decoding compatibility. Generic stream decoding now honors /DP as a DecodeParms alias, resolves indirect decode-parameter array entries, and accepts the /AHx and /LZW standard filter abbreviations. - Large-file PDF output now writes xref, startxref, linearization, and digital signature ByteRange offsets through 64-bit formatting paths instead of narrowing those values through 32-bit integer helpers. - Loaded documents now treat a catalog /Version entry as the effective PDF version when it is newer than the file header version. - Rewritten xref-stream trailers no longer retain stream-only DecodeParms keys when PDFlibPas saves them as classic trailer dictionaries. - Validation: Delphi Win32 and Win64 DUnitX suites passed 134/134 each. v3.12.1 (2026-05-06) - Generated PDFs now open with the first page sized to the viewer window's available height, so the entire first page is visible top-to-bottom at the largest zoom that fits the window. Configure a custom OpenAction (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) on the document to override this default. v3.12.0 (2026-05-06) - The Windows static backends now include libjpeg-turbo NASM SIMD objects for Win32 and Win64, plus zlib-ng x86 SIMD dispatch objects for the Win64x zlib-ng set. - Reworked the zlib-ng rebuild scripts so Win64x bcc64x and diagnostic MSVC builds compile the generic, SSE2, SSSE3, SSE4.1/SSE4.2, PCLMULQDQ, and AVX2 source files with per-file feature flags instead of relying on one global compiler switch. - Added 32-byte aligned malloc/calloc/realloc/free CRT stubs for the static C libraries and fixed TPDFJPEGImage.Compress to release jpeg_mem_dest buffers through the same C free path that allocated them. - Expanded the public validation notes to call out the strict automated coverage behind this release: library builds, compression round trips, HelloWorld /FlateDecode output, JPEG rendering, image workflows, fonts, forms, security, signing, printing, and C++Builder demo-derived workflows. v3.11.0 (2026-05-05) - Switched Windows Flate compression and decompression to zlib-ng in zlib-compatible mode. Win32, Delphi Win64, and C++Builder Win64x now link ABI-matched zlib-ng static object sets from Lib\thirdparty\Win32, Lib\thirdparty\Win64, and Lib\thirdparty\Win64x. - The Win64 path no longer routes through Delphi's System.ZLib unit, so PDF stream compression/decompression can benefit from the zlib-ng backend just like the 32-bit build. - Added a small zlib-ng bridge object for Win64 builds so Pascal code keeps stable zlib-compatible entry points while Delphi and C++Builder consume their own linker-compatible object sets. - Updated all C++Builder demo projects to define PDFLIB_CPPBUILDER, matching the GoogleTest runner and preventing Win64x demos from linking the Delphi Win64 zlib-ng objects. v3.10.3 (2026-05-01) - Extended the C++Builder GoogleTest suite to cover every demo under Demo\C++Builder. The 7-fixture phase-1 layout grew to 15 fixtures / 52 GoogleTest cases, all passing on Win64x. Newly covered demos: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (renderer switch), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging. v3.10.2 (2026-05-01) - Added a C++Builder GoogleTest runner under Tests\C++Builder that exercises Lib\PDFlibrary.pas through the same {$JPHNE}-emitted HPP headers used by the C++Builder demos. The first phase mirrors seven core Delphi scenarios (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, PdfToImage rendering) as 17 GoogleTest cases, all passing on Win64x. - Extended the Delphi DUnitX suite with Tests.Print covering the PrintPDF and ShowPrinterBins demos (default-printer enumeration, custom-printer setup, print options, redirect-to-file print job) and a renderer-switch test in Tests.Render exercising the MultiFunction demo's GDI+ / PDFium / Cairo engine selection on the same source PDF. v3.10.1 (2026-05-01) - Added 57 named page sizes to SetPageSize so the same canonical names used by the sister HotPDF library work here too: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, plus the Chinese / Taiwanese octavo and sextodecimo sheet formats LARGE/STANDARD/CROWN/ROC 8K and the matching 16K halves. v3.10.0 (2026-04-30) - Added native C++Builder versions for every Delphi sample under Demo. The PDF-creation, page-manipulation, font, image, security, signing, rendering and printing demos can now be built and run from C++Builder without any Delphi-side wrapper. - Each new demo lives in Demo\C++Builder\\ as a console project that consumes Lib\PDFlibrary.pas directly and ships the input files needed to run. - Added a brief English Readme.txt to every Delphi demo folder describing what the demo shows, the API it focuses on, and how to run it; an HTML overview at Demo\Delphi\index.html links to all of them grouped by topic. - Mirrored the same Readme.txt for every C++Builder demo with a Run section rewritten for the console workflow (argv arguments instead of Open/SaveDialogs); a matching Demo\C++Builder\index.html lists every C++Builder demo with the same topic groups. - Fixed a memory leak in the ImportEMF demo (the TPDFlib instance was created but never freed). v3.9.14 (2026-04-30) - Fixed the page-range copy demo so it actually copies pages instead of always reporting failure. - Tidied up the wrapped-text and HTML pagination demos so each one focuses on its own API and runs from a single button. - Renamed two demo projects (EmbeddedFonts and PdfPermission) so the compiled executables match the folder names instead of older prototype names. v3.9.13 (2026-04-30) - Fixed low-level buffer word reads so two-byte values are read correctly from longer buffers and the buffer position advances by two bytes. v3.9.12 (2026-04-30) - Improved default GDI+ image rendering quality by enabling smooth image interpolation and using high-quality bicubic resampling for scaled images. v3.9.11 (2026-04-30) - Fixed Cairo rendering for PDF image masks that use color-key transparency so masked logos and images render with the same visible content as GDI+. v3.9.10 (2026-04-30) - Fixed Cairo rendering after clipped image regions so subsequent page content is no longer limited to the previous clipping area. v3.9.9 (2026-04-29) - Added a Cairo-based PDF rendering engine with bitmap, stream, device-context, and printer rendering support. - Updated the MultiFunction View/Print demo so users can switch between GDI+, PDFium, and Cairo rendering. v3.9.8 (2026-04-29) - Removed Delphi compiler warnings from the C runtime shim unit on modern RAD Studio Win32 builds. v3.9.7 (2026-04-29) - Added optional PDFium-based page rendering on Windows, including BMP stream rendering, device-context rendering, memory rendering, and printer output. - Updated the Delphi MultiFunction View/Print demo with a renderer selector so users can switch between the existing GDI+ renderer and PDFium. v3.9.6 (2026-04-29) - Added separate Inno Setup scripts for the full PDFlibPas package and the trial package, with release-focused exclusions for source-control metadata, build outputs, IDE caches, local agent files, and bundled third-party source trees that are not part of the shipped package. - The trial installer now builds and packages trial binary libraries for RAD Studio 11.3, 12.3, and 13.1, plus the trial Delphi demos, before the setup executable is generated. v3.9.5 (2026-04-29) - Fixed RAD Studio 9.0 (Delphi XE2) Win32 command-line library builds by using the correct DCU output switch and the compatible AnsiString length binding for older compilers. v3.9.4 (2026-04-29) - Fixed printer setup for network and server-shared printers by applying paper tray, media, duplex, quality, and other print settings through the printer DEVMODE handle instead of the printer device context handle. v3.9.3 (2026-04-29) - Refreshed the bundled AES backend to Brian Gladman's 2018 AES sources on both Win32 and Win64, with reproducible per-library build scripts and a corrected C calling convention binding for AES-CBC operations. - Hardened the retained third-party rebuild scripts so the Win64 MSVC zlib, JPEG and CRT-stub scripts can be launched from the repository root or from the thirdparty directory. v3.9.2 (2026-04-29) - Upgraded the JPEG 2000 backend to OpenJPEG 2.5.4 on both Win32 and Win64, with static object linking on both platforms and no additional runtime DLL requirement for JPEG 2000 support. v3.9.1 (2026-04-29) - Fixed JPEG page rendering and image export after the libjpeg-turbo upgrade, restoring PdfToImage JPG conversion and TPDFJPEGImage.SaveToStream output on Win32 and Win64. - Corrected Win32 libjpeg-turbo ABI bindings so callbacks, structure alignment, boolean fields, and memory-backed JPEG destinations match libjpeg-turbo 3.1.90. - Fixed Win32 FlateDecode stream decompression with the bundled zlib 1.3.2 backend, restoring PDF xref stream loading for files such as the PdfToImage sample document. v3.9.0 (2026-04-29) - Upgraded the bundled JPEG 2000 backend from legacy OpenJPEG 1.5 to OpenJPEG 2.5.4. JPEG 2000 loading and saving now use the modern codec, callback-driven stream API, and current JP2/J2K header handling while preserving the public TJpeg2000Bitmap API. - JPEG 2000 output now selects a valid OpenJPEG resolution count for small images automatically, and the Win32 static backend no longer depends on missing MSVCRT helper exports. v3.8.1 (2026-04-29) - Eliminated all 16 cosmetic linker W1028 "Bad global symbol definition" warnings on Win32 and Win64. Source-level renames remove the redundant Pascal-side duplicates (jpeg_std_error and the jmemnobs allocator stubs now resolve solely from the obj layer); the three remaining bcc32 / vc64 obj symbols (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table) that must stay link-resolved against Pascal-side data are now stripped of their COFF symbol names via an ObjConv post-processing pass during thirdparty\build-jpeg-vc64.bat. No public API change; clean linker output for both Delphi Win32 and Win64 builds. v3.8.0 (2026-04-29) - Win64 JPEG codec upgraded from IJG-style libjpeg to libjpeg-turbo 3.1.90, completing the JPEG migration started in v3.7.0 (Win32). Both Win32 and Win64 paths now share the same modern JPEG codec, with the same SIMD- optimized inner loops and 30+ accumulated CVE / fuzz fixes from upstream. Public PDFlibPas API unchanged. v3.7.0 (2026-04-28) - Win32 JPEG codec upgraded from IJG libjpeg-6b to libjpeg-turbo 3.1.90. Significantly faster JPEG encode/decode through SIMD-optimized inner loops, plus the 30+ CVE / fuzz fixes accumulated in libjpeg-turbo upstream. Public PDFlibPas API (TPDFJPEGImage class, DumpJPEG functions) is unchanged; existing PDF/JPEG code paths run faster with no source changes required. v3.6.0 (2026-04-28) - Win32 zlib upgraded from 1.2.x to 1.3.2. Includes the standard 25+ CVE / fuzz fixes accumulated upstream since 1.2.8, plus the new inflateBack9 / inflateTree9 entry points used by 64-bit-window streams. Public PDFlibPas API (DeflateStr / InflateStr / InflateStrParms) is unchanged. - Win64 zlib path is unchanged in this release - it continues to use the Delphi-bundled System.ZLib unit. - Activated the Win64 link-time CRT shim PDFlibCLibs.pas (introduced in v3.5.0) for the Win32 zlib path, providing memcpy / memset / malloc / free symbols that the new zlib 1.3.2 obj files reference. v3.5.0 (2026-04-28) - Vendored fresh build infrastructure for the bundled C image / compression libraries: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Build scripts for both Embarcadero bcc32 (Win32) and MSVC cl.exe (Win64) live in Lib/thirdparty/ alongside the source trees, so anyone with RAD Studio + VS2022 can rebuild the static obj files from clean source. - Added build infrastructure for OpenJPEG 2.5.4. The OpenJPEG source tree itself is fetched independently by the user (git clone uclouvain/openjpeg into Lib/thirdparty/OpenJPEG/) so it can be upgraded without touching PDFlibPas's build configuration. - Added Lib/PDFlibCLibs.pas, a Win64 link-time CRT shim shared with the sister project HotPDF. It bridges the gap between the MSVC-compiled C obj files and Delphi's Win64 linkers (dcc64 / Win64x ld.lld / BCB ilink64), which do not pull in msvcrt.dll automatically. v3.4.0 (2026-04-28) - Hardened encryption key, AES initialization vector and Perms permission block generation against predictable random number sources. Encrypted PDFs produced on systems started near the same wall-clock time are no longer trivially correlatable; AES-256 documents now keep their full key strength. - Hardened image dictionary parsing against malformed or hostile PDFs that declare unreasonable Width, Height, BitsPerComponent or DeviceN component counts. Out-of-range values are clamped before any pixel-buffer arithmetic, preventing crashes when opening such files. - Hardened cross-reference and page-tree traversal against documents whose /Prev xref chains or /Parent page links form a cycle or are excessively deep. The reader now rejects malformed structures cleanly instead of recursing until it runs out of stack. v3.3.1 (2026-04-27) - Streamlined the per-component Windows build scripts. The DLL/, OCX/ and Dylib/ folders no longer carry separate build12-* / build13-* variants: each platform now has a single build-Win32 / build-Win64 script that pins to the latest RAD Studio and accepts an optional "debug" argument. - Added inline rationale comments around the PDFlibRenderer.pas render fixes that were already present in the initial Git baseline. The comments document why SetPen scales stroke widths by the active canvas transform, and why Type 3 font CharProc d0/d1 operators must consume their operands. No runtime behavior changed. v3.3.0 (2026-04-26) - Fixed transformed stroke rendering in PDFlibRenderer.pas. SetPen now applies the current canvas-transform scale to PDF line widths before calling Picasso, preventing oversized or undersized strokes on paths whose coordinates have already been transformed. This fixes Type 3 glyph outlines that could render as thick, irregular blocks. - Fixed Type 3 font CharProc d0/d1 handling in the content stream parser. d0 now consumes its two width operands, and d1 consumes its six width/bounding box operands before later drawing commands run, preventing stale operands from corrupting glyph or path geometry.