Project Overview
HotPDF is a source-level PDF component library for Delphi and C++Builder. It is built for desktop software that needs deterministic PDF output, direct page drawing, strong RAD Studio integration, and compact deployment
The component covers everyday PDF generation, advanced document assembly, PDF editing, image-heavy output, forms with duplicate field-name guards, annotations, creation-time AcroForm field wrappers, reusable action-builder chains for open actions, document lifecycle actions, page additional actions, annotation actions, annotation additional actions, AcroForm additional actions, encryption, signing workflows, font optimization, and stream-based workflows from a single native API surface
The loaded-document toolkit adds page-range deletion, outline-aware and AcroForm-aware merging, multi-widget form constraint, geometry, visibility, rotation, border, and colour editing, complete annotation editing, automatic activation of bare web and email addresses, stateless next-match search, complete typed outline snapshots, Windows certificate-store signing, deterministic collated printing with paper capability discovery, full-page, bounded-region, and pixel-bounded Viewer snapshots, cache-aware adjacent-page prefetch, persistent page highlights, rotation-aware marquee selection, current-view printing, keyboard and wheel navigation, and VCL viewer components
Recent library releases expanded HotPDF from a classic PDF writer into a broader native PDF toolkit covering version-specific PDF 1.3 / 1.4 / 1.5 / 1.6 / 1.7 feature gating, native PDF 2.0 output, PDF/A-1 / -2 / -3 / -4 + PDF/X-1a / -3 / -4 + PDF/UA-1 / -2 standards conformance, PAdES baseline / extended / long-term-validation digital signatures, an in-process PFX / PKCS#12 signing pipeline with native RSA and ECDSA plus optional OpenSSL 3 Ed25519 and Ed448, credential-preserving Standard and public-key encrypted incremental updates with stable permanent IDs, rotating modification IDs, byte-exact source prefixes, and byte-exact no-op saves, CFF / OpenType / CID-keyed CFF font subsetting, and PDF export adapters for FastReport, QuickReport, ReportBuilder, and DevExpress ExpressPrinting that route their existing reports through HotPDF as a single PDF backend. A Direct File API processes multi-gigabyte, million-object PDFs file-to-file - page counts, copies, document-information rewrites, and AES-256 encryption or decryption - in seconds, while the bounded recovery loader can relocate a valid xref section or rebuild direct-object offsets after damaged startxref and xref data without trusting nested object-like text or binary data, and publishes byte-ranged recovery events with explicit confidence levels
The opt-in LinearizeOutput writer adds fast web view output with a first-page dependency section, shared-object grouping, primary page and shared-object hint tables, and an early compatibility cross-reference table while retaining direct file and stream destinations
Loaded stream filters run through a reusable pipeline whose final stage writes directly to caller-owned streams and whose intermediate stages spill through independently compressed blocks and a bounded asynchronous batch queue, with strict ASCII85 and ASCIIHex end markers, independent per-chain and document-wide decoded-byte ceilings, filter-count and pipeline-depth limits, indirect-reference cycle detection, same-stream recursion rejection, and structured diagnostics for every success or failure
Predictor encoding now exposes strict reusable TIFF and fixed or adaptive PNG paths for packed, 8-bit, and 16-bit rasters; loaded images can copy native or generically decoded payloads directly to caller streams, while selective optimization uses memory-to-disk spill buffers, a deterministic four-strategy zlib baseline followed by budgeted Zopfli block splitting, and bounded parallel image jobs that commit only smaller payloads in source order
Loaded JPEG and JPEG 2000 recompression can run bounded quality trials and select a deterministic output by jointly scoring sampled perceptual error and relative encoded byte cost, subject to explicit visual-error and minimum-savings limits
Large local documents use bounded windowed memory mapping with a shared LRU cache for parser reads and immutable lazy stream ranges, while mapping thresholds and window geometry remain configurable and failures fall back automatically; raw compressed ranges, decoded images, compiled display lists, and rendered raster pages have independent entry-count, total-byte, and per-entry admission limits, combine recency with aging fixed-memory frequency admission to resist scan pollution, and expose occupancy, traffic, and frequency statistics; a fair process-wide peak-memory scheduler delays competing document loads, renders, stream optimisation, and parallel image optimisation before their main working sets overlap, while preserving cancellation and reporting admission pressure; unencrypted stream serialization and caller-directed transfers write memory, mapped-file, lazy-file, adaptive-cache, and range-cache bytes without an intermediate full-stream copy; short-lived parser tokens and buffers use a retained block arena across loads, simple dictionaries and arrays scan immutable spans with direct numeric conversion and single-pass nesting, configurable byte, aggregate-token, container-entry, and malformed-token budgets stop hostile input with typed telemetry, dictionary keys no longer require temporary name objects, and repeated names, content operators, and immutable short strings share a bounded document-scoped pool; modified loaded streams use LoadedStreamMemoryThreshold to select memory or an owned compressed temporary stream whose raw and compressed blocks share a bounded asynchronous write queue; object-stream members are indexed by object number and parsed only when referenced, while LoadFromRandomAccessSource connects HTTP range readers and custom storage, coalesces adjacent reads through a bounded cache, adaptively grows asynchronous read-ahead during sustained forward parsing, suppresses speculative transport after random jumps, cooperatively cancels in-flight work for foreground seeks, recovers password keys from bounded trailer, xref, document-ID, and encryption-dictionary ranges without requesting the complete source, captures exact binary security-handler entries from the authoritative object offset so delayed decryption needs no source reread, exposes the first linearized page from its self-contained prefix, and plans bounded minimal bootstrap, hint, page, shared-object, and cross-reference ranges for any later page while accepting legal short reads and both interoperable and Annex F hint layouts under strict memory and structure limits
Mapped local files now adapt within the configured byte cap: sustained forward reads use larger views to reduce remapping, sustained distant or backward reads retain up to 16 smaller MRU views, mode changes require repeated evidence, and THPDFMappedFileStatistics reports active geometry, peak mapped bytes, access-pattern counts, and transitions
HotPDFABI.dll exposes a versioned flat C ABI with layout-checked Win32 and Win64 callback structures, validated opaque handles, fixed status codes, 64-bit random-access reads directly into parser buffers, retryable streamed writes, explicit byte lengths, cancellation, progress, and diagnostics; build-HotPDF-ABI.cmd produces the DLL and import library for each platform
Các thao tác tài liệu JSON và C ABI dùng chung khả năng khám phá tính năng, dựng ảnh, văn bản Unicode và biểu mẫu, lớp OCR, xóa dữ liệu, ký PFX, và chuyển đổi lưu trữ raster PDF/A-4 có giới hạn qua một schema có phiên bản, ngân sách tài nguyên, rollback callback, và đầu ra tệp nguyên tử; các yêu cầu lưu trữ chấp nhận tường minh việc mất thông tin và bảo toàn nguồn đã nạp
Backend native FPC cung cấp TIFF, JPEG/JPX, ICC, JBIG2, và Zopfli qua một bridge codec Windows đã xác thực, cùng dựng trang song song thực thụ, trang có thứ tự, tile, dải, và tile JPEG 2000
Deterministic differential regression probes compare named engines across parse, render, text, and save domains, repeat each result to detect instability, isolate exceptions, enforce input and output bounds, provide built-in SHA-256 HotPDF fingerprints, and emit the ordered hotpdf.differential.v1 JSON schema
The native statistical performance regression harness isolates Win32 and Win64 load, save, render, and extraction workloads, records warmups plus 30 raw samples with p50, p95, sample variance, RSS, process I/O, deterministic fixture identity, and environment metadata, and fails against versioned JSON thresholds
Continuous malformed-PDF corpus storage revalidates and re-minimises every failure case under configurable bounds, keeps the smallest signature-equivalent input across runs, serialises competing writers with a process-safe lock, and atomically publishes SHA-256-addressed PDF and hotpdf.corpus.case.v1 metadata files
Unified operation telemetry separates scheduler reservation and queue delay, wall time from current-thread CPU time, portable component-retained memory from sampled process working set, and encoded input from final decoded output, while also reporting peak additional live allocations, process I/O byte deltas, cache activity, aggregate filter work, and decode expansion
Bounded deterministic replay logs capture cancellation checkpoints, random-access range availability, and boolean or integer callback outcomes in an ordered JSON schema; strict replay validates every event signature and substitutes recorded decisions so intermittent external timing and callback behaviour can be reproduced without changing document operations
Revision-aware loading now validates xref free lists and generation transitions while retaining bounded details for duplicate and shadowed object definitions; destructive incremental edits merge existing and newly freed objects into a complete deterministic free chain, advance generations with saturation, preserve dirty-object generations, and expose rebuild statistics; explicit clean, dirty, released, and must-write object states support low-memory post-save object-stream cache release, while deterministic dictionary order, streaming versioned object graph JSON snapshots and incremental updates, editable QDF diagnostic output with bounded stream-length and xref repair, bounded dependency edges, and dominator-based retained-memory attribution make structural inspection reproducible
Các lớp văn bản OCR tìm được nối một recognizer do ứng dụng chọn vào việc dựng trang có giới hạn, xác thực độ tin cậy, hình học Unicode và pixel, đảo chiều xoay trang để văn bản vô hình thẳng hàng, tùy chọn gắn đầu ra vào một OCG, và cam kết mọi trang đã chọn qua một giao dịch đồ thị; các lớp OCR HotPDF đã đánh dấu có thể được thay thế an toàn sau khi lưu rồi nạp lại, các từ Latin và Cyrillic kề nhau nhận dấu cách Unicode tường minh, và ví dụ console SearchableOCR tạo các mẫu scan và chuyển đổi các trang đã chọn với engine OCR tích hợp sẵn, RapidOCR, hoặc Tesseract DLL/CLI, các giới hạn cấu hình được, và thống kê chuyển đổi
Engine OCR tích hợp sẵn nhận dạng văn bản ASCII thường, đậm, nghiêng, và đậm nghiêng, kể cả chữ bạc màu và chữ sáng trên trang nền tối chiếm đa số; từ có glyph còn giữ lại không chắc chắn bị bỏ nguyên cả từ để tránh mất lặng lẽ ký tự, các trang trắng hoặc không nhận dạng được vẫn hoàn tất thành công, và Windows FPC bảo toàn pixel đầu vào 24-bit lẫn 32-bit
Adapter DLL native Tesseract tùy chọn cung cấp phân đoạn trang và chế độ engine cấu hình được, nhận dạng Unicode đa ngôn ngữ, độ tin cậy, biên từ, và baseline qua HPDFCreateTesseractDLLOCREngine trong các build Delphi, C++Builder, và Windows FPC/Lazarus
Adapter CLI Tesseract cục bộ còn nhận THPDFTesseractOptions cho các bố cục một dòng, một từ, văn bản rải rác, và khối dọc, với chế độ engine, timeout, và giới hạn pixel đầu vào tường minh; adapter DLL native dùng hướng baseline để độ dài từ dọc không làm phồng kích thước văn bản tìm được
Adapter mô hình cục bộ RapidOCR bổ sung đường dẫn mô hình ONNX tường minh, phân loại góc nghiêng tùy chọn, từ điển và font cục bộ, điều khiển thread CPU, preflight ngoại tuyến, khoảng cách dòng nhận dạng chính xác, và nhận dạng Unicode có giới hạn qua THPDFRapidOCROptions trong các build Delphi, C++Builder, và Windows FPC/Lazarus
Adapter DLL native RapidOCR giữ các mô hình ONNX CPU trong tiến trình và nhận dạng snapshot bộ nhớ qua HPDFCreateRapidOCRDLLOCREngine, với các preset THPDFRapidOCRDLLOptions.ForLanguage cho tiếng Trung giản thể và phồn thể, tiếng Anh, tiếng Nhật, tiếng Hàn, tiếng Nga, các ngôn ngữ Latin thông dụng, tiếng Ả Rập, và tiếng Hindi, các bộ mô hình cục bộ đã được xác thực, thứ tự đọc ngang, phân loại góc nghiêng tùy chọn, văn bản Unicode, đầu ra có giới hạn, và hủy hợp tác trong các build Delphi, C++Builder, và Windows FPC/Lazarus
Các adapter Tesseract và RapidOCR cục bộ tùy chọn cung cấp OCR tiếng Trung có thể hủy với đường dẫn executable và mô hình tường minh; engine tích hợp sẵn vẫn là mặc định, còn các engine ngoài, package Python, mô hình, và font Arial cục bộ mà RapidOCR đòi hỏi phải được cấp phát riêng
OCR xác thực mã hóa TSV cục bộ và các hợp đồng tensor phát hiện native trước khi dùng kết quả, tính các từ bị loại vào giới hạn nhận dạng xuyên trang, và dừng nguyên tử khi ngân sách còn lại không đủ cho một trang đủ điều kiện khác
SetLoadedFreeTextPlainText explicitly replaces a supported loaded FreeText annotation's appearance with left-aligned ASCII Helvetica text for rewrite or incremental saving, while SetLoadedAnnotationContents changes only its stored contents
SetLoadedFreeTextText dựng lại appearance FreeText Unicode và rich text đã nạp với font nhúng, xuống dòng, căn lề, opacity, xoay, và xử lý overflow nguyên tử; SetLoadedFreeTextRichText nay cập nhật cả appearance hiện hình lẫn nội dung đã lưu
Loaded-page barcode decoding renders a complete page or media-box-contained region in progressive bounded slices, lends each original or quarter-turn raster to an application-selected decoder, validates Unicode, raw bytes, confidence and bounds, reverses raster and page rotations into PDF user space, and deduplicates overlapping payloads
Review-first redaction detection combines checksum-aware built-in PII patterns with application-selected entity and face detectors, maps every accepted span or raster rectangle into PDF page space, starts every finding as pending, and atomically stages only findings carrying both explicit approval and reviewer identity without burning in content
Loaded-page colour rewrite converts selected paint to DeviceGray, DeviceRGB, or DeviceCMYK, retains ordinary device-colour text and paths as searchable vectors, renders images, Forms, patterns, shadings, transparency, ICC, and Type 3 colour through one lossless process image when required, preserves spot-bearing pages by default, and commits the complete bounded batch atomically
Structured loaded-page export writes selected pages as UTF-8 HTML, XHTML, XML, or JSON from one accessible reading model, preferring tagged order and retaining document language and title, headings, lists, tables, figures, alternatives, outlines, page labels, safe links, annotations, and non-sensitive form controls under atomic cancellation and byte budgets
Typed table extraction converts detected table geometry into a public canonical grid, joins compatible fragments and adjacent pages, marks repeated headers and merged column spans, infers locale-controlled integer, number, boolean, date, date-time, currency, and percentage values with confidence, and writes bounded CSV or metadata-rich JSON atomically
Optional document handlers recognise XPS, EPUB, and CBZ from inspected content, preserve fixed-page, spine, or natural image order, convert XPS abbreviated paths and property-element solid, multi-stop linear, or elliptical radial gradient brushes to native PDF vectors and shading patterns, fill paths from cached package JPEG, PNG, TIFF, or JPEG XR ImageBrush resources with bounded viewbox and viewport mapping, brush-local transforms, native repeated or reflected image patterns, and PNG soft-mask alpha, apply solid, gradient, or image Path.OpacityMask values through folded alpha or shared DeviceGray transparency groups, composite overlapping Canvas descendants once through isolated DeviceRGB groups for Opacity and Canvas.OpacityMask, compile inline or resource-backed XPS VisualBrush trees into reusable Form XObjects and bounded tiling patterns, map bounded transformed and structured Canvas.Clip geometry to nested native PDF clipping paths, preserve bounded XPS Glyphs clusters, exact package font programs and glyph IDs, explicit advances, offsets, RTL origins, opacity, resource reuse, Unicode extraction, transformed HTTP, HTTPS, mail, package-page, and LinkTarget navigation through clipped native PDF annotations, inherit Canvas-scoped navigation through descendant visuals with nested overrides, emit positioned TJ runs, enforce shared archive, resource, reflow, page, link, URI, geometry, group-content, pixel, output, and cancellation budgets, and reuse one immutable PDF cache for atomic export and rendering
CSC remote signing connects the existing CMS provider pipeline to CSC API v2 services through an application-owned HTTP transport, with OAuth refresh, credential-chain discovery, exact hash-pinned SAD handling, bounded ordered multisign batches, synchronous or asynchronous signing, bounded polling, RFC 3161 timestamps, cancellation, SHA-256 content-addressed idempotency keys, and a finite completed-operation cache
Nested copy-on-write object graph transactions snapshot each touched indirect root once per savepoint, preserve root addresses during rollback, restore object-number allocation, remove appended roots, spill large stream history beyond a configurable threshold, and expose resident and file-backed snapshot statistics
Reusable layout elements support side-effect-free measurement, verified split heads, and owned overflow continuations for paragraphs, rows, containers, and custom content; declarative page callbacks compose backgrounds, headers, document content, footers, and foregrounds in stable order, while unbounded reports retain file-backed page staging, paragraph constraints, bounded diagnostics, semantic helpers, and bidi direction control
Loaded-page rendering executes coloured and uncoloured tiling patterns plus axial, radial, free-form and lattice Gouraud, Coons patch, and tensor-product patch shadings for fills and strokes, honours pattern matrices in the parent content default coordinate system, supports all three tiling types and signed steps, isolates each cell path, applies uncoloured base tints to fill and stroke operations, and bounds recursive pattern depth, tile execution, mesh decoding, and adaptive tessellation for hostile resources
Production bitmap, direct-DC, Form and display-list replay now share one content-token interpreter with per-operator cancellation; compiled display lists cache operator indexes for operand-scan-free replay and expose the command count through THPDFPageDisplayList.OperatorCount and THPDFDisplayListInfo.OperatorCount, while the renderer retains its complete graphics and resource state machine
Isolated and knockout transparency groups render through bounded 768-pixel tiles with absolute device-coordinate continuity, tile-local alpha and soft-mask storage, single-pass Form decoding and tokenisation, deterministic nested-group state restoration, and peak working-set statistics available through GetLastTransparencyGroupTileStats
Opt-in overprint proofing preserves process plates that a paint does not name, applies /OPM 1 zero-component protection for DeviceCMYK, treats DeviceGray as the black process plate, and combines Separation and DeviceN spot tints through their alternate colour transforms
Repeated Type 3 glyphs reuse bounded CharProc display lists keyed by font, glyph, linear matrix, and colour state, avoiding repeated stream decoding and tokenisation while preserving translation, clipping, nested resources, d0/d1 colour rules, and recursion limits
Progressive loaded-page sessions decode eligible progressive DCTDecode images one scan per bounded continuation for earlier visible previews, expose scan and image counters through THPDFLoadedPageRenderSession, and provide cancellable THPDFProgressiveJPEGScanEvent notifications while retaining the complete-image fallback for unsupported paint state or decoding failures
Progressive region sessions allocate only the requested user-space window, retain graphics and text state across bounded continuations, use conservative display-list bounds to cull unrelated paths, text, images, Forms, and shadings, and expose visible and culled paint counts for telemetry
JPEG 2000 decoding validates individual codestream tiles, combines source-region and resolution-of-interest reconstruction, and concurrently decodes independent visible tiles with private codec state, cancellation, CPU and user worker limits, deterministic composition, and automatic peak-memory budget fallback
Loaded-image cache hits now return immutable reference-counted decoded bitmap handles that survive eviction and document destruction, support thread-safe direct drawing, preserve isolated mutable copies on demand, and eliminate repeated pixel copies from renderer warm paths
Parallel loaded-page rendering now overlaps display-list compilation with playback across dynamically balanced workers, compiles unrelated pages outside the cache lock, begins output before the full input set is compiled, preserves input order, and reports stage concurrency, cache use, completion, and latency telemetry through THPDFParallelRenderPipelineInfo; RenderLoadedPagesParallelOrdered adds calling-thread callbacks with a bounded completed-bitmap queue, ordered-window backpressure, cooperative callback cancellation, and borrowed bitmap lifetimes for jobs whose complete raster output must not remain resident
Both parallel page APIs now use the process-wide peak-memory scheduler to reduce requested workers from conservative page estimates, reserve every claimed page, delay work fairly under pressure, and report memory-derived concurrency, peak reserved bytes, admissions, delays, and wait time; ordered callbacks keep output reservations active until bitmap release so queued rasters and active workers share one budget
RenderLoadedPageTilesParallel and RenderLoadedPageBandsParallel stream one page through isolated workers with row-major tile or top-to-bottom band delivery, borrowed bitmap lifetimes, cooperative cancellation, caller-controlled in-flight memory, and a bounded immutable cache for Type 3 glyph token sequences and halftone threshold screens
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded, and SaveLoadedPagesToTiffStreamBanded feed the same band renderer into streaming PNG or TIFF encoders, emitting compressed rows without a complete framebuffer and reporting band, row, worker, memory, output, timing, and cancellation telemetry
Pluggable loaded-page render backends receive compiled display lists and document resource access, advertise concurrency and colour-management capabilities, participate in synchronous and parallel rendering, invalidate stale raster caches when replaced, and expose deterministic failure, fallback, and execution statistics; the built-in native GDI backend preserves existing output without claiming device acceleration
Loaded-page prefetch now compiles and renders outside the cache lock with cooperative cancellation checkpoints, yields immediately to foreground page rendering, and reports request progress, cache use, failures, preemption counts, and cancellation latency through THPDFLoadedPagePrefetchInfo
JBIG2 segment-graph validation now checks both image and global streams before native or external decoding, rejects malformed dependencies and invalid embedded organization within explicit segment, edge, depth, and symbol budgets, and prevents invalid shared dictionaries from entering the globals cache
JBIG2 batch encoding now trains symbols across the complete page set through the external static backend, shares one global dictionary across every image XObject, collapses exact duplicate pages, falls back to the native accumulator when allowed, and publishes backend, size, symbol, and budget telemetry
ICC-based vector and image rendering applies complete source, proof, output and sRGB colour pipelines with selectable rendering intent and black-point compensation, while a thread-safe bounded LRU cache reuses transforms across document and renderer instances
Loaded-image recompression and effective-DPI downsampling retain calibrated output definitions, while transparency flattening emits calibrated RGB and preserves Separation or DeviceN pages as vector content instead of discarding spot-colour identity
Loaded AcroForm calculation and validation actions can use a bounded typed expression subset with booleans, numbers, strings, null, undefined, arrays, conditional and short-circuit operators, deterministic UTC dates, and allowlisted string, array, conversion, and Math helpers, while unsupported active scripting fails closed without starting a JavaScript engine
The optional QuickJS runtime bindings execute broader application-controlled JavaScript through either static objects or an ABI-neutral bridge DLL on Win32 and Win64, with configurable memory, stack, script, time, and interrupt limits plus explicit status and recovery semantics
XFA form scripting extends bounded FormCalc with conditional logic, repeated numeric arrays, and validated instance callbacks, while an explicitly enabled QuickJS sandbox adds full control flow and native typed arrays without exposing file, process, browser, or network objects; the interactive dynamic XFA runtime adds host-neutral focus, Unicode editing, hit testing, instance-aware validation and calculation, atomic rollback, and bounded reflow without flattening
SanitiseLoadedDocument applies JavaScript-only, active-content, or strict untrusted-document policies to loaded PDFs, removes unreachable payload objects, compacts live object numbers, and safely rewrites in place through atomic file replacement
Preflight JSON, HTML, and veraPDF-style findings expose stable namespaced rule identifiers and structured PDF locations with logical scope, path, key, and exact object, page, or byte coordinates when available, while text and CSV compatibility remains unchanged
Reusable validation policies now combine structural preflight with strict or WTPDF intake requirements, extract canonical declaration and claim metadata, run ordered file batches through bounded worker and queue limits, preserve source-aware errors, and offer inspect, add-missing, and synchronize modes for XMP repair independently of structural PDF repair
Factur-X and ZUGFeRD intake now cross-checks the primary invoice attachment MIME type and FileSpec names against the EmbeddedFiles and Catalog AF registrations, exposes the decoded MIME type and XMP namespace URI, and rejects mismatched XMP document types or extension namespaces
Built-in e-invoice business-rule validation executes all profile-specific Schematron checks with reviewed XPath 2 compatibility, external code databases, stable rule identifiers, explicit evaluation errors, secure XML parsing, and fail-closed combined verdicts
Chuyển đổi lưu trữ raster PDF/A-4 đã nạp dựng lại nội dung hiển thị của trang thành các ảnh sRGB có giới hạn trong một tài liệu PDF/A-4 vừa được xác thực, chuẩn hóa font, transparency, và màu vẽ qua bộ dựng native nghiêm ngặt; API tệp dàn dựng và phát hành kết quả một cách nguyên tử, còn báo cáo chỉ ra các annotation, biểu mẫu, và tệp đính kèm đã bị loại bỏ. Đường lưu trữ hình ảnh tùy chọn này từ bỏ văn bản vector gốc, văn bản tìm được, chữ ký, và nội dung tương tác
PDF 2.0 output now supports PDF/A-4, PDF/A-4e, PDF/A-4f, PDF/UA-2, PDF/X-6, PDF/X-6p, and PDF/X-6n identification and validation, including revision-aware XMP resolved by namespace URI, transactional PDF/A-4 repair for safe header, trailer, metadata, Catalog, and presentation normalisation with byte-exact rollback and preserved page content, selectable ISO 15930-9:2020 and resolved-errata PDF/X-6 rule sets, actual ICC header and channel checks, document and page output intents, actual painted colour and overprint through content arrays, nested forms, tiling and shading patterns, images, image masks, shadings, Type 3 glyphs, soft masks and annotation appearances, inherited graphics and transparency state, combined fill-and-stroke compositing, CIDFont and CMap relationships, bounded decoded-byte and content-token work, namespace-aware structure elements, document metadata and string checks, optional content, physical annotation ownership, form semantics, structure destinations, outlines, nested page labels, associated-file authoring, inherited production page boxes, clause-aware diagnostics with rule-set provenance, automatic fail-closed generation validation, and transactional PDF/UA-2 repair for namespaces, attributes, lists, tables, Ruby, Warichu, pronunciation, alternate text, language inheritance, heading order, and Artifact tags
Tagged PDF 2.0 tables receive bounded grid expansion, intersection and row-group checks, table-local header association and cycle detection, while lists receive complete numbering and continuation-chain checks; exact Ruby and Warichu sequences are enforced, and applications can write per-element pronunciation hints or ordered embedded PLS lexicons through SetStructurePronunciation and AddPronunciationLexicon
The v2.119.32-51 cycle added producer-side Arabic / Persian / Urdu shaping (LAM-ALEF mandatory ligature, Arabic Presentation Forms-A 9 letters), a feature-complete OpenType GSUB substitution engine covering every LookupType 1-8 with Script / LangSys selection and TTF subsetter closure for substitute glyphs, XFA (XML Forms Architecture) container support (AddXFAPacket / ClearXFAPackets / XFAPacketCount), an AcroForm /AA /K + /F + /V + /C form-field trigger family, multi-Unicode /DR font registration via RegisterAcroFormFont, structure-element accessibility attribute setters (/Lang / /E / /T) with a Table 333 standard structure type enum and AddStructureElement typed overload, and marked-content sequence properties on BeginTaggedContent
The v2.119.52-68 cycle closed the Phase 8 automatic shaping pipeline and broadened script coverage: Arabic Extended-A (including the U+0750-077F Arabic Supplement and U+08A0-08FF Arabic Extended-A) and Persian / Urdu Form-B were extended into the full U+0672-06D5 joining-class table plus 26 new Forms-A mappings, with post-pass folding for LAM-ALEF, YEH-HAMZA + vowel pairs (8 ligatures in U+FBEA-FBFB), the standalone Allah ligature (U+FDF2), and the 22-codepoint Bismillah phrase (U+FDFD). The new opt-in ShapingFeatures property + THPDFShapingFeature enum (sfArabicGSUB / sfStandardLigatures / sfContextualLigatures / sfContextualAlternates / sfIndicShaping) makes the producer emit GSUB-driven font-specific rlig / liga / clig / rclt substitutions automatically, with Latin Standard Ligatures (ff / fi / fl / ffi / ffl / ſt / st via U+FB00-FB06) and Devanagari Indic syllable reordering (Repha + pre-base I-matra) joining the same pipeline. New shaping capability methods for Syriac (GetSyriacJoiningClass / GetSyriacPosition), Mongolian (GetMongolianJoiningClass / GetMongolianPosition), and Devanagari (GetDevanagariCategory / ApplyDevanagariReorder) let callers drive non-Arabic complex scripts through the same GSUB engine. GetCodepointAdvance exposes the cached /W em-fraction for wrap calculations, and AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID let producer emit any GSUB substitute GID (Devanagari cluster shapes, stylistic alternates, CJK variation sequences) through Private-Use-Area codepoints with full /CIDToGIDMap + /ToUnicode + /W integration. Cumulative ToUnicode CMap now ships 35 ligature reverse-mapping entries (8 LAM-ALEF + 18 YEH-HAMZA family + 1 Allah + 1 Bismillah + 7 Latin) so consumer-reader copy / paste produces the source codepoints. Documentation skeletons for ChangeLog now ship in 11 languages (EN / CN / AR / DE / ES / FR / IT / JA / KO / PT / RU) with a language-picker UI; ChangeLog retention limit was raised from 250 to 500 version sections
The v2.152-v2.190 cycle built out a complete OpenType GPOS positioning engine and broadened complex-script coverage. Opt-in shaping options now apply the font's own kerning (pair, contextual, and right-to-left), combining-mark placement (mark-to-base, mark-to-mark, and per-component mark-to-ligature), cursive connection anchors, and vertical kerning for vertical text, all written as standard PDF text operators so any reader renders the same result. Producer-side shaping now covers Arabic (including the Supplement, Extended-A, and Extended-B blocks), Syriac, Mongolian, N'Ko, Adlam, Hanifi Rohingya, Tibetan consonant stacking, Devanagari and the other Indic scripts through the font's Indic feature chain, Javanese, Thai and Lao mark ordering, Hebrew vowel-point ordering, Khmer, Myanmar, Tai Viet, and Meetei Mayek. A family of optional OpenType typography features - standard, discretionary, and historical ligatures, small capitals, oldstyle / lining / proportional / tabular figures, superscripts, subscripts, ordinals, fractions, scientific inferiors, numerators, denominators, stylistic and contextual alternates, localized forms, case-sensitive forms, slashed zero, and vertical alternates - can be applied automatically during text output. Copy, paste, and text search recover the original characters across all shaped output, including ligatures and chained feature substitutions. Font output also became smaller: embedded font programs are always Flate-compressed, a font used on several pages is embedded once per document, subset tags are derived deterministically for reproducible output, and an optional compact mode writes plain-ASCII text with standard fonts as unembedded WinAnsi text