ChangeLog
Releasegeschiedenis
« Terug naar documentatie-index
Versiegeschiedenis van de PDFlibPas-bibliotheek. Items staan van nieuw naar oud; elke release volgt semantische versie-indeling volgens het releasebeleid van het project.
Talen:English (US)English (UK)Español (España)Español (Latinoamérica)DeutschFrançaisItaliano日本語Português (Brasil)NederlandsSvenskaPolskiTürkçe한국어العربيةРусский简体中文繁體中文
v3.56.42 2026-05-27
- Het buffergebaseerde AES-256-decryptiepad uit v3.56.41 is gecorrigeerd zodat aanroepers het decryptieresultaat weer kunnen toewijzen aan dezelfde
AnsiStringdie de ciphertextbuffer leverde, zonder toegangsfouten. - De normale API-workflow
LoadFromFile,Encrypt,SaveToFile, opnieuw laden,DecryptenSaveToFilevoltooit weer op grote geladen PDFs, terwijl de AES-CBC-decryptieoptimalisatie met minder kopieën behouden blijft. - Er is AES-regressiedekking toegevoegd voor gevallen waarin invoerbuffer en resultaatdoel samenvallen bij het terugzetten van versleutelde streams tijdens het opslaan, inclusief grote payloads van 504 KB die de fout eerder zichtbaar maakten.
v3.56.41 2026-05-27
TPDFlib.DACopyFiletoegevoegd voor Direct Access workflows die een paginatelling en een ongewijzigde bestandskopie nodig hebben zonder de volledige normale objectgrafiek op te bouwen.- AES-256-decodering geoptimaliseerd met buffergebaseerde AES-CBC-decodeerpaden die worden gebruikt bij het decoderen van geladen tekenreeksen en streams, waardoor extra kopieën van versleutelde tekst bij grote versleutelde streams worden verminderd.
- De Delphi
HugeFileBenchmarkdemo bevat nu eendirect-copyrij plus--opsen--skipfilters voor gerichte runs met grote bestanden.
v3.56.40 2026-05-26
- De Delphi- en C++Builder-demo's
HelloWorldmaken nu een rijkere starter-PDF met documentinformatie, uitvoer in een gekozen standaardlettertype, een opgemaakte titelbalk, eenvoudige vectortekening en aanwijzingen voor vervolgstappen, terwijl dezelfde build-and-run-workflow behouden blijft. - Alle demo-notities voor Delphi en C++Builder zijn vervangen door browservriendelijke
Readme.html-pagina's, inclusief aanvullende notities voor wachtwoorden, beperkte bestanden en ondertekeningsresultaten; de demo-indexen verwijzen gebruikers nu naar de HTML-notities.
v3.56.39 2026-05-26
- De opslagpaden van de directe bestands-API bouwen kruisverwijzingszoektabellen nu lineair op, waardoor
DASaveAsFileen verwante direct-save-paden veel sneller worden bij PDFs met zeer veel objecten of dichte paginabomen. - De geoptimaliseerde writer behoudt dezelfde semantiek van de vrije-objectketen en vermijdt herhaalde scans van objectnummers tijdens volledige xref-generatie, waardoor grote direct-save-workflows verbeteren zonder de openbare API of het uitvoercontract te wijzigen.
v3.56.38 2026-05-26
- Normale API-encryptie-uitvoer gerepareerd zodat
Encryptde trailer/IDaanmaakt of behoudt voordat AES-256-beveiligingsgegevens worden geschreven, waardoor versleutelde PDF's viaEncryptionStatusherlaaddetecteerbaar blijven. - De normale API-workflow
LoadFromFile,Encrypt,SaveToFile, reload,DecryptenSaveToFilebehoudt nu de versleutelde status vóór explicieteDecrypt, overeenkomstig het gedrag van de directe bestands-API voor grote legacy-PDF's.
v3.56.37 2026-05-26
TPDFlib.ComparePreflightReportstoegevoegd, een regel-voor-regel comparator voor platte-tekst preflight-rapporten die vluchtigeGenerated:-tijdstempelregels negeert en een lege tekenreeks retourneert wanneer stabiele rapportinhoud overeenkomt.- De Delphi
PreflightReport-demo ondersteunt nu--compare <file>in enkelbestandmodus, schrijft een UTF-8.diff.txt-rapport en retourneert exitcode 2 wanneer het gegenereerde tekstrapport verschilt van de baseline.
v3.56.36 2026-05-26
- De Delphi
PreflightReport-demo ondersteunt nu batch-directoryruns met--input-dir,--output-diren--recursive, en schrijft één rapport per PDF als<basename>.preflight.<ext>. - Batchmodus schrijft een UTF-8
preflight-summary.csv-bestand dat elke bron-PDF, pass/fail-status, aantal problemen en gegenereerd rapportpad vastlegt, terwijl het bestaande exitcodecontract voor automatisering behouden blijft.
v3.56.35 2026-05-26
ReportFormat = 3voegt CSV-uitvoer toe aanTPDFlib.CreatePreflightReportExenTPDFlib.SavePreflightReportEx, en produceert UTF-8-rijen voor rapportmetadata, elke geselecteerde compliancecontrole, afzonderlijke probleemcodes en berichten, en de eindsamenvatting.- De Delphi
PreflightReport-demo ondersteunt nu--format csven--csv, zodat command-line preflight-runs spreadsheets of eenvoudige CI-parsers kunnen voeden zonder JSON na te bewerken of tekst te scrapen.
v3.56.34 2026-05-26
- Formaatbewuste
TPDFlib.CreatePreflightReportEx- enTPDFlib.SavePreflightReportEx-API's toegevoegd voor het genereren van PDF/A- en PDF/UA-1-preflightrapporten als platte tekst, JSON of zelfstandige HTML, terwijl de bestaande tekst-only rapport-API's behouden blijven. - De Delphi
PreflightReport-demo ondersteunt nu--format text|json|htmlplus--json- en--html-snelkoppelingen, zodat dezelfde command-line workflow leesbare rapporten of machineleesbare CI-artefacten kan produceren.
v3.56.33 2026-05-26
TPDFlib.CreatePreflightReportenTPDFlib.SavePreflightReporttoegevoegd zodat applicaties herbruikbare platte-tekst rapporten kunnen genereren vanuit de ingebouwde PDF/A- en PDF/UA-1-compliancecontroles zonder string-list handles handmatig te enumereren.- De Delphi
PreflightReport-demo roept nu de rapport-API's op bibliotheekniveau rechtstreeks aan, waardoor het voorbeeld gericht blijft op command-line workflow, geselecteerde controles, first-issue-modus en automatiseringsvriendelijke exitcodes.
v3.56.32 2026-05-26
- Een nieuwe Delphi
PreflightReport-consoledemo toegevoegd die PDF/A- en PDF/UA-1-controles uitvoert metCheckFileCompliance, probleemlijsten enumereert metGetStringListCountenGetStringListItem, en een platte-tekst preflightrapport schrijft. - De demo ondersteunt de opties
--input,--output,--pdfa,--pdfua,--bothen--first-issue, plus exitcodes voor automatiseringsvriendelijke resultaten voor geslaagd, probleem gevonden en runtimefout.
v3.56.31 2026-05-25
GetCustomKeys(2)verbergt nu consequent door de bibliotheek beheerde Catalog-systeemvermeldingen, waaronder/OutputIntents,/Extensions,/Requirements,/Collectionen/NeedsRendering.- PDF/A-outputintents die door
SetPDFAModeworden aangemaakt, verschijnen niet langer als aangepaste Catalog-sleutels, waardoor enumeratie van applicatiemetadata gescheiden blijft van PDF-compliancestructuren.
v3.56.25 2026-05-23
- Writer-side GetPDFUADiagnostics krijgt het bijbehorende
MULTIPLE-H-CHILDREN:N-probleem, pariteit met reader10044uit v3.56.24. ISO 14289-1 §7.4.4 verbiedt meer dan één direct H-kind per tag tree node; de writer-side controle slaat aan wanneer de in-memory FStructElems-boom zo'n overtreding bevat. - Een nieuwe geneste CountMultipleHChildren-helper doorloopt de boom depth-first en telt H-kinderen op elk niveau. De controle draait naast de bestaande LIST-STRUCT / LIST-NO-NUMBERING-doorlopen en deelt hetzelfde FStructElems-traversalpatroon.
v3.56.24 2026-05-23
- De PDF/UA-1-audit krijgt de ISO 14289-1 §7.4.4-controle voor uniciteit van H-tags.
10044rapporteert elke structuurnode die meer dan één direct H-kind bevat — de specificatie verbiedt dit bij sterk gestructureerde documenten, en dezelfde beperking geldt voor elke tag tree node ongeacht de algemene structuurmodus. De andere SHALL uit §7.4.4 (een document moet sterk of zwak gestructureerd zijn, niet beide) vereist documentbrede heuristiek en is bewust buiten deze audit gelaten. - Een nieuwe pre-order struct-tree walker (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) telt directe H-kinderen per node en recursiet depth-first. Hergebruikt dezelfde K-shape decoder als de bestaande heading / list / note walkers.
v3.56.23 2026-05-23
- De PDF/UA-1-audit krijgt de twee ISO 14289-1 §7.21.6 font-programcontroles die de dictionary-layer controles van v3.56.10 moesten uitstellen totdat een TrueType-parser beschikbaar was.
10034rapporteert niet-symbolische TrueType-programma's waarvan de ingebedde SFNT cmap-tabel alleen de symbolic (platformID=3, encodingID=0)-entry bevat — §7.21.6 eerste alinea vereist ten minste één niet-symbolische cmap-subtabel zodat het programma de codepoints kan renderen die door zijn /Encoding zijn gedeclareerd.10035rapporteert niet-symbolische TrueType/Encoding /Differences-arrays waarvan de glyph-namen geen Adobe Glyph List-leden zijn (.notdefuitgezonderd) — §7.21.6 derde alinea vereist dat elke Differences-entry in AGL terechtkomt. - Nieuwe
Lib/PDFlibPDFUAFontInspect.pasimplementeert een tolerante SFNT table-directory walker en cmap subtable directory parser. De Adobe Glyph List-tabel met 4281 namen die in de vorige infrastructuurcommit als scaffold is toegevoegd, is nu via de Differences-controle aangesloten. Programma's die niet als SFNT parsen (Type 1 PFB / PFA, OpenType collection, willekeurige rommel) worden stilzwijgend overgeslagen — false negatives hebben op auditniveau de voorkeur boven false positives.
v3.56.22 2026-05-23
- De PDF/UA-1-audit krijgt ISO 14289-1 §7.18.6-controles voor media clip data.
10042rapporteert media clip data dictionaries (geïdentificeerd door/S /MCD, optioneel/Type /MediaClip) zonder de vereiste/CTcontent-type entry.10043rapporteert dezelfde dictionaries zonder de vereiste/Alt-array. ISO 32000-1 Table 274 vermeldt beide sleutels als optioneel, maar ISO 14289-1 §7.18.6 maakt ze verplicht zodat screenreaders een betekenisvolle beschrijving voor ingebedde multimedia kunnen aankondigen. - Dit is fase 6 van het PDF/UA deep-audit-plan (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Het draait zonder afhankelijkheid van een font-program- of content-streamparser, dus het is de eerste vervolgsubklasse na de v3.56.0..v3.56.13-reeks.
v3.56.21 2026-05-23
- Nieuwe
SetSignProcessCommitmentTypeemitteert het CAdEScommitment-type-indicationsigned attribute (OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3) binnen de PAdES-B-B SignerInfo. Accepteert integercodes 1..6 die mappen naar de bekende ETSI commitment OID'sid-cti-ets-proofOfOrigintotid-cti-ets-proofOfCreation; geef 0 door om te wissen. Codes buiten het bereik worden geweigerd. - Nieuwe
SetSignProcessSignaturePolicyemitteert het CAdESsignature-policy-identifiersigned attribute (OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Neemt de dotted-decimal policy OID, de hash van het policy-document als uppercase-hex string en een digest-algoritmecode (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=auto/SHA-256). Het attribuut bevat deSignaturePolicyIdSEQUENCE metsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE). - Beide attributen hebben alleen effect wanneer de SubFilter
ETSI.CAdES.detachedis (het PAdES-B-B-pad); ze breiden de bestaandergAuthAttr-array uit naastcontent-typeensigning-certificate-v2. PAdES Table 1 rij d) verbiedt het combineren vancommitment-type-indicationmet de PDF Signature Dictionary/Reason-entry; de caller is verantwoordelijk voor het niet instellen van beide.
v3.56.20 2026-05-23
- Nieuwe
AddPAdESDSSVRIkoppelt een Signature VRI-subdictionary-entry aan de DSS die wordt opgebouwd, waarmee de ETSI EN 319 142-1 v1.2.1 clausule 5.4.2.3 Validation Related Information-structuur wordt voltooid. De entry wordt gesleuteld op de uppercase-hex SHA-1 van de/Contents-bytes van de signature; deCert/CRL/OCSP-subarrays worden gevuld door te verwijzen naar de overeenkomstige parent DSS-streams via 0-based indexen die als kommagescheiden lijsten worden opgegeven (bijv."0,2,5"). - De onderliggende
TSmartPDFDocument.AddPAdESDSSWithVRIhoudt de streamobjectnummers bij die voor elke cert / CRL / OCSP worden geëmitteerd en gebruikt die om de VRI-subarrays te schrijven als indirecte verwijzingen terug naar dezelfde streams waar de parent DSS-arrays al naar wijzen, waarmee wordt voldaan aan de specificatie-eis dat VRI-entries opslag delen met de parent DSS dictionary. Het oorspronkelijkeAddPAdESDSS-entry point blijft ongewijzigd werken voor callers die geen VRI nodig hebben. - Elke per-signature VRI-subdictionary bevat de optionele
/Type /VRI-marker zodat tooling die de catalogus viaType-tags doorloopt, de structuur kan herkennen zonder het parent-pad opnieuw op te lossen.
v3.56.19 2026-05-23
- Nieuwe PAdES-B-T-workflow voor het koppelen van een RFC 3161 / RFC 5816 signature-time-stamp (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) aan een bestaande PAdES-B-B-signature.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringopenen een ondertekende PDF,SetPAdESSignatureTimeStampFieldbenoemt het veld,GetPAdESSignatureValueHashHexretourneert de SHA-256- (of 384 / 512-) hash van designatureValuevan de signer voor indiening bij een TSA,GetPAdESSignatureCMSBytesstelt de bestaande CMS-payload beschikbaar,SetPAdESSignatureCMSBytesaccepteert de augmented CMS-bytes die de caller samenstelt via zijn CMS-bibliotheek naar keuze, enEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringplakken de nieuwe CMS in de oorspronkelijke/Contents-placeholder. BuildPAdESSignatureTimeStampAttributeis een stateless helper die een door TSA uitgegeven TimeStampToken verpakt in de CMS Attribute SEQUENCE dieSignerInfo.unsignedAttrsverwacht, zodat callers die al een CMS-bibliotheek bij de hand hebben de OID + SET-of plumbing kunnen overslaan.- Nieuwe
SetSignProcessReserveContentsBytesverbreedt de/Contents-placeholder bij de initiële ondertekening zodat de achteraf augmented CMS past zonder de oorspronkelijke reservering te overschrijden. Typische door TSA uitgegeven TimeStampTokens voegen 2-6 KB toe aan de SignerInfo; geef hier 1024-8192 door om ruimte te laten. Zonder voldoende reserve retourneert de augmentatie-aanroep13(output overflow). - De bibliotheek levert geen TSA HTTP-client; de caller haalt de TimeStampToken op (doorgaans 30-50 regels TSP-request + HTTP POST tegen bijvoorbeeld FreeTSA of DigiCert). Windows CryptoAPI
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRzou in principe de CMS-injectie in de bibliotheek automatiseren, maar retourneertCRYPT_E_INVALID_INDEX(0x80091008) op de detached SignedData-vorm die PAdES emitteert, dus wordt in plaats daarvan het pad met door de caller aangeleverde CMS-bytes gebruikt.
v3.56.18 2026-05-23
- Het PAdES
signing-certificate-v2-attribuut embedt nu het optioneleIssuerSerial-veld dat door RFC 5035 (ESSCertIDv2) is gedefinieerd. De issuer Distinguished Name van het signing certificate wordt verpakt in eenGeneralName [4] EXPLICIT directoryNameCHOICE binnenGeneralNames, gevolgd door het certificaatserienummer als een ASN.1 INTEGER. De bytes van het serienummer komen little-endian uit Windows CryptoAPI (CRYPT_INTEGER_BLOB) en worden omgekeerd naar big-endian, met de positive-integer pad byte toegevoegd wanneer de high bit is gezet, overeenkomstig hoe OpenSSL en BouncyCastle hetzelfde veld emitten. - Verifiers die het paar issuer name + serial vergelijken met hun path-building candidate set (met name EU DSS in strict mode) vinden nu beide identifiers in het signing-cert-v2-attribuut; de vorige v3.56.17-uitvoer leverde alleen de
certHash-referentie. - Nieuwe ASN.1-helpers
DER_IntegerFromLittleEndian(behandelt de Win32CRYPT_INTEGER_BLOB-bytevolgorde) enDER_ContextTagExplicit(verpakt een payload in een constructed context-specific tag) maken dePDFlibASN1-micro-encoder compleet. NieuweCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXT-declaraties inPDFlibCryptoAPIgeven het ondertekenpad toegang tot de geparste certificaatvelden.
v3.56.17 2026-05-23
- Het ingebouwde
ETSI.CAdES.detached-ondertekenpad produceert nu structureel conforme PAdES-B-B signatures. De bibliotheek bouwt zelf de CMS authenticated attributes -content-type(id-data) ensigning-certificate-v2uit RFC 5035 / RFC 5816 met een SHA-256-hash van het signing certificate - en geeft ze door aanCryptSignMessageviargAuthAttr. Zodra dat veld niet-NULL is, stopt Windows CryptoAPI met het automatisch injecteren van hetsigning-time-attribuut dat PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) verbiedt, zodat de resulterendeSignerInfode vereiste attributen bevat en alleen die. - Nieuwe
PDFlibASN1-unit biedt een gerichte DER (X.690)-micro-encoder - lengteprefix, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER - gebruikt om deSigningCertificateV2-attribuutwaarde te bouwen. De encoder volgt de standaardregels voor base-128 OID-arcs en laat het optionelehashAlgorithm-veld weg wanneer het alleen de SHA-256-default zou herhalen, overeenkomstig wat OpenSSL en BouncyCastle emitten. ApplySignaturerouteertETSI.CAdES.detachednu via het raw-byte pad (hetzelfde pad dat dooradbe.pkcs7.detachedwordt gebruikt) in plaats van een vooraf berekende digest aan te leveren. CryptoAPI berekent nu hetmessageDigestauthenticated attribute over de daadwerkelijke ondertekende inhoud, wat verifiers verwachten.- SHA-384 en SHA-512 worden ook gerespecteerd bij het bouwen van het signing-certificate-v2-attribuut: het
hashAlgorithm-veld wordt geëmitteerd met de bijbehorendeAlgorithmIdentifierin plaats van op de default te vertrouwen. SHA-1 wordt in deze context stilzwijgend opgewaardeerd naar SHA-256 omdat PAdES-B-B SHA-1 niet autoriseert (clausule 6.2.1).
v3.56.16 2026-05-23
- Nieuwe
SetSignProcessDigestAlgorithmselecteert het signing message-digest-algoritme:1= SHA-1 (verouderd),2= SHA-256 (moderne default),3= SHA-384,4= SHA-512,0= auto (SHA-256 voor elke SubFilter behalve het legacyadbe.pkcs7.sha1-pad, dat op SHA-1 blijft voor byte-stabiele achterwaartse compatibiliteit). ETSI EN 319 142-1 v1.2.1 §6.2.1 verbiedt MD5 en verwijst naar ETSI TS 119 312 voor de aanbevolen cryptografische suites, dus PAdES-ondertekenaars moeten SHA-256 of sterker kiezen. SHA256StreamRange,SHA384StreamRangeenSHA512StreamRangehash-helpers toegevoegd naast de bestaandeSHA1StreamRange; het ondertekenpad gebruikt ze om de PDF ByteRange onder het geselecteerde algoritme te digesten. De PKCS#7SignerInfo.digestAlgorithmOID en de daadwerkelijke hashbytes komen nu gegarandeerd overeen (de vorige code gaf altijd de SHA-1-digest door ongeacht het onderhandelde algoritme).TPDFlibPFXFile.SignDataneemt nu eenDigestAlgorithm-parameter en kiest de juiste OID voor elk (SubFilter, algorithm)-paar:2.16.840.1.101.3.4.2.1/.2/.3voor SHA-256/384/512 op detached en custom SubFilters (RFC 5754), en de bijbehorendesha256WithRSAEncryption-familie-OID's voor het legacyadbe.pkcs7.sha1-pad.
v3.56.15 2026-05-23
- Nieuwe
SetSignProcessDocTimeStampschakelt een ondertekenproces naar PAdES Document Time-stamp-modus volgens ETSI EN 319 142-1 v1.2.1 §5.4.3. De resulterende Signature Dictionary bevat/Type /DocTimeStampen/SubFilter /ETSI.RFC3161, laat de verboden sleutels/M,/Reason,/Location,/ContactInfoen/Nameweg, en reserveert een hex-placeholder van 8192 bytes (of door caller bepaalde grootte) in/Contentsvoor een extern opgehaalde RFC 3161 TimeStampToken. - Passthrough wordt automatisch ingeschakeld wanneer DocTimeStamp-modus is geselecteerd, omdat de TimeStampToken van een externe TSA komt.
SetSignProcessInfo-aanroepen die na het overschakelen naar DocTimeStamp-modus worden gedaan, worden stilzwijgend genegeerd om de signature dictionary conform de specificatie te houden. - De bestaande automatische PAdES
/Extensions /ESIC-injectie die in v3.56.8 is toegevoegd dekt DocTimeStamp al, omdat de SubFilter begint metETSI., zodat een Document Time-stamp PDF de vereiste catalog extension declareert zonder extra wiring.
v3.56.14 2026-05-23
- Nieuwe PAdES Document Security Store (DSS)-augmentatie-API.
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringopenen een eerder ondertekende PDF,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPstagen DER-gecodeerd validatiemateriaal, enEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringschrijven een incremental update met een/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>dictionary zoals gespecificeerd door ETSI EN 319 142-1 v1.2.1 §5.4.2.2. Dit is de bouwsteen om een PAdES-B-B / B-T-signature te promoveren naar PAdES-B-LT long-term validation. - Het DSS-proces verhoogt automatisch de catalog
/Extensions /ESIC-entry naar ten minsteExtensionLevel 1bij het toevoegen van validatiemateriaal, overeenkomstig de eis in §5.6, en voegt nieuwe certificaten, CRL's en OCSP-responses samen in de bestaande/Certs//CRLs//OCSPs-arrays bij herhaalde aanroepen zodat revisies zich opstapelen in plaats van overschrijven. GetPAdESDSSProcessResult/ReleasePAdESDSSProcessvoltooien de levenscyclus, gespiegeld aan het bestaandeSignProcess-API-oppervlak.
v3.56.8 2026-05-23
- PAdES baseline-conformiteit: wanneer een signature wordt aangemaakt met een PAdES SubFilter (
ETSI.CAdES.detachedofETSI.RFC3161), krijgt de documentcatalogus nu automatisch de/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>-entry die vereist is door ETSI EN 319 142-1 v1.2.1 §5.6. De entry wordt toegevoegd via dezelfde incremental update die de signature bevat, verlaagt nooit een bestaande hogere/ExtensionLevel, en volgt indirecte/Extensions- of/ESIC-verwijzingen wanneer de bron-PDF die al als afzonderlijke objecten opslaat. - De Adobe-equivalente extension marker die door SetSignProcessCustomSubFilter wordt geschreven voor PDF's die via
TPDFlibzijn gemaakt, is nu/ADBE /BaseVersion /1.7 /ExtensionLevel 8(wasExtensionLevel 5), overeenkomstig de alternatieve declaratie die PAdES baseline signatures mogen gebruiken; level 5 dekte alleen ISO 32000-2 forms / 3D / RichMedia features en identificeerde de PAdES extensions niet daadwerkelijk.
v3.56.13 2026-05-23
- Wanneer SetPDFUAMode actief is en het document wordt opgeslagen, krijgt elk L (list)-structuurelement zonder expliciet
ListNumbering-attribuut nu automatisch/O = List /ListNumbering = None. ISO 14289-1 §7.6 vereist dat elke L-tag zijn nummeringsstijl declareert; de nieuweApplyPDFUAListNumberingsave-time fix-up sluit aan bij de bestaandeApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet-familie. - Auteurs die een specifieke lijststijl willen, moeten nog steeds SetStructElemListNumbering aanroepen vóór EndTag; de auto-fixup treedt alleen in werking wanneer er op opslagtijd geen ListNumbering-attribuut aanwezig is, zodat expliciete waarden behouden blijven.
- Het writer-side
LIST-NO-NUMBERING:N-diagnosebericht vermeldt nu dat de auto-fixup het probleem op opslagtijd zal maskeren, zodat gebruikers zowel het ontbrekende attribuut als het automatische reparatiegedrag begrijpen.
v3.56.12 2026-05-23
- De PDF/UA-1-audit krijgt drie nieuwe ISO 14289-1-controles.
10031rapporteert Link-annotaties waarvan de URI action dictionary/IsMap = truebevat (verboden door §7.18.5 tenzij equivalente functionaliteit elders in de inhoud wordt geboden; auteurs met een legitieme IsMap-usecase kunnen de diagnose zelf onderdrukken).10032rapporteertNote-structuurelementen zonder de/ID-entry — §7.9 vereist dat elke Note-tag een unieke ID declareert.10033rapporteert duplicate-pair counts wanneer twee of meer Note-tags dezelfde/ID-waarde delen. - Detectie van Note ID-botsingen gebeurt door de ID's te verzamelen in een gesorteerde TStringList en aangrenzende paren te doorlopen, zodat een groep van drie Notes met één gedeelde ID telt als twee dubbele paren.
- URI action checking doorloopt de
/Annots-array van elke page', filtert op/Subtype /Link, en inspecteert vervolgens/A /S /URIen de/IsMapboolean. Indirecte verwijzingen worden bij elke stap gederefereerd zodat afgesplitste action dicts zich hetzelfde gedragen als inline-exemplaren.
v3.56.11 2026-05-23
- ISO 14289-1 §7.6 vereist dat elk L (list)-structuurelement een expliciet
ListNumbering-attribuut draagt.10030(reader-side) enLIST-NO-NUMBERING:N(writer-side) rapporteren L-tags die dit weglaten. De reader-side walker decodeert beide/A-vormen (één attribute dictionary, of een array van dictionaries gemengd met revision integers) en zoekt naar de/ListNumbering-sleutel ongeacht de owner. De writer-side controle inspecteertTPDFStructElem.Attributesop dezelfde naam in zowel de gefinaliseerde structuurlijst als de nog open tag stack. - Geldige
ListNumbering-waarden volgens ISO 32000-1 Table 347 zijnNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. De audit controleert alleen de aanwezigheid van de sleutel, niet welke waarde is gekozen — elke L-tag heeft er een van deze nodig.
v3.56.10 2026-05-23
- De PDF/UA-1-audit krijgt de ISO 14289-1 §7.21.6 TrueType encoding rules.
10028rapporteert niet-symbolische TrueType-fonts waarvan/Encoding(of de/BaseEncodingbinnen een Encoding dictionary) nochMacRomanEncodingnochWinAnsiEncodingis.10029rapporteert symbolic TrueType-fonts die überhaupt een/Encoding-entry dragen (verboden door §7.21.6 vierde alinea). - Symbolic vs. non-symbolic wordt bepaald uit FontDescriptor
/Flagsbit 3 (mask4), met hergebruik van de bestaandeUAFontDescriptorSymbolic-helper uit subklasse 4. De volledige eerste alinea van §7.21.6 (het ingebedde TrueType-programma moet passende cmap-entries bevatten) vereist het parsen van het TrueType-fontprogramma en staat nog open; de dictionary-level regels hierboven zijn de praktische laag die deze audit zonder TrueType-parser kan verifiëren. - Differences-arrayregels in §7.21.6 (alleen AGL-glyphnamen, aanwezigheid van Microsoft Unicode cmap) blijven om dezelfde reden buiten scope — ze vereisen inspectie van het fontprogramma.
v3.56.9 2026-05-23
- De PDF/UA-1-audit krijgt een volledige ISO 14289-1 §7.18.4-controle.
10027rapporteert Widget-annotaties waarvan/StructParentvia de/ParentTreevan de structure tree' wordt opgelost maar niet uitkomt op een structuurelement met/S = Form. De eerdere gedeeltelijke controle uit v3.56.7 (10026) ving alleen Widgets zonder/StructParenthelemaal; de nieuwe controle voltooit de regel door de number-tree pointer te volgen en de bestemmingstag te verifiëren. - Een nieuwe
NumberTreeLookup-helper implementeert de ISO 32000-1 §7.9.7 number-tree-vorm (platte/Numsroot, tussenliggende/Kidsbegrensd door/Limits). Toekomstige audits die/StructParentspage entries of/PageLabelslabels moeten oplossen, kunnen deze hergebruiken. - De Form-tagverificatie van Widget-annotaties gebruikt een tweelaags model: een Widget zonder
/StructParentwordt gerapporteerd als10026; een Widget waarvan/StructParentbestaat maar niet naar/S = Formoplost, wordt gerapporteerd als de specifiekere10027. Dit voorkomt dubbel tellen van dezelfde overtreding onder beide codes.
v3.56.7 2026-05-23
- Wanneer SetPDFUAMode actief is en het document wordt opgeslagen, worden alle
TrapNet-annotatie-entries nu automatisch verwijderd uit de/Annots-array van elke page'. ISO 14289-1 §7.18.2 verbiedtTrapNet-annotaties; de nieuweApplyPDFUAStripTrapNetsave-time fix-up sluit aan bij de bestaandeApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship-familie zodat PDF/UA-mode documenten niet langer stilzwijgendTrapNet-restanten emitten. - De PDF/UA-1-audit krijgt een gedeeltelijke §7.18.4-controle.
10026rapporteert Widget-annotaties zonder/StructParent— een Widget zonder/StructParentkan niet vanuit de structure tree worden bereikt en kan daarom niet genest zijn in eenForm-structuurtag. Volledige structurele verificatie (/StructParentoplossen via deParentTreeen bevestigen dat de parent/SFormis) blijft staan voor een vervolgrelease. - Writer-side GetPDFUADiagnostics krijgt het bijbehorende
WIDGET-NO-STRUCTPARENT:N-probleem. Het bestaande TRAPNET-ANNOT-bericht vermeldt nu ook dat SetPDFUAMode deze bij het opslaan automatisch verwijdert.
v3.56.6 2026-05-23
- De PDF/UA-1-audit krijgt twee ISO 14289-1 §7.4.2-controles voor heading hierarchy.
10024rapporteert wanneer het eerste heading-element in documentvolgorde niet H1 (of H) is.10025rapporteert het aantal heading-level skips in een dalende reeks (bijv. H1 gevolgd door H3 zonder H2). Beide controles delen één structure-tree pre-order walk die de geneste/K-vormen decodeert (één StructElem, array van StructElems / IndRefs / MCRs). - Writer-side GetPDFUADiagnostics krijgt het bijbehorende
FIRST-HEADING-NOT-H1-probleem, pariteit met reader10024. De eerder bestaande HEADING-LEVEL-SKIP writer-controle heeft nu een companion die ook problemen zoals "first heading was H2" opvangt.
v3.56.5 2026-05-23
- Wanneer SetPDFUAMode actief is en het document later wordt versleuteld, krijgt de encryptietoestemmingssleutel (
/Pin de encrypt dictionary) nu automatisch bit 10 (mask$200, "Extract text and graphics in support of accessibility") gezet, zelfs wanneer de callerppCanCopyAccessniet opnam in deTPDFExtraPermissionsdie aan Encrypt werd doorgegeven. ISO 14289-1 §7.16 vereist dat elk versleuteld conforming file accessibility extraction toestaat, en deze bit is anders gemakkelijk te missen. De bit kan altijd veilig worden gezet — hij geeft alleen extra toegang aan ondersteunende technologie, niet aan andere extractiepaden. - Writer-side GetPDFUADiagnostics krijgt een nieuw
ENCRYPT-NO-ACCESS-probleem dat afgaat wanneer PDFUAMode aan staat en bit 10 van de/Pvan de encrypt dictionary' is gewist. Dit vangt het call-order randgeval waarin de gebruiker eerstEncrypt()aanriep en pas daarna SetPDFUAMode — de diagnose vertelt de gebruikerEncrypt()opnieuw aan te roepen zodat de encrypt dict opnieuw wordt geëmitteerd met de gecorrigeerde/P.
v3.56.4 2026-05-23
- Writer-side GetPDFUADiagnostics krijgt vijf nieuwe ISO 14289-1-controles zodat de in-memory documentaudit dezelfde overtredingen vangt als de reader-side CheckFileCompliance ComplianceTest=2-audit.
SUSPECTS-TRUEmarkeert MarkInfo/Suspects=true (§7.1: PDF/UA-conforming files vereisen Suspects=false).ROLEMAP-STANDARD-REMAP:Nmarkeert AddRoleMap-aanroepen die een standard structure tag zouden remappen — §7.1 verbiedt het remappen van standard tags.DC-TITLE-MISSINGmarkeert een lege XMP dc:title (los van DOCINFO-TITLE-MISSING, dat /Info /Title controleert).TRAPNET-ANNOT:Nmarkeert TrapNet-annotaties (§7.18.2 verbiedt ze).ANNOT-PAGE-NO-TABS-S:Nmarkeert pagina's met annotaties waarvan de page dictionary /Tabs niet /S is (§7.18.3 vereist tabvolgorde via de structure tree op die pagina's). - Writer-side en reader-side PDF/UA-1-audits zijn nu grofweg in pariteit: elk probleem dat de reader-side audit op een opgeslagen bestand meldt, is ook bereikbaar vanuit de in-memory diagnose, afgezien van de formaatconventies van elke functie (newline-separated text versus NNNNN-code string list).
v3.56.3 2026-05-23
- De PDF/UA-1-audit krijgt zijn §7.21-fontcontroles.
10020rapporteert elk niet-Standard-14-font waarvan FontDescriptorFontFile/FontFile2/FontFile3mist (§7.21.4.1: elk gerenderd font moet zijn programma embedden).10021rapporteert CIDFontType2 descendants zonder een/CIDToGIDMap-entry (§7.21.3.2).10022wijst op Standard 14-fonts (Helvetica, Times, Courier, Symbol, ZapfDingbats en bold / oblique varianten) die worden gerefereerd zonder ingebed programma — §7.21.4 NOTE 5 maakt duidelijk dat er geen vrijstelling van embedding voor deze fonts is.10023rapporteert fonts die geen/ToUnicodeCMap hebben en niet overeenkomen met de §7.21.7-vrijstellingslijst (predefined MacRoman / MacExpert / WinAnsi encodings, Type 0 met Adobe-GB1 / CNS1 / Japan1 / Korea1 character collections, niet-symbolische TrueType). - Composite Type 0-fonts worden op beide lagen geïnspecteerd:
/ToUnicodeop de Type 0 parent dictionary zelf, en embedding //CIDToGIDMapop de eerste descendant CIDFont. Type 3-fonts slaan de embeddingcontrole over (hun glyphs zijn inline CharProcs) maar nemen nog steeds deel aan de/ToUnicode-controle. - De PDFlibPDFA-helpers voor vergelijkbaar fontwerk zijn bewust niet gedeeld — een half dozijn korte routines (subset-prefix stripping, Standard-14 name table, FontFile presence, Symbolic flag) zijn lokaal gedupliceerd als
UA*-helpers zodat de PDF/A-audit kan blijven evolueren zonder PDF/UA te breken, en omgekeerd.
v3.56.2 2026-05-23
- De PDF/UA-1-audit krijgt nog vijf ISO 14289-1-controles voor annotaties, embedded files en optional content.
10015rapporteert Link-annotaties zonder niet-lege/Contentsalternate description (§7.18.5), zodat screenreaders linkdoelen kunnen aankondigen.10016en10017markeren embedded-file FileSpec dictionaries waarin de vereiste/F- of/UF-bestandsnaamsleutels ontbreken (§7.11).10018markeert optional-content configuration dictionaries die een niet-lege/Nametext string weglaten (§7.10).10019markeert optional-content configuration dictionaries die de verboden/AS-sleutel bevatten (§7.10). - De per-page annotation walk die al de TrapNet- en
/Tabs /S-controles aandreef, verzamelt nu ook Link //Contents-gegevens in dezelfde pass, zodat de audit O(N) op objectaantal blijft.
v3.56.1 2026-05-23
- De PDF/UA-1-audit krijgt vijf nieuwe ISO 14289-1-controles.
10010verifieert de accessibility extract permission (bit 10 van de encryption/P-sleutel) op versleutelde bestanden (§7.16).10011detecteert dynamic XFA forms via het<dynamicRender>required</dynamicRender>-element binnen het XFA XDP packet (§7.15).10012markeert Form XObjects die een/Ref-entry dragen — reference XObjects zijn verboden (§7.20).10013markeertTrapNet-annotaties (§7.18.2).10014doorloopt elke pagina en rapporteert elke pagina met annotaties waarvan de page dictionary/Tabs /Sniet zet (§7.18.3), zodat tabvolgorde de structure tree volgt. - Alle vijf nieuwe codes lopen via hetzelfde CheckFileCompliance + GetStringListItem handle-paar dat in de vorige release is toegevoegd — er is geen nieuw public API surface.
v3.56.0 2026-05-23
- Nieuwe reader-side audit
CheckCompliancePDFUAvalideert een externe PDF tegen ISO 14289-1 (PDF/UA-1). Deze vult de bestaande GetPDFUADiagnostics writer-side controle aan door elke input-PDF te accepteren (eigen uitvoer, scanneruitvoer, content van derden) en PDF/UA-1-overtredingen op dezelfde manier te lijsten als CheckFileCompliance al PDF/A-problemen rapporteert. - CheckFileCompliance accepteert nu
ComplianceTest = 2om de nieuwe PDF/UA-1-audit uit te voeren. De PDF/A-test onderComplianceTest = 1is ongewijzigd, en de probleemlijst stroomt nog steeds terug via het bestaande GetStringListCount / GetStringListItem handle-paar. - De eerste versie dekt de fundamentele PDF/UA-1-conformiteitsgates uit §5 (XMP
pdfuaid:partidentification) en §7.1 (Catalog/Metadatastream, tagged-PDF marker, structure tree, viewer title preference, document language, XMPdc:title,/Suspectsvalue, en het verbod op het remappen van standard structure tags). Acht diagnostische codes worden uitgegeven —10001tot en met10009— zodat het numerieke bereik visueel gescheiden blijft van de PDF/A00xxx-codes. - Diepere PDF/UA-1-clausules (security, annotations, XObjects, font subsetting) worden bijgehouden voor vervolgpatchreleases bovenop hetzelfde auditframework.
v3.55.6 2026-05-22
- Elk vers gegenereerd XMP packet bevat nu een xmpMM:InstanceID-property in het formaat uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. De identifier wordt gegenereerd via Win32 CoCreateGuid en geeft elk geproduceerd document een unieke, versie-onafhankelijke fingerprint zoals aanbevolen door ISO 19005-1 §6.7.2 (Cor2) en PDF/A best-practice guides. De non-Windows builds (waar het XMP packet leeg blijft) worden niet beïnvloed.
- De xmpMM-namespace (http://ns.adobe.com/xap/1.0/mm/) maakt nu deel uit van de SelectionNamespaces van het XMP packet; nieuwe SetXMPMM- en GenerateInstanceID-helpers ondersteunen de InstanceID-emissie en leggen de basis voor toekomstige ondersteuning van xmpMM:History / xmpMM:DerivedFrom.
- PDF/A Extension Schema description schema (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) wordt in deze release niet toegevoegd. Het authoren van een custom extension schema vereist meerstaps bag / seq / structured-property constructie buiten de huidige SetDublinCore / SetXMPBasic-vorm; het werk wordt bijgehouden voor een toekomstige release. Documenten die custom XMP properties moeten declareren, blijven terugvallen op het LoadFromString-pad.
v3.55.5 2026-05-22
- PDF/A-documenten hebben nu hun annotation /F-flags genormaliseerd op opslagtijd. ISO 19005-1 §6.5.3 vereist dat de Print-bit 1 is en de Hidden / Invisible / NoView-bits 0 zijn op elke annotatie; de writer past dat mask nu op opslagtijd toe zodat callers de bitindeling niet hoeven te onthouden. Het /Subtype /Popup-geval is uitgezonderd — popups zijn kinderen van andere annotaties en worden traditioneel niet afgedrukt.
- De AcroForm-vlag /NeedAppearances wordt nu bij het opslaan geforceerd op false gezet wanneer het document zich in een PDF/A-modus bevindt. ISO 19005-1 §6.9 vereist dat de vlag afwezig of false is; eerder liet de writer elke waarde staan die de aanroeper had ingesteld, waardoor documenten ontstonden die de viewer vroegen appearances bij het openen opnieuw te genereren en stilzwijgend de specificatie schonden wanneer de aanroeper deze op true had gezet. De fix wordt ook uitgevoerd voor documenten waarin de vlag eerder afwezig was — de writer schrijft expliciet /NeedAppearances false om geen ambiguïteit voor de validator te laten.
v3.55.4 2026-05-22
- AddStandardFont wijst nu aanroepen in PDF/A-modus af. ISO 19005-1 §6.3.4 trekt de uitzondering uit de PDF reference in dat "Standard 14 may be unembedded": elk fontprogramma in een conform bestand moet embedded zijn, en de library bundelt de Standard 14-contouren niet. De facade retourneert stilzwijgend 0; aanroepers moeten overschakelen naar AddTrueTypeFont of AddType1Font met een echt fontbestand.
- AddTrueTypeFont promoot nu stilzwijgend Embed=0 (niet embedden) naar Embed=1 (volledig font embedden) wanneer PDF/A-modus actief is. Het niet-embedded referentiepad produceerde PDF die afhankelijk was van font-fallback van de viewer naar een systeeminstallatie van Arial / Times / Courier, wat ISO 19005-1 §6.3.4 schendt. Bestaande aanroepers die om embedding vroegen (Embed=1 of 2) blijven onaangetast.
- De compliancecontrole voor niet-symbolische TrueType /Encoding (ISO 19005-1 §6.3.7 Cor2 vereist WinAnsi of MacRoman als encodingnaam of BaseEncoding, zonder /Differences) is niet in deze release toegevoegd omdat de library al /WinAnsiEncoding voor niet-symbolische TrueType-subsets schrijft, en diepere handhaving zou vereisen dat symbolic-vs-non-symbolic dispatch door het subsetpad wordt gevolgd. CheckCompliancePDFA 00034 / 00035 (toegevoegd in v3.51.0) markeert niet-conforme uitvoer tijdens validatie.
v3.55.3 2026-05-22
- Door TrueType ondersteunde CIDFontType2-fontwoordenboeken bevatten nu expliciet /CIDToGIDMap /Identity. ISO 19005-1 §6.3.3.2 (Cor2) vereist dat de vermelding aanwezig is voor elk embedded Type 2 CIDFont; de PDF reference staat de impliciete Identity-standaard toe, maar PDF/A vereist een expliciete waarde. De writer liet de sleutel eerder volledig weg, waardoor veraPDF (en CheckCompliancePDFA 00033 toegevoegd in v3.51.0) het bestand markeerde. De naam /Identity komt overeen met de GID-as-CID-indeling die de writer al impliciet produceerde, zodat bestaande documenten identiek renderen.
- FontDescriptor /CharSet (voor Type 1-subsets) en /CIDSet (voor CIDFont-subsets) blijven TODO; de writer zou moeten bijhouden welke glyphnamen / CIDs in de subset terechtkwamen om ze nauwkeurig te vullen. CheckCompliancePDFA 00031 en 00032 (ook toegevoegd in v3.51.0) markeren de afwezigheid zodat gebruikers het probleem tijdens validatie zien.
v3.55.2 2026-05-22
- AddImageDirectFromString wijst nu PDF/A-incompatibele filters af bij het toegangspunt. Het doorgeven van Filter = 'LZWDecode' wordt afgewezen voor elk PDF/A-deel (ISO 19005-1 §6.1.10 plus de equivalente ISO 19005-2 / -3-regels). Het doorgeven van Filter = 'JBIG2Decode' of 'JPXDecode' wordt afgewezen voor PDF/A-1 (modi 1 en 2). PDF/A-2 en PDF/A-3 staan JPXDecode toe onder ISO 19005-2 §6.2.8.3 met subspecificatiebeperkingen (aantal kleurkanalen, uniformiteit van bitdiepte, METH/APPROX-vereisten) die de writer-side gate niet afdwingt — aanroepers in die modi moeten nog steeds zorgen dat de JPEG 2000-stream conform is. De facade retourneert stilzwijgend 0 wanneer een verboden filter wordt gevraagd.
- TIFF-, PNG-, JPEG- en JPEG 2000-invoer die via AddImageFromFile / AddImageFromStream wordt geladen, blijft onaangetast: de importer decomprimeert de bronbytes en codeert opnieuw met FlateDecode (of DCTDecode voor JPEG-payloads), zodat LZW-invoer nooit wordt doorgegeven aan de output Filter-keten. De CheckCompliancePDFA-validator toegevoegd in v3.50.0 (00004) en v3.52.0 (00022, 00023) biedt een tweede verdedigingslinie tijdens validatie voor elk indirect pad dat toch een verboden filter in de uitvoer laat glippen.
v3.55.1 2026-05-22
- AddLinkToHideField wijst nu aanroepen in PDF/A-modus af. De vorige release liet een commentaar staan dat beweerde dat de actie PDF/A-compatibel was, maar ISO 19005-1 Cor2 voegde /Hide toe aan de lijst met verboden acties (§6.6.1), en ISO 19005-2 / -3 erven de beperking. De facade retourneert stilzwijgend 0 wanneer deze in PDF/A-modus wordt aangeroepen, overeenkomstig AddLinkToJavaScript en AddLinkToImportData.
- AddSWFAnnotationFromFile wijst nu aanroepen in PDF/A-modus af. SWF- / RichMedia-annotaties verpakken Flash-media, wat verboden is door ISO 19005-1 §6.5.2 (geen Movie- / Sound-subtypes) en versterkt door ISO 19005-2 §6.3.1 (geen 3D / Sound / Screen / Movie). De facade retourneert stilzwijgend 0.
- AddEmbeddedFile en AddLinkToEmbeddedFile wijzen nu aanroepen in PDF/A-1- en PDF/A-2-modi af. ISO 19005-1 §6.1.11 verbiedt /EF, en ISO 19005-2 §6.8 staat alleen embedded PDF/A-bestanden toe; in plaats van de recursieve PDF/A-conformiteit van de bijgevoegde payload te verifiëren, weigert de writer de aanroep in deze modi eenvoudigweg. PDF/A-3 (SetPDFAMode 5 of 6) blijft toegestaan — zie v3.55.0 voor de automatische injectie van /AFRelationship.
- SetOpenActionMenu wijst nu MenuItem-waarden buiten de whitelist {NextPage, PrevPage, FirstPage, LastPage} af wanneer het document zich in PDF/A-modus bevindt. ISO 19005-1 §6.6.1 beperkt named actions tot die set, zodat de API eerder stilzwijgend niet-conforme Find / Print / FullScreen Open-Action-woordenboeken produceerde die veraPDF zou afwijzen.
- NewOptionalContentGroup wijst nu aanroepen in PDF/A-1-modi af (SetPDFAMode 1 of 2). ISO 19005-1 §6.1.13 verbiedt de Catalog-sleutel /OCProperties. PDF/A-2 (modi 3/4) en PDF/A-3 (modi 5/6) staan optional content toe met de beperkingen in hun respectieve §6.9, dus de gate treedt alleen in werking voor PDF/A-1.
v3.55.0 2026-05-22
- PDF/A-3-documenten krijgen nu automatisch een /AFRelationship-vermelding op elk embedded file. Eerder kon een PDF/A-3-bestand dat met de library was gemaakt niet door validatie komen omdat ISO 19005-3 Annex E, Table E.1 AFRelationship vereist op elke embedded file specification. De writer injecteert nu de geconfigureerde standaardwaarde ('Unspecified' standaard) in elk FileSpec-woordenboek dat de vermelding bij het opslaan mist, naar analogie van de eerder geïntroduceerde automatische PDF/UA AFRelationship-injectie. Alleen PDF/A-3-modi (SetPDFAMode 5 = PDF/A-3b of 6 = PDF/A-3a) activeren de automatische injectie; PDF/A-1 en PDF/A-2 wijzen embedded files nog steeds volledig af volgens ISO 19005-1 §6.1.11 en ISO 19005-2 §6.8.
- SetPDFA3DefaultAFRelationship is een nieuwe API die de standaardwaarde overschrijft die de writer schrijft wanneer een embedded file geen /AFRelationship-vermelding heeft. Accepteert de ISO 19005-3 Table E.1-waarden 'Source' (het embedded file is het bronmateriaal dat de PDF-inhoud produceerde), 'Data' (het bestand is de gestructureerde data achter een visuele tabel of grafiek), 'Alternative' (een alternatieve weergave zoals een audioversie), 'Supplement' (een aanvullende representatie zoals een MathML-vorm van een vergelijking), 'Unspecified' (relatie kan niet door het bovenstaande worden gekarakteriseerd), of elke geregistreerde second-class name. Een lege string reset naar 'Unspecified'. Per-file overrides blijven beschikbaar via SetEmbeddedFileAFRelationship.
- De nieuwe API's worden beschikbaar gesteld op de Delphi facade als TPDFlib.SetPDFA3DefaultAFRelationship en via de DLL als DLSetPDFA3DefaultAFRelationship (PWideChar) en DLSetPDFA3DefaultAFRelationshipA (PAnsiChar).
v3.54.0 2026-05-22
- LoadOutputIntentProfile is een nieuwe API die het gebundelde sRGB OutputIntent-profiel vervangt door een extern ICC-profiel dat van schijf wordt geladen. Vereist bij het produceren van PDF/A-documenten in DeviceCMYK- of DeviceGray-kleurruimten, omdat de library alleen een sRGB-profiel levert. Typisch gebruik is eerst SetPDFAMode aanroepen (wat het OutputIntent-skelet initialiseert), daarna LoadOutputIntentProfile('C:\\path\\to\\FOGRA39.icc', 'DeviceCMYK') om de profielbytes te vervangen en het document met de nieuwe kleurruimte te labelen. Retourneert 1 bij succes, 0 bij bestand-niet-gevonden of onbekende kleurruimte. Beschikbaar op de Delphi facade als TPDFlib.LoadOutputIntentProfile en via de DLL als DLLoadOutputIntentProfile (PWideChar-vorm) en DLLoadOutputIntentProfileA (PAnsiChar-vorm). ISO 19005-1 §6.2.2 staat elk geregistreerd ICC-profiel in de DestOutputProfile-stream toe.
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep en SetTextColorSep slagen nu in PDF/A-modus wanneer het OutputIntent-profiel van het document DeviceCMYK is. Eerder wezen deze API's elke aanroep in PDF/A-modus af ongeacht de OutputIntent, waardoor conforme CMYK-documenten niet konden worden geproduceerd. De gate is nu PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK', overeenkomstig de ISO 19005-1 §6.2.3.3-regel dat DeviceCMYK is toegestaan wanneer de OutputIntent een CMYK-profiel gebruikt, en ISO 19005-1 §6.2.3.4 die Separation alternates toestaat waarvan de basiskleurruimte ook conform is.
- SetTextShader slaagt nu in PDF/A-modus wanneer het OutputIntent-profiel DeviceRGB of DeviceCMYK is. Shaders zelf zijn niet verboden door PDF/A; de validator (read side) verifieert dat de interne kleurruimte van de shader overeenkomt met de OutputIntent. Het eerdere strikte afwijs gedrag weigerde conform shadergebruik.
- De deblokkering van CMYK / Separation / Shader hangt af van de OutputIntentColorSpace-tag die wordt ingesteld door AddOutputIntent en LoadOutputIntentProfile (geïntroduceerd in v3.53.0). SetPDFAMode aanroepen zonder LoadOutputIntentProfile houdt de kleurruimte op DeviceRGB (het gebundelde sRGB-profiel), zodat CMYK-aanroepen standaard nog steeds worden afgewezen — het nieuwe gedrag is opt-in via LoadOutputIntentProfile.
v3.53.0 2026-05-22
- Het OutputIntent-woordenboek bevat nu de volledige PDF/A-skeletvelden die worden aanbevolen door ISO 19005-1 §6.2.2 en Adobe Acrobat preflight: /OutputCondition (menselijk leesbare beschrijving van de kleurconditie), /Info (lange identificatietekst), en /RegistryName (registry-URL, standaard http://www.color.org). De waarden zijn standaard "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" voor de legacy aanroeplocaties met één argument; de nieuwe AddOutputIntent-overload neemt de vier aangepaste velden direct aan zodat aanroepers ze voor hun eigen kleurcondities kunnen invullen.
- AddOutputIntent krijgt een nieuwe overload met vijf argumenten: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). De legacy vorm met één argument blijft ongewijzigd werken; deze delegeert nu naar de nieuwe overload met de sRGB-standaardwaarden. Het ColorSpace-argument selecteert ook het aantal /N-componenten dat in het embedded ICC-profielwoordenboek wordt geschreven (3 voor DeviceRGB, 4 voor DeviceCMYK, 1 voor DeviceGray); het embedded profiel zelf blijft de gebundelde sRGB-stream totdat de aankomende LoadOutputIntentProfile API in v3.54.0 wordt geleverd.
- TPDFDocument stelt OutputIntentColorSpace beschikbaar als een lees/schrijf-property die de kleurruimte van de laatste AddOutputIntent-aanroep bijhoudt. Dit wordt de gatevoorwaarde voor de writer-side beperkingen voor CMYK / Separation / Shader in v3.54.0, waar kleur-API's die vandaag elke aanroep in PDF/A-modus afwijzen alleen zullen afwijzen wanneer de kleurruimte niet overeenkomt met de OutputIntent.
v3.52.0 2026-05-22
- CheckCompliancePDFA audit nu annotaties, graphics-state, acties en form XObjects, waarmee de dekking van de PDF/A read-side validator voor ISO 19005-1 hoofdstukken 6.2-6.6 en de equivalente differentiële regels voor PDF/A-2/-3 wordt voltooid. De validator rapporteert 14 nieuwe issueklassen (00050-00067): verboden annotatiesubtypes (00050; ISO 19005-1 §6.5.2 verbiedt FileAttachment / Sound / Movie voor PDF/A-1, en ISO 19005-2 §6.3.1 verbiedt 3D / Sound / Screen / Movie voor PDF/A-2 en PDF/A-3), annotatie /CA anders dan 1.0 (00051; §6.5.3), annotatie /F ontbreekt of met Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052; §6.5.3, met /Subtype /Popup uitgezonderd), annotatie /AA (00054; §6.6.2), annotatie-appearance dict met andere sleutels dan /N of niet-conforme /N-waarde (00055; §6.5.3 Cor2), Widget-annotatie met /A (00056; §6.9), ExtGState /TR (00058; §6.2.8), ExtGState /TR2 anders dan /Default (00059; §6.2.8), en alleen in PDF/A-1: ExtGState /SMask anders dan /None (00061; §6.4), /BM anders dan Normal of Compatible (00062; §6.4), /CA of /ca anders dan 1.0 (00063; §6.4).
- De action-anywhere audit (00064, 00065) vervangt de OpenAction-only controle uit v3.50.0 door een volledige sweep die verboden /S-actiewaarden markeert (Launch, Sound, Movie, ResetForm, ImportData, JavaScript, Hide, SetState, NOP, Trans, GoTo3DView, Rendition, SetOCGState) en named actions waarvan /N buiten {NextPage, PrevPage, FirstPage, LastPage} ligt, ongeacht waar de actie staat (annotatie /A, widget /A, outline /A, catalog /OpenAction, enz.). ISO 19005-1 §6.6.1.
- XObject-audit (00066, 00067) rapporteert PostScript- en Reference XObjects, plus verboden sleutels op Form XObjects (/OPI, /PS, /Subtype2 = /PS) en Image XObjects (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
v3.51.0 2026-05-22
- CheckCompliancePDFA audit nu font- en kleurruimteconformiteit naast de structurele controles die in v3.50.0 zijn toegevoegd. De validator rapporteert negen nieuwe issueklassen: ten minste één fontprogramma is niet embedded (00030; ISO 19005-1 §6.3.4 vereist dat elk fontprogramma, inclusief de Standard 14-substituties, embedded is), Type 1-subset mist /CharSet in zijn FontDescriptor (00031; §6.3.5), CIDFont-subset mist /CIDSet (00032; §6.3.5), CIDFontType2 mist /CIDToGIDMap (00033; §6.3.3.2 Cor2), niet-symbolische TrueType met een niet-conforme /Encoding (00034; §6.3.7 Cor2 vereist WinAnsi/MacRoman direct of als BaseEncoding, zonder /Differences), symbolische TrueType die nog steeds /Encoding bevat (00035; §6.3.7 Cor2), ten minste één font mist /ToUnicode in PDF/A-Na- of PDF/A-Nu-documenten (00036; §6.3.8 vierklassenuitzondering toegepast), ICCBased-kleurruimte die zijn profielstream niet embedt (00037; §6.2.3.2), en een bestand dat zowel DeviceRGB als DeviceCMYK gebruikt (00038; §6.2.3.3 verbiedt de mix).
- De /ToUnicode-controle (00036) is beperkt tot conformiteitsniveaus A en U omdat alleen die niveaus Unicode-mapping vereisen volgens ISO 19005-1 §6.3.8 en ISO 19005-2 §6.2.11.7. Level B-bestanden (PDF/A-1b, PDF/A-2b, PDF/A-3b) worden niet gemarkeerd. De vierklassenuitzondering herkent vooraf gedefinieerde encodings (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), Standard 14 Type 1 BaseFonts als proxy voor Adobe Standard Latin / Symbol glyph-name fonts, en Type 0-fonts waarvan de descendant CIDFont Adobe-GB1-, Adobe-CNS1-, Adobe-Japan1- of Adobe-Korea1-registries gebruikt.
- De fontaudit doorloopt elk Font-woordenboek, classificeert het op Subtype (Type1, MMType1, TrueType, Type3, Type0 met zijn descendant CIDFontType0 of CIDFontType2), en voert vervolgens de relevante controles uit. Type 0 composite fonts delegeren embedding- en subsetcontroles aan hun descendant CIDFont terwijl /ToUnicode op de Type 0-wrapper blijft. Subsetdetectie gebruikt de standaardconventie met een prefix van zes hoofdletters.
v3.50.0 2026-05-22
- CheckCompliancePDFA rapporteert nu 15 extra PDF/A-non-conformiteitsproblemen die de validator eerder miste: ontbrekende trailer /ID-array (00013), ontbrekende Document Catalog /Metadata-stream (00014), /Filter toegepast op de /Metadata-stream (00015), streamwoordenboeken die externe bestanden refereren via /F, /FFilter of /FDecodeParms (00016), embedded files gedeclareerd via /EF in elk file-specification-woordenboek of via de Name tree /EmbeddedFiles-vermelding in PDF/A-1-documenten (00017, 00018), /OpenAction die naar een verboden actietype wijst (00019), /AA additional-action-woordenboeken in de Document Catalog of op een Page (00020, 00021), JBIG2Decode- of JPXDecode-filters in PDF/A-1-documenten (00022, 00023), Crypt-filters waarvan /Name niet /Identity is (00024), /Requirements in de Document Catalog (00025), /Perms met andere sleutels dan /UR3 en /DocMDP (00026), en /AcroForm /NeedAppearances ingesteld op true (00027). De validator markeert nu verboden Catalog /OpenAction-actietypen (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) en named-action /N-waarden buiten de allowlist {NextPage, PrevPage, FirstPage, LastPage} volgens ISO 19005-1 §6.6.1.
- De PDFAID-parser accepteert het U-conformiteitssuffix (PDF/A-2U, PDF/A-3U) naast de bestaande A- en B-varianten, zodat CheckCompliancePDFA niet langer een onterechte waarschuwing "00005 PDFA Mark NOT Found or invalid" geeft bij het scannen van een PDF/A-2U- of PDF/A-3U-bestand dat door een ander hulpmiddel is geproduceerd. De Unicode-mapping-conformiteitsniveaus die in ISO 19005-2:2011 zijn toegevoegd, worden nu door de validator herkend.
- Filter-specifieke controles (JBIG2Decode, JPXDecode) en embedded-file-controles (/EF, /EmbeddedFiles) blijven beperkt tot PDF/A-1 omdat ISO 19005-2 §6.2.8.3 en §6.8 die beperkingen expliciet versoepelen voor PDF/A-2 en PDF/A-3. Documentstructuurcontroles (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) gelden voor elk PDF/A-deel.
v3.49.0 2026-05-21
- AddLinkToImportData maakt een Link-annotatie waarvan de actie een PDF import-data action (/S /ImportData) is die de AcroForm-velden van het document vult vanuit een extern FDF-bestand wanneer de gebruiker op de link klikt (ISO 32000-1 §12.6.4.8, Table 198). De parameter FileName wordt gerefereerd als een filespec-woordenboek, met dezelfde padnormalisatieregels als gebruikt door AddLinkToFile / AddLinkToFileEx (backslashes omgezet naar forward-slashes volgens ISO 32000-1 §7.11.2.1). Options bit 0 schakelt de zichtbare rand om en bits 1–3 selecteren de link highlight mode (Invert, Outline, Push), overeenkomstig de bestaande AddLinkTo*-conventies. PDF 1.4 of later. NIET toegestaan in PDF/A omdat de actie naar een externe resource verwijst; de facade retourneert stilzwijgend 0 wanneer deze in PDF/A-modus wordt aangeroepen. Beschikbaar in de Delphi library en de DLL-interface als DLAddLinkToImportData / DLAddLinkToImportDataA (PWideChar- en PAnsiChar-vorm).
v3.48.0 2026-05-21
- AddLinkToHideField maakt een Link-annotatie waarvan de actie een PDF hide action (/S /Hide) is die de zichtbaarheid van een of meer AcroForm-velden omschakelt wanneer de gebruiker op de link klikt (ISO 32000-1 §12.6.4.10, Table 196). FieldNames accepteert een of meer volledig gekwalificeerde veldnamen gescheiden door komma's, puntkomma's of regeleinden; één naam schrijft /T als een tekststring en twee of meer namen schrijven /T als een array, beide vormen toegestaan door de specificatie. HideFlag selecteert de zichtbaarheidsrichting: een niet-nulwaarde verbergt de vermelde velden (/H true) en nul toont ze (/H false). Options bit 0 schakelt de zichtbare rand om en bits 1–3 selecteren de link highlight mode (Invert, Outline, Push), overeenkomstig AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 of later. PDF/A-compatibel omdat geen externe resource wordt gerefereerd. Beschikbaar in de Delphi library en de DLL-interface als DLAddLinkToHideField / DLAddLinkToHideFieldA (PWideChar- en PAnsiChar-vorm).
v3.47.0 2026-05-21
- AddLinkToNamedAction maakt een Link-annotatie waarvan de actie een PDF named action (/S /Named) is die een van de vier gestandaardiseerde viewer-navigatiecommando's activeert die zijn gedefinieerd in ISO 32000-1 §12.6.4.11, Table 194: NextPage, PrevPage, FirstPage en LastPage. De parameter NamedActionType selecteert het commando (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); waarden buiten dit bereik vallen terug op NextPage zodat de writer altijd een specificatieconforme /N-naam schrijft. Options bit 0 schakelt de zichtbare rand om en bits 1–3 selecteren de link highlight mode (Invert, Outline, Push), overeenkomstig de bestaande AddLinkToWeb / AddLinkToPage-conventies. De annotatie vereist PDF 1.1 of later en is compatibel met PDF/A omdat geen externe resource wordt gerefereerd. Beschikbaar in de Delphi library en DLL-interfaces.
v3.46.1 2026-05-21
- AddCaretAnnotation maakt een caret markup annotation (PDF /Subtype /Caret) op de opgegeven rechthoek, waarmee een positie op de pagina wordt gemarkeerd waar tekst of inhoud is ingevoegd, weggelaten of anderszins aandacht van de reviewer nodig heeft. Ondersteunt twee symbooltypen (None en Paragraph) via SymbolType (0 / 1), configureerbare kleur, opaciteit, titel, inhoud en aanmaak-/wijzigingstijdstempels. Gedefinieerd in ISO 32000-1 §12.5.6.11. PDF 1.5 of later. Beschikbaar in de Delphi library en DLL-interfaces.
- Deze vermelding voltooit de backfill van geometrische annotaties die begon met v3.44.0 Square+Circle. PDFlibPas maakt nu Text-, Stamp-, FreeText-, TextMarkup- (Highlight/Underline/Squiggly/StrikeOut), Square-, Circle-, Line-, Polygon-, PolyLine-, Ink- en Caret-annotaties, naast bestaande ondersteuning voor Link, FileAttachment, SVG, U3D en SWF.
v3.46.0 2026-05-21
- AddInkAnnotation maakt een ink markup annotation (PDF /Subtype /Ink) die handgeschreven streken of vrije markeringen op de pagina vertegenwoordigt. Streken worden aangeleverd als één string waarin meerdere streken worden gescheiden door '|' of newline, en binnen elke streek volgen de coördinatenparen hetzelfde spatie-/komma-/puntkomma-/tabformaat dat door AddPolygonAnnotation wordt gebruikt. Bijvoorbeeld "100 100 110 105 120 110 | 200 200 210 205" beschrijft twee afzonderlijke streken. Ondersteunt configureerbare randbreedte, inktkleur, opaciteit, titel, inhoud en tijdstempels. Gedefinieerd in ISO 32000-1 §12.5.6.13. PDF 1.3 of later. Beschikbaar in de Delphi library en DLL-interfaces.
- Elke streek moet een even aantal waarden bevatten (minstens vier), anders retourneert de aanroep 0 zonder annotatie te schrijven. De /Rect wordt automatisch berekend uit de gecombineerde omvang van alle streken plus een kleine padding zodat de streken binnen de bounding box van de annotatie blijven.
v3.45.0 2026-05-21
- AddPolygonAnnotation maakt een gesloten polygon markup annotation (PDF /Subtype /Polygon) met hoekpunten aangeleverd als een string van door spaties, komma's, puntkomma's of tabs gescheiden coördinatenparen (bijv. "100 100 200 100 200 200 100 200"). Ondersteunt configureerbare randbreedte, randkleur, optionele binnenvulkleur, opaciteit, titel, inhoud en tijdstempels. Gedefinieerd in ISO 32000-1 §12.5.6.9. PDF 1.5 of later. Beschikbaar in de Delphi library en DLL-interfaces.
- AddPolyLineAnnotation maakt een open polyline markup annotation (PDF /Subtype /PolyLine) met hetzelfde vertex-stringformaat en configureerbare eindlijnstijlen aan elk uiteinde (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Gedefinieerd in ISO 32000-1 §12.5.6.9. PDF 1.5 of later. Beschikbaar in de Delphi library en DLL-interfaces.
- Beide annotaties vereisen ten minste twee vertexpunten (vier getallen) en een even totaal aantal getallen; de aanroep retourneert 0 als de vertexstring niet kan worden geparseerd tot een geldige lijst van paren. De /Rect wordt berekend uit de vertexomvang plus padding proportioneel aan de randbreedte zodat einddecoraties zichtbaar blijven.
- Beide annotaties verhogen de documentversie naar PDF 1.5 wanneer ze worden geschreven onder een lagere minimum-version lock.
v3.44.1 2026-05-21
- AddLineAnnotation maakt een line markup annotation (PDF /Subtype /Line) tussen twee eindpunten, met configureerbare randbreedte, lijnkleur, optionele binnenvulkleur, eindlijnstijlen voor beide uiteinden (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), opaciteit, titel, inhoud en aanmaak-/wijzigingstijdstempels. Gedefinieerd in ISO 32000-1 §12.5.6.7. PDF 1.3 of later. Beschikbaar in de Delphi library en DLL-interfaces.
- De annotatie /Rect wordt berekend uit de twee eindpunten plus een padding proportioneel aan de randbreedte zodat einddecoraties binnen de bounding box van de annotatie blijven.
v3.44.0 2026-05-21
- AddSquareAnnotation maakt een rectangle markup annotation (PDF /Subtype /Square) op de opgegeven rechthoek, met een configureerbare randbreedte, randkleur, optionele binnenvulkleur, opaciteit, titel, inhoud en aanmaak-/wijzigingstijdstempels. Gedefinieerd in ISO 32000-1 §12.5.6.8. PDF 1.3 of later. Beschikbaar in de Delphi library en DLL-interfaces.
- AddCircleAnnotation maakt een ellipse markup annotation (PDF /Subtype /Circle) ingeschreven in de opgegeven rechthoek, met dezelfde configureerbare rand, vulling, opaciteit, titel, inhoud en tijdstempels als AddSquareAnnotation. Gedefinieerd in ISO 32000-1 §12.5.6.8. PDF 1.3 of later. Beschikbaar in de Delphi library en DLL-interfaces.
- Beide nieuwe annotaties verhogen automatisch de documentversie naar PDF 1.3 wanneer ze worden geschreven onder een lagere minimum-version lock en schrijven een standaard markup-annotation veldset (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P) zodat bestaande reviewworkflows in Acrobat, Foxit en Edge ze na creatie kunnen bewerken.
v3.43.0 2026-05-20
- SetStructElemSpaceBefore en SetStructElemSpaceAfter stellen de attributen /SpaceBefore en /SpaceAfter (Layout owner) in op het momenteel geopende structuurelement, waarmee afstand voor en na block-level elementen in punten wordt uitgedrukt. Gedefinieerd in ISO 32000-1 §14.8.5.4.2 Table 340. Beschikbaar in de Delphi library, ActiveX (Dispids 73008051/73008052), en DLL-interfaces.
- SetStructElemStartIndent en SetStructElemEndIndent stellen de attributen /StartIndent en /EndIndent (Layout owner) in, waarmee inspringing vanaf de writing-mode-aware begin- en eindranden van de inhoudsrechthoek in punten wordt uitgedrukt. Gedefinieerd in ISO 32000-1 §14.8.5.4.2 Table 340. Beschikbaar in de Delphi library, ActiveX (Dispids 73008053/73008054), en DLL-interfaces.
- SetStructElemColor stelt het attribuut /Color (Layout owner) in als een RGB-triplet (elke component 0.0-1.0), dat de voorgrondkleur van het element beschrijft voor re-flow engines en downstream kleurcontrastcheckers. Gedefinieerd in ISO 32000-1 §14.8.5.4.2 Table 340. Beschikbaar in de Delphi library, ActiveX (Dispid 73008055), en DLL-interfaces.
- Een serialisatiefout in BuildStructElemDictRef is opgelost: single-token numerieke attribuutwaarden (zoals SpaceBefore, SpaceAfter, StartIndent, EndIndent) werden geschreven als PDF-namen in plaats van PDF-getallen. De fix geldt voor zowel single-owner als multi-owner attribuuttakken.
v3.42.0 2026-05-20
- CheckCompliancePDFA valideert nu correct alle zes PDF/A-modi (1a, 1b, 2a, 2b, 3a, 3b). De PDFAID-controle (code 00005) accepteert elk van de zes geldige XMP-markers in plaats van alleen '1B'. De versieplafondcontrole (00002) past 1.4 toe voor PDF/A-1 en 1.7 voor PDF/A-2 en PDF/A-3.
- De OCProperties-controle (code 00003) is nu conditioneel: deze geldt alleen voor PDF/A-1-documenten, waar optional content (lagen) verboden is. PDF/A-2 en PDF/A-3 staan lagen toe en worden niet langer gemarkeerd.
- Drie nieuwe compliancecontroles toegevoegd: code 00006 markeert versleutelde documenten (versleuteling is verboden in alle PDF/A-versies); code 00007 markeert documenten zonder OutputIntents-vermelding in de catalog (vereist door alle PDF/A-versies); codes 00011 en 00012 markeren documenten zonder MarkInfo of StructTreeRoot wanneer het conformiteitsniveau -a is (toegankelijkheid).
v3.41.0 2026-05-20
- PDF/A-modus dwingt nu verboden bewerkingen op API-niveau af. Wanneer een PDF/A-modus actief is (een van modi 1-6), retourneert het aanroepen van SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK of elke andere CMYK/Separation/Shader-API 0 en heeft geen effect, consistent met PDF/A's vereiste voor één sRGB output intent.
- Transparantie is verboden in PDF/A-1 (modi 1 en 2): SetTransparency, SetBlendMode en SetPageTransparencyGroup retourneren 0 en zijn no-ops wanneer de actieve modus 1 of 2 is. PDF/A-2 en PDF/A-3 (modi 3-6) staan beperkte transparantie toe en worden niet beperkt.
- JavaScript-acties zijn verboden in alle PDF/A-modi (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript en AddLinkToJavaScript retourneren allemaal 0 en zijn no-ops wanneer een PDF/A-modus actief is. ISO 19005-1 §6.6.1 verbiedt JavaScript expliciet in PDF/A-documenten.
- File attachment API's (EmbedFile, AddFileAttachment) worden geblokkeerd in PDF/A-1- en PDF/A-2-modi (1-4). Ze blijven functioneel in PDF/A-3 (modi 5 en 6), dat willekeurige embedded files expliciet toestaat.
v3.40.0 2026-05-20
- SetPDFAMode ondersteunt nu PDF/A-2- en PDF/A-3-conformiteitsniveaus. Geef NewMode=3 door voor PDF/A-2b, 4 voor PDF/A-2a, 5 voor PDF/A-3b, of 6 voor PDF/A-3a. PDF/A-2 richt zich op PDF 1.7 en staat lagen, interactieve formulieren, JPEG2000-afbeeldingen en beperkte transparantie toe. PDF/A-3 breidt PDF/A-2 uit door willekeurige embedded files toe te staan (elk MIME-type). Alle -a-varianten schrijven automatisch /MarkInfo en de tagged-PDF-structuurmarkers die door het toegankelijkheidsconformiteitsniveau worden vereist.
- Opgelost: SetPDFAMode(1) (PDF/A-1a) was eerder een no-op door een interne routeringsfout geïntroduceerd in v3.20.0. Het schrijft nu correct /MarkInfo en /OutputIntents en stelt XMP pdfaid:part=1/conformance=A in.
- GetInformation(201) retourneert '1' tot en met '6', overeenkomstig de actieve PDF/A-modus en consistent met de nieuwe modusnummering.
v3.39.0 2026-05-20
- SetStructElemWritingMode stelt het attribuut /WritingMode (Layout owner) in op het momenteel geopende structuurelement. Geldige waarden zijn LrTb (links-naar-rechts, de standaard voor Latijnse scripts), RlTb (rechts-naar-links, voor Arabisch en Hebreeuws), en TbRl (boven-naar-beneden rechts-naar-links, voor traditionele CJK verticale tekst). Gedefinieerd in ISO 32000-1 §14.8.5.4.2 Table 340. Beschikbaar in de Delphi library, ActiveX (Dispid 73008049), en DLL-interfaces.
- SetStructElemListNumbering stelt het attribuut /ListNumbering (List owner) in op het momenteel geopende structuurelement. Ondersteunde waarden zijn onder andere None, Disc, Circle, Square (ongeordende markers) en Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (geordende nummering). Het attribuut wordt ingesteld op het L-element (list) en stelt ondersteunende technologie in staat het lijsttype correct aan te kondigen. Gedefinieerd in ISO 32000-1 §14.8.5.3.2 Table 336. Beschikbaar in de Delphi library, ActiveX (Dispid 73008050), en DLL-interfaces.
v3.38.0 2026-05-20
- SetStructElemColSpan stelt het attribuut /ColSpan (Table owner) in op het momenteel geopende structuurelement, waarmee wordt aangegeven hoeveel kolommen de cel overspant. Gedefinieerd in ISO 32000-1 §14.8.5.7.2 Table 337. Beschikbaar in de Delphi library, ActiveX (Dispid 73008047), en DLL-interfaces.
- SetStructElemRowSpan stelt het attribuut /RowSpan (Table owner) in op het momenteel geopende structuurelement, waarmee wordt aangegeven hoeveel rijen de cel overspant. Gedefinieerd in ISO 32000-1 §14.8.5.7.2 Table 337. Beschikbaar in de Delphi library, ActiveX (Dispid 73008048), en DLL-interfaces.
- Beide functies zijn convenience wrappers die gelijkwaardig zijn aan het aanroepen van AddTagAttribute met Owner='Table' en de respectieve attribuutnaam. Ze vullen SetStructElemScope aan voor volledig beschreven tabelcellen in complexe tabellen of tabellen met spanning headers.
v3.37.2 2026-05-20
- GetPDFUADiagnostics rapporteert nu FORM-NO-TOOLTIP:N wanneer N interactieve formuliervelden (Widget-annotaties) een TU-vermelding (tooltip / toegankelijke naam) missen. ISO 14289-1 §7.18.4 vereist dat alle interactieve formuliervelden een TU-vermelding bevatten zodat ondersteunende technologie het doel van het veld aan de gebruiker kan aankondigen wanneer het veld focus krijgt. /TU is de toegankelijke naam die schermlezers hardop uitspreken; deze verschilt van /T, wat de gedeeltelijke veldnaam is die wordt gebruikt voor programmatische toegang en formulierverzending.
v3.37.1 2026-05-20
- GetPDFUADiagnostics rapporteert nu LIST-STRUCT:N wanneer N LI- of LBody-structuurelementen buiten hun vereiste ouder-element verschijnen. ISO 32000-1 §14.8.4.4 vereist dat LI een direct kind is van L (list) en dat LBody een direct kind is van LI (list item). Misvormde lijstnesting verhindert ondersteunende technologie om lijstinhoud correct te doorlopen en aan te kondigen, en kan structuurvalidatiefouten veroorzaken in PDF/UA-1-validators.
v3.37.0 2026-05-20
- BeginTagEx2 is een nieuwe API die een structuurelement opent en alle hoofdproperties van het element in één aanroep instelt. Naast de parameters TagType, AltText, ActualText en Lang van BeginTagEx accepteert BeginTagEx2 Title (/T, voor het Tags-navigatiepaneel), ElemID (/ID, unieke elementidentifier) en Expansion (/E, volledige tekst van een afkorting of acroniem). Het doorgeven van een lege string voor een van deze drie extra parameters is gelijkwaardig aan het weglaten van de corresponderende setter. BeginTagEx2 vermindert boilerplate voor goed beschreven elementen — in plaats van BeginTagEx aan te roepen gevolgd door SetStructElemTitle, SetStructElemID en SetStructElemExpansion afzonderlijk, kunnen alle zeven properties in één aanroep worden ingesteld. De functie is beschikbaar in de Delphi library, ActiveX (Dispid 73008046), en DLL-interfaces.
v3.36.1 2026-05-20
- GetPDFUADiagnostics rapporteert nu TABLE-TH-NO-SCOPE:N wanneer N TH-structuurelementen (tabelheadercellen) een Scope-attribuut missen. ISO 32000-1 §14.8.4.3.4 Table 337 definieert Scope (Row, Column of Both) als het attribuut dat beschrijft op welke datacellen een headercel van toepassing is. Zonder dit kunnen schermlezers en andere ondersteunende technologie headercellen niet betrouwbaar associëren met datacellen in complexe tabellen of tabellen met meerdere headers, wat vereist is door ISO 14289-1 §7.5. Roep SetStructElemAttr('Table','Scope', 'Column') (of 'Row' / 'Both') direct aan na het taggen van elk TH-element.
v3.36.0 2026-05-20
- SetStructElemExpansion is een nieuwe API die de vermelding /E (expansion text) instelt op het momenteel geopende structuurelement (ISO 32000-1 §14.9.5). De expansion text is de volledig uitgeschreven vorm van een afkorting of acroniem in het element — bijv. "World Wide Web" voor een Span waarvan de tekst "WWW" is. Schermlezers spreken de uitbreiding uit in plaats van te proberen de afgekorte tekens uit te spreken, wat essentieel is voor de toegankelijkheid van technische en wetenschappelijke inhoud. PDF/UA-1 (ISO 14289-1 §7.2) vereist dat natuurlijke taal ondubbelzinnig kan worden bepaald; /E is het standaardmechanisme voor afkortingen en acroniemen. De functie is beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.35.1 2026-05-20
- GetPDFUADiagnostics rapporteert nu DOCINFO-TITLE-MISSING wanneer de /Title-vermelding in het document information dictionary afwezig of leeg is. PDF/UA-1 (ISO 14289-1) vereist een documenttitel zodat schermlezers deze kunnen aankondigen wanneer het document wordt geopend. De bestaande DISPLAYDOCTITLE-FALSE-controle bevestigt dat de titel in de titelbalk van de viewer wordt getoond; DOCINFO-TITLE-MISSING is complementair — deze bevestigt dat de titelwaarde zelf is ingesteld. Roep SetDocumentInfo('Title', ...) aan om de waarde te leveren.
v3.35.0 2026-05-20
- SetStructElemTitle is een nieuwe API die de /T-vermelding (title) instelt op het momenteel geopende structuurelement (ISO 32000-1 §14.7.2 Table 324). De titel is een menselijk leesbaar label dat de specifieke elementinstantie identificeert — bijvoorbeeld "Chapter 1", "Summary Table", of "Figure 3: Quarterly Sales" — en wordt getoond in het Tags-navigatiepaneel van PDF-viewers en gebruikt door accessibility remediation tools. /T verschilt van /Alt (alternatieve tekst voor gebruikers met renderingbeperkingen) en /ActualText (tekstcorrectie op glyphniveau); het is het nuttigst op niet-tekstuele containerelementen zoals Table, Figure, Form, Sect en Div. Geef een lege string door om een eerder ingestelde waarde te wissen. De functie is beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.34.0 2026-05-20
- SetStructElemAltText is een nieuwe API die de /Alt-vermelding instelt op het momenteel geopende structuurelement (ISO 32000-1 §14.9.3). Het is gelijkwaardig aan het doorgeven van AltText aan BeginTag, maar maakt het mogelijk de alternatieve tekstbeschrijving in te stellen of bij te werken nadat het element is geopend — nuttig wanneer de beschrijving afzonderlijk van het elementtype wordt berekend. PDF/UA-1 (ISO 14289-1 §7.5) vereist Alt-tekst op Figure- en Formula-elementen; GetPDFUADiagnostics rapporteert al FIGURE-NO-ALT:N voor ontbrekende waarden. De functie is beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.33.1 2026-05-20
- GetPDFUADiagnostics bevat nu een ROLEMAP-UNMAPPED:N-controle die aangepaste namen van structuurelementtypen detecteert die in het document worden gebruikt maar geen vermelding in het /RoleMap-woordenboek hebben. ISO 14289-1 §7.1 en ISO 32000-1 §14.7.3 vereisen dat elk niet-standaard structuurtype wordt gemapt naar een standaard PDF-type (zoals P, Span of Figure) zodat ondersteunende technologie kan bepalen hoe het element moet worden behandeld. Wanneer N niet-gemapte typen worden gevonden, bevat de probleembeschrijving de lijst met typenamen zodat aanroepers weten welke AddRoleMap-vermeldingen nodig zijn. Alle 49 standaardstructuurtypen die zijn gedefinieerd in ISO 32000-1 Table 333 (PDF 1.7) worden herkend en uitgesloten van het rapport.
v3.33.0 2026-05-20
- SetStructElemLang is een nieuwe API die de /Lang-vermelding instelt op het momenteel geopende structuurelement (ISO 32000-1 §14.9.2). De taaltag overschrijft de documentniveau-taal die door SetDocumentLanguage of SetPDFUAMode is gedeclareerd voor het element en al zijn descendants, waardoor documenten met gemengde talen elke span met de juiste BCP 47-taaltag kunnen markeren (bijv. 'en-US', 'fr', 'zh-Hant-TW'). Schermlezers gebruiken de elementniveau /Lang om de juiste tekst-naar-spraak-engine of stem te selecteren wanneer het document hardop wordt gelezen. De functie is beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.32.0 2026-05-20
- SetStructElemActualText is een nieuwe API die de /ActualText-vermelding instelt op het momenteel geopende structuurelement (ISO 32000-1 §14.9.4). Gebruik deze om de exacte Unicode-tekst te specificeren die een glyphreeks vertegenwoordigt wanneer extractie uit de content stream onjuiste resultaten zou opleveren — de meest voorkomende gevallen zijn OpenType ligature glyphs (U+FB00 ff, U+FB01 fi, U+FB02 fl) en afkortingen met niet voor de hand liggende uitbreidingen. ActualText vult de gerenderde inhoud aan in plaats van deze te vervangen; het overschrijft wat ondersteunende technologie en tekstextractors voor dat element uitlezen zonder visuele rendering te onderdrukken. De functie is beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.31.1 2026-05-20
- GetPDFUADiagnostics controleert nu Formula-structuurelementen naast Figure-elementen bij het rapporteren van ontbrekende Alt-tekst (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 vereist alternatieve beschrijvingen voor zowel grafische figuren als wiskundige formules; eerder werden alleen Figure-elementen gescand.
- GetPDFUADiagnostics rapporteert nu PDF-VERSION-LOW wanneer de PDF-versie van het document's lager is dan 1.7. PDF/UA-1 (ISO 14289-1) is gedefinieerd tegen PDF 1.7 (ISO 32000-1:2008); documenten op PDF 1.5 of 1.6 zouden niet voldoen aan de basisspecificatievereisten. Roep SetPDFUAMode aan om de versie automatisch naar 1.7 te verhogen.
v3.31.0 2026-05-19
- Structuurelement-ID's en tabelheaderassociatie worden nu ondersteund. SetStructElemID wijst een unieke stringidentifier (/ID) toe aan het momenteel geopende structuurelement; ID's worden verzameld in een /IDTree name tree op de structure tree root wanneer het document wordt opgeslagen, waardoor toegankelijkheidstools en kruisverwijzingen elementen op ID kunnen lokaliseren (ISO 32000-1 §14.7.4). SetStructElemHeaders associeert de huidige tabelcel (TD of TH) met een of meer headercellen via een kommagescheiden lijst van eerder toegewezen ID's, waarbij de /Headers-array in het Table attribute owner dictionary wordt geschreven (ISO 32000-1 §14.8.5.7.2). Samen ondersteunen deze twee functies complexe tabelmark-up voor PDF/UA-1 (ISO 14289-1 §7.10) en WCAG 2.x SC 1.3.1. Beide functies zijn beschikbaar in de Delphi library, ActiveX, en DLL-interfaces. AddTagAttribute behandelt nu ook correct het /Headers-attribuut met kommagescheiden waarden die als PDF-tekststringarrays worden geschreven.
v3.30.1 2026-05-19
- GetPDFUADiagnostics bevat nu een HEADING-LEVEL-SKIP:N-controle die sprongen in headingniveaus in documentvolgorde detecteert (bijv. een H1 direct gevolgd door een H3 zonder H2 ertussen). De controle voert een pre-order traversal van de volledige structuurelementboom uit en telt elk voorkomen waarbij het volgende headingniveau het vorige met meer dan één overschrijdt. Generieke H-elementen worden behandeld als H1. Teruggaan naar een heading op hoger niveau (H3 → H1) wordt niet als skip geteld. WCAG 2.x Success Criterion 1.3.1 en ISO 14289-1 §7.1 vereisen dat headings zonder gaten nesten.
v3.30.0 2026-05-19
- Structuurelementattributen worden nu ondersteund voor tagged PDF- en PDF/UA-documenten. Drie nieuwe API-functies maken het mogelijk attributen te koppelen aan het structuurelement dat momenteel op de tag stack wordt opgebouwd: AddTagAttribute (algemeen bruikbaar, elke owner/name/value), SetStructElemScope (convenience wrapper die het /Scope-attribuut onder de Table owner instelt, voor TH-headercellen — ISO 32000-1 §14.8.5.7.2), en SetStructElemBBox (convenience wrapper die het /BBox-attribuut onder de Layout owner instelt, voor figuren en andere visueel gepositioneerde elementen — ISO 32000-1 §14.8.5.4). Wanneer het document wordt opgeslagen, worden attributen geschreven als /A-attribuutwoordenboeken in elk structuurelement; meerdere attributen van dezelfde owner worden gegroepeerd in één dict, en attributen van verschillende owners worden geschreven als een array van dicts. Alle drie functies zijn beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.29.1 2026-05-19
- GetPDFUADiagnostics bevat nu twee extra controles: of Figure-structuurelementen in het document een Alt-tekstwaarde missen (gerapporteerd als FIGURE-NO-ALT:N, volgens ISO 14289-1 §7.5 en ISO 32000-1 §14.9.3), en of structuurelementen nog open zijn omdat EndTag niet is aangeroepen (gerapporteerd als STRUCT-UNCLOSED:N). De figure-controle voert een volledige recursieve doorloop van de structuurelementboom uit en dekt elementen op alle nestingsdiepten.
v3.29.0 2026-05-19
- GetPDFUADiagnostics is een nieuwe diagnostische API die een document controleert op potentiële PDF/UA-1 (ISO 14289-1)-complianceproblemen en een door newlines gescheiden lijst met bevindingen retourneert. Er worden zes controles uitgevoerd: of MarkInfo/Marked is ingesteld (tagged PDF), of de documentcatalog een /Lang-vermelding heeft, of ViewerPreferences/DisplayDocTitle true is, of de XMP-metadata een pdfuaid:part-identifier bevat, het aantal niet-uitgezonderde annotaties zonder Contents-vermelding, en het aantal embedded files zonder AFRelationship-vermelding. Elke bevinding wordt geïdentificeerd door een korte code (bijv. LANG-MISSING, ANNOT-NO-CONTENTS:3) gevolgd door een menselijk leesbare beschrijving. Retourneert een lege string wanneer geen problemen worden gevonden. Beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.28.5 2026-05-19
- PDF/UA-1-verbetering voor annotatietoegankelijkheid: wanneer een FileAttachment-annotatie geen Contents-vermelding en geen /T-veld heeft, wordt de bestandsnaam uit de embedded file specification van de annotatie's (/FS /UF of /F) nu gebruikt als fallback toegankelijke beschrijving. Dit voltooit de fallbackketen voor annotation Contents: /T → Link URI → Stamp name → FileAttachment filename. Schermlezers ontvangen de naam van het bijgevoegde bestand in plaats van stilte, wat voldoet aan ISO 14289-1 §7.18.1 voor de meest voorkomende annotatietypen.
v3.28.4 2026-05-19
- PDF/UA-1-verbetering voor annotatietoegankelijkheid: wanneer een Stamp-annotatie geen Contents-vermelding heeft (of een lege) en geen /T-veld, wordt de stempeltypenaam uit de annotatie's /Name-vermelding nu gebruikt als fallback toegankelijke beschrijving (bijv. "Approved", "Draft", "Confidential", "Final"). Dit breidt de fallbackketen voor annotation Contents die in v3.28.3 is geïntroduceerd uit naar stamp annotations, die vaak voorkomen in workflows met beoordeelde of goedgekeurde documenten en vaak geen expliciete Contents-waarde hebben.
v3.28.3 2026-05-19
- PDF/UA-1-verbetering voor annotatietoegankelijkheid: wanneer een Link-annotatie geen Contents-vermelding heeft (of een lege) en geen /T-veld, wordt de URI uit de URI action van de annotatie's nu gebruikt als fallback toegankelijke beschrijving. Dit geldt alleen tijdens SetPDFUAMode-verwerking en alleen voor Link-annotaties die een /URI action bevatten. Schermlezers ontvangen de URL als label in laatste instantie, wat voldoet aan ISO 14289-1 §7.18.1 in het veelvoorkomende geval waarin auteurs hyperlinks maken zonder een menselijk leesbare beschrijving te geven.
v3.28.2 2026-05-19
- SetEmbeddedFileAFRelationship is een nieuwe API om expliciet de AFRelationship-waarde in te stellen op het file specification dictionary van een embedded file's. Vereist door ISO 14289-1 (PDF/UA-1) §7.11, maakt dit het voor aanroepers mogelijk de semantische relatie van een embedded file tot de documentinhoud te specificeren door te kiezen uit de vijf geldige waarden: Source, Data, Alternative, Supplement of Unspecified. Wanneer SetPDFUAMode actief is, krijgt elk embedded file zonder AFRelationship-sleutel automatisch Unspecified toegewezen; gebruik deze functie om die standaard te overschrijven vóór het opslaan. Beschikbaar in de Delphi library, ActiveX, en DLL-interfaces.
v3.28.1 2026-05-19
- Wanneer SetPDFUAMode wordt aangeroepen op een document waarvan de XMP-metadata de generieke library-default titel bevat in plaats van een documentspecifieke titel, wordt de titel nu automatisch vervangen door de waarde uit de /Info Title-vermelding van het document's (als die aanwezig is). Dit zorgt ervoor dat het pdfuaid:part-1 XMP-pakket de werkelijke documenttitel weerspiegelt in plaats van een placeholder, wat voldoet aan de verwachtingen van PDF/UA-1-verifiers.
- De XMP-parser (LoadFromString) leest nu de waarde dc:title uit bestaande XMP-metadata wanneer een document wordt geladen, zodat het rondreizen van een PDF die al dc:title heeft die titel correct behoudt in plaats van terug te vallen op de standaardplaceholder.
v3.28.0 2026-05-19
- BeginArtifactEx(ArtifactType, ArtifactSubtype) is een nieuwe tagged-PDF API die BeginArtifact uitbreidt om zowel de artifact /Type als de Pagination /Subtype in een enkele aanroep uit te drukken. Wanneer beide parameters niet leeg zijn, is de geschreven operator /Artifact << /Type /T /Subtype /S >> BMC, waardoor volledig gespecificeerde Pagination artifacts zoals kop- en voetteksten volgens ISO 32000-1 §14.8.2.2.1 mogelijk zijn. Als slechts een parameter niet leeg is, wordt de overeenkomstige enkelvoudige-sleutelvorm gebruikt. DLL-entrypoints DLBeginArtifactEx en DLBeginArtifactExA worden ook geexporteerd.
v3.27.2 2026-05-19
- BeginArtifact onderscheidt nu correct artifacttypen van pagination-subtypen. Wanneer het argument Pagination, Layout of Page is (artifacttypen volgens ISO 32000-1 §14.8.2.2.1 Table 330), schrijft de marked-content operator /Type in plaats van /Subtype. Andere waarden zoals Header, Footer en Watermark blijven als /Subtype geschreven worden. Dit corrigeert de eerdere onjuiste uitvoer die /Subtype /Pagination zou schrijven wanneer de aanroeper een pagination artifact wilde markeren.
v3.27.1 2026-05-19
- Wanneer PDF/UA-modus actief is en het document ingesloten bestanden bevat, krijgt elke file specification dictionary zonder AFRelationship-entry er nu automatisch een bij het opslaan. De geschreven waarde is /Unspecified, waarmee wordt voldaan aan de ISO 14289-1 §7.11-vereiste dat elk ingesloten bestand een AFRelationship-sleutel heeft. Dit geldt zowel voor bestanden die via EmbedFile zijn toegevoegd als voor ingesloten bestanden die al aanwezig zijn in een geladen document.
v3.27.0 2026-05-19
- AddRoleMap(CustomType, StandardType) is een nieuwe tagged-PDF API die een mapping registreert van een aangepaste (niet-standaard) structuur-elementtypenaam naar een standaard PDF-structuurtype. Bij het opslaan worden de mappings geschreven naar de RoleMap dictionary in de structure tree root, waarmee wordt voldaan aan de ISO 14289-1 §7.1-vereiste voor documenten die applicatiespecifieke tagnamen gebruiken. Er kunnen meerdere mappings worden geregistreerd; dubbele sleutels worden overschreven door de laatste aanroep. DLL-entrypoints DLAddRoleMap en DLAddRoleMapA worden ook geexporteerd.
v3.26.0 2026-05-19
- BeginTagEx(TagType, AltText, ActualText, Lang) is een nieuwe tagged-PDF API die BeginTag uitbreidt met een expliciet natuurlijketaalattribuut. Wanneer Lang niet leeg is, wordt dit geschreven naar het /Lang-attribuut van het structure element', waardoor taalannotatie per element mogelijk is zoals vereist door ISO 14289-1 §7.2 voor meertalige documenten. Geef een lege Lang-string door om zich identiek aan BeginTag te gedragen. DLL-entrypoints DLBeginTagEx en DLBeginTagExA worden ook geexporteerd.
v3.25.1 2026-05-19
- Niet-gesubsette TrueType fonts die met de standaard Windows-codepage (WinAnsiEncoding) worden geladen, krijgen nu een ToUnicode CMap-stream, waardoor betrouwbare Unicode-tekstextractie en kopieren/plakken voor deze fonts mogelijk zijn. Voorheen werd een ToUnicode-stream alleen geschreven wanneer een expliciete codepage-override of Differences-array aanwezig was; het gebruikelijke standaardcoderingspad miste deze.
- Dezelfde oplossing geldt voor TrueType fonts die met een expliciete niet-standaard codepage maar zonder Differences-array worden geladen, en voor fonts die via het packaged-font formaat worden geladen.
v3.25.0 2026-05-19
- Wanneer PDF/UA-modus actief is, krijgen niet-vrijgestelde annotations (alle typen behalve Widget, PrinterMark en TrapNet) zonder niet-lege Contents-entry er nu automatisch een bij het opslaan. De /T-waarde (titel / auteur) van de annotation' wordt gebruikt als fallback, waarmee wordt voldaan aan ISO 14289-1 §7.18.1 voor annotations die een titel maar geen expliciete toegankelijke beschrijving hebben.
v3.24.0 2026-05-19
- Wanneer PDF/UA-modus actief is, krijgen interactieve form fields zonder TU-entry (tooltip / alternatieve beschrijving) er nu automatisch een bij het opslaan. De gedeeltelijke naam van het field' (/T-entry) wordt gebruikt als fallbackwaarde, zodat schermlezers elk veld kunnen identificeren. Push buttons zijn volgens ISO 14289-1 §7.18.4 correct uitgesloten van deze vereiste.
v3.23.1 2026-05-19
- GetInformation(200) retourneert '1' wanneer PDF/UA-1-modus actief is op het geselecteerde document, zodat aanroepers de status van de conformiteitsmodus tijdens runtime kunnen opvragen.
- GetInformation(201) retourneert '1' voor PDF/A-1a, '2' voor PDF/A-1b, of een lege string wanneer PDF/A-modus uit staat.
- GetInformation(311) en GetInformation(312) retourneren nu correct de versievereistestring en functienaam uit het meest recente version-lock conflict (eerder aangekondigd in de v3.20.3-entry maar nog niet geimplementeerd).
- GetInformation(313) retourneert de PDF-versiestring waarop het opslagdoel momenteel is vergrendeld, of een lege string voor documenten met vrije versiebeheer.
v3.23.0 2026-05-19
- SetMarkInfo(Marked) is nu een publieke API, waardoor de vlag MarkInfo.Marked onafhankelijk kan worden ingesteld van de volledige PDF/UA-1-setup die door SetPDFUAMode wordt uitgevoerd. Wanneer Marked 1 is, wordt MarkInfo.Suspects ook ingesteld op false zoals vereist door ISO 14289-1 §7.18.6.
- Wanneer PDF/UA-modus actief is, krijgen alle pagina's automatisch een /Tabs /S-entry bij het opslaan, waarmee wordt voldaan aan de structuurgebaseerde tabvolgorde-eis van ISO 14289-1 §7.18.4.
- HTML-referentiedocumentatie toegevoegd voor SetPDFUAMode, SetDocumentLanguage, SetMarkInfo, BeginTag, EndTag, BeginArtifact en EndArtifact, met volledige syntaxtabellen en gebruiksvoorbeelden.
v3.22.0 2026-05-19
- BeginTag(TagType, AltText, ActualText) opent een tagged-PDF structure element in de huidige content stream, schrijft een BDC-operator met een automatisch toegewezen MCID en registreert het element in de document structure tree. TagType is elk PDF-standaardstructuurtype (P, H1, Figure, Table, enz.). AltText en ActualText zijn optionele toegankelijkheidsstrings die als PDF text strings (UTF-16BE) zijn gecodeerd.
- EndTag sluit het meest recent geopende structure element en schrijft de bijpassende EMC-operator naar de content stream.
- BeginArtifact(SubType) markeert een contentgebied als een PDF artifact (pagination artefact, achtergrond, enz.) en schrijft een BMC-operator. SubType is optioneel; wanneer opgegeven wordt het geschreven als /Artifact << /Subtype /SubType >>.
- EndArtifact sluit het artifactgebied met een EMC-operator.
- Bij het opslaan bouwt de library, wanneer tagged structure elements zijn geregistreerd, automatisch de volledige StructTreeRoot, wijst StructParents-sleutels toe aan getroffen pagina's en schrijft de ParentTree number tree, waarmee wordt voldaan aan de ISO 32000-1 §14.7-vereisten voor tagged PDF.
- Standard Type 1 fonts (Helvetica, Times, Courier family, Symbol) en embedded Type 1 fonts met WinAnsi-codering krijgen nu een ToUnicode CMap-stream, waardoor betrouwbare Unicode-tekstextractie en kopieren/plakken voor deze fonttypen mogelijk zijn.
v3.21.0 2026-05-19
- SetPDFUAMode(Language) activeert PDF/UA-1 (ISO 14289-1) conformiteitsmodus: verhoogt het document automatisch naar PDF 1.7, schrijft MarkInfo.Marked en MarkInfo.Suspects, schakelt DisplayDocTitle in ViewerPreferences in, stelt Catalog.Lang in wanneer Language niet leeg is, en schrijft de pdfuaid:part = 1 XMP namespace entry die vereist is door ISO 14289-1 Section 6.7.11.
- SetDocumentLanguage(Language) schrijft de Catalog /Lang-entry rechtstreeks, zodat de documenttaal onafhankelijk van PDF/UA-modus kan worden gedeclareerd.
- MarkInfo.Suspects wordt nu ingesteld op false wanneer MarkInfo.Marked op true wordt ingesteld, waarmee wordt voldaan aan de ISO 14289-1 tagged-PDF-structuurvereiste (Section 7.18.6).
- Encrypt forceert nu de CanCopyAccess-permissievlag (kopieren van inhoud voor toegankelijkheid) wanneer het document in PDF/UA-modus staat, zoals vereist door ISO 14289-1 Section 7.17.
- Choice-form fields (dropdown) dragen niet langer een betekenisloze hardcoded tooltipwaarde; TU blijft niet ingesteld zodat de aanroeper een betekenisvol label kan toewijzen via de form field property API.
v3.20.3 2026-05-19
- Encrypt en AddSWFAnnotationFromFile retourneren nu onmiddellijk 0 met LastErrorCode 602 wanneer de opslagversie onder het minimum is vergrendeld dat vereist is door de geselecteerde encryptiesterkte of het annotationtype, in plaats van stilzwijgend door te gaan en pas bij het opslaan te falen.
- GetInformation(311) en GetInformation(312) weerspiegelen nu de conflicterende versievereiste tijdens het schrijven wanneer een vergrendelde versie extension-level features zoals AES-256 of RichMedia annotations blokkeert.
v3.20.2 2026-05-19
- AddU3DAnnotationFromFile verhoogt nu automatisch de documentversie naar PDF 1.6 wanneer een 3D annotation wordt toegevoegd aan een document met een lagere versie, consistent met het automatische versie-verhogingsgedrag van alle andere PDF 1.6+ API-entrypoints.
v3.20.1 2026-05-17
- PDF 1.2-opslagdoelen worden nu afgedwongen als strikte PDF 1.2-contracten. Het opslaan van PDF 1.3+ objecten zoals page TrimBox-data onder een PDF 1.2-doel faalt voordat uitvoer wordt geschreven in plaats van een bestand met gemengde versies te produceren.
- PDF 1.7 Adobe extension-level compliance maakt nu deel uit van de save preflight. AESV3, AES-256, RichMedia, Projection, geospatial dictionaries en ETSI signature subfilters worden gecontroleerd tegen de vereiste ExtensionLevel.
- AES-256-encryptie, RichMedia annotations, geospatial dictionaries en ETSI signature subfilters declareren nu de bijpassende Adobe Extensions-entry wanneer PDFlib een document automatisch verhoogt naar PDF 1.7 extension content.
- Append-opslag gebruikt nu dezelfde versie-compliancepoort als volledige opslag.
- Gebundelde optionele PDFium runtime DLLs zijn vernieuwd voor Win32 en Win64. GDI+ blijft de standaardrenderer; PDFium blijft opt-in via SetPDFiumFileName en SelectRenderer(3).
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 207/207, en C++Builder Win64x GoogleTest slaagde voor 61 tests met 2 bestaande sample-afhankelijke tests overgeslagen.
v3.20.0 2026-05-17
- Acht extra PDFlib writer-entrypoints lopen nu via Phase 3 EnsureMinVersion zodat de documentversie automatisch wordt verhoogd naar het minimum dat vereist is door de feature die wordt uitgevoerd: SetDocumentMetadata (PDF 1.4 - /Metadata XMP stream) SetPDFAMode(1 or 2) (PDF 1.4 - /MarkInfo + /OutputIntents) PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript) DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript) SetTabOrderMode (PDF 1.5 - Page /Tabs) NewOptionalContentGroup (PDF 1.5 - /Type /OCG) SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances) NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)
- Gecombineerd met de v3.15.0-set (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) en de v3.17.0-set (acht JavaScript / embedded-file / XFA / SWF-entries), verhoogt PDFlib nu FVersion automatisch over eenentwintig writer-entrypoints.
- NewOptionalContentGroup verhoogde FVersion eerder rechtstreeks; het loopt nu via EnsureMinVersion zodat LockSaveVersion wordt gerespecteerd en de verhoging in AutoBumpedFeatures wordt vastgelegd.
v3.19.0 2026-05-17
- PDF-versiecompliance bij opslaan en laden herkent nu ook vier eerder uitgestelde features: Btn /Ff bit 15 NoToggleToOff (alleen radioknoppen) -> PDF 1.4 DeviceN /Subtype /NChannel (color-space refinement) -> PDF 1.6 FontFile3 /Subtype /OpenType (font program type) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached or ETSI.RFC3161 -> PDF 1.7
- De NChannel-regel matcht de DeviceN color-space array-vorm [/DeviceN names alternateSpace tintTransform attributes] wanneer de attributes dictionary op index 4 /Subtype /NChannel bevat.
- De FontFile3 OpenType-regel gaat alleen af wanneer de stream wordt bereikt via een bovenliggende sleutel met de naam 'FontFile3', zodat niet-gerelateerde streams die toevallig /Subtype /OpenType dragen niet worden gemarkeerd.
- De PDFFeatureRules-tabel bevat nu 103 regels (99 + 4 nieuw).
v3.18.6 2026-05-17
- PDF-versiecompliance bij opslaan en laden herkent nu /AA (additional actions) met bewustzijn van containertype: Catalog /AA (document-level triggers) -> PDF 1.4 Annot /AA (annotation triggers) -> PDF 1.4 Page /AA (page triggers) -> PDF 1.5
- Form-field /AA (PDF 1.2) blijft gedekt door het bestaande PDF 1.3-opslagcontract; er is geen regel nodig.
- De PDFFeatureRules-tabel bevat nu 99 regels (96 + 3 nieuw).
v3.18.5 2026-05-17
- PDF-versiecompliance bij opslaan en laden classificeert Page /Tabs nu correct als een PDF 1.5-feature; deze was eerder onjuist geclassificeerd als PDF 1.4. Het PDF 1.4 spec changes document (Adobe TN #5409) vermeldt /Tabs niet, en PDF 1.5 Table 8.10 introduceert "Tabs (Optional; PDF 1.5)".
- Nieuwe regel: AcroForm /NeedAppearances wordt herkend als een PDF 1.5-feature volgens PDF 1.5 Table 218.
- De PDFFeatureRules-tabel bevat nu 96 regels (95 + 1 nieuw).
v3.18.4 2026-05-13
- PDFlibZLib gebruikt nu altijd de gebundelde statische zlib-ng object backend bij normale library-builds, waardoor het resterende System.ZLib-fallbackpad wordt verwijderd.
- De zlib-ng-regressiedekking omvat nu payloads op grensgrootte, PNG-achtige scanline-data, stored multi-block streams en bekende zlib-streams over Delphi- en C++Builder-testrunners.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 194/194, en C++Builder Win64x GoogleTest slaagde voor 58 tests met 2 bestaande sample-afhankelijke tests overgeslagen.
v3.18.3 2026-05-12
- Delphi- en C++Builder-demo's die PDF- of tekstuitvoer genereren openen nu automatisch het gegenereerde document na succesvol opslaan.
- Installerverpakking houdt buildartefacten nu uit demomappen en maakt C++Builder-samples plus DLL- en ActiveX/OCX-modules opt-in-componenten; de bijbehorende bestanden worden alleen geinstalleerd wanneer het component is geselecteerd.
v3.18.2 2026-05-12
- De Delphi- en C++Builder EditFormField-demo's wissen nu /NeedAppearances voordat veldwaarden worden bijgewerkt, zodat elk bewerkt tekstveld een vernieuwde normal appearance stream krijgt in de opgeslagen PDF.
- Dit houdt de opgeslagen /AP-stream synchroon met de opgeslagen /V-waarde en voorkomt viewer-afhankelijke verschillen waarbij het focussen op het veld tekst toont die ontbrak in de statische veldweergave.
v3.18.1 2026-05-10
- PDF-versiecompliance bij opslaan en laden herkent nu ook bit-level form-field /Ff-vlaggen en de 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-overerving wordt niet gevolgd: alleen dictionaries die expliciet /Ff of /SigFlags bevatten activeren de regels.
- De PDFFeatureRules-tabel bevat nu 95 regels (87 + 8 nieuwe bit-level).
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 191/191, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.18.0 2026-05-10
- PDF-versiecompliance bij opslaan en laden herkent nu ook negen extra sub-key- en bit-level features: bit-level annotation flags (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 onderscheidende catalog- en page-subkeys: /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
- De PDFFeatureRules-tabel bevat nu 87 regels (78 chapter-level + 9 sub-key / bit-level).
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 189/189, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.17.0 2026-05-10
- Acht extra PDFlib writer-entrypoints lopen nu via Phase 3 EnsureMinVersion zodat de documentversie automatisch wordt verhoogd naar het minimum dat vereist is door de feature die wordt uitgevoerd: 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)
- Gecombineerd met de v3.15.0-set (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) dekt PDFlib nu dertien high-version writer-entrypoints end-to-end.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 187/187, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.16.3 2026-05-10
- Nieuwe PDFlib API: LockSaveVersion(Version) pint het document op Version en voorkomt dat Phase 3 writer-side EnsureMinVersion het automatisch daarboven verhoogt. UnlockSaveVersion wist de vergrendeling.
- De save-time gate is ongewijzigd: writer-emitted features boven de vergrendelde versie produceren nog steeds LastErrorCode 602 bij het opslaan, in plaats van de header stilzwijgend te verhogen.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 184/184, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.16.2 2026-05-10
- Geladen PDFs tonen nu een contributor-only weergave van load-time feature detection via GetInformation(103) ("ContributorFeatures"). De lijst bevat alleen features waarvan de minimaal vereiste versie strikt groter is dan HeaderVersion (key 100), zodat deze direct antwoord geeft op "waarom is de effectieve versie hoger dan de bestandsheader?".
- GetInformation(101) ("DetectedFeatures") is ongewijzigd en vermeldt nog steeds elke gematchte feature, ongeacht bijdrage.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 181/181, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.16.1 2026-05-10
- Loader-side detectietestdekking uitgebreid met zes extra synthetische fixtures: in-page transparency ExtGState (geen versie verhoging), 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), een multi-feature combinatiefixture en een snapshot-stability check.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 179/179, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.16.0 2026-05-10
- Geladen PDF-documenten doorlopen nu een inhoudsgestuurde versiedetectiepass: elk indirect object wordt doorlopen via de feature-to-minimum-version tabel die door de save-time gate wordt gebruikt, en FVersion wordt verhoogd boven de letterlijke %PDF-X.Y-headerwaarde wanneer de inhoud daadwerkelijk een hogere versie vereist. Een /UserUnit page entry verhoogt bijvoorbeeld de effectieve versie naar PDF 1.6 zelfs wanneer de bestandsheader PDF 1.4 aangeeft.
- Nieuwe GetInformation-sleutels: 100 retourneert HeaderVersion (letterlijke %PDF-X.Y), 101 retourneert DetectedFeatures (CRLF-gescheiden features die bij het laden zijn gematcht), 102 retourneert AutoBumpedFeatures (CRLF-gescheiden features die writer-side EnsureMinVersion hebben geactiveerd).
- De save-time gate wordt niet beinvloed: documenten waarvan de effectieve versie bij het laden is verhoogd en daarna expliciet is verlaagd met SetInformation(0, ...), produceren nog steeds LastErrorCode 602 bij het opslaan.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 173/173, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.15.0 2026-05-10
- Writer-entrypoints die features produceren waarvoor een bepaalde minimale PDF-versie nodig is, verhogen nu automatisch de PDF-versie van het document'. Het aanroepen van SetTransparency op een document dat als PDF 1.3 is gemarkeerd, promoveert de header nu naar PDF 1.4 in plaats van het opslaan te laten mislukken met LastErrorCode 602.
- Dezelfde automatische verhoging is gekoppeld aan SetPageUserUnit (>=1.6), Encrypt met Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 respectievelijk), en de varianten met twee pagina's van SetPageLayout (>=1.5).
- Gedragswijziging ten opzichte van 3.14.x: applicaties die eerder vertrouwden op de v3.12.6 "save target rejects writer-emitted features" gate slagen nu op de verhoogde versie. Geladen PDFs die al hogere-versie features bevatten, blijven door de bestaande save-time gate gaan, dus het laden van een tagged PDF en het selecteren van PDF 1.3 faalt nog steeds met LastErrorCode 602.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 170/170, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.14.3 2026-05-10
- PDF-versiecompliance bij opslaan herkent nu ook de resterende PDF 1.6 3D dictionary types (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) en de PDF 1.7 Redact, RichMedia en Projection annotation subtypes plus de bijbehorende /Type /Requirement en /ReqHandler dictionaries.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 168/168, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.14.2 2026-05-10
- PDF-versiecompliance bij opslaan herkent nu ook PDF 1.5-features: /XFA forms, /AlternatePresentations, /Renditions name tree, de /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers multimedia dictionaries, en het Screen annotation subtype.
- Opslaan als PDF 1.4 weigert nu documenten die deze features bevatten met LastErrorCode 602.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 166/166, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.14.1 2026-05-10
- PDF-versiecompliance bij opslaan herkent nu ook PDF 1.4-features: tagged-PDF /StructTreeRoot /MarkInfo en StructElem dictionaries, de document /Lang- en page /Tabs-entries, /OutputIntents en /OutputIntent dictionaries, de /UR3 usage-rights signature, en de PDF 1.4 annotation subtypes Polygon, PolyLine, Caret, Ink, Popup en Watermark.
- Opslaan als PDF 1.3 weigert nu documenten die deze features bevatten met LastErrorCode 602.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 165/165, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.14.0 2026-05-10
- Naleving van de PDF-versie bij opslaan herkent nu ook PDF 1.3-functies zoals smooth shading, function objects, ICCBased- en DeviceN-kleurruimten, /TrimBox /BleedBox /ArtBox-pagina-items, /ToUnicode CMaps, bestandsbijlagen en /Sound- en /Movie-annotaties, /Type /Filespec- en /Type /EmbeddedFile-dicts, de sleutels /Group /EF /Alternates /Mask, en JavaScript-acties.
- PDF 1.2-aanroepers slaan nu op onder het PDF 1.3-contract: de letterlijke %PDF-1.2-header blijft behouden, maar de gate accepteert PDF 1.3-functies. PDF 1.4- en latere functies worden nog steeds geweigerd met LastErrorCode 602.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 162/162, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.13.0 2026-05-10
- De PDF-versiecompliance-gate die functies van latere versies tijdens het opslaan weigert, is gerefactord naar een speciale module zodat de regelset kan groeien zonder de documentkern telkens te wijzigen.
- Geen voor de gebruiker zichtbare gedragswijziging ten opzichte van v3.12.7: dezelfde functies buiten de versie worden nog steeds geweigerd met LastErrorCode 602.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 155/155, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.12.7 2026-05-09
- De geautomatiseerde testdekking voor de PdfToImage-renderworkflow met directe toegang is uitgebreid in zowel de Delphi DUnitX- als de C++Builder GoogleTest-suites.
- De Delphi VCL GUI-testrunner registreert nu de Syntax- en XRef-fixtures, overeenkomstig de dekking van de console-runner.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 147/147, en C++Builder Win64x GoogleTest slaagde voor 57/57.
v3.12.6 2026-05-09
- Opslaan als PDF 1.3, 1.4, 1.5, 1.6 of 1.7 handhaaft nu de geselecteerde versie als het uitvoercontract voor volledige opslag.
- Volledige opslagbewerkingen verwijderen catalogus-/Version-overschrijvingen, verwijderen niet-ondersteunde catalogusuitbreidingen en metadata-items voor lagere doelen, en onderdrukken PDF 1.4 XMP-metadatastreams bij opslaan als PDF 1.3.
- SaveToFile, SaveToString en SaveToStream mislukken nu met LastErrorCode 602 wanneer de geselecteerde PDF-doelversie lager is dan functies die nog in het document aanwezig zijn, zoals transparantie, optionele inhoud, JPX, UserUnit, 3D of AES crypt-filter-functies.
v3.12.5 2026-05-09
- PDF 1.7-parsing van letterlijke strings is verbeterd zodat onbekende escape-reeksen de backslash negeren zoals vereist door de standaard.
- Octale escapes in letterlijke strings consumeren nu alleen octale cijfers en behouden een volgend niet-octaal cijfer als gewone stringgegevens.
- Regressiedekking toegevoegd voor onbekende escapes in letterlijke strings en gemengde octale/niet-octale escape-reeksen.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 141/141.
v3.12.4 2026-05-09
- PDF 1.7-lexicale parsing is verbeterd zodat name objects nu correct stoppen bij het sluitende-accolade-scheidingsteken.
- SmartAccess-laden van xref stream compressed-object-items waarvan het objectstreamnummer groter is dan de PDF-bytelengte is opgelost.
- Regressiedekking toegevoegd voor sluitende-accolade-scheidingstekens in namen en sparse compressed-object xref stream-items.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 139/139.
v3.12.3 2026-05-08
- Compatibiliteit met versleutelde PDF 1.7-documenten is verbeterd voor standard security handler-bestanden die StrF, StmF, EFF, Identity, None of benoemde StdCF-achtige crypt filters gebruiken.
- Metadatastreams respecteren nu EncryptMetadata=false tijdens decrypt-, encrypt- en copy/save-workflows in plaats van als gewone streams te worden verwerkt.
- Ingesloten bestandsstreams dragen nu /Type /EmbeddedFile en gebruiken het beslispad voor embedded-file crypt-filter wanneer versleutelde documenten worden geladen of opgeslagen.
- Externe ingesloten bestandsstreams promoveren nu FDecodeParms naar DecodeParms wanneer FFilter naar Filter wordt gepromoveerd, waardoor decodeerparameters van streams behouden blijven.
- Nieuwe AES-versleutelde PDFs schrijven crypt-filter Length-waarden nu als bitlengten, overeenkomstig het contract van het PDF 1.7 crypt filter dictionary.
- XRef stream Prev/XRefStm-waarden en grote numerieke offsets behouden nu 64-bits precisie via parser- en SmartAccess-paden.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 137/137.
v3.12.2 2026-05-08
- Compatibiliteit voor PDF 1.7-streamdecodering is verbeterd. Generieke streamdecodering respecteert nu /DP als alias voor DecodeParms, lost indirecte decode-parameterarray-items op en accepteert de standaard filterafkortingen /AHx en /LZW.
- PDF-uitvoer voor grote bestanden schrijft nu xref-, startxref-, linearization- en digitale-handtekening-ByteRange-offsets via 64-bits formatteringspaden in plaats van die waarden te versmallen via 32-bits integerhelpers.
- Geladen documenten behandelen nu een catalogus-/Version-item als de effectieve PDF-versie wanneer die nieuwer is dan de bestandsheaderversie.
- Herschreven xref-streamtrailers behouden geen stream-only DecodeParms-sleutels meer wanneer PDFlibPas ze opslaat als klassieke trailerdictionaries.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 134/134.
v3.12.1 2026-05-06
- Gegenereerde PDFs openen nu met de eerste pagina aangepast aan de beschikbare hoogte van het viewer-venster's, zodat de volledige eerste pagina van boven tot onder zichtbaar is bij de grootste zoom die in het venster past. Configureer een aangepaste OpenAction (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) op het document om deze standaard te overschrijven.
v3.12.0 2026-05-06
- De Windows static backends bevatten nu libjpeg-turbo NASM SIMD-objecten voor Win32 en Win64, plus zlib-ng x86 SIMD-dispatchobjecten voor de Win64x zlib-ng-set.
- De zlib-ng-herbouwscripts zijn herwerkt zodat Win64x bcc64x- en diagnostische MSVC-builds de generic-, SSE2-, SSSE3-, SSE4.1/SSE4.2-, PCLMULQDQ- en AVX2-bronbestanden compileren met featurevlaggen per bestand in plaats van te vertrouwen op een enkele globale compileroptie.
- 32-byte uitgelijnde malloc/calloc/realloc/free CRT-stubs toegevoegd voor de statische C-bibliotheken en TPDFJPEGImage.Compress gerepareerd zodat jpeg_mem_dest-buffers worden vrijgegeven via hetzelfde C-free-pad dat ze heeft toegewezen.
- De openbare validatienotities zijn uitgebreid om de strikte geautomatiseerde dekking achter deze release te benoemen: library-builds, compressie-roundtrips, HelloWorld /FlateDecode-uitvoer, JPEG-rendering, image-workflows, fonts, forms, security, signing, printing en C++Builder demo-afgeleide workflows.
v3.11.0 2026-05-05
- Windows Flate-compressie en -decompressie zijn overgezet naar zlib-ng in zlib-compatibele modus. Win32, Delphi Win64 en C++Builder Win64x linken nu ABI-passende zlib-ng static object sets uit Lib\thirdparty\Win32, Lib\thirdparty\Win64 en Lib\thirdparty\Win64x.
- Het Win64-pad loopt niet langer via Delphi's System.ZLib-unit, zodat PDF-streamcompressie/decompressie kan profiteren van de zlib-ng-backend net als de 32-bits build.
- Een klein zlib-ng bridge-object toegevoegd voor Win64-builds, zodat Pascal-code stabiele zlib-compatibele entry points behoudt terwijl Delphi en C++Builder hun eigen linker-compatibele objectsets gebruiken.
- Alle C++Builder-demoprojecten bijgewerkt om PDFLIB_CPPBUILDER te definiëren, overeenkomstig de GoogleTest-runner en om te voorkomen dat Win64x-demo's de Delphi Win64 zlib-ng-objecten linken.
v3.10.3 2026-05-01
- De C++Builder GoogleTest-suite uitgebreid om elke demo onder Demo\C++Builder te dekken. De fase-1-layout met 7 fixtures groeide naar 15 fixtures / 52 GoogleTest-cases, allemaal geslaagd op Win64x. Nieuw gedekte demo's: 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
- Een C++Builder GoogleTest-runner toegevoegd onder Tests\C++Builder die Lib\PDFlibrary.pas oefent via dezelfde door {$JPHNE} gegenereerde HPP-headers die door de C++Builder-demo's worden gebruikt. De eerste fase weerspiegelt zeven kernscenario's uit Delphi (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, PdfToImage rendering) als 17 GoogleTest-cases, allemaal geslaagd op Win64x.
- De Delphi DUnitX-suite uitgebreid met Tests.Print voor de PrintPDF- en ShowPrinterBins-demo's (enumeratie van standaardprinter, instelling van aangepaste printer, afdrukopties, printjob met omleiding naar bestand) en een renderer-switch-test in Tests.Render die de GDI+ / PDFium / Cairo-enginekeuze van de MultiFunction-demo's oefent op dezelfde bron-PDF.
v3.10.1 2026-05-01
- 57 benoemde paginaformaten toegevoegd aan SetPageSize zodat dezelfde canonieke paginaformaatnamen ook hier werken: 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
- Native C++Builder-versies toegevoegd voor elk Delphi-voorbeeld onder Demo. De demo's voor PDF-aanmaak, paginamanipulatie, fonts, images, security, signing, rendering en printing kunnen nu vanuit C++Builder worden gebouwd en uitgevoerd zonder enige Delphi-side wrapper.
- Elke nieuwe demo staat in Demo\C++Builder\<Name>\ als consoleproject dat Lib\PDFlibrary.pas rechtstreeks gebruikt en de invoerbestanden meelevert die nodig zijn om te draaien.
- Een korte Engelse Readme.txt toegevoegd aan elke Delphi-demomap waarin wordt beschreven wat de demo laat zien, op welke API deze focust en hoe deze kan worden uitgevoerd; een HTML-overzicht op Demo\Delphi\index.html linkt naar alle demo's, gegroepeerd per onderwerp.
- Dezelfde Readme.txt gespiegeld voor elke C++Builder-demo met een Run-sectie herschreven voor de consoleworkflow (argv-argumenten in plaats van Open/SaveDialogs); een bijpassende Demo\C++Builder\index.html vermeldt elke C++Builder-demo met dezelfde onderwerpgroepen.
- Een geheugenlek in de ImportEMF-demo opgelost (de TPDFlib-instantie werd aangemaakt maar nooit vrijgegeven).
v3.9.14 2026-04-30
- De page-range copy-demo gerepareerd zodat deze daadwerkelijk pagina's kopieert in plaats van altijd een fout te melden.
- De wrapped-text- en HTML-paginatiedemo's opgeschoond zodat elk zich op zijn eigen API richt en vanaf een enkele knop draait.
- Twee demoprojecten hernoemd (EmbeddedFonts en PdfPermission) zodat de gecompileerde uitvoerbare bestanden overeenkomen met de mapnamen in plaats van oudere prototypenamen.
v3.9.13 2026-04-30
- Een stream-position-bug in de interne bufferreader opgelost: twee-byte word-reads verplaatsten de leescursor met vier bytes in plaats van twee. In buffers langer dan twee bytes kwamen latere reads op de verkeerde offset terecht en retourneerden ze stilzwijgend onjuiste gegevens. Het effect was het meest zichtbaar bij het parsen van binaire datastructuren die byte- en word-reads afwisselen.
- Een geautomatiseerde DUnitX-testsuite geïntroduceerd (console- en VCL GUI-runners) voor utility-units — buffer, AES, ZLib, Unicode en digest hashing — en library-level workflows waaronder documentaanmaak, save-to-file en save-to-stream, load round-trips en AES-128/AES-256-versleuteling.
v3.9.12 2026-04-30
- GDI+ image rendering gebruikt nu standaard vloeiende, hoogwaardige bicubic interpolation bij het schalen van rasterafbeeldingen naar scherm- of exportresolutie. Voorheen was de standaard nearest-neighbour, wat zichtbare trapartefacten veroorzaakte op kleine afbeeldingen (logo's, thumbnails) die werden vergroot voor schermpreview of high-DPI-export. Aanroepers die de scherpere nearest-neighbour-modus verkiezen, kunnen het oude gedrag herstellen via SetGDIPlusOptions.
v3.9.11 2026-04-30
- Cairo-rendering van PDF-afbeeldingen met color-key transparency (een /Mask color-range array in de image dictionary) is opgelost. Voorheen liet de Cairo-renderer de afbeelding volledig weg wanneer een pagina een afbeelding met deze vorm van transparantie bevatte, in plaats van deze tegen de pagina-achtergrond te compositen. De fix leidt een per-pixel alphakanaal af uit de opgegeven color-key ranges en rendert het resultaat als een transparante afbeelding, met uitvoer die visueel consistent is met de GDI+-renderer.
v3.9.10 2026-04-30
- Een Cairo-renderingregressie opgelost waarbij alle pagina-inhoud na een clipped-image sequence ten onrechte werd beperkt tot de clipping rectangle van de afbeelding's. PDF-pagina's die de graphics state opslaan, een clip path toepassen, een afbeelding tekenen en daarna de state herstellen — een gebruikelijke layouttechniek voor ingekaderde of omrande afbeeldingen — renderden alle daaropvolgende tekst, vormen en graphics alleen binnen het geclipte gebied. Cairo state save en restore komen nu correct overeen met de PDF q/Q-operators, zodat de clipping region wordt weggegooid nadat de afbeelding is getekend.
v3.9.9 2026-04-29
- Een op Cairo gebaseerde PDF-renderingengine toegevoegd als derde renderingoptie naast GDI+ en PDFium. Roep SelectRenderer(2) aan vóór rendering om deze te activeren; de engine vereist cairo.dll uit de meegeleverde DLL\Cairo-map. Cairo-rendering ondersteunt dezelfde uitvoermodi als GDI+: bitmapbestand- en streamexport (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), device-context rendering en directe printeruitvoer.
- De MultiFunction View/Print-demo biedt nu een drievoudige renderer selector zodat gebruikers GDI+-, PDFium- en Cairo-uitvoer naast elkaar op hetzelfde document kunnen vergelijken zonder codewijzigingen.
v3.9.8 2026-04-29
- Twee onterechte compilerdiagnostieken in de Win32 C-runtime shim onderdrukt die verschenen in RAD Studio 13.1 en later. Een deprecation warning (W1000) werd opgewekt doordat een compiler-version capability guard niet werd doorgegeven aan compilers nieuwer dan Delphi 2009, waardoor zij compileerden tegen een deprecated memory-manager API. Een unused-variable hint (H2164) werd opgewekt voor een interne compatibiliteitsvariabele die alleen nodig is voor Delphi 7-builds; deze is nu beperkt tot het conditional block van die versie's. Beide kwesties waren uitsluitend diagnostisch en hadden geen runtime-impact.
v3.9.7 2026-04-29
- Optionele PDFium-gebaseerde paginarendering op Windows toegevoegd, inclusief BMP-streamrendering, device-context rendering, memory rendering en printeruitvoer.
- De Delphi MultiFunction View/Print-demo bijgewerkt met een renderer selector zodat gebruikers kunnen schakelen tussen de bestaande GDI+-renderer en PDFium.
v3.9.6 2026-04-29
- Afzonderlijke Inno Setup-scripts toegevoegd voor het volledige PDFlibPas-pakket en het trial-pakket, met releasegerichte uitsluitingen voor source-control metadata, build-uitvoer, IDE-caches, lokale agentbestanden en meegeleverde third-party source trees die geen onderdeel zijn van het geleverde pakket.
- De trial installer bouwt en verpakt nu trial binary libraries voor RAD Studio 11.3, 12.3 en 13.1, plus de trial Delphi-demo's, voordat het setup-uitvoerbare bestand wordt gegenereerd.
v3.9.5 2026-04-29
- Win32-library-builds onder RAD Studio 9.0 / Delphi XE2 opgelost. Het buildscript gaf een DCU output-directory-vlag door die pas vanaf Delphi 2010 bestaat; de compiler van XE2's interpreteerde de vlag anders, wat een verminkt uitvoerpad en een fatale fout opleverde voordat enig bronbestand werd verwerkt. Het script selecteert nu automatisch de juiste vlag op basis van de doelcompilerversie.
- Een gerelateerde compiler-version guard in de library source gecorrigeerd die een name-qualified runtime function aanriep die in XE4 is geïntroduceerd onder een XE2+-voorwaarde. Builds die zich richten op XE2 en XE3 lossen nu de juiste compatibility import op.
v3.9.4 2026-04-29
- Printerinstelling voor netwerkprinters en server-shared printers opgelost door paper tray, media, duplex, quality en andere printinstellingen toe te passen via de printer DEVMODE-handle in plaats van via de printer device context-handle.
v3.9.3 2026-04-29
- De meegeleverde AES-backend vernieuwd naar Brian Gladman's AES-bronnen uit 2018 op zowel Win32 als Win64. Reproduceerbare buildscripts maken het nu mogelijk om de statische AES-objecten op elk moment opnieuw uit broncode te bouwen. Daarbij werd een ABI-defect in de Pascal-bindings ontdekt en opgelost: de AES-CBC encrypt- en decrypt-functies misten hun C calling-convention declaration, waardoor Win32-builds argumenten stilzwijgend in de verkeerde registervolgorde doorgaven en mogelijk onjuiste versleutelde uitvoer produceerden. Win64-builds waren niet getroffen omdat het platform een uniforme calling convention afdwingt.
- De third-party rebuild-scripts gehard zodat de op MSVC gebaseerde zlib-, JPEG- en CRT-stub-scripts zowel vanuit de repositoryroot als vanuit de thirdparty-directory kunnen worden gestart; voorheen vereisten ze dat de working directory op de thirdparty-map stond.
v3.9.2 2026-04-29
- De JPEG 2000-backend geüpgraded van de legacy OpenJPEG 1.5 naar OpenJPEG 2.5.4 op zowel Win32 als Win64. Beide platforms gebruiken nu static object linking, zodat JPEG 2000-encoding en -decoding werken zonder extra runtime-DLL. De moderne codec brengt actuele JP2/J2K-headerafhandeling, een callback-driven stream API en verzamelde bug- en securityfixes van het upstream-project. De openbare TJpeg2000Bitmap API is ongewijzigd.
v3.9.1 2026-04-29
- JPEG-paginarendering en image-export na de libjpeg-turbo-upgrade opgelost, waardoor PdfToImage JPG-conversie en TPDFJPEGImage.SaveToStream-uitvoer op Win32 en Win64 zijn hersteld.
- Win32 libjpeg-turbo ABI-bindings gecorrigeerd zodat callbacks, structure alignment, boolean fields en memory-backed JPEG destinations overeenkomen met libjpeg-turbo 3.1.90.
- Win32 FlateDecode-streamdecompressie met de meegeleverde zlib 1.3.2-backend opgelost, waardoor het laden van PDF xref streams voor bestanden zoals het PdfToImage-voorbeelddocument is hersteld.
v3.9.0 2026-04-29
- De meegeleverde JPEG 2000-backend geüpgraded van legacy OpenJPEG 1.5 naar OpenJPEG 2.5.4. JPEG 2000 laden en opslaan gebruiken nu de moderne codec, callback-driven stream API en actuele JP2/J2K-headerafhandeling, met behoud van de openbare TJpeg2000Bitmap API.
- JPEG 2000-uitvoer kiest nu automatisch een geldige OpenJPEG resolution count voor kleine afbeeldingen, en de Win32 static backend is niet langer afhankelijk van ontbrekende MSVCRT helper exports.
v3.8.1 2026-04-29
- Alle 16 cosmetische linker W1028 "Bad global symbol definition"-waarschuwingen op Win32 en Win64 zijn geëlimineerd. Source-level renames verwijderen de overbodige Pascal-side duplicaten (jpeg_std_error en de jmemnobs allocator stubs worden nu uitsluitend vanuit de obj-laag opgelost); de drie resterende bcc32 / vc64 obj-symbolen (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table) die link-resolved tegen Pascal-side data moeten blijven, worden nu ontdaan van hun COFF-symbol names via een ObjConv post-processing pass tijdens thirdparty\build-jpeg-vc64.bat. Geen wijziging in de openbare API; schone linkeruitvoer voor zowel Delphi Win32- als Win64-builds.
v3.8.0 2026-04-29
- Win64 JPEG-codec geüpgraded van IJG-style libjpeg naar libjpeg-turbo 3.1.90, waarmee de JPEG-migratie die in v3.7.0 (Win32) begon is voltooid. Zowel Win32- als Win64-paden delen nu dezelfde moderne JPEG-codec, met dezelfde SIMD-geoptimaliseerde inner loops en 30+ verzamelde CVE / fuzz-fixes van upstream. Openbare PDFlibPas API ongewijzigd.
v3.7.0 2026-04-28
- Win32 JPEG-codec geüpgraded van IJG libjpeg-6b naar libjpeg-turbo 3.1.90. Aanzienlijk snellere JPEG encode/decode via SIMD-geoptimaliseerde inner loops, plus de 30+ CVE / fuzz-fixes verzameld in libjpeg-turbo upstream. Openbare PDFlibPas API (TPDFJPEGImage class, DumpJPEG functions) is ongewijzigd; bestaande PDF/JPEG-codepaden draaien sneller zonder vereiste bronwijzigingen.
v3.6.0 2026-04-28
- Win32 zlib geüpgraded van 1.2.x naar 1.3.2. Bevat de standaard 25+ CVE / fuzz-fixes die upstream sinds 1.2.8 zijn verzameld, plus de nieuwe inflateBack9 / inflateTree9-entry points die worden gebruikt door 64-bit-window streams. Openbare PDFlibPas API (DeflateStr / InflateStr / InflateStrParms) is ongewijzigd.
- Het Win64 zlib-pad is ongewijzigd in deze release - het blijft de met Delphi meegeleverde System.ZLib-unit gebruiken.
- De Win64 link-time CRT shim PDFlibCLibs.pas (geïntroduceerd in v3.5.0) geactiveerd voor het Win32 zlib-pad, waarmee memcpy / memset / malloc / free-symbolen worden geleverd waarnaar de nieuwe zlib 1.3.2 obj-bestanden verwijzen.
v3.5.0 2026-04-28
- Nieuwe buildinfrastructuur gevendord voor de meegeleverde C image / compression libraries: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Buildscripts voor zowel Embarcadero bcc32 (Win32) als MSVC cl.exe (Win64) staan in Lib/thirdparty/ naast de source trees, zodat iedereen met RAD Studio + VS2022 de statische obj-bestanden opnieuw kan bouwen vanuit schone broncode.
- Buildinfrastructuur toegevoegd voor OpenJPEG 2.5.4. De OpenJPEG source tree zelf wordt onafhankelijk door de gebruiker opgehaald (git clone uclouvain/openjpeg into Lib/thirdparty/OpenJPEG/) zodat deze kan worden geüpgraded zonder PDFlibPas's build configuration te wijzigen.
- Lib/PDFlibCLibs.pas toegevoegd, een Win64 link-time CRT-shim die door de Win64-backend wordt gebruikt. Deze overbrugt de kloof tussen de met MSVC gecompileerde C obj-bestanden en Delphi's Win64-linkers (dcc64 / Win64x ld.lld / BCB ilink64), die msvcrt.dll niet automatisch meenemen.
v3.4.0 2026-04-28
- Generatie van encryptiesleutels, AES initialization vector en Perms permission block gehard tegen voorspelbare random number sources. Versleutelde PDFs die zijn geproduceerd op systemen die rond dezelfde wall-clock time zijn gestart, zijn niet langer triviaal te correleren; AES-256-documenten behouden nu hun volledige key strength.
- Image dictionary parsing gehard tegen misvormde of vijandige PDFs die onredelijke Width-, Height-, BitsPerComponent- of DeviceN-componentaantallen declareren. Waarden buiten bereik worden begrensd voordat pixel-buffer arithmetic plaatsvindt, waardoor crashes bij het openen van zulke bestanden worden voorkomen.
- Cross-reference- en page-tree-traversal gehard tegen documenten waarvan /Prev xref chains of /Parent page links een cyclus vormen of buitensporig diep zijn. De reader weigert misvormde structuren nu netjes in plaats van te recursen totdat de stack opraakt.
v3.3.1 2026-04-27
- De Windows-buildscripts per component gestroomlijnd. De mappen DLL/, OCX/ en Dylib/ bevatten geen afzonderlijke build12-* / build13-*-varianten meer: elk platform heeft nu één build-Win32- / build-Win64-script dat vastpint op de nieuwste RAD Studio en een optioneel "debug"-argument accepteert.
- Inline toelichtende opmerkingen toegevoegd rond de renderfixes in PDFlibRenderer.pas die al aanwezig waren in de oorspronkelijke Git-baseline. De opmerkingen documenteren waarom SetPen lijndiktes schaalt met de actieve canvastransformatie, en waarom Type 3 font CharProc d0/d1-operators hun operanden moeten consumeren. Er is geen runtimegedrag gewijzigd.
v3.3.0 2026-04-26
- Getransformeerde stroke-rendering in PDFlibRenderer.pas gerepareerd. SetPen past nu de schaal van de huidige canvastransformatie toe op PDF-lijndiktes voordat Picasso wordt aangeroepen, waardoor te grote of te kleine strokes worden voorkomen op paden waarvan de coordinaten al zijn getransformeerd. Dit repareert Type 3 glyph-contouren die als dikke, onregelmatige blokken konden worden gerenderd.
- Type 3 font CharProc d0/d1-afhandeling in de contentstreamparser gerepareerd. d0 consumeert nu zijn twee breedte-operanden, en d1 consumeert zijn zes breedte-/bounding box-operanden voordat latere tekenopdrachten worden uitgevoerd, waardoor wordt voorkomen dat verouderde operanden glyph- of padgeometrie beschadigen.