Releaseopmerkingen
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.
Laatste release
- Nieuwste versie: v3.75.6; Releasedatum: 2026-06-23
Version 3.333.0
Added
- Inspectie van incrementele revisies. Een handtekening dekt de bytes van de revisie waarin ze is geschreven, en alles wat daarna wordt toegevoegd is een afzonderlijke update waarvan de inhoud bepaalt of de handtekening nog geldt voor het document zoals het nu is.
GetDocumentRevisionCount,GetDocumentRevisionStartenGetDocumentRevisionEndleggen die revisies uit, enGetSignatureRevisionIndexzegt bij welke een handtekening eindigt GetDocumentRevisionKindrapporteert wat een update deed, als het meest ingrijpende van de objecten die ze aanraakte: administratie, validatiemateriaal, een documenttijdstempel, een handtekening, een formulierveld, een annotatie of documentinhoud. Validatiemateriaal toevoegen voor langetermijnvalidatie lijkt daardoor niet meer op het bewerken van het documentGetDocumentRevisionChangessomt elk object op dat een update toevoegde, wijzigde of verwijderde, samen met wat elk is en, voor een gewijzigd dictionary, welke sleutels werkelijk afwijkenGetDocumentRevisionsCompleterapporteert of de hele geschiedenis herstelbaar was. Een keten die verbroken, cyclisch of langer is dan de lezer volgt, laat de oudste updates ongezien, en de tellingen zijn dan een ondergrens in plaats van een antwoord- Een object waarvan de eerdere versie niet kan worden gelezen, of waarvan de stream-body nooit is vergeleken, wordt gemeld als onbepaald in plaats van als onschadelijk: een update die een pagina herschrijft terwijl het dictionary onaangetast blijft, wordt niet aangezien voor een herverpakking
Version 3.332.0
Added
ApplyPAdESLongTermValidationpromoveert een reeds ondertekend PDF naar PAdES-B-LT in één aanroep. Het bouwt het certificeringspad van de ondertekenaar vanuit de handtekening zelf, verzamelt OCSP- en CRL-materiaal voor elke schakel via de adressen die de certificaten noemen, en schrijft de certificaten en intrekkingsgegevens met een VRI-vermelding voor de handtekening in één incrementele update naar de document security store.ApplyPAdESLongTermValidationToStreamschrijft het resultaat naar een stream in plaats van een bestand- Het gedrag is configureerbaar via een
PADES_LTV_*-optiemasker: of de VRI-vermelding wordt geschreven, of OCSP-responders worden bevraagd, of op CRL's wordt teruggevallen, of uitgeversadressen worden gevolgd om het pad te voltooien, en of intrekking voor een zelfuitgegeven root wordt overgeslagen - Een lege veldnaam verwerkt elke handtekening tot één revisie; een benoemd veld verwerkt alleen die ene
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountenGetPAdESLTVErrorrapporteren wat de laatste aanroep heeft verzameld en waarom deze voortijdig stopte, zodat een gedeeltelijk resultaat over een onbereikbare responder zichtbaar is in plaats van stil- Materiaal dat identiek is aan iets dat al is voorbereid, wordt één keer geschreven en door elke handtekening die het nodig heeft gerefereerd, en een handtekening zonder leesbaar certificaat wordt gemeld in plaats van doorgestuurd als een geslaagde promotie
Version 3.331.0
Added
- Een handtekening draagt zijn eigen certificeringspad mee, zodat de materiaal die een langetermijnvalidatieprofiel nodig heeft alleen uit het ondertekende bestand kan worden gelezen.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountenGetSignatureEmbeddedCertificateDERgeven de certificaten terug die een handtekening insluit, enGetSignatureCertificateChainLengthenGetSignatureCertificateChainDERordenen ze in een pad van de ondertekenaar naar buiten toe GetSignatureContentsHashHexgeeft de sleutel terug waarmee eenAddPAdESDSSVRI-vermelding wordt aangesproken, berekend uit de handtekening zelf- Het certificaat van de ondertekenaar wordt herkend ongeacht of de handtekening het aanduidt via uitgever en serienummer of via de subject-sleutelidentificatie, en een pad stopt bij de laatste uitgever die de handtekening daadwerkelijk bevat in plaats van te doen alsof het volledig is
Fixed
- De DER-lezer wijst een gedeclareerde elementlengte af die groter is dan de gegevens in plaats van een bijna-maximale waarde zijn grenscontrole te laten overstromen, en het doorlopen van certificaatextensies leest niet meer voorbij het einde van een afgebroken of te lang certificaat. Beide zijn vanuit een vervalst document bereikbaar, dus de bovenstaande accessors blijven veilig bij niet-vertrouwde invoer
- De handtekeningaccessors lezen het document met een gedeeld handle, dus ze antwoorden terwijl een verificator of viewer het bestand al open heeft, in plaats van te falen alsof de handtekening afwezig was
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
CreateValidationReportenSaveValidationReportproduceren een gestructureerd PDF/A- en PDF/UA-1-validatierapport in XML of JSON. Elke bevinding bevat de regel-id, de standaard die hem bezit, een korte regelnaam, de ISO-clausule die hij afdwingt, een ernst en het aantal getroffen objecten, en het rapport sluit af met statistieken per standaard en op documentniveau voor geslaagd/mislukt- Een standaard die niet werd aangevraagd, wordt gerapporteerd als
not-checkedin plaats van als een stille slaag, zodat een gedeeltelijke run niet kan worden aangezien voor een schoon bilan - Build-pijplijnen kunnen nu filteren op een regel-id of een ISO-clausule in plaats van substrings in proza te matchen: de preflight-report-familie geeft eerst een menselijk rapport weer en zet die tekst om naar JSON, HTML of CSV, terwijl het validatierapport wordt samengesteld uit de ruwe controle-uitvoer en de machineleesbare velden intact houdt
Version 3.322.0
Added
- De referentie documenteert nu de vier extern gedeclareerde publieke typen die op het
TPDFlib-oppervlak worden gebruikt en eerder geen eigen pagina hadden:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoenTPDFlibWatermarkBase, waarmee de dekking van publieke gebeurtenis-, logger-, enumeratie-resultaat- en watermerktypen wordt voltooid
Version 3.321.0
Added
CheckDocumentPolicyevalueert declaratieve huisregels zoalsFonts.NotEmbedded = 0,Security.Encrypted = noofDocument.Pages <= 500ten opzichte van het document en rapporteert elke regel als geslaagd of mislukt met de werkelijke waarde, wat een opnamepoort voor uitgevers, archieven en drukkerijen tot configuratie maakt in plaats van handgeschreven inspectiecode
Version 3.320.1
Fixed
- Tekst tekenen in een PDF/A-modus zonder eerst een lettertype te laden leidt niet meer tot een fout: PDF/A vereist dat elk lettertypeprogramma wordt ingesloten, dus de impliciete snelkoppeling naar een ingebouwd lettertype werd geweigerd en er bleef geen lettertype geselecteerd, en
DrawTexten de andere tekst-aanroepen crashten in plaats van te tekenen - Het impliciete lettertypepad lost nu een echt inbedbaar font op terwijl een PDF/A-modus actief is, zodat tekst die zonder een expliciete
AddTrueTypeFont-aanroep wordt getekend wordt ingesloten en conform blijft; een directeAddStandardFont-aanroep wordt onder PDF/A nog steeds geweigerd - Op hosts waar geen inbedbaar font kan worden opgelost, valt het tekenen terug op de ingebouwde metrieken in plaats van te crashen en meldt het conformiteitstekort via
LastErrorCode605, zodat het bestand kan worden onderschept voordat het als conform wordt gepubliceerd
Version 3.320.0
Added
GetDocumentFeatureReportgeeft in één aanroep een gestructureerd functierapport terug — documentmetadata, pagina- en objecttellingen, versleutelingsstatus, lettertype- en afbeeldingsinventarissen, tagging en overzichten, formuliervelden, handtekeningen, bijlagen en de byte-uitsplitsing per categorie — ter vervanging van de twaalf afzonderlijke query's die een catalogiserings- of opnamepijplijn voorheen moest samenstellen
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSortenSetCollectionItemValuebouwen PDF-portefeuilles bovenop de bestaande bijlagen, zodat een set ingesloten bestanden wordt gepresenteerd als een doorzoekbaar pakket met eigen kolommen, sorteervolgorde en waarden per bestand in plaats van een gewone bijlagenlijstGetCollectionViewenGetCollectionFieldCountrapporteren de presentatiemodus en het aantal gedeclareerde kolommen van een geladen portefeuille
Version 3.318.1
Fixed
- Tekstextractie-optie 12 (geroteerde tekst negeren) verwijdert nu geroteerde runs ongeacht hoe ze draaien: een kwartslag met de klok mee en een kwartslag tegen de klok in werden vroeger verschillend behandeld, zodat zijwaartse marge-notities in de ene richting werden verworpen en in de andere werden teruggegeven
- Dezelfde optie behoudt scheefstaande tekst die alleen wordt vervormd, zoals een synthetische cursief, en de tolerantie schaalt nu met de tekstgrootte en de paginatransformatie, zodat grote scheefstaande koppen niet langer worden verworpen alsof ze geroteerd waren
Version 3.318.0
Added
DecodeAllStreamsvouwt de gecomprimeerde streams van een document in plaats uit, zodat opslaan een kopie oplevert waarvan de inhoud-streams, metadata en structuur direct door diff-tools, forensische controle en support-workflows kunnen worden gelezen; afbeeldingen, predictie-streams en kruisverwijzings-streams behouden hun codering, en object-streams worden eerst gerealiseerd zodat er niets verloren gaat
Version 3.317.0
Added
SetTrappedenGetTrappeddeclareren en lezen de trapping-status van het document die PDF/X vereist, geschreven als de/Trapped-naam die de specificatie voorschrijft in plaats van als een tekstreeksSetOutputIntentSubtypeenGetOutputIntentSubtypeherlabelen de output-intent, zodat een geladen kleurprofiel eenGTS_PDFX-drukvoorwaarde kan beschrijven in plaats van deGTS_PDFA1-archiveringsvoorwaarde die de PDF/A-modi creëren
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyenGetEncryptEmbeddedFilesOnlybeperken AES-versleuteling tot ingesloten bestanden: het document opent en rendert in elke lezer zonder wachtwoordprompt terwijl de bijlagen versleuteld blijven, de standaardregeling voor facturen, medische dossiers en zaakdossiers waarvan de voorbladen openbaar zijn maar de lading niet
Version 3.315.0
Added
- Tekstextractie-optie 18 roteert runs die bij 90, 180 of 270 graden zijn geschilderd naar het horizontale leeskader en groepeert elke kwartslag apart, zodat geroteerde marge-notities, tabelkoppen en grafiekaslabels worden geëxtraheerd als leesbare regels in plaats van te vermengen met de rechtopstaande tekst of te worden verworpen
Fixed
DASetTextExtractionOptionsaccepteert optie 16 (afbreking-verwijdering) en optie 17 (woordsplitsing op tekenkloof) in plaats van ze af te wijzen, en het extractiepad met directe toegang stuurt nu de opties 15, 16 en 17 door naar de extractor, zodat verwijdering van onderstreping-regels, afbreking-verwijdering en tekenkloof-splitsing op bestandshandles gelden zoals op een geladen document
Version 3.314.0
Added
GetFontHasToUnicoderapporteert of het geselecteerde lettertype een Unicode-afbeelding bevat, en de lettertype-inventaris krijgt een overeenkomend veldHasToUnicodeper lettertype plus eenNoToUnicodeCount-samenvatting, zodat documenten kunnen worden gecontroleerd op extractie-veilige en naar PDF/A-*u of PDF/UA converteerbare lettertypes vóór verwerking
Version 3.313.0
Added
SetPDFAModekrijgt modus 8 voor PDF/A-2u (ISO 19005-2 Level U), het conformiteitsniveau dat Unicode-tekstafbeeldingen declareert zonder ingesloten bestanden toe te staan, waarmee de PDF/A-2-familie wordt voltooid naast de bestaande 2b- en 2a-modi
Version 3.312.0
Added
GetObjectByPathenGetObjectByPathCountlezen elk knooppunt van de objectboom via padexpressies zoalsRoot/Pages/Kids[0]/MediaBox[2]ofpages[0]/Type— typen, scalaire waarden, geserialiseerde vormen en elementtellingen in één aanroep, ter vervanging van handgeschreven objectwandelen voor metadata-sondes, conformiteit-steekproeven en supportdiagnostiek
Version 3.311.0
Added
SetBlackPointCompensationdeclareert zwartpuntcompensatie (ON, OFF of Default) voor verdere tekenbewerkingen via de PDF-2.0-/UseBlackPtComp-grafische status, waardoor prepress- en proof-uitvoer donkertoon-ICC-conversies kunnen vastleggen die voorheen viewer-privé waren; de documentversie wordt automatisch verhoogd en PDF/A-modi wijzen de status af
Version 3.310.0
Added
SetCompressionLevelenGetCompressionLevelmaken het deflate-niveau zichtbaar voor elke compressie die de bibliotheek uitvoert: 0 behoudt de standaard SIMD-versnelde engine, 1 bevoordeelt de doorvoer en 9 perst archieven het kleinstRecompressStreamsher-deflate elke gewone FlateDecode-stream van het geselecteerde document op het huidige niveau en behoudt per stream de kleinste codering, waardoor documenten die oorspronkelijk met een snelle compressie-instelling zijn geschreven krimpen zonder hun inhoud aan te raken
Version 3.309.0
Added
SetObjectStreamModeenGetObjectStreamModevoegen een driestanden object-stream-controle toe: uitschakelen, genereren (standaard) of behouden, waarbij behouden de oorspronkelijke gecomprimeerde groepering van het geladen bestand's intact houdt en de containers letterlijk schrijft, wat conversies van bestaande PDF-1.5+-bestanden goedkoper maakt omdat er niets wordt uitgepakt of hergegroepeerd
Changed
- In behouden-modus worden leden die sinds het laden zijn bewerkt gepromoveerd tot objecten op het hoogste niveau zodat hun wijzigingen worden opgeslagen, en elk overgebleven gecomprimeerd lid selecteert automatisch de binaire kruisverwijzings-streamvorm
Version 3.308.0
Added
CheckDocumentStructurevoert een structurele gezondheidscontrole uit in één aanroep: elk object en elke stream wordt door zijn decoder gedwongen, gewone Flate-streams worden strikt geverifieerd tegen de zlib-eindmarkering zodat afgekapte gegevens worden gevat, en het rapport markeert ontbrekende trailers, onoplosbare catalogi en pagina's, niet-ondersteunde versleutelingshandlers en per byte-scan herstelde bestanden met bevindingen per object en een samenvattingsregel
Version 3.307.0
Fixed
- Beschadigde documenten die kruisverwijzings-streams gebruiken, worden nu met succes hersteld: de ruwe reconstructie herstelt de leden van gecomprimeerde object-streams en, wanneer nergens in het bestand een trailer-sleutelwoord bestaat, synthetiseert de trailer uit de meest recente bereikbare documentcatalogus, zodat een defecte startxref-offset dergelijke bestanden niet langer onopenbaar maakt
Version 3.306.0
Added
ExportDocumentDataschrijft de document-informatiesleutels, de hele bladwijzerboom en de paginalabel-bereiken als bewerkbare platte tekst in het klassieke dump_data-regelformaatImportDocumentDatapast hetzelfde formaat terug toe — informatiesleutels worden bijgewerkt, de bladwijzerboom wordt herbouwd met nestingsniveaus en doelpagina's, en paginalabel-bereiken worden vervangen — wat bulk-bladwijzerbewerking en metadata-migratie tussen documenten mogelijk maakt in één aanroep per richting
Version 3.305.0
Added
AuditDocumentSpacesplitst het byte-gebruik van het document's per categorie uit — afbeeldingen, lettertype-programma's en woordenboeken, inhoud-streams, Form-XObjects, object-streams, ingesloten bestanden, metadata, structuurboom, annotaties, pagina's-boom en overig — met objecttellingen, byte-totalen en percentages, en beantwoordt waarom een bestand zo groot is als het is en welke optimalisatie zich het best terugbetaalt
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTextenGetStructTreeItemIntPropertylezen de structuurboom van een getagd document als een afgevlakte diepte-eerst itemlijst — elementtypen (ruw en rol-gemapd), alternatieve en werkelijke tekst, taal, titels, marked-content-id's, paginanummers en ouder/kind-relaties
Changed
- De structuurboomlezer beschermt tegen beschadigde documenten: referentiecycli, objectnummers buiten bereik en bomen die dieper dan 64 niveaus zijn genest, worden afgekapt in plaats van te blijven draaien
Version 3.303.1
Fixed
- Doorzichtige onderlaag-stempels die door
StampTextenStampImageworden gemaakt, lekken hun dekking niet meer in de oorspronkelijke pagina-inhoud — de transparantie-status is nu beperkt tot de stempel zelf, zodat de pagina zijn volle dekking behoudt
Version 3.303.0
Added
OverlayDocumentPagesstempelt de pagina's van een ander geopend document op de pagina's van het geselecteerde document, één bronpagina per doelpagina, boven of onder de bestaande inhoud — briefhoekpapier, doorlopende pagina-achtergronden en gescande formuliersjablonen in één aanroep- De bronuitputting is configureerbaar: stoppen, door de bronpagina's cyclen, of de laatste bronpagina herhaaldelijk blijven afspelen; een verdere optie voorkomt dat de stempel wordt vergroot buiten zijn natuurlijke grootte
Changed
- Documentstempels worden gepast op de CropBox van de doelpagina's en rechtop geplaatst op pagina's die een
/Rotate-item dragen, en elke bronpagina wordt één keer geïmporteerd als een gedeeld Form-XObject zodat herhaalde sjablonen nooit hun resources dupliceren
Version 3.302.0
Fixed
- AES-256-wachtwoorden worden nu vóór het hashen met SASLprep (RFC 4013) verwerkt, zodat wachtwoorden die niet-ASCII-spaties, zachte afbreekstreepjes, compatibiliteitstekens of combinatiereeksen bevatten correct openen in Acrobat en andere conforme lezers
- Het openen van AES-256-documenten probeert eerst het standaard voorbereide wachtwoord en valt terug op de verouderde byte-vorm, zodat bestanden die door eerdere releases met niet-ASCII-wachtwoorden zijn geschreven blijven openen
Added
- Foutcode 604 meldt een AES-256-wachtwoord dat door SASLprep is verworpen omdat het verboden codepunten bevat of de bidirectionele regels overtreedt
Version 3.301.0
Added
SplitDocumentToFilesbarst het geselecteerde document uiteen in een batch uitvoerbestanden met elk een vast aantal pagina's, met behulp van een%p-bestandsnaamplaatshouder
Changed
- Batch-splitsen parseert het brondocument één keer en kopieert elk deel uit dezelfde in-memory structuur, ter vervanging van de herhaalde volledige her-parse die een lus over
ExtractFilePagesvoor elk bereik uitvoert
Version 3.300.0
Added
CollateDocumentsvoegt pagina's uit meerdere geopende documenten in rotatie samen in het geselecteerde document, waarbij per ronde een configureerbaar aantal pagina's uit elke bron wordt gehaald (A1, B1, A2, B2, …)CollateDocumentsExaccepteert een paginabereiklijst per bron waarin dalende bereiken zoals3-1een bron omkeren, zodat voor- en omgekeerde achterzijde-scannerpassen in één aanroep in leesvolgorde worden samengevoegd
Changed
- Ingeschaalde samenvoegingen importeren elke bron via één object-map en interleaved door pagina-herordening, zodat lettertypes en afbeeldingen die binnen een bron worden gedeeld slechts één keer worden geschreven, ongeacht de groepsgrootte
Version 3.299.0
Added
SetDeterministicDocumentIDenGetDeterministicDocumentIDschakelen de bestands-id in de trailer om naar een reproduceerbare waarde zodat identieke invoer identieke uitvoer-bytes oplevert voor build-caching, inhoud-adresseerbare opslag en regressievergelijking op byteniveauSetDocumentIDSeedlevert een expliciete seed voor de reproduceerbare bestands-id; zonder een seed wordt de id afgeleid van de documentmetadata, de versie-header en het aantal pagina's
Changed
- Reproduceerbare bestands-id's worden alleen bij volledige opslagacties ververst; incrementele updates en versleutelde documenten behouden hun bestaande id zodat handtekeningen en met wachtwoord beveiligde bestanden correct blijven openen
Version 3.298.0
Added
AddLinkToArticleThreadenSetOutlineArticleThreadverbinden pagina-hotspots en overzichten met een artikelthread of bead via standaard Thread-actiesAddActionNextArticleThreadenPDF_ACTION_BUILDER_THREADvoegen Thread-acties toe aan geketende, formulier-, pagina- en documentactieworkflows
Changed
- Thread-actiedoelen gebruiken stabiele indirecte thread- en beadverwijzingen en wijzen ongeldige indexen af zonder de doelcontainer te wijzigen
- Formulierveld-actiebouwers wijzen extra acties af terwijl de PDF/A-modus actief is, waarbij het PDF/A-verbod op veld- en widget-
/AA-woordenboeken behouden blijft
Version 3.297.0
Added
- De
DLflat-DLL-referentie documenteert nu elkA-achtervoegsel ANSI-(char) ingangspunt en voegt 353 referentiepagina’s toe die hun Unicode-tegenhangers weerspiegelen met nauwkeurigePAnsiCharDelphi- enconst char *C-handtekeningen BufferUtilities,DirectAccessFunctionalityenMiscellaneousFunctionszijn herbouwd als schone functiegroepindexpagina’s, aangestuurd door het gedeelde categoriestelsel, waarbij defecte opmaak, verkeerd gelabelde secties en ontbrekende chips zijn gecorrigeerd- De navigatie-index en de gedeelde zoekindex dekken nu de volledige DLL-oppervlakte voor zowel Unicode- als ANSI-aanroepers
Fixed
- Verouderde vermelding
SetLoggeris verwijderd, aangezien er geen bijbehorend symbool in de broncode stond; de gedocumenteerde eigenschap isLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoenRemoveAlternateImagebieden getypeerd ontwerpen en inspectie van weergave- en afdrukafbeeldingsvarianten- Alternatieve afbeeldingen kunnen worden gekoppeld aan een optionele-inhoudsgroep of een lidmaatschapswoordenboek, terwijl een variant per basisafbeelding kan worden gekozen als afdrukstandaard
Changed
- De ingebouwde renderer selecteert nu alternatieve afbeeldingen voor optionele inhoud wanneer een basisafbeelding verborgen is en houdt de afdrukstandaard aan op afdrukbestemmingen
FindImagesregistreert nu alternatieve afbeeldings-XObjects die bereikbaar zijn vanuit paginabronnen, zodat geïmporteerde varianten bruikbare afbeeldingshandles ontvangen
Version 3.295.0
Added
AddArticleThreadmaakt standaardconforme artikelnavigatie aan met getypeerde metagegevens, geordende paginarechthoeken, cirkelvormige kralenkoppelingen en per-pagina kraal-arraysArticleThreadCount,GetArticleThreadInfoenGetArticleThreadBeadinspecteren gemaakte of geïmporteerde artikelthreads met begrensde doorloop van beschadigde koppelingscycli
Changed
DeletePagesverwijdert nu artikelthreads die al hun kralen verliezen en herstelt de cirkelvormige koppelingen van overlevende threads- De verwijderde-paginatracking behoudt nu stabiele indirecte paginaverwijzingen, zodat de outline- en artikelopschoning niet kan afdwalen wanneer de paginaboomcursor beweegt
Version 3.294.0
Added
SearchTextBatchzoekt meerdere tekstquery’s terwijl elke pagina-extractie resident is en retourneert de oorspronkelijke op nul gebaseerde query-index bij elke trefferSearchTextBatchEachbiedt dezelfde zoekactie in één doorgang via een streaming-callback met voortgangsrapportage en annulering
Changed
- Tekstzoek met enkele query en batch delen nu één matching-kern, waarbij de semantiek voor hoofdletters, hele woorden en paginabereik behouden blijft terwijl herhaalde pagina-extractie, tekstplooi en treffergeometrie worden vermeden
Version 3.293.1
Fixed
- De rasterisatie van mesh-shading compileert nu op elke Delphi-versie, waarbij
E2089 Invalid typecastbij real-naar-drijvendekomma-conversies in de GDI+-painter wordt opgelost - Parallelle batch-paginarendering compileert nu op Delphi XE5 en XE6, waar
System.Threadingniet beschikbaar is; oudere toolchains vallen terug op het seriële renderpad zoals op niet-Windows - Het detecteren van printermogelijkheden genereert geen incompatibele-typen-fout meer op verouderde Delphi-versies door de
SetPrinter-aanroep af te stemmen op de rest van de afdrukcode - De certificaatopsomming van het certificaatarchief bouwt nu op RAD Studio 10.3 Rio, dat eerder afbrak met een interne compilerfout tijdens het optimaliseren van de opsommingsroutine
Version 3.293.0
Added
- Lidmaatschapswoordenboeken voor optionele inhoud kunnen nu worden gemaakt, bijgewerkt en opgesomd met de compatibiliteitsbeleiden
AnyOn,AllOn,AnyOffenAllOff - Geneste PDF-1.6-
/VE-zichtbaarheidsuitdrukkingen ondersteunenAnd,OrenNotvia een compacte prefix-weergave die wordt gedeeld door Delphi en C++Builder
Changed
- Scopes voor optionele inhoud, inhoudsstreams, vastgelegde pagina’s, afbeeldingen, formuliervelden en annotaties accepteren nu ofwel een groepshandle of een lidmaatschapshandle
- Rendering evalueert eerst geldige
/VE-uitdrukkingen en valt terug op/OCGsplus/Pvoor misvormde of niet-ondersteunde uitdrukkingen
Fixed
- Geneste optionele inhoud kan inhoud niet langer zichtbaar maken wanneer een omsluitende groep of lidmaatschap verborgen is
- Lidmaatschapswoordenboeken zonder effectieve optionele-inhoudsgroepen laten de zichtbaarheid nu ongewijzigd, zoals vereist door de PDF-specificatie
Version 3.292.0
Added
EnumAttachmentsrapporteert nu aanmaak- en wijzigingsdatums, hexadecimale controlesommen, gekoppelde-bestandsrelaties en bestandsspecificatie-objectnummers voor zowel document- als annotatiebijlagenValidateAttachmentChecksumverifieert op verzoek een bijlage-payload tegen de opgeslagen controlesom, terwijl nieuw ingebedde bestanden nu automatisch controlesom-metagegevens ontvangen
Fixed
SetEmbeddedFileAFRelationshipaccepteert nu dezelfde op 1 gebaseerde ingebedde-bestandsindexen als de rest van de bijlage-API, inclusief documenten met één bijlage
Version 3.291.0
Added
DeduplicateResourcesconsolideert nu exact dubbele afbeelding-, Form-, patroon-, shading-, functie-, ICC-profiel-, font-programma-, CMap-, Type-3-CharProc-, ingebedde-bestand-, metagegevens- en PostScript-streams over een geladen document- Resourcededuplicatie biedt onafhankelijke typevlaggen, dry-run-analyse, optionele weesverzameling en gedetailleerde hashing-, vergelijkings-, payload-, referentie- en percategorie-statistieken
Changed
- Dubbelingsdetectie canoniseert volledige stream-woordenboeken onafhankelijk van de sleutelvolgorde, heeft elke kandidaat-payload eenmaal met SHA-256 en bevestigt overeenkomende buckets byte voor byte voordat verwijzingen worden omgeleid
- Exact-equivalentiegroepen behouden het laagste objectnummer en -generatie voor deterministische uitvoer, terwijl misvormde direct-object-cycli en semantische woordenboekverschillen onsamengevoegd blijven
Version 3.290.0
Changed
PurgeUnusedResourcesberekent nu een transitieve afhankelijkheidsafsluiting over tiling-patronen, Type-3-glyphen, annotatie-verschijningsstatussen, ExtGState-soft-mask-groepen, afbeeldingen, shadings en geneste kleurruimten- De standaardopschoonopties schakelen nu patroon-, Type-3-, verschijnings-, soft-mask- en afbeeldingsafhankelijkheidsanalyse in, met onafhankelijke vlaggen voor aanroepers die een beperktere scan nodig hebben
- Geneste inhoudsprogramma’s en afhankelijkheidsvermeldingen worden gecached, gedeelde resource-scopes worden geprivatiseerd vóór snoeien en misvormde cycli worden begrensd door actieve-stream- en diepte-wachters
Fixed
- Paginabronnen die alleen worden gebruikt via afbeeldingskleurruimten, Indexed-basen, Separation- of DeviceN-alternatieven, Pattern-onderliggende ruimten, ICCBased-alternatieven of shading-woordenboeken worden niet langer als ongebruikt verwijderd
- Resources die alleen worden gebruikt door Type-3-CharProcs, tiling-patrooncellen, annotatie-verschijningen of transparantie-soft-mask-groepen worden niet langer uit hun eigen of geërfde scope verwijderd
Version 3.289.0
Added
PurgeUnusedResourcesverwijdert nu benoemde paginabronnen waarnaar niet wordt verwezen door geselecteerde inhoudslagen en kan gedetailleerde percategorie-statistieken retourneren- Resourceopschoning ondersteunt nu paginabereiken, dry-run-rapportage, voortgang en annulering, recursieve Form-XObject-analyse, verwijdering van verouderde ProcSets en optionele weesobjectverzameling
Changed
- Resource-analyse volgt nu de PDF-naam-hoofdlettergevoeligheid, geërfde Form-resources, aangepaste inline-afbeeldingskleurruimten en alle zeven standaardresourcecategorieën
- Herhaalde Form-programma’s worden gecached, gebruikte resource-sets gebruiken gesorteerd opzoeken en woordenboekvermeldingen worden in aflopende volgorde verwijderd voor voorspelbare prestaties bij grote documenten
Fixed
- Het verwijderen van woordenboekvermeldingen invalideert nu sleutelindexen van grote woordenboeken, zodat latere zoekopdrachten geen verouderde vermeldingen kunnen retourneren
- Misvormde streams en onbekende operatoren behouden standaard hun volledige resource-scope, terwijl gedeelde of geërfde resource-woordenboeken vóór mutatie worden gekloond
Version 3.288.0
Added
- Digitale handtekeningen kunnen nu volledige DocMDP-certificerings- en FieldMDP-veldvergrendelingsstructuren uitzenden, met structurele toestemmingsrapporten voor elke geselecteerde handtekening
- RFC-3161-documenttijdstempels, handtekening-tijdstempels, PAdES-B-T-tokeninjectie, certificaatketen-validatie, OCSP-bewijs en DSS- of VRI-validatiemateriaal beschikken nu over volledige ontwerp- en verificatieworkflows
- RichMedia-annotaties ondersteunen nu ingebedde assets, activerings- en deactiveringsinstellingen, poster-verschijningen, opsomming, extractie en verwijdering
- Poster-afdrukken ondersteunt nu vectorpagina-impositie, overlap- en snijmarkeringen, harde-marge-bewuste plaatsing en herbruikbare tegelplannen
- Getagde tabellen zenden nu semantische Table-, TR-, TH- en TD-structuur uit met stabele identifiers, koptekstkoppelingen, spans, herhaalde kopteksten en verduisterde decoratie
- De viewer biedt nu toetsenbord-toegankelijke AcroForm-bewerking voor tekst-, keuze-, selectievak-, radio- en drukknopvelden terwijl acties naar de hosttoepassing worden verzonden
Changed
- Op Type-1-functie gebaseerde en Type-4-tot-7 mesh-shadings worden nu gerenderd via native functie-evaluatie en begrensde mesh-tessellatie
- ICCBased-kleurweergave deelt nu gecachte transformaties over afbeeldingen en shadings terwijl het kalibratiekleurruimte-gedrag behouden blijft
- Incrementele opslagen bouwen nu object-streams en kruisverwijzingsstreams consistent opnieuw en geselecteerde handtekeningen worden geverifieerd tegen hun eigen ondertekende revisie
Fixed
- SHA-1-handtekening-tijdstempelaanvragen hashen nu de handtekeningwaarde van de ondertekenaar met SHA-1 in plaats van terug te vallen op SHA-256
- Afgewezen veldvergrendelingsvervangingen verwijderen niet langer een voorheen geldige veldvergrendelingsconfiguratie
- Radiowidgets met dubbele verschijningsstatusnamen behouden nu de geselecteerde widget en houden zustervidgets uit
Version 3.287.0
Changed
- Inline-afbeeldingswoordenboeken volgen nu PDF-commentaar-, scheidingsteken-, letterlijke-, hexadecimale-, array- en woordenboekgrenzen met begrensd nesten
- Inline-afbeeldings-payloads gebruiken nu formaatbewuste beëindiging voor raw-, DCT-, ASCII85-, ASCIIHex-, RunLength- en Flate-gegevens
- Flate-payload-ontdekking voert nu een begrensde decompressie uit vanaf de inhoudsstream-offset met exacte gecomprimeerde-byte-verantwoording, terwijl gekoppelde verliesvrije filters een end-to-end uitvoerplafond delen
- ASCII85-, ASCIIHex-, LZW-, predictor-, kleurprofiel- en hulpafbeeldings-streams dwingen nu begrensde tussenuitvoer af zonder overgrote tijdelijke toewijzingen
Fixed
- Misvormde of afgekapte inline-afbeeldingen lezen niet langer voorbij brongegevens, loopen niet op niet-beëindigde waarden en behouden geen verouderde status bij decoderhergebruik
- Gecomprimeerde afbeeldingsrijen berekenen nu component-bits vóór byte-afronding, wat onjuiste lengtes voor laag-bit-RGB- en meerrij-afbeeldingen voorkomt
- Resource-kleurruimten behouden nu hun oorspronkelijke namen terwijl Lab-, indirecte ICCBased- en DeviceN-componentaantallen worden afgeleid en Indexed-palet-streams onder strenge grenzen worden gedecodeerd
- Inline-afbeeldingsgrenzen wijzen nu consistent ongeldige afmetingen, bitdiepten, niet-onsteunde filters, onveilige filterketens, gecomprimeerde streams en dubbelzinnige eindmarkeringen af
- Indexed-kleurweergave valideert nu elke palettoegang en wijst afgekapte opzoekgegevens af in plaats van voorbij de gedecodeerde tabel te lezen
- PNG-voorspellers 10 tot en met 15 decoderen nu correct voor Flate- en LZW-streams, wijzen ongeldige rijfilters af en valideren alle rij- en statusgrootten vóór toewijzing
- JPEG- en JPEG-2000-payloads verifiëren nu hun gecodeerde afmetingen, componenten, precisie, markerstructuur, dooslengtes en gedecodeerde opslagvoetafdruk vóór afbeeldingstoewijzing
- Inline-afbeeldingsvalidatie beperkt nu zowel gecomprimeerde als uitgebreide bitmap-opslag en begrenst ICC-profielen, JBIG2-globals en terminale filterparameters
- Binaire filter-payloads die ingebedde eindmarkeringstekst bevatten, gaan nu door naar de eerste kandidaat die begrensde formaatvalidatie doorstaat
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExcan recursively enumerate Form XObject instructions with configurable depth, cycle protection and depth-first execution ordering- Content snapshots now expose invocation-tree identity, containing stream and parent XObject information, resource-scope identity, Form traversal status and descendant counts
- Standalone content trackers can register scoped fonts and initialise isolated Form execution state with matrix concatenation and bounding-box clipping
Changed
- Recursive content tracing selects each Form resource dictionary independently, inherits invoking resources for compatible legacy Forms, preserves inherited font identity and caches decoded Form programs across repeated invocations
Version 3.266.0
Added
- Text runs returned by
GetTextRunsnow carry the glyph origin (OriginX/OriginY) and the full text matrix components (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) captured by replaying BT, Td, TD, Tm and T* alongside the show operators, so consumers can locate glyphs without a separate text-funnel pass - Mesh shading decoding now routes Lab, CalRGB and CalGray colour spaces through the colour manager instead of falling through to black, producing correct fills for non-DeviceRGB free-form and coons patches
- Redaction now emits a real
/Subtype /Redactannotation with/Rect,/ICinterior colour and optional overlay text alongside the existing content removal, so redaction-aware viewers mark the sanitized region - Library operations emit structured log records at load and save boundaries through the previously dormant
Logger, with ISO-8601 UTC timestamps and a cachedTStreamWriterfile sink that no longer reopens the log file on every line - New
Tests.Memoryfixture guards create/draw/save/free andNewDocumentcycles against heap regression, and the console test runner now enablesReportMemoryLeaksOnShutdown - EMF interpretation now counts unknown or private records via the
UnknownRecordCountproperty so silent metafile gaps are observable
Changed
- Dictionary key lookup (
TPDFDictionary.FindIndexByKeyName) builds a lazy open-addressing hash index for dictionaries with more than 16 entries, turning the linear scan that dominated renderer Resources/ColorSpace/Font/ExtGState lookups into an O(1) probe - sRGB gamma conversion (
XYZ2RGB) uses a shared 4096-entry lookup table instead of threePower(x, 1/2.4)calls per pixel, and Lab-to-XYZ cubing now uses direct multiplies; both are the dominant per-pixel cost when decoding Lab or ICC-based images - Page lookup (
TPDFPageTree.GetPage) returns the cached page dictionary on repeat access instead of re-walking the page tree every call - Content-stream operator dispatch (
ContentOperatorFromName) buckets the 73 operators by first byte, cutting the per-token linear scan to a short residual compare - PDF/A colour-space audit now recurses into the base or alternate space of Indexed, Separation, DeviceN and ICCBased up to a depth of 8, so a hidden DeviceCMYK tint transform or bare Lab name is flagged rather than passing silently
- Shaped-font finalize now walks the used-glyph set recorded at draw time instead of scanning all 65536 glyph slots four times per save
- String escape routines (literal-string, XFDF, stamp and variable token expansion) build output through
TStringBuilderor two-pass allocation, removing O(n^2) concatenation from save and form-export hot paths - AES stream encrypt/decrypt reuse their chunk buffer across loop iterations instead of reallocating per block
- Composite-glyph parsing in the TrueType parser grows the components array geometrically instead of one element at a time
- Mesh shading
ReadBitsreads the minimum covering bytes in one pass andWriteBitspre-sizes the output buffer, eliminating per-bit reallocation - Painter circle control point uses a precomputed kappa constant and arc squaring uses
Sqrinstead ofPower
Fixed
- Fixed a non-Windows compile break in
PDFlibParallelwhere the stub body signature forPDFlibRenderPagesParalleldid not match the interface declaration
Version 3.265.0
Added
- Added 59 C++Builder console demos to align the C++Builder demo suite with Delphi, bringing the total from 33 to 92 demos covering the same API surfaces
- Added Demo/C++Builder/index.html expansion from 35 to 92 entries with Navigation, Color & ICC, Barcode & media, and Structure & compliance sections
Fixed
- Fixed all 33 existing C++Builder cbproj files that were missing 20 library units (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc) from their DelphiCompile list, which prevented every C++Builder demo from compiling
Version 3.264.0
Added
- Content graphics-state snapshots now resolve
Dooperands as image, form or PostScript XObjects and report their resource names, object numbers and transformed bounds - Form snapshots expose the original
/Matrixand/BBoxtogether with resource, group, transparency-group and reference-form indicators - Standalone content trackers can pre-register XObject streams through
RegisterXObject
Changed
- Page content-state enumeration now precompiles selected-page XObject resources and calculates invocation bounds from all four transformed corners
Version 3.263.0
Added
- Content graphics-state snapshots now expose current path bounds, current point, path complexity, pending clipping rules and effective clipping bounds
- Standalone content trackers can initialise an explicit clipping boundary through
SetInitialClipBounds
Changed
- Page content-state enumeration now follows delayed
WandW*clipping, exact transformed cubic extrema,q/Qclipping restoration and selected-pageCropBoxboundaries
Version 3.262.0
Added
- Content graphics-state snapshots now report font writing mode, exact per-instruction text displacement and whether font metrics were resolved
- Standalone content trackers can provide font measurements through
OnMeasureText
Changed
- Page content-state enumeration now advances text matrices for
Tj,TJ,'and"using simple or composite font metrics, horizontal scaling, spacing and vertical writing rules
Version 3.261.0
Added
- Content graphics-state tracing can now resolve page
ExtGStateresources, including transparency, blending, overprint, soft masks, device controls and embedded font references TPDFContentStateTrackercan pre-register external graphics-state dictionaries for standalone content-program analysis
Changed
- External graphics-state parameters now apply cumulatively and participate in complete
q/Qsave and restore snapshots
Version 3.260.0
Added
- Added single-pass effective graphics-state tracing for structured content programs and complete selected pages
- Snapshots expose CTM, text matrices, line style, dash pattern, colours, text state and graphics-state stack depth before or after each instruction
Changed
- Image placement enumeration now maps all four unit-square corners, producing correct bounds under rotation and shear
Version 3.259.0
Added
- Added typed time, special-pattern and arbitrary-mask helpers for interactive form fields
- Added range validation with independently optional zero-safe bounds
- Added sum, average, product, minimum and maximum field calculations with automatic calculation-order registration
Security
- Generated JavaScript string values now escape quotes, backslashes, control characters and JavaScript line separators
Version 3.258.0
Added
- Added typed
SetOCGStateaction creation for form-field events, existing actions and action chains - Optional-content actions preserve left-to-right state changes, repeated groups and the optional radio-button relationship preference
Changed
- Optional-content action enumeration now returns canonical group handles that round-trip through the writer APIs
Version 3.257.0
Added
- Added complete explicit remote-destination writing with zero-based pages, all standard fit types, nullable XYZ values and tri-state window preferences
- Added complete launch-action writing for portable files, Windows parameters, default directories and open or print operations
- Existing action handles can now update these payloads or append them to action chains without container-specific duplicate APIs
Security
- Remote go-to and launch action builders now reject PDF/A mode before modifying an action chain
Version 3.256.0
Added
- Remote go-to action inspection now reports named and explicit destinations, zero-based target pages, fit types, coordinates and zoom values
- Launch action inspection now reports Windows application parameters, default directories and open or print operations
- Action information distinguishes an absent
/NewWindowpreference from an explicit false value and identifies array-based targets
Version 3.255.0
Added
- Added typed builders for remote named-destination and external application launch actions
- URI action builders now support coordinate-map requests through the standard
/IsMapflag - The new action kinds work across lifecycle, form-field and chained-action APIs through the existing extended builder interface
Version 3.254.0
Added
- Added 14 Delphi API-coverage demos for library surfaces that had no dedicated demo: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction, and PadesDssDemo
- Added a Navigation section, Color & ICC section, Barcode & media section, and Structure & compliance section to the Delphi demo index, bringing the total from 56 to 92 listed demos
- Added Readme.en-us.html guides for the 20 demos that previously shipped without one
Changed
- Applied the project Formatter.config across all Delphi demo sources so operator spacing, indentation, and keyword casing follow one style, and set NewLineBeforeThen to False so If...Then stays on a single line
- Hardened error handling across the classic GUI demos: SaveToFile return values are now consistently checked, TPDFlib and secondary object lifetimes are always protected by try/finally, and failure messages include LastErrorCode
Fixed
- Fixed inverted SaveToFile polarity in ImageToPdf that treated success as failure, and stopped AddTrueTypeSubsettedFont from opening a stale file when the save failed
- Fixed resource leaks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt, and PdfPermission where TPDFlib, TStream, TBitmap, TOpenDialog, or TStringList instances could escape on an exception path
- Removed dead code in AddFormattedTitle (unused RectParts allocation, redundant try/except around StrToFloatDef) and MultiFunction (overwritten SetTextSize call)
Version 3.253.0
Added
- Added typed action details for thread, sound, movie, optional-content, rendition, transition and 3D-view actions
- Added reusable action-handle lookup and ordered optional-content state enumeration
- Added complete PDF transition records covering replacement, Fly, Push, Cover, Uncover and Fade styles
Fixed
- Wipe and Glitter transitions now store their direction in
/Di, read page display duration from the page dictionary and clear both transition and timing entries - Standard pre-PDF-1.5 transition styles no longer force a PDF 1.5 output version
Version 3.252.0
Added
- Added single-pass form-field action discovery with typed action details across primary, widget and field triggers
- Added complete calculation-order enumeration, per-field lookup and removal for interactive forms
- Extended bulk form-field snapshots with calculation order and action count
Changed
- Widget lifecycle triggers now support page-open, page-close, page-visible and page-hidden actions with the required PDF 1.5 version handling
Version 3.251.0
Added
- Added single-pass named-destination enumeration across legacy catalog entries and modern name trees with resolved page and view parameters
- Added named-destination removal, complete push-button captions, button text positioning and form-field mapping names
- Extended bulk form-field snapshots with mapping names, button captions and button text position
Fixed
- Name-tree editing now supports direct destination values and uses unambiguous multi-node index encoding
Version 3.250.0
Added
- Added single-pass form field snapshots with field identity, type, page, flags, values and Choice state
- Added typed Choice-field flag queries plus validated selected-index and top-visible-index accessors
Fixed
- Single-selection Choice fields no longer retain a multi-selection
/Iarray, and switching from multi-select to single-select now replaces the old/Varray with a string value
Version 3.249.0
Added
- Added one-pass stateful text search traversal so applications can iterate cached hits without extracting pages twice
- Added bulk form value export and name-based application with optional read-only field protection
Version 3.248.0
Added
- Added retained Viewer selections with page-space geometry, extracted text, enumeration, clearing and a vetoable marquee event
- Added exact current-viewport bitmap capture and file output including persistent overlays
Version 3.247.0
Added
- Added independent Viewer controls for user form editing and annotation activation
- Added configurable foreground colour for text and choice form editors
Version 3.246.0
Added
- Added typed line ending styles, shape interior colours, link highlight modes, FreeText alignment, Text annotation open state and Caret symbols
- Annotation setters validate compatible subtypes and automatically raise the minimum PDF version where required
Version 3.245.1
Fixed
- Corrected FastReport export page sizing and memo layout so A4 reports retain their intended scale, text stays within memo bounds and unconfigured memo frames remain hidden
Version 3.245.0
Added
- Added
OnPasswordso applications can supply another password after an encrypted document rejects the initial credential - Password retries now work consistently for file, stream and string loads, expose the next attempt number and allow the handler to cancel
Security
- Password callbacks are limited to sixteen total attempts and every retry uses a fresh parser and decryption state
Version 3.244.0
Added
- Added
SetXMPPropertyExfor safely writing scalar properties in caller-defined XMP namespaces - Custom XMP values are escaped through the XML DOM, repeated writes replace the matching namespace property and invalid or reserved XML names are rejected
Version 3.243.0
Added
- Added typed document lifecycle actions for before close, before save, after save, before print and after print triggers
- Added typed page open and close actions with shared support for URI, named, JavaScript, form and destination action builders
- Added action inspection and removal methods for every document and page lifecycle trigger
Version 3.242.0
Added
- Added
SaveChangesto append changes to the originally loaded file and automatically reload the updated xref chain for repeated incremental saves SaveChangesvalidates the reload password before writing and preserves the selected public document handle after reload
Changed
AppendToFilenow rejects a target whose current length differs from the loaded source, preventing stale incremental offsets from being appended to an externally changed file
Version 3.241.0
Added
- Added
GetLastOutlineandGetLastChildOutlinefor direct access to the tail of a bookmark list - Added
GetOutlineChildCountandGetOutlineSiblingIndexfor lightweight bookmark tree inspection without allocating a full tree snapshot
Version 3.240.0
Added
- Added
SaveAllAttachmentsExwith overwrite, skip and automatic rename conflict policies plus a per-attachment naming callback - Attachment exports now reduce requested names to safe leaf names and protect Windows reserved device names
Fixed
- Fixed
SaveAllAttachmentsreturning without writing files because its attachment snapshot was counted but not allocated and populated
Version 3.239.0
Added
- Added
OnPageMouseDown,OnPageMouseMoveandOnPageMouseUpso Viewer hosts receive one-based page numbers and top-down PDF point coordinates independent of zoom, scrolling and view rotation - Added
RegionAtClientPoint,ActiveRegionandOnActiveRegionChangeto distinguish links, non-link annotations and form fields as the pointer enters or leaves them - Added
CreatePDFlibViewerDefaultPopupMenuandInstallPDFlibViewerDefaultPopupMenu, which compose the existing Viewer action classes into a ready context menu for copy, zoom, fit, rotate, navigation, save and print
Version 3.238.0
Added
- Added
OnOperationProgresswith typed operation kind, lifecycle phase, current and total units, percentage and detail text while preserving the classicOnProgresspercentage callback - Load, save, search, merge and page-render file, stream and string entry points now report starting and terminal phases; operations with intermediate progress also report
opRunning - Setting
CancelduringopStartingoropRunningactivates the existingAbortstate, providing one cancellation path for old and new callers
Fixed
LoadFromFilenow preserves error code 404 for a wrong password instead of overwriting it with the generic load error 401 after cleanup
Version 3.237.0
Added
- Added
SearchTextEachandTPDFlibSearchHitEventto emit every text hit immediately without allocating or sizing a result array SearchTextandSearchTextEachnow report page progress throughOnProgressand honour bothAbortand callback cancellation; callback cancellation uses the existing abort state untilResetAbort- The Viewer search panel and search-highlight layer now consume the streaming API in one pass, removing their former 256-row and 512-highlight limits
Fixed
- Whole-word search now continues past an earlier substring occurrence in the same text block to find a later correctly bounded match
Version 3.236.0
Added
- Added
GetPrinterCapabilitiesto capture a live printer-driver snapshot without starting a print job - The typed
TPDFlibPrinterCapabilitiesresult includes paper IDs, names and millimetre dimensions, input-bin IDs and names, duplex, colour, landscape and collation support, the printer port and the maximum driver-reported copy count - Drivers that omit paper or bin metadata still return the remaining capabilities with empty arrays, while invalid printer names return a fully cleared snapshot
Version 3.235.0
Added
- Added
SendDocumentByMailfor saving the loaded document to a temporary PDF and delivering it as an SMTP attachment through the built-in Windows CDO provider - Added the reference-counted
IPDFlibMailProviderextension point so applications can supply another transport, support non-Windows hosts and test mail workflows without network access - Each send uses an isolated temporary directory, sanitises the attachment display name and removes both the PDF and its directory after the provider returns;
GetLastMailErrorreports validation, save, transport and platform failures
Version 3.234.0
Added
- Added variable placeholders to stamp, header and footer text:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>and<%LongTime%>expand per page alongside the classic &-tokens - Any custom
<%name%>placeholder resolves through the newOnCalcVariableevent, which receives the name and the page number and supplies the replacement - running numbers, batch codes and client fields stamp without pre-processing the text; without a handler unknown placeholders stay verbatim
Version 3.233.0
Added
- Added superscript/subscript detection to text extraction: the new
GetTextBlockVAlignreports each extracted text block's baseline classification (0 = baseline, 1 = superscript, 2 = subscript) relative to its visual line, so chemical formulas, exponents and footnote markers can be recognised - A block classifies as super-/subscript when it is markedly smaller than the line's dominant text and its vertical centre sits above/below the dominant centre within one text height
Version 3.232.0
Added
- Added character-level word splitting to text extraction:
SetTextExtractionOptions(17, 1)re-splits show-text runs that carry no space characters into words wherever a per-character advance step is much wider than the run's median glyph advance - documents that paint whole lines as a single operator with kerning gaps standing in for spaces now extract as separate words inGetPageTextmodes 7 and 9-11 - The advance arrays stay aligned with the widened text, so block quads and per-character width outputs remain consistent
Version 3.231.0
Added
- Added layout-preserving fixed-grid text export:
GetPageText(11)maps the page geometry onto a monospace character grid - rows cluster by baseline, every block lands at its column computed from the average character width, and shorter cells pad with real spaces - so tables and forms keep their visual alignment in plain-text viewers, terminals and diffs without relying on tab stops - The reference page for
GetPageTextnow documents the reading-order (9), tab-separated table (10) and fixed-grid (11) modes
Version 3.230.0
Added
- Added dehyphenation to text extraction:
SetTextExtractionOptions(16, 1)re-joins words hyphenated across line breaks ("inter-" at a line end followed by "national" becomes "international") in the line-oriented outputs ofGetPageTextmodes 7 and 9 - The heuristic only merges when a letter precedes the hyphen and a lowercase letter starts the next line, so numeric ranges, proper nouns and sentence-initial capitals keep their hyphens
Version 3.229.0
Added
- Added the
OnBeforeSnapshotevent to theTPDFlibViewercontrol: it fires before a snapshot drag is captured with the dragged region, and setting Handled cancels the default clipboard capture so applications can process the region themselves - Exposed
PrefetchEnabled: the background pre-render worker can now be switched off and on at run time (the worker stops immediately and restarts on the open document) - Exposed
DiskCacheMaxDocuments: the number of documents the cross-session disk page cache keeps before pruning is now tunable (default 10)
Version 3.228.0
Added
- Added precise navigation to the
TPDFlibViewercontrol:GoToPagePointjumps to a page and scrolls a given page point to the top-left of the viewport, so link destinations and search hits land exactly in view - Added programmatic scroll control:
ScrollBypixel stepping, read/writeHScrollPos/VScrollPosproperties (ideal for synchronising two side-by-side viewers over the same document), andGetScrollPosForPagereporting each page's scroll anchor in continuous mode - Added public coordinate bridges
ClientPointToPageandPageRectToClientRectconverting between client pixels and page user space through zoom, rotation and scroll; the internal hit-testing now shares the exact geometry of the paint path and also works on unparented (headless) controls
Version 3.227.0
Added
- Added view-state events to the
TPDFlibViewercontrol:OnZoomChangefires on every effective-zoom move (explicit zoom, preset steps, fit-mode recomputation on resize, rotation or DPI change) andOnHScroll/OnVScrollfollow the scroll position, so toolbars and status displays stay in sync without polling - Dragging the vertical scrollbar thumb now shows a floating "Page N / M" bubble that previews the page the view will land on - a big help in long documents; the
ScrollHintEnabledproperty (on by default) turns it off
Version 3.226.0
Added
- Completed the fill-and-save loop in the
TPDFlibViewercontrol:SaveToFileandSaveToStreamwrite the displayed document - committed form edits included - back to disk or a stream (any open in-place editor commits first) - Multiline text fields now edit in a proper multi-line memo: Enter inserts a line break, Ctrl+Enter commits, Escape cancels; single-line fields keep the plain Enter-commits behaviour
- Tab and Shift+Tab cycle the in-place editor through the document's editable text and choice fields, following each field's page;
FocusNextFormFieldexposes the same navigation programmatically
Version 3.225.0
Added
- Added preset-ladder zooming to the
TPDFlibViewercontrol:ZoomInStepandZoomOutStepsnap the zoom to the standard preset sequence (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 percent), starting from the zoom currently in effect so fit modes step naturally; the toolbar zoom actions now use the same ladder - Ctrl+mouse wheel now zooms along the preset ladder while a plain wheel keeps scrolling
- Added keyboard shortcuts: Ctrl+'+'/'-' step the zoom, Ctrl+1/2/3 switch to actual size, fit width and fit page, and Shift+Up/Down jump to the first and last page
Version 3.224.0
Added
- Added
CreateSelfSignedCertificatewith Delphi, DLL and ActiveX entry points: generates a self-signed RSA certificate (SHA-256 signature, configurable subject, validity and key length) and exports it with its private key to a password-protected PFX file, ready forSignFileand the sign-process APIs - so signing workflows can be built and tested without an external certificate authority - The certificate is created in a throwaway key container that is deleted after the export; only the PFX keeps the key material. Self-signed certificates are meant for testing and internal documents - viewers flag them as untrusted unless installed explicitly
Version 3.223.0
Added
- Added
TPDFlibShapeWatermarkto the composable watermark layer: rectangles, circles, ellipses, polygons, Bezier curve chains and straight lines stamp onto a page range with fill and stroke colours, line width and opacity, through the sameApplyWatermarkentry point as text and image watermarks - Rectangle, circle and ellipse shapes size themselves from Width/Height; polygon, curve and line shapes take their geometry from
SetPoints(local X,Y pairs), so the nine-point Position grid and custom placement apply to every shape kind; degenerate geometry (too few points) is rejected
Version 3.222.0
Added
- Added
AddLinkToEmbeddedPDFwith Delphi, DLL and ActiveX entry points: a page hotspot that opens a PDF embedded in the current document (by its EmbeddedFiles name) and jumps to a chosen page there, using the standard embedded go-to (/GoToE) action of ISO 32000-1 §12.6.4.4 with an optional new-window request; the document version rises to PDF 1.6 automatically GetAnnotActionInfoand its outline/form-field siblings now recognise embedded go-to actions, reporting the newakGoToEkind together with the embedded target name, the parent/child target relationship, the optional file specification and the /NewWindow flag
Version 3.221.0
Added
- Added
SetSignProcessAppearanceTextwith Delphi, DLL and ActiveX entry points: digital signatures can now show an automatically generated visible text appearance composed of the signer name, reason, location and signing date, with optional descriptive labels ("Signed by:", "Reason:", ...) selected through a bit mask - The text block lays out inside the signature field rectangle in Helvetica with a configurable colour; font size 0 auto-fits the lines to the field. A field image set through
SetSignProcessFieldImageFromFilekeeps precedence, and document time-stamp processes ignore the text appearance
Version 3.220.0
Added
- Added interactive form filling to the
TPDFlibViewercontrol: clicking a checkbox or radio button toggles it, and clicking a text or choice field opens an in-place editor over the field (Enter commits, Escape cancels, leaving the editor commits); read-only fields are left alone and the changed page re-renders automatically - Every write fires the new
OnFormFieldValueChangedevent, andHighlightFormFieldswithFormHighlightColorpaints a translucent backdrop over each fillable area so users can spot form fields - Added the programmatic counterparts
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldandCommitInplaceEditor, driving the same machinery without mouse input
Version 3.219.0
Added
- Added annotation interaction to the
TPDFlibViewercontrol: clicking a non-link annotation fires the newOnAnnotClickevent with the page, annotation index and subtype, andAnnotAtPagePointexposes the hit test programmatically (Popup companions are skipped) - Hovering an annotation now shows its Contents text as the control's hint (the
AnnotHintsswitch, on by default, works with the standardShowHintproperty) - Added
SaveAnnotAttachmentToFileto write a FileAttachment annotation's embedded file to disk, completing click-to-save attachment workflows in the viewer
Version 3.218.0
Added
- Added a cross-session disk page cache to the
TPDFlibViewercontrol: settingDiskCacheFolderpersists rendered pages on disk so a recently viewed document reopens instantly without re-rendering - Cached pages are keyed by a fingerprint of the document's path, size and last write time, so editing the file automatically invalidates its stale pages; the cache keeps up to ten documents and prunes the least recently used ones
- Added the
DiskCacheHitscounter reporting how many page renderings the disk cache saved
Version 3.217.0
Added
- Added the
PDFlibViewerActionsunit with twenty ready-madeTActiondescendants forTPDFlibViewer, so toolbars and menus work without glue code: page navigation (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), view rotation (clockwise/anticlockwise), printing, file open and save-as dialogs, copy selected text, and the five mouse-tool mode switches - Each action targets a viewer through its
Viewerproperty and keeps its enabled state (document open, page position, selection present) and checked state (active zoom fit or mouse tool) up to date automatically; all actions register in the losLab PDF category for the Action List editor - Added
TPDFlibViewer.EffectiveZoomPercentreporting the zoom actually in effect (including computed fit-width/fit-page factors) so zoom steps can build on it
Version 3.216.0
Added
- Added search-hit highlighting to the
TPDFlibViewercontrol:HighlightSearchHitssearches the whole document and paints a translucent bar over every match that stays in place while scrolling, zooming and rotating, withClearSearchHighlights,SearchHighlightCountand a configurableSearchHighlightColor TPDFlibSearchPanel.RunSearchnow also paints the hit bars in the attached viewer (the newHighlightInViewproperty, on by default, turns this off), so search results are visible on the pages, not just in the hit list
Version 3.215.0
Added
- Added mouse tool modes to the
TPDFlibViewercontrol through the newViewerModeproperty:vmSelecttext selection (default),vmHandpan-by-dragging with a grab cursor (a plain click still follows links),vmZoommarquee zoom that magnifies the dragged band to fill the viewport,vmSnapshotregion capture to the clipboard, andvmHighlightpersistent translucent region highlighting - Added
CaptureRegionto render any client region (pages plus highlights) into a caller-owned bitmap, theOnSnapshotevent andSnapshotToClipboardswitch for snapshot handling, andAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountwith a configurableHighlightColorfor page-anchored highlights that survive zoom, rotation and navigation
Version 3.214.0
Added
- Added printing to the
TPDFlibViewercontrol:PrintDocshows the standard Windows print dialog (printer choice, page range, copies, collation) and hands the job to the library's printing engine, whilePrintDoc(False)prints the whole document to the default printer without any UI - Added
PrintDocRangefor fully programmatic viewer printing with an explicit printer name, page range, copy count and collation flag
Version 3.213.0
Added
- Added view rotation to the
TPDFlibViewercontrol:RotateClockwise90andRotateAntiClockwise90turn the displayed pages in 90-degree steps, and theViewRotationproperty reads or sets the angle directly (0, 90, 180 or 270) - Rotation is a pure view attribute: the document is never modified, link clicking and text selection keep working at every angle, fit-width and fit-page zoom modes adapt to the rotated page shape, and opening a new document resets the view to 0 degrees
- Rotated page bitmaps are cached per angle, so switching between angles reuses previous renderings instead of re-rendering
Version 3.212.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept simple FormCalc-style predicate selectors such as$data.Receipt.Detail.[Total_Price > 200].Descriptionand update every matching data node when a predicate selects a subset
Version 3.211.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept Data DOM class selectors#dataGroupand#dataValuewith numeric or wildcard occurrences, allowing class-based paths such as$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept the$recordroot in non-record-processing packets, so paths such as$record.Taxand$record/Detail[0]/Total_Priceresolve from the outer data record element
Version 3.209.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard border style attributes
width,style, anddashesfrom PDF annotation/BSvalues, and annotation imports restore those attributes on inserted annotations
Version 3.208.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
creationdateandopacityattributes from PDF annotation/CreationDateand/CAvalues, and annotation imports restore those attributes on inserted annotations
Version 3.207.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
flagsnames from PDF annotation/Fvalues, and annotation imports restore those names to the inserted annotation flags
Version 3.206.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept direct child wildcard selectors such as$data.Receipt.*.Total_Priceto read or update matching child branches without selecting same-name fields on the parent node
Version 3.205.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept descendant selectors such as$data..Total_Priceand$data.Receipt..Total_Priceto read or update the first matching descendant data node
Version 3.204.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept theparentproperty in paths such as$data.Receipt.Detail[1].parent.Taxto read or update a selected node's parent sibling data
Version 3.203.0
Changed
- Improved XFA datasets SOM occurrence handling:
GetXFAFormFieldValueandSetXFAFormFieldValuenow support[*]selectors such as$data.Receipt.Detail[*].Total_Priceto read or update every matching repeated data node
Version 3.202.0
Changed
- Improved XFA SOM path compatibility: XFA datasets and template field APIs now preserve literal periods in slash-delimited field paths and accept escaped periods such as
Line\.Itemin dot-delimited SOM paths
Version 3.201.0
Changed
- Improved XFA datasets path compatibility: XFA field value APIs now accept slash-delimited paths after standard data SOM roots such as
$data/...,xfa.datasets.data/..., andxfa.datasets/...
Version 3.200.0
Changed
- Improved XFA datasets SOM compatibility: XFA field value APIs now accept the standard
!data...short form, including slash-delimited!data/...paths
Version 3.199.0
Changed
- Improved XFA template path compatibility: template editing APIs now accept slash-delimited field paths returned by XFA field-name enumeration, including
$template/...paths
Version 3.198.0
Changed
- Improved XFA datasets namespace compatibility: field value APIs now read and update data nodes by local XML name when the business data inside the datasets packet uses its own namespace prefix, and field-name enumeration returns prefix-free paths
Version 3.197.0
Changed
- Improved XFDF annotation interchange: annotation exports now include the common
nameanddateattributes from PDF/NMand/M, annotation imports restore those values on inserted annotations, andSetAnnotStrPropertynow accepts tag 104 for annotation modified dates
Version 3.196.0
Changed
- Improved XFA field-name enumeration: field list APIs now scan every top-level data record in the datasets packet and return leaf data fields without adding container groups as fields
Version 3.195.0
Changed
- Improved XFA datasets compatibility: XFA field value APIs now read and update complete XDP packets whose datasets packet uses an unprefixed
dataelement
Version 3.194.0
Fixed
- Improved XFA template field updates: XFA template field APIs now accept standard template SOM roots such as
$templateandxfa.template, and template-only changes in complete XDP streams are saved correctly
Version 3.193.0
Changed
- Improved XFA field addressing: XFA field value APIs now accept standard data SOM roots such as
$dataandxfa.datasets.datain addition to relative field paths
Version 3.192.0
Changed
- Improved XFA XML packet handling: XFA streams with UTF-16 byte order marks or UTF-16 XML byte patterns now decode before XML parsing, so UTF-16 encoded form values remain available through XFA field read/write APIs
Version 3.191.0
Changed
- Improved XFA packet authoring:
SetXFAFromStringnow creates the requiredAcroFormcontainer when a document does not already have form data, replaces stale parsed XFA state when a complete XFA packet is stored, and keeps the saved packet available through XFA field read/write APIs
Version 3.190.0
Changed
- Improved XFDF annotation interchange: annotation exports now write the common
colorattribute from the PDF/CRGB array, and annotation imports now restorecolor="#RRGGBB"values into the inserted annotation color array
Version 3.189.0
Added
- Added XFDF annotation interchange APIs:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFandImportAnnotationsFromXFDFStringnow read and write ISO 19444<annots>data for text-style annotation comments, including page, rectangle, title, subject and plain contents data
Version 3.188.0
Changed
- Improved XFDF rich text field import: fields with
<value-richtext>now preserve the rich text XML in the fieldRVvalue while still applying the plain<value>fallback when present
Version 3.187.0
Changed
- Improved XFDF form-data interchange for multi-select choice fields: repeated
<value>elements now import into the selected-value array, and exporting a multi-select choice field now writes one<value>element per selected item instead of flattening them into one escaped text node
Version 3.186.0
Changed
- Improved XFDF form-data export for rich text fields: fields with an
RVrich text value now include a<value-richtext>element while preserving the plain<value>fallback
Version 3.185.0
Changed
- Improved XFDF form-data import for rich text fields: when a field provides
<value-richtext>without a plain<value>, the importer now extracts the XHTML text content and applies it to the matching AcroForm field instead of skipping the field
Version 3.184.0
Changed
- Improved XFDF form-data interchange: exports now use the standard XFDF namespace with
xml:space="preserve", emit nested<field>elements for hierarchical AcroForm names, skip non-terminal parent field values, write file exports as UTF-8, and import whitespace-flexible XFDF with nested fields, single-quoted attributes, CDATA, XML entities, and numeric character references
Version 3.183.0
Added
- Added
SanitizeDocument(Flags)which strips sensitive content in one call: removes all global JavaScript, removes the catalog OpenAction, strips /A actions from every annotation, blanks Author/Subject/Keywords/Creator/Producer metadata (both /Info and XMP), and optionally deletes all annotations. Flag bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONcombine;SANITIZE_ALLapplies every strip. Closes the classic data-leak hole where redaction removes visible content but leaves metadata or hidden scripts recoverable - Added
TPDFAnnots.RemoveAnnotAction(Index)to strip the /A action dictionary from an individual annotation (used by SanitizeDocument, also useful standalone)
Version 3.182.0
Added
- Image elements returned by
EnumPageElementsnow carry their real placement rectangle (Left/Top/Right/Bottom) instead of zeros. Backed by a newTPDFContentProgram.EnumImagePlacementsmethod that walks the content stream tracking the CTM (cm/q/Q) and maps eachDooperator's 1x1 unit square into page coordinates - Added four showcase demos: DocumentProperties (DocInfo/page-box/rotation/transition/viewer-preferences/XMP round-trip), FormProperties (per-field property grid: type/value/readonly/MaxLength/MultiLine/description), SignatureValidator (enumerate signature fields + verify + signer certificate), Reader (VCL TPDFlibViewer with open/navigate/zoom/copy-text)
Version 3.181.0
Added
- Added
SetXMPPropertyexposing the existing schema-aware XMP engine (PDFlibXMP) through the public facade: set any Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:), or XMP Media Management (xmpMM:) property by namespace + key without hand-writing RDF XML - Added
ImportFormDataFromFDF/ImportFormDataFromFDFStringwhich parse an FDF /Fields array (each<< /T (name) /V (value) >>) and apply each value to the matching AcroForm field by title, inverting the EscapePDFText octal/paren escaping. Closes the asymmetric export-only gap - Added
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfor XFDF (XML Forms Data Format) bidirectional interchange - the modern XML counterpart of FDF - Made the six namespace-scoped XMP setters (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) public onTPDFlibXMPso advanced callers can drive the engine directly
Version 3.180.0
Added
- Added
SearchAndReplaceTextInContentwhich performs TRUE content-stream text replacement (rewriting the Tj/TJ/'/" show-text operators in place viaTPDFContentProgram.ReplaceTextRun), unlike the existing mask-basedSearchAndReplaceTextthat only overlays a rectangle on top of the original glyphs. The original text is gone from the stream and cannot be recovered. Locates hits viaSearchText, maps each hit rect to its covering instruction viaFindInstructionsInRect, rewrites, and writes the layer back
Version 3.179.0
Added
- Added a structured internal logger (
TPDFlibLogger) in a newLib/PDFlibLogger.pasunit with four levels (Debug/Info/Warn/Error), a host callback (OnLog), an optional thread-safe file sink, and an error-code-to-message map (PDFlibErrorMessage) that finally gives the existing numeric codes (1xx/3xx/4xx/5xx) human text. Exposed onTPDFlibvia theLoggerproperty - Added
RenderPagesToFilesParallelwhich renders a page range to one file per page using aTTaskpool with oneTPDFlibinstance per worker (TPDFlib is not thread-safe) and per-threadCoInitializefor GDI+ apartment safety. Scales near-linearly with CPU cores for CPU-bound raster output
Version 3.178.0
Added
- Added
EnumCertificatesto enumerate every certificate in a Windows system store ("MY", "Root", ...) returning subject, issuer, serial number, validity window, HasPrivateKey, and Qualified (eIDAS QCStatements extension, OID 0.4.0.1862.1.7, detected via a new built-in DER decoder in PDFlibASN1) - replaces the previous single-cert-by-CNSetSignProcessCertFromStorelimitation - Added
SetSignProcessCertFromStoreByHandleto select a signing certificate by raw PCCERT_CONTEXT handle obtained from enumeration, letting callers pick by any criterion (qualified filter, validity, fingerprint) rather than only by Subject CN - Added
RedactRegionwhich truly removes text, vector paths, and image XObjects whose painted area intersects a rectangle (editing the content stream so removed content cannot be recovered, unlikeMaskRectwhich only covers it), with optional black fill and /Redact annotation. Backed by a CTM-tracking content-stream analyser in PDFlibContentModel (FindInstructionsInRect) - Added minimal DER decoder functions (
DERDecodeLength,DERFindExtensionByOID) to PDFlibASN1 for in-process certificate extension inspection without CryptDecodeObjectEx
Version 3.177.0
Added
- Added page stitching APIs that compose existing pages into new layouts via vector Form XObject capture (preserving full vector fidelity, unlike content-stream concatenation):
StitchPageOverlayoverlays one page onto another at a position with optional opacity,StitchPagesSideBySideplaces two pages left/right on a new wider page, andStitchPagesVerticallystacks a page range into a new tall poster-style page - Added a composable watermark template layer in a new
Lib/PDFlibWatermark.pasunit:TPDFlibWatermarkBasewith nine-point positioning (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermark, andTPDFlibCompositeWatermarkwhich applies a list of sub-watermarks recursively across a shared page range - Added
TPDFlib.ApplyWatermarkas a convenience entry point that delegates to a watermark template's own page range and settings
Version 3.176.0
Added
- Added named render-output format constants (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) that map 1:1 to the integerOptionsvalues accepted byRenderPageToFile,RenderPageToStream,RenderPagesToFiles, andRenderDocumentToFile - Added
TPDFlibMetafileFormatenum and the convenience methodsRenderPageToMetafileStreamandRenderPageToMetafileFile, which accept a named metafile variant (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) instead of a bare integer - Added EMF+ Dual output mode (Options value 11 / mfEMFDual), which records both GDI and GDI+ commands in the same metafile for compatibility with older GDI-only consumers
- Added
TPDFlibClipboardFormatenum andRenderPageToClipboard, which places a rendered page on the Windows clipboard as an enhanced metafile (CF_ENHMETAFILE), a DIB bitmap (CF_DIB), the page Unicode text (CF_UNICODETEXT), or all three at once - Added a new
Lib/PDFlibClipboard.pasunit with low-level Win32 clipboard placement helpers used byRenderPageToClipboard - Added full per-monitor DPI awareness to
TPDFlibViewer: a new publicScreenDPIproperty, aCreateWndoverride that auto-detects the host monitor DPI viaGetDpiForWindow(with aGetDeviceCapsfallback), and aWM_DPICHANGEDhandler that rebuilds the layout and clears the bitmap cache when the window moves between monitors - Added
TPDFRenderer.SetEMFPlusMetafileTypeto select between EMF+ Only and EMF+ Dual recording at the renderer level
Fixed
- Fixed the
RenderPageToFilereference page where the Options value list was misplaced in the Page row and the Options cell was empty
Version 3.175.3
Added
- Added a Lib/PDFlibTableExport.pas unit that renders any TDataSet (FireDAC, ClientDataSet, query result) into a paginated PDF table with styled header, zebra striping, right-aligned numeric columns, and automatic page continuation, plus a Demo/Delphi/DataSetExport console demo that loads the RAD Studio customer.FDS sample via FireDAC and exports it
Version 3.175.2
Added
- Added end-to-end Demo/ReportBridges projects that build a minimal report in FastReport, QuickReport, and ReportBuilder and export it to PDF through the matching Addons bridge, with a dedicated build-ReportBridges.cmd that supplies the engine source paths and gating symbols so the standard demo build still compiles the projects as stubs
Version 3.175.1
Added
- Added a Delphi JBIG2 options matrix demo that sweeps SymbolExtract, SkipBlackDots, BlackDotSize, and LossyLevel combinations against CCITT G4 and Flate baselines, with per-row PDF, CSV, and summary outputs
- Added a Delphi Pattern showcase demo covering axial and radial RGB shaders, a Coons-patch mesh shader, and a custom tiling pattern applied as fill, stroke, and text colour
- Added a Delphi CCITT fax matrix demo comparing Group 3 1-D, Group 3 2-D, and Group 4 compression with BlackIs1 and Interpolate option bits, reporting each output size and the resulting /Filter name
- Added FastReport, QuickReport, and ReportBuilder export bridges under Addons that render a prepared report into a PDFlibPas PDF via the engine's native object, metafile, and DrawCommand surfaces respectively
Version 3.175.0
Changed
- Expanded the WorkflowGallery demo with an annotation variant matrix that records text highlight fills, markup styles, note icons, free text, caret, and stamp annotations in companion CSV and HTML reports
Version 3.174.0
Changed
- Expanded the C++Builder AdvancedWorkflowMatrix demo to map action navigation, PDF/A and AcroForm workflows, font diagnostics, streaming delivery, and the latest scan-compression helpers into the generated matrix reports
Version 3.173.0
Added
- Added the DeliveryWorkflowMatrix Delphi demo for streamed Web and CGI PDF output, page-thumbnail validation, and watermark delivery workflows using one generated PDF byte buffer
Version 3.172.0
Added
- Added outline tree convenience APIs for ordered sibling insertion, child creation, subtree deletion, and preorder outline enumeration with parent, sibling, level, destination page, open-state, and title details
Version 3.171.0
Added
- Added the FontDiagnosticsMatrix Delphi console demo for CJK and Unicode font paths, TrueType subset updates, installed-font probes, document font enumeration, and font diagnostics reports
Version 3.170.0
Added
- Added the CanvasMigrationMatrix Delphi console demo for Canvas DC migration, raw content and path entry points, Delphi color helpers, pattern-filled text, watermarking, page thumbnail workflows, and rendered validation previews
Version 3.169.0
Added
- Added dedicated LayerCompositionMatrix, TransparencyMaskMatrix, and ComplianceFormWorkflowMatrix Delphi console demos for optional-content print/export policy, Pattern/Form XObject composition, transparency mask comparison, PDF/A-1b success and failure examples, AcroForm action workflows, appearance rebuilds, and visible signature templates
Version 3.168.0
Added
- Added dedicated ImageCompressionMatrix and SecurityPermissionMatrix Delphi console demos with generated PDF, CSV, and HTML reports for image compression strategy selection, scan compression, JPEG render quality, and encrypted permission profile auditing
Version 3.167.0
Added
- Added named helper APIs for JBIG2 bitmap encoding, EMF import options, AcroForm event actions, and chained actions so callers can use explicit option switches instead of composing integer bitmasks manually
Version 3.166.0
Added
- Added a runnable C++Builder AdvancedWorkflowMatrix console demo with PDF, CSV, and HTML outputs that map advanced canvas migration, EMF import, image compression, AcroForm, signature, security, PDF/A, optional-content, pattern, and Form XObject workflows to C++Builder project entry points
Version 3.165.0
Added
- Added a Delphi action navigation matrix demo that demonstrates open-document actions, document-level JavaScript, embedded-file links, remote GoTo links, AcroForm event actions, Submit/Reset/Hide link helpers, and chained Next actions with PDF, CSV, and HTML outputs
Fixed
- Fixed remote file link helpers so AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest, and local file launch links create one annotation and return instead of looping indefinitely
Version 3.164.0
Toegevoegd
- Een Delphi-PDF/A-guardmatrixdemo that checks early rejection or allowed-path decisions for PDF/A mode setup, transparency, blend modes, encryption, JavaScript, multimedia, embedded files, and PDF/A-3 associated-file workflows, with generated PDF, CSV, and HTML reports
Version 3.163.0
Toegevoegd
- Een expliciete ReportAdapter-brugmatrix for FastReport, QuickReport, ReportBuilder, DBGrid, and custom canvas export paths, including generated CSV and HTML mapping output plus a PDF page that shows the reusable adapter strategy
Version 3.162.0
Toegevoegd
- Een geavanceerde workflow-demomatrix that generates concrete outputs for canvas migration, EMF import options, image compression comparisons, AcroForm action workflows, visible empty signatures, security permissions, PDF/A-1b checks, optional content, tiling patterns, Form XObjects, DBGrid-style table export, and large-file peak memory reporting
Version 3.161.0
Toegevoegd
- Delphi-hulpfuncties voor compacte opbouw van open-documentacties, form-field visibility event actions, TColor and gray color setters, and direct raw content, path, text, and matrix content stream injection
Version 3.160.0
Toegevoegd
- Delphi-hulpfuncties voor bitmap-naar-JBIG2-gescande-afbeeldingscompressie, one-call image mask and color-key transparency setup, GoTo action chaining, and readable AcroForm event names for JavaScript or existing action assignment
- Uitgebreid
ImportEMFFromFileExenImportEMFFromStreamExso theirOptionsflags can force bitmap import, enable EMF color-image JPEG recompression, and request GDI+ processing controls
Version 3.159.1
Gewijzigd
SaveToStreamen het opslaan via gebonden outputstreams verbeterd so large PDF stream objects are written in bounded chunks instead of copying each stream object into one intermediate output string
Version 3.159.0
Toegevoegd
- Hulpfuncties voor afbeeldingsplaatsing toegevoegd that draw or fit a specified image and release its handle immediately afterward, with Delphi, DLL, and ActiveX entry points for lower peak memory in one-use image generation workflows
RenderPageToMonochromeFileExtoegevoegd voor 1-bit BMP-rendering met drempelconversie en opschoning van geïsoleerde zwarte pixels vóór workflows voor compressie van gescande afbeeldingen
Version 3.158.1
Toegevoegd
- Delphi-workflowdemo's voor herbruikbare rapportachtige export, RichEdit-to-EMF rich text import, and combined page-thumbnail, annotation, form XObject, table, compression, JavaScript, and bound-stream output scenarios
Version 3.158.0
Toegevoegd
- API's voor metadata-encryptiebesturing toegevoegd with Delphi, DLL, and ActiveX entry points: SetEncryptMetadata can write Standard-security PDFs with unencrypted XMP metadata streams, while GetEncryptMetadata reports the pending or loaded /EncryptMetadata state
Version 3.157.0
Toegevoegd
- Directe API's voor het tekenen van tegelpatronen toegevoegd with Delphi, DLL, and ActiveX entry points: BeginTilingPattern creates a temporary pattern cell drawing surface, EndTilingPattern registers it as a reusable pattern, and CancelTilingPattern discards the build without leaving a named pattern behind
Version 3.156.0
Toegevoegd
- Delphi-hulpfuncties voor gebonden outputstreams toegevoegd:
BeginOutputToStream,EndOutputStream,CancelOutputStream, andOutputStreamActivelet streaming, web, and report-export code bind a targetTStream, finish it through the existing chunked writer, or cancel the pending target without taking stream ownership
Version 3.155.0
Toegevoegd
Abort,AbortedenResetAborttoegevoegd for Delphi, DLL, and ActiveX callers so applications can mark an instance as cancelled and prevent save or append output operations from starting until the flag is cleared
Version 3.154.0
Toegevoegd
- Hulpfuncties voor paginaminiaturen for image import options and in-memory sources, optional-content group lookup and state setters by group name, and
SetOpenActionNamedDestinationfor document-open jumps through named destinations
Opgelost
GetDestNamelost nu explicit destination array handles, including arrays returned from a named document open action
Version 3.153.0
Toegevoegd
- Handige API's voor gekoppelde formuliersacties, Hide and ImportData field triggers, initial optional-content group states, optional EMF imports, and color-key transparent image imports
Version 3.152.0
Toegevoegd
- Automatische URL-linkcreatie for text drawing, CCITT Group 3/4 image import helpers, JBIG2 direct-image helpers, EMF extended import wrappers, image mask attachment helpers, visible signature field creation, and form-field event/action helpers for JavaScript, SubmitForm, and ResetForm workflows
Version 3.151.0
Toegevoegd
DrawPie,DrawChord,DrawEllipticPieenDrawEllipticChordtoegevoegd for explicit closed circular and elliptic arc drawing with outline, fill, or fill-and-outline modes
Version 3.150.0
Toegevoegd
NewGraphicsStateenSetGraphicsStatetoegevoegd so callers can create reusable ExtGState resources for combined fill transparency, stroke transparency, line width, line cap, line join, and miter-limit settings
Version 3.149.1
Opgelost
- Dubbele ActiveX-dispatch-ID's opgelost for the Form XObject and miter-limit methods so late-bound COM callers resolve each method unambiguously
Version 3.149.0
Toegevoegd
SetMiterLimittoegevoegd for paths that use miter joinsBeginFormXObject,EndFormXObjectenCancelFormXObjectbeschikbaar gemaakt via de DLL- en ActiveX-API's through the DLL and ActiveX APIs
Version 3.148.0
Toegevoegd
- Herbruikbare Form XObject-builder-API's toegevoegd:
BeginFormXObject,EndFormXObject, andCancelFormXObjectlet callers draw a reusable template with normal page drawing calls and place it repeatedly through captured-page drawing APIs
Version 3.147.0
Toegevoegd
SetTextTilingPatternenSetLineTilingPatterntoegevoegd so captured-page tiling patterns can be reused for text, underline, and stroked graphics without duplicating drawing commands
Opgelost
- Gestreken shader- en tegelpatroonkleuren schrijven nu de kleuroperator voor het strekenpatroon in plaats van de niet-gestreken kleurstatus bij te werken
Version 3.146.0
Toegevoegd
BeginOptionalContentenEndOptionalContenttoegevoegd so callers can mark only subsequent drawing commands with an optional content group without rewriting the existing content stream
Opgelost
- Marked-content-operators die een scope sluiten worden nu onmiddellijk weggeschreven wanneer optional content-, tagged PDF- of artifact-scopes aan het einde van een contentstream worden gesloten
Version 3.145.0
Toegevoegd
SetTransparencyExtoegevoegd so callers can set separate fill and stroke transparency values for subsequently drawn text and graphics while keeping the existing PDF 1.4 auto-upgrade behavior
Version 3.144.0
Toegevoegd
AddLinkToNamedDestinationtoegevoegd so a page hotspot can jump to a same-document named destination without resolving the target page at link creation time
Opgelost
- Annotatie-actielezers geven nu geen actie terug for pages without annotations instead of dereferencing an empty annotation cache
Version 3.143.0
Toegevoegd
- API's voor beheer van formulierveldacties toegevoegd so callers can bind an existing action to a field trigger, inspect the typed trigger action, and remove primary or additional field actions
Opgelost
FormFieldJavaScriptActionweigert nu PDF/A documents and invalid trigger names instead of writing non-conforming field action dictionaries
Version 3.142.0
Toegevoegd
- API's voor actieketens toegevoegd so callers can append URI, named, and JavaScript next-actions to an existing annotation, outline, or form-field action and inspect chained actions through
GetActionNextCountandGetActionNextInfo
Version 3.141.0
Toegevoegd
AddLinkToSubmitFormenAddLinkToResetFormtoegevoegd zodat pagina-hotspots AcroForm-velden kunnen verzenden of resetten via standaard PDF-acties zonder JavaScript
Version 3.140.0
Toegevoegd
AppendToStreamtoegevoegd zodat incrementele update-workflows direct naar een door de aanroeper verstrekte stream kunnen schrijven in plaats van de update eerst als eenAnsiStringte materialiseren
Gewijzigd
SaveToStreamserialiseert nu direct naar de doelstream, enAppendToString(1)retourneert nu alleen de incrementele updatesectie zonder de oorspronkelijke bronbytes naar een tijdelijke buffer te kopiëren
Version 3.139.0
Toegevoegd
GetAnnotReplyToenGetAnnotReplyTypetoegevoegd zodat geneste annotatie-antwoorden kunnen worden geïnspecteerd via benoemde leestoegangsfuncties in plaats van generieke annotatie-eigenschaptags
Version 3.138.0
Toegevoegd
- Het Delphi-voorbeeld
DocumentInspectionWorkbenchtoegevoegd om PDF's in batch te inspecteren met gecombineerde lettertypediagnostiek, afbeeldingsbemonstering, kleurruimte-detectie, laadtijden, en JSON-, CSV- en HTML-rapporten
Version 3.137.0
Toegevoegd
- Het Delphi-voorbeeld
ImageDecodeBenchmarktoegevoegd om de detectie van pagina-afbeeldingen, gedecodeerde afbeeldingsbytes en detectie van pagina-kleurruimte te meten met CSV- en HTML-tijdrapporten
Version 3.136.0
Toegevoegd
GetDocumentFontDiagnosticsenTPDFlibFontDiagnosticstoegevoegd om het inbedden van lettertypen, subsetting, Standard 14, CID, Type3 en onbekende lettertypeaantallen van documenten in één aanroep samen te vatten
Version 3.135.0
Toegevoegd
TPDFlibSignatureVerifier.VerifySignerCertificateChainbouwt nu de ingesloten certificaatketen van de ondertekenaar met Windows CryptoAPI en retourneertvsValidalleen wanneer de keten voldoet aan het basisvertrouwensbeleid van Windows, terwijl zelfondertekende of anderszins onvertrouwde ondertekenaarscertificatenvsInvalidretourneren zonder het resultaat van de inhoudsintegriteit vanVerifySignaturete wijzigen
Version 3.134.0
Opgelost
TPDFlibSignatureVerifier.VerifySignaturevalideert nu oudereadbe.pkcs7.sha1-handtekeningen en retourneertvsValidwanneer de ondertekende digest overeenkomt met de gedekte/ByteRange-bytes envsInvalidnadat de gedekte inhoud is gewijzigd
Version 3.133.0
Toegevoegd
RenderPagesToFilesenDARenderPagesToFilestoegevoegd om willekeurige paginabereiken naar genummerde uitvoerbestanden te renderen, waarbij de renderer-instellingen voor de geselecteerde pagina's worden hergebruikt
Version 3.132.0
Toegevoegd
- De gemaksstempels
AddPageHeaderenAddPageFootertoegevoegd die tekst op een vaste boven- of ondermarge plaatsen op elke pagina in een bereik, met links/gecentreerd/rechts uitlijning en tokenexpansie (&Phuidige pagina,&Ntotaal aantal pagina's,&Ddatum,&Tdocumenttitel,&&letterlijke ampersand) StampTextenStampImagemetsoUnderlayplaatsen nu werkelijk inhoud onder bestaande pagina-inhoud door een nieuwe contentlaag vooraan toe te voegen (voorheen tekende het er bovenop zoalssoOverlay); ondersteund door een nieuwePrependContentLayer-paginaboommethode
Version 3.131.0
Toegevoegd
ScalePage(ScaleX, ScaleY, Anchor)toegevoegd, welke de inhoud van de geselecteerde pagina schaalt door elke contentlaag in eenq sx 0 0 sy tx ty cm ... Qgrafisch statusblok te verpakken en de grootte van de MediaBox en CropBox aan te passen; het anker behoudt de oorsprong linksonder (0), centreert de inhoud (1) of behoudt linksboven (2)EnumPageElementsuitgebreid met een nieuw elementtypeekPath: elke pagina rapporteert nu ook zijn vectorpaden met een begrenzingsvak, puntaantal, sluitingsvlag en tekenoperator, gelicht uit de contentstreams via het gestructureerde contentmodel
Version 3.130.0
Toegevoegd
- Drie API's voor bestandsgrootte-optimalisatie toegevoegd die geladen documenten verkleinen bij het opnieuw opslaan:
SubsetEmbeddedFontsherschrijft elk ingesloten TrueType-lettertypeprogramma (FontFile2) tot de Unicode-tekens die het document daadwerkelijk rendert via de FontSub.dllCreateFontPackage-service;DownsampleImages(MaxDPI, Quality, Filter)decodeert elke afbeelding XObject boven de doel-DPI, resampled het (box of bilineair) en hercodeert het als JPEG of PNG;NormalizeLZWStreamsherschrijft elke stroom die nog steeds is gefilterd met LZWDecode naar FlateDecode via de bestaande LZW-decoder en Flate-encoder, met behoud van de Predictor-parameters
Version 3.129.0
Toegevoegd
- API's toegevoegd voor het maken van mesh-arceringen voor de vier arceringstypen die voorheen alleen lees-/parse-ondersteuning hadden:
NewRGBFreeFormTriangleMesh(ShadingType 4, vrije vorm Gouraud-driehoeken),NewRGBLatticeTriangleMesh(ShadingType 5, rastervorm Gouraud),NewRGBCoonsPatchMesh(ShadingType 6, Coons patch mesh) enNewRGBTensorPatchMesh(ShadingType 7, tensor-product patch mesh) — elk bouwt een benoemd mesh-arceringspatroon op uit een platte vertex- of patchlijst met selecteerbare coördinaten/kleur bitdiepte en een begrenzingsvak, selecteerbaar metSetFillShader/SetLineShader/SetTextShaderzoals de bestaande axiale en radiale arceringen
Version 3.128.0
Toegevoegd
- Een miniatuurweergavestrook (thumbnail strip) voor de viewer toegevoegd:
TPDFlibThumbnailBartoont een miniatuur van elke pagina, lui gerenderd zodra rijen in beeld scrollen, met het paginanummer eronder; het klikken op een miniatuur springt de gekoppelde viewer naar die pagina — hiermee is de viewer-besturingsfamilie compleet (viewer, bladwijzerpaneel, zoekpaneel, miniaturen)
Version 3.127.0
Toegevoegd
- Een zoekpaneel voor de viewer toegevoegd:
TPDFlibSearchPanel.RunSearchdoorzoekt het gehele gekoppelde document en geeft één rij per treffer met het bijbehorende paginanummer en de overeenkomende tekst; het klikken op een treffer springt de viewer naar die pagina
Version 3.126.0
Toegevoegd
- Een bladwijzerpaneel voor de viewer toegevoegd:
TPDFlibOutlineViewertoont de documentstructuur (outline tree) met inspringing en springt de gekoppelde viewer (viaAttachViewer) naar de bestemmingspagina van een bladwijzer wanneer erop wordt geklikt; het is gebouwd op een herbruikbare basisklasse voor panelen die latere zijpanelen delen
Version 3.125.0
Toegevoegd
- Tekstselectie aan de viewer control toegevoegd: sleep met de linkermuisknop om te selecteren, druk op Ctrl+C of roep
CopySelectedTextaan om de selectie naar het klembord te kopiëren; de vastgelegde tekst is beschikbaar via de eigenschapSelectedText, van boven naar beneden geordend met regeleinden tussen banden GetTextInRegiontoegevoegd, welke de tekst van een rechthoekige paginaregio direct retourneert — dezelfde op blokken gebaseerde zoekopdracht die de muisselectie gebruikt, beschikbaar voor aangepaste selectie-interfaces
Version 3.124.0
Toegevoegd
- De viewer control pre-rendert nu naburige pagina's in een achtergrondthread, zodat bladeren vooruit of achteruit de volgende pagina onmiddellijk toont; de worker gebruikt een eigen documentinstantie en geeft voltooide renderingen aan de cache door zonder de UI te blokkeren
- Linkinteractiviteit aan de viewer toegevoegd: het klikken op een link-annotatie triggert
OnLinkClickmet het paginanummer en dezelfde getypeerde actiesamenvatting dieGetAnnotActionInfoproduceert (webadres, documentbestemming, benoemde actie enzovoort);LinkActionAtPagePointstelt de onderliggende hit-test beschikbaar voor aangepaste afhandeling
Version 3.123.0
Toegevoegd
- De viewer control heeft nu continu scrollen:
SetDisplayModeschakeltTPDFlibViewertussen de weergave van een enkele pagina en continu verticaal scrollen door het hele document, waarbij alleen de pagina's worden gerenderd die zichtbaar zijn in het weergavegebied, en de huidige pagina de scrollpositie bijhoudt (waarbijOnPageChangewordt getriggerd naarmate pagina's in beeld komen) - Gerenderde pagina's worden nu bewaard in een least-recently-used bitmapcache, zodat heen en weer scrollen niet opnieuw hoeft te renderen; het geheugenbudget is standaard 128 MB en kan worden aangepast met
SetCacheLimit, waarbij de oudste pagina's worden verwijderd wanneer het budget krimpt of vol raakt - Muiswielscrollen en toetsenbordnavigatie aan de viewer toegevoegd: PageUp/PageDown (paginastappen in enkele pagina-modus, viewportstappen in continue modus), pijltjestoetsen, Home en End
Version 3.122.0
Toegevoegd
- Interactieve PDF-viewer control toegevoegd:
TPDFlibVieweris een VCL-scrollcontrol die een document uit een bestand opent of aan een bestaandeTPDFlibinstantie koppelt, pagina's weergeeft via de geselecteerde rendering-engine (GDI+, Cairo of PDFium), en paginanavigatie biedt (GoToPage/NextPage/PrevPagemet eenOnPageChangeevent) en zoomcontrole — een vast percentage, passend op breedte of passend op pagina, automatisch opnieuw berekend wanneer de control van grootte verandert; pagina's die breder zijn dan de viewport scrollen, smallere pagina's centreren - Een ontwerptijd-pakket (
Package\PDFlibViewerPkg.dpk) toegevoegd dat de control registreert op de losLab PDF-paletpagina voor drag-and-drop gebruik in de IDE
Version 3.121.0
Toegevoegd
- Automatische vormgeving van complexe schriften in
DrawText: tekst die Arabische, Hebreeuwse, Indische of andere karakters uit complexe schriften bevat, wordt nu automatisch gedetecteerd en gevormd — contextuele lettervormen, verplichte ligaturen en volgorde van rechts naar links komen correct over zonder wijzigingen in de code; de standard-14 namen worden toegewezen aan hun metrisch compatibele geïnstalleerde lettertypen (Helvetica naar Arial, Times naar Times New Roman, Courier naar Courier New) enGetTextWidthmeet via dezelfde vormingsstap zodat uitlijning consistent blijft; Latijnse, Cyrillische, Griekse en CJK-tekst behouden hun bestaande tekenpad byte voor byte SetTextShapingtoegevoegd om de automatische routering in en uit te schakelen (standaard ingeschakeld; geef 0 door om het exacte gedrag van voor de vormgeving te herstellen)
Version 3.120.0
Gewijzigd
- Begeleidende lettertypen voor gevormde tekst worden nu tijdens het opslaan gesubset tot enkel de glyfen die het document toont, waardoor uitvoerbestanden dramatisch krimpen (een volledig lettertypeprogramma van meer dan een megabyte reduceert tot de gebruikte glyfen); het gesubsette lettertype behoudt de glyfnummering, draagt een subset-getagde
BaseFontnaam en echte breedtes per glyf (/W), en krijgt een ToUnicode-kaart die elke gevormde glyf terug vertaalt naar de oorspronkelijke bronkarakters — zodat het kopiëren of extraheren van uitvoer vanDrawShapedTextde originele tekenreeks retourneert, inclusief beide letters achter een lam-alef ligatuur
Version 3.119.0
Toegevoegd
- Teksttekenen voor complexe schriften toegevoegd:
DrawShapedTextvormt Arabische, Hebreeuwse en andere tekenreeksen in complexe schriften vóórdat ze worden getekend — contextuele lettervormen, verplichte ligaturen zoals lam-alef, en van rechts naar links ordening komen allemaal correct uit — en schrijft de gevormde glyfen via een Type0 (Identity-H) begeleidend lettertype dat het gehele lettertypeprogramma inbedt, zodat vormen zonder eigen karaktercode exact renderen; er wordt één begeleidend lettertype per typeface aangemaakt en hergebruikt bij alle aanroepen GetShapedTextWidthtoegevoegd, welke tekst via dezelfde vormingsstap meet, zodat verbonden tekst op de ware getekende breedte wordt gemeten — gebruik het om gevormde alinea's rechts uit te lijnen of te centreren
Version 3.118.0
Toegevoegd
- Fundament toegevoegd voor tekstvorming in complexe schriften: een nieuwe Uniscribe (usp10.dll) binding verandert Arabische, Hebreeuwse en andere complexe tekenreeksen in correct geordende en gevormde glyfreeksen — contextuele Arabische vormen, verplichte ligaturen zoals lam-alef, en van rechts naar links ordening — die voor elke glyf de font-glyfindex, verschuiving en bronkarakter-cluster rapporteert; dit is de vormings-engine waarop latere versies het tekenpad bouwen, en deze wordt lazy geladen zodat platforms zonder Uniscribe eenvoudigweg het bestaande pad per teken behouden
Version 3.117.0
Toegevoegd
- Introspectie van ICC-profielen toegevoegd:
GetOutputIntentICCInfoparseert het ICC-profiel dat is gekoppeld aan de OutputIntent van het document en rapporteert de versie, apparaatklasse, gegevenskleurruimte, profielverbindingsruimte, renderintentie en componentaantal — nuttig voor het inspecteren van de afdrukconditie van PDF/A- en PDF/X-bestanden; de behandeling van de ICCBased-kleurruimte door de renderer leidt nu ook het aantal componenten rechtstreeks af van de profielheader wanneer de kleurruimte van een arcering noch/Alternatenoch/Nbevat
Version 3.116.0
Toegevoegd
- Tabelbewuste tekstextractiemodus toegevoegd:
GetPageTextoptie 10 clustert de linkerranden van de tekstblokken op de pagina in globale kolomposities en zendt door tabs gescheiden rijen uit, zodat tabelindelingen worden geëxtraheerd als direct te importeren TSV waarbij verticaal uitgelijnde cellen over rijen heen uitgelijnd blijven
Version 3.115.0
Toegevoegd
- Pagina-impositie toegevoegd:
ImposePagesNUplegt elke pagina van het document op nieuwe vellen in een n-up raster (2-up, 4-up, 9-up of elke indeling in kolommen x rijen) waarbij elke pagina beeldvullend en gecentreerd in zijn cel staat als live vectorinhoud, of produceert — met de boekjesoptie — zadelsteekvellen waarvan de paginaparing vouwt tot een boekje wanneer ze dubbelzijdig worden afgedrukt en gestapeld
Version 3.114.0
Toegevoegd
- De getypeerde actielezers
GetAnnotActionInfoenGetOutlineActionInfouitgebreid met nog vier soorten acties — Verbergen (met het aantal verborgen doelen en de vlag verbergen/tonen), SubmitForm (inlever-URL en veldtelling), ResetForm (veldtelling) en ImportData (bronbestand) — en de naampayload van benoemde acties weergegeven (bijv.NextPage); beide lezers delen nu één parser, waardoor annotatielinks en bladwijzers identieke informatie rapporteren
Version 3.113.0
Toegevoegd
- Hulpmiddelen toegevoegd voor de opmaak van formuliervelden:
SetFormFieldNumberFormat(decimale posities, scheidingstekenstijl, negatieve stijl en valutaplaatsing),SetFormFieldPercentFormatenSetFormFieldDateFormat(Acrobat tekenreeksen voor datums zoalsmm/dd/yyyy) schrijven elk het standaard Acrobat-opmaak JavaScript-paar naar de extra acties van het veld — een toetsaanslagfilter plus een weergaveformatter — zodat conforme weergaveprogramma's invoer valideren en opgemaakte waarden renderen zonder handgeschreven JavaScript
Version 3.112.0
Toegevoegd
- Het maken van geluidsannotaties toegevoegd:
AddSoundAnnotationFromFileleest een ongecomprimeerd PCM WAV-bestand (8 of 16 bit, mono of stereo) in en bedt de samples in achter een luidsprekericoon-annotatie als een/Sound-stream in de ondertekende codering die het PDF-geluidsmechanisme verwacht, waarmee de round-trip met de bestaande lezersGetAnnotSoundToFile/GetAnnotSoundToStringwordt voltooid
Version 3.111.0
Toegevoegd
- Geneste annotatie-antwoorden toegevoegd (ISO 32000-1 §12.5.6.3):
AddAnnotationReplyvoegt een antwoord toe aan een bestaande annotatie als een verborgen tekstannotatie waarvan de/IRTnaar het doel verwijst met de/RTantwoordrelatie, zodat Acrobat en andere weergaveprogramma's deze genest onder het doel tonen in het opmerkingenpaneel; combineer metAddAnnotationStateen de FDF-opmerkingenuitwisseling voor volledige round-trips van collaboratieve beoordelingen
Version 3.110.0
Toegevoegd
- Mesh- en op functies gebaseerde arceringsweergave toegevoegd, waarmee de dekking van alle zeven PDF-arceringstypen is voltooid: Gouraud-driehoeksmeshes in vrije vorm (type 4), Gouraud-meshes in rastervorm (type 5), Coons-patchmeshes (type 6) en tensor-product patchmeshes (type 7) worden gedecodeerd uit hun bitverpakte datastreams — inclusief flags voor patches met gedeelde randen,
/Decodewaardetoewijzing en optionele kleur/Function-verlopen — en getekend via de native mesh-gradiënten van de Cairo-engine; op functies gebaseerde arceringen (type 1) worden benaderd door de arceringsfunctie over het domein te bemonsteren naar een fijn patchraster; ondersteunde kleurruimten omvatten DeviceRGB, DeviceGray, DeviceCMYK en ICCBased alternatieven (de GDI+-engine heeft geen mesh-gradiënt primitieve en laat arceringen met mesh-patroon ongeverfd)
Version 3.109.0
Toegevoegd
- Het raamwerk voor het bewerken van inhoud voltooid (fase 4) met tekstbewerking:
TPDFContentProgram.GetTextRunssomt de tekst-tonende instructies van een pagina op met het actieve lettertypebestand en -formaat bij elk (door het traceren van de fontstatus via save/restore-nesting), enReplaceTextRunverwisselt de getoonde tekst op zijn plaats — een echte content-stream vervanging die de oorspronkelijke positie, het lettertype en de kleur behoudt, in tegenstelling tot overlay-gebaseerde methoden die de oude tekst maskeren en er overheen tekenen
Version 3.108.0
Toegevoegd
- Een objectmodel toegevoegd voor paginageometrie in het raamwerk voor het bewerken van inhoud (fase 3):
TPDFContentProgram.LiftPathheft een padobject (move/line/curve/rectangle constructie-operators plus de clipping- en verfoperators die het beëindigen) op naar een bewerkbaarTPDFPathvan subpaden en segmenten;TPDFPath.Transformpast een affiene matrix toe op elk punt (verplaatsen, schalen, roteren of scheeftrekken van bestaand tekenwerk);LowerPathschrijft de gewijzigde geometrie terug over de oorspronkelijke instructies, klaar voorWritePageContentLayer
Version 3.107.0
Toegevoegd
- Het raamwerk voor het bewerken van inhoud uitgebreid (fase 2) met gemakken op instructieniveau voor
TPDFContentProgram:InsertFromSourceparseert een contentsnippet en splitst de instructies in op elke positie;SetOperandherschrijft een enkele operand vanuit de bronsyntaxis (een coördinaat hernummeren, een vulling herkleuren);OperandTextleest een operand terug;InstructionGroup,FindNextOpenFindNextGroupnavigeren in de instructielijst via operator of de ISO 32000-1 operatorcategorie
Version 3.106.0
Toegevoegd
- De eerste fase toegevoegd van het raamwerk voor het gestructureerd bewerken van inhoud:
ParsePageContentLayerdecodeert een pagina-contentlaag naar een bewerkbaarTPDFContentProgram— een lijst met instructies, telkens één PDF-content-operator (alle 73 operators van ISO 32000-1 Tabel 51) met bijbehorende gedecodeerde operand-objecten — enWritePageContentLayerserialiseert het programma terug in de pagina, zodat aanroepers tekeninstructies kunnen parseren, inspecteren, verwijderen of herschikken en de pagina opnieuw kunnen schrijven;GetPageContentLayerCountrapporteert het aantal contentlagen, die onafhankelijk worden bewerkt; de uitgever behoudt het gedrag (een ongewijzigde round-trip rendert pixelidentiek), onbekende operatoren blijven ongewijzigd en ingesloten afbeeldingen worden letterlijk overgedragen
Version 3.105.0
Toegevoegd
- Een tekstextractiemodus op basis van leesvolgorde toegevoegd:
GetPageTextoptie 9 retourneert de paginatekst in visuele leesvolgorde met behulp van recursieve witruimteanalyse (XY-cut), zodat meerkoloms lay-outs kolom per kolom worden weergegeven — eerst een kop over de volledige breedte, dan de hele linkerkolom, dan de rechterkolom — in plaats van de kolommen regel per regel af te wisselen zoals de geometrische boven-naar-links-ordeningen doen
Version 3.104.0
Toegevoegd
- Introspectie van het ondertekenaarscertificaat toegevoegd aan de handtekeningcontroleur:
GetSignerCertificatedecodeert de PKCS#7 payload van het eerste handtekeningveld en retourneert een getypeerde samenvatting van het ingesloten ondertekenaarscertificaat — weergavenamen van onderwerp en uitgever, het serienummer in conventionele hexadecimale vorm, de UTC-geldigheidsperiode (NotBefore/NotAfter) en een handige vlag die rapporteert of het certificaat zich momenteel binnen die periode bevindt; de ondertekenaar wordt gematcht tussen de ingesloten certificaten op basis van uitgever en serienummer
Version 3.103.0
Toegevoegd
NewRGBRadialShadertoegevoegd, de radiale tegenhanger vanNewRGBAxialShader: registreert een benoemde tweecirkelvormige radiale gradiënt (ShadingType 3, ISO 32000-1 §8.7.4.5.3) die mengt tussen twee RGB-kleuren, met optionele kleuruitbreiding voorbij de cirkels; selecteer het met de bestaandeSetFillShader,SetLineShaderofSetTextShaderom ronde "gloed"-vullingen, streken en tekst te schilderen
Version 3.102.0
Toegevoegd
- Rendering van radiale (ShadingType 3) gradiënten toegevoegd (ISO 32000-1 §8.7.4.5.4): de pagina-renderer tekent nu radiale arceringen met twee cirkels die worden gebruikt door
sh-operators en patroonvullingen voor arceringen, naast de eerder ondersteunde axiale (ShadingType 2) gradiënten; ondersteund via zowel de GDI+- als de Cairo-raster-engines met kleureigenschappen in meerdere fasen, DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased kleurruimten en afhandeling van/Extend
Version 3.101.0
Toegevoegd
- Troebele randeffecten toegevoegd (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectverandert de rand van een vierkant, cirkel, polygoon of vrije tekst-annotatie in een "revisiewolk" van verbonden halve cirkels door het schrijven van de/BErandeffect-woordenlijst, met intensiteit 1 of 2 die overeenkomt met de troebele stijlen in Acrobat en 0 die het effect weer verwijdert;GetAnnotCloudyEffectleest de instelling terug (0 = geen wolk, anders de 1..2 intensiteit)
Version 3.100.0
Toegevoegd
- Beoordelingsstatussen voor annotaties toegevoegd (ISO 32000-1 §12.5.6.3):
AddAnnotationStateregistreert een wijziging in de beoordelingsstatus voor een bestaande annotatie door een verborgen tekstannotatie toe te voegen waarvan de/IRTnaar het doel verwijst en waarvan de/State+/StateModelde status dragen, ter ondersteuning van hetReviewmodel (Geen/Geaccepteerd/Geweigerd/Geannuleerd/Voltooid) en hetMarkedmodel (Ongemarkeerd/Gemarkeerd) dat wordt gebruikt in Acrobat's workflow voor opmerkingbeoordeling;GetAnnotStateenGetAnnotStateModellezen de geregistreerde tekenreeksen terug uit elke annotatie (leeg indien afwezig)
Opgelost
- Opgelost: een laadtijdfout waardoor applicaties gebouwd met recente ontwikkelversies niet startten (een opzoeken van een Windows-certificaatnaam was gebonden aan een niet-bestaand DLL-ingangspunt), en regressies tijdens compilatie in de import van FDF-opmerkingen, het roteren van paginabereiken en de paden voor vlaggen bij handtekeningen gerepareerd
Version 3.99.0
Toegevoegd
- Voegt lees-API's toe voor documentvingerafdruk en overgang:
GetDocumentFileIDretourneert de permanente documentidentificatie uit de trailer/ID-array (hexadecimaal gecodeerd eerste element), bruikbaar als een stabiele cachesleutel of documentvingerafdruk;GetPageTransitionis de lees-tegenhanger vanSetPageTransition, die de overgangsstijl retourneert als een getypeerdeTPDFlibPageTransition-waarde plus de weergaveduur en overgangsduur door de opgeslagen/Trans/S,/Dmen/M-vermeldingen terug te koppelen
Version 3.98.0
Toegevoegd
- Voegt paginabereikrotatie en miniatuur-introspectie toe:
RotatePageRangepast een rotatie van 0/90/180/270 toe op elke pagina in een bereik (verpakt de bestaandeRotatePagevoor één pagina zodat aanroepers geen per-pagina lus meer nodig hebben);HasPageThumbnailmeldt of een pagina een/Thumb-vermelding bevat;GetPageThumbnailInfoleest de breedte, hoogte en bits-per-component van de XObject miniatuurafbeelding
Version 3.97.0
Toegevoegd
- Voegt uitgebreide lezers voor annotatie-eigenschappen toe:
GetAnnotColorleest de/Ckleurenarray (0..1 RGB, met een HasColor-vlag die “geen expliciete kleur” onderscheidt van “expliciet zwart”);GetAnnotBorderWidthleest/BS /W, terugvallend op de verouderde/Border-array;GetAnnotOpacityleest de/CAomlijningsalfa (standaard 1.0);GetAnnotCreationDateleest de/CreationDatetijdstempel;GetAnnotFlagsleest de/Fbyte voor zichtbaarheids-/afdrukmarkeringen
Version 3.96.0
Toegevoegd
- Voegt introspectie-API's toe voor leesbeveiliging:
IsEncryptedmeldt of het geladen document een/Encrypt-dictionary bevat;GetEncryptionLevelretourneert een getypeerde sterkte (0=geen, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) die overeenkomt met de coderingsopties aan de schrijfkant;GetUserPermissionsretourneert het ruwe/Pmachtigingswoord voor directe bittesten;IsOwnerPasswordmeldt of het document werd geopend met de eigenaarsgegevens
Version 3.95.0
Toegevoegd
- Voegt geavanceerd afdrukken en tekstvervanging toe:
PrintDocumentAdvancedstuurt de volledige printer DEVMODE aan (duplex, oriëntatie, kleur, afdrukkwaliteit, papierformaat, papierlade) bovenop kopieën/sorteren via een getypeerdeTPDFlibPrintSettings-record, waarbij elk niet-standaard veld wordt toegepast via het bestaande aangepaste printerprofielmechanisme;SearchAndReplaceTextvoert een zoekopdracht uit over een paginabereik en maskeert voor elke treffer het originele tekstblok met een ondoorzichtige witte rechthoek en tekent de vervangende tekst opnieuw op de oorsprong van het blok in het door de aanroeper geselecteerde lettertype, in navolging van het overlay-vervangingsgedrag van PDFtoolkit SearchAndReplace
Version 3.94.0
Toegevoegd
- Voegt FDF-uitwisseling voor annotaties toe (Acrobat “Opmerkingen exporteren/importeren”):
ExportAnnotationsToFDFStringenExportAnnotationsToFDFdoorlopen de/Annotsvan elke pagina en serialiseren elke annotatie als een/Type /Annot-vermelding in een FDF/Annots-array, met/Subtype,/Contents,/Rect, het/Tauteurslabel,/Subjen de 0-gebaseerde/Page-index;ImportAnnotationsFromFDFStringenImportAnnotationsFromFDFontleden een dergelijke FDF met een kleine statusmachine en maken elke vermelding opnieuw aan als een nieuwe annotatie op de overeenkomende pagina, waarbij de volledige annotatiedictionary behouden blijft in plaats van deze samen te vouwen tot een plaknotitie
Version 3.93.0
Toegevoegd
- Voegt API's toe voor handtekeningcertificering en formulierveldeigenschappen:
SetSignProcessDocMDPverandert de volgende handtekening die door een ondertekeningsproces wordt geproduceerd in een certificerende (auteurs)handtekening door een DocMDP/Reference-transformatie op niveau 1/2/3 (geen wijzigingen / formulier invullen / annotaties) te koppelen en de AcroForm/SigFlagsAppendOnly-bit in te stellen;GetSigFlags/SetSigFlagslezen en schrijven de ruwe AcroForm/SigFlags-byte rechtstreeks;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationenGetFormFieldAllowedValuesstellen de/Ffstijllabels per veld, de/Qtekstuitlijning en de/Optkeuzearray bloot als getypeerde waarden
Version 3.92.0
Toegevoegd
- Voegt handige API's toe voor bijlage-export en formuliervelden:
SaveAllAttachmentsdoorloopt de gecombineerde bijlagenlijst (documentniveau/EmbeddedFilesplus/FileAttachmentannotaties per pagina) en schrijft elke stroom naar een directory onder de bijbehorende bestandsnaam, waarbij botsingen met een numeriek achtervoegsel worden opgelost;RemoveFormFieldByNamezet een volledig gekwalificeerde veldnaam om naar zijn index en verwijdert deze;RenameFormFieldhernoemt een veld op naam zonder een aparte indexzoekopdracht
Version 3.91.0
Toegevoegd
- Voegt API's toe voor documentwijde opsomming:
EnumDocumentFontsdoorloopt elke Font-dictionary (en roept indien nodig eerstFindFontsaan) en retourneert éénTPDFlibDocumentFontper lettertype met het objectnummer,/BaseFont-naam, type, codering en inbedding/subset-status, waardoor het niet meer nodig is om voor elke vermeldingSelectFontaan te roepen en scalaire getters op te vragen;EnumAttachmentsverenigt de documentniveau/EmbeddedFiles-naamboom met/FileAttachmentannotaties per pagina in een enkeleTPDFlibAttachment-lijst, waarbij de bron van elke invoer, 1-gebaseerde bronindex, bestandsnaam, MIME-subtype, beschrijving en bytegrootte worden vastgelegd
Version 3.90.0
Toegevoegd
- Voegt alleen-lezen introspectie-API's toe voor annotaties, bladwijzers en de documentversie:
GetPDFVersionretourneert de effectieve PDF-versietekenreeks (bijv.1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameenGetAnnotRectExstellen de velden per annotatie bloot als benoemde wrappers (zodat aanroepers niet langer magische Tag-nummers nodig hebben) boven de bestaandeAnalyseAnnot-cache;GetOutlineLevelretourneert de diepte van een bladwijzer ten opzichte van de omtreklijnroot enGetOutlineIsOpenmeldt of deze is uitgevouwen in een viewer (negatieve/Countbetekent samengevouwen), wat de lay-outstatus weerspiegelt die een bladwijzerpaneel zou weergeven
Version 3.89.0
Toegevoegd
- Voegt een JBIG2-afbeeldingscoderingseenheid toe,
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), overgezet uit het zusterproduct HotPDF, met twee backends: op Win64 is de C++jbig2encrekenkundige codeerder (ITU-T T.88) statisch gekoppeld viaPDFlibJBIG2EncC+HPDFCLibs(228 leptonica/jbig2enc-objecten inthirdparty/Win64x/) en geregistreerd als standaard backend, in overeenstemming met het productiepad van HotPDF; op andere platforms, of wanneerUseExternalEncoderFalse is, comprimeert een pure-Pascal MMR-terugval bi-level scanlijnen met de CCITT G4-codeerder en wikkelt deze in JBIG2-segmentheaders (page-info type 48 + immediate generic-region type 38) - Voegt een LZW-coderingseenheid toe,
PDFlibLZWEnc(TPLLZWEncoder.Compress), de coderingstegenhanger van de bestaandePDFlibLZW-decoder: produceert een PDF-specifieke/LZWDecode-stroom met variabele breedte van 9..12-bits codes, ClearCode/EOI en PDF-standaard EarlyChange-semantiek, plus optionele TIFF Predictor 2 (horizontale verschillen) zodat een retour door de decoder de originele bytes reproduceert
Version 3.88.0
Toegevoegd
- Voegt een CCITT Group 3 / Group 4 (T.6) bi-level afbeeldingscoderingseenheid toe,
PDFlibCCITTEnc(TPLCCITTEncoder), de coderingstegenhanger van de bestaandePDFlibCCITT-decoder: het codeert eenpf1bitbitmap naar een CCITT G3 1D / G3 2D / G4 (T.6) bytestroom viaCompressImage/Execute, overgezet uit het zusterproduct HotPDF (beide delen de losLab-licentie); dit levert de ontbrekende codeerder zodat monochrome afbeeldingsgegevens geproduceerd kunnen worden voorCCITTFaxDecode-uitvoer, met volledige pijplijnintegratie voor afbeeldingen enRenderPageToMonochromeFileG4-uitvoer die volgt
Version 3.87.0
Toegevoegd
- Implementeert cryptografische handtekeningverificatie voor losgekoppelde PKCS#7-handtekeningen:
TPDFlibSignatureVerifier.VerifySignature(voorheen een stub dievsUnknownretourneerde) herberekent nu de documentdigest over de twee/ByteRange-segmenten en valideert deze tegen het ondertekendemessageDigest-kenmerk en de openbare sleutel van de ondertekenaar via de Windows CryptoAPI (CryptVerifyDetachedMessageSignature), en retourneertvsValid/vsInvalidvoor deadbe.pkcs7.detachedenETSI.CAdES.detachedsubfilters; dit is de eerste verificatielaag en dekt uitsluitend de integriteit van de digest en de handtekening (certificaatketen, CRL/OCSP-intrekking en RFC 3161 timestamp-token-validatie vallen nog buiten de scope en zullen in latere lagen worden toegevoegd)
Version 3.86.0
Toegevoegd
- Voegt een callback toe per bladwijzer op het moment van samenvoegen: de gebeurtenis
OnMergeOutlinewordt geactiveerd voor elk hoofdniveau van de bronbladwijzers terwijlMergeFileList/MergeFileListFast/MergeFileListStrictde samengevoegde bladwijzerstructuur koppelt, waardoor de aanroeper een inkomende bladwijzer een andere naam kan geven (Title) of kan weglaten (Skip=True) voordat deze in het doeldocument belandt; de callback ontvangt de 0-gebaseerde bronindex van het document, zodat aanroepers beleid per document kunnen toepassen
Version 3.85.0
Toegevoegd
- Voegt ondertekening vanuit de Windows-systeemcertificaatopslag toe:
SetSignProcessCertFromStorezoekt het handtekeningcertificaat op in een benoemde opslag ("MY"/"Root"/...) via de eenvoudige weergavenaam van het Subject (meestal de CN, hoofdletterongevoelig gematcht; een lege naam kiest het eerste certificaat met een privésleutel) en hergebruikt de bestaande PKCS#7-ondertekeningspijplijn, zodat een document kan worden ondertekend zonder een.pfx/.p12-bestand op te geven; koppel dit aanSetSignProcessKeysetom te kiezen tussenCURRENT_USER(1) enLOCAL_MACHINE(2)
Version 3.84.0
Toegevoegd
- Voegt het insluiten van lettertypeprogramma's toe voor reeds geladen documenten:
EmbedMissingFontsdoorloopt elke Font-dictionary, leest het overeenkomstige geïnstalleerde systeemlettertypeprogramma op basis van de BaseFont-naam en schrijftFontFile2ofFontFile3terug, waarbij het aantal lettertypen wordt geretourneerd dat een programma heeft gekregen;EmbedFontProgramsluit een enkel lettertype op naam in via het geïnstalleerde systeemlettertype;EmbedFontProgramFromFilesluit een enkel lettertype in met behulp van een door de aanroeper opgegeven.ttf- of.otf-bestand voor lettertypen die niet op het systeem zijn geïnstalleerd - Voegt
SetEmbedAllFontstoe, een bewaker aan de schrijfkant dieAddTrueTypeFontEmbed=0promoveert naarEmbed=1, zodat nieuw gecreëerde documenten ook buiten de PDF/A-modus niet per ongeluk kunnen verwijzen naar niet-ingesloten systeemlettertypen
Version 3.83.0
Toegevoegd
- Voegt handige rendering-API's toe:
RenderPageToMonochromeFilerendert de pagina naar een 1-bit monochrome bitmap (voor fax-/archiverings-/OCR-scenario's), gedowngradet van 24-bit via GDI-halftonedithering zonder de renderkern aan te passen;RenderPageRegionToFilerendert uitsluitend een gespecificeerde subrechthoek van de pagina (“Left,Top,Width,Height”) naar een bitmap, en koppelt de eerder ontkoppeldeRenderPageToDCClipClip-pijplijn
Version 3.82.0
Toegevoegd
- Voegt export van FDF-formuliergegevens toe:
ExportFormDataToFDFschrijft alle namen en waarden van formuliervelden van het huidige document naar een onafhankelijk FDF-bestand (de/Fields-array omhuld door%FDF-1.2),ExportFormDataToFDFStringretourneert een tekenreeks met dezelfde structuur, wat het gemakkelijk maakt om formuliergegevens uit de PDF te scheiden voor opslag of latere samenvoeging; niet-ASCII-bytes worden ge-escaped in octale codering van drie cijfers volgens ISO 32000-1
Version 3.81.0
Toegevoegd
- Voegt handige pagina- en structuur-API's toe:
SetPageTransitionschrijft overgangseffecten voor presentaties (de 17 standaardovergangen van/Trans, inclusief Split/Blinds/Wipe/Dissolve/Glitter, enz.) en de weergaveduur van de pagina naar een opgegeven pagina;GetPageFontCount,GetPageFontIDsommen de lettertypen op waarnaar een bepaalde pagina verwijst;SetMeasurementUnitaccepteert een getypeerde eenheidsopsomming (voegt twips en points toe bovenop de bestaande pixels/millimeters/inches), met bijbehorendeConvertToPoints,ConvertFromPointshulpmiddelen voor eenheidsconversie;SaveToFileOptionsgebruikt een record om opslagopties zoals compressie, linearisatie en het behouden van wijzigingsdatums samen te voegen
Version 3.80.0
Toegevoegd
- Voegt handige beveiligings- en handtekening-API's toe:
EncryptFileExaccepteert een getypeerde set van benoemde machtigingen (TPDFlibUserPermissions, waarbij onderscheid wordt gemaakt tussen de 8 benoemde machtigingsbits, zoals afdrukken met lage resolutie en afdrukken met hoge resolutie) ter vervanging van het ruwe geheel getal voor machtigingsbits;TPDFlibSignatureVerifier.GetSignatureMetadataleest de veldnaam, Filter, SubFilter, handtekeningstijd, reden, locatie, contactgegevens, ondertekenaar en de structuurvalidatie van ByteRange direct uit de handtekeningdictionary, zonder dat PKCS#7-decodering nodig is;PrintDocumentExspecificeert het aantal afdrukexemplaren en de sorteermethode in een enkele aanroep
Version 3.79.0
Toegevoegd
- Voegt handige bewerkings-API's toe:
MaskRecttekent een dekkende gevulde rechthoek om gebieden op een opgegeven pagina te bedekken (maskeren/redigeren);SetPageThumbnailFromFilevoegt de pagina/Thumbrechtstreeks toe vanuit een afbeeldingsbestand zonder de weergavestatus van de inhoudsstroom te vervuilen;FlattenFormFieldsOnPageRangevlakt alle formuliervelden af op basis van een paginabereik (het uiterlijk wordt in de statische inhoud gebakken en actieve velden worden verwijderd);InsertAnnotationvoegt een al gebouwde annotatiedictionary in op een gespecificeerde locatie;NewMarkupAnnotationmaakt in één stap een markering voor markeren/doorhalen/onderstrepen/golvende lijn en schrijft quad-punten, kleur en dekking;StampText,StampImagestempelen watermerken op basis van een paginabereik, met ondersteuning voor dekking, rotatiehoek en overlay-positie
Version 3.78.0
Toegevoegd
- Voegt API's toe voor tekstzoekopdrachten en het opsommen van pagina-elementen:
SearchTextzoekt naar een query in een opgegeven paginabereik en retourneert het paginanummer en de omsluitende rechthoek voor elke treffer, met opties voor hoofdlettergevoeligheid en zoeken naar hele woorden;EnumPageElementssomt alle tekstblokken en ingesloten afbeeldingselementen op de gespecificeerde pagina op, waarbij consistent het elementtype, de rechthoek, de tekst, de lettertypenaam en de afbeelding-ID worden geretourneerd;GetTextInAreaExis een versie vanGetTextInAreamet rechthoek, die elk tekstblok binnen het gebied en de omsluitende rechthoek retourneert
Version 3.77.0
Toegevoegd
- Voegt alleen-lezen introspectie-API's toe om de eerdere asymmetrie van "wel schrijven maar niet lezen" aan te vullen:
FindOutlineByTitlezoekt bladwijzers op titel (ondersteunt drie dieptes: alleen op hetzelfde niveau / alleen op onderliggend niveau / de hele onderliggende boom),GetOutlineActionInfoenGetAnnotActionInforetourneren het type actie van een bladwijzer of annotatie in een getypeerde structuur (GoTo/GoToR/URI/Launch/Named/JavaScript) samen met de payload van URI, JavaScript en bestandsnaam,GetOutlineDestinationInforetourneert de doelpagina en het Fit-type (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) evenals coördinaten,EnumSignatures,GetSignatureFieldCount,GetSignatureFieldInfosommen handtekeningvelden op en rapporteren of ze zijn ondertekend
Version 3.76.3
Gewijzigd
- Het Factur-X EXTENDED-profiel van de E-Invoice-demo gebruikt nu de standaard conformance-waarde en guideline-ID, en de ZUGFeRD 1.0-factuur voegt de sommatie-elementen
ChargeTotalAmountenAllowanceTotalAmounttoe; alle 6 profielen produceren nu PDF/A-3b- en PDF/A-3u-uitvoer die zowel veraPDF (PDF/A-conformiteit) als Mustang (bedrijfsregels voor elektronische facturering) doorstaat
Version 3.76.2
Opgelost
- De XMP-metagegevens van hybride Factur-X/ZUGFeRD-facturen declareren nu het PDF/A-extensieschema (
pdfaExtension:schemas) om defx:-factuureigenschappen te beschrijven; eerder zorgde het ontbreken van deze declaratie ervoor dat de gegenereerde PDF/A-3 door validators zoals veraPDF als niet-conform werd beoordeeld
Gewijzigd
- De factuur-XML van de E-Invoice-demo bevat nu de elektronische adressen van verkoper en koper evenals het telefoonnummer van de verkoper, waardoor meer profielen de ZUGFeRD/Factur-X-bedrijfsregelvalidatie doorstaan
- De profielcatalogus, de XML-opbouw en de PDF/A-3-generatiestroom van de E-Invoice-demo zijn naar een gedeelde unit geëxtraheerd die zowel de GUI als het nieuwe externe-validator-testhulpmiddel hergebruiken
Version 3.76.1
Opgelost
- Een crash bij klik op Genereren in de E-Invoice-demo opgelost: ingebouwde standaardlettertypen zijn niet beschikbaar in PDF/A-modus, dus de demo sluit nu een TrueType-lettertype in om de factuurpagina te renderen
Gewijzigd
- De E-Invoice-demo verwijdert de PDF/A-3a-optie (zelden gebruikt voor elektronische facturering), en het XRechnung-profiel gebruikt nu standaard PDF/A-3u
Version 3.76.0
Gewijzigd
- De GUI van de E-Invoice-demo is nu datagestuurd: factuurnummer, factuurdatum, koper en verkoper, nettobedrag, belastingtarief en valuta zijn bewerkbaar, en de factuur-XML komt exact overeen met de zichtbare paginabedragen in plaats van vaste placeholder-inhoud te gebruiken
- De demo genereert structureel correcte factuur-XML per profiel: Factur-X, XRechnung en ZUGFeRD 2.0 gebruiken de
CrossIndustryInvoice-structuur, terwijl ZUGFeRD 1.0 COMFORT zijn eigenCrossIndustryDocument-structuur gebruikt met regelitems, belastingtotalen en betalingstermijnen - Bedragen worden met een vast Engels decimaal puntformaat naar de XML geschreven zodat gelokaliseerde scheidingstekens voor duizendtallen of komma’s het schema niet breken, en gebruikersinvoer wordt voor het schrijven ge-escapet
- De demo voegt een live XML-voorbeeld toe, inhouds-selfchecks op profielniveau, het parsen van het gelijknamige externe
.validation.json-validatierapport, en laadt expliciet de sRGB ICC-uitvoerintentie van de repository tijdens het genereren
Version 3.75.6
Toegevoegd
SetPDFAModevoegt modus7toe, waarmee PDF/A-3u-metadata mogelijk is terwijl PDF/A-3-gekoppelde bestanden toegestaan blijven; de E-Invoice GUI-demo biedt ook een PDF/A-3u-optie, en het ZUGFeRD 2.0 BASIC-profiel gebruikt nu standaard PDF/A-3u
Version 3.75.5
Toegevoegd
- Voegt een Delphi E-Invoice GUI-demo toe die Factur-X-, ZUGFeRD- en XRechnung-profielen kan kiezen, PDF/A-3-hybride facturen kan genereren, de bijbehorende XML-bestandsnaam en guideline ID kan insluiten, containervalidatie in de interface kan uitvoeren en XMP-factuurinformatie, validatieproblemen en geëxtraheerde XML kan tonen
Version 3.75.4
Toegevoegd
- Voegt ondersteuning toe voor PDF/A-3-gekoppelde bestanden en e-factuur-XML:
AddPDFA3AssociatedFileFromStringkan Catalog/AF-gekoppelde bestanden rechtstreeks uit bytes in het geheugen maken,AddFacturXAssociatedFileFromStringkan Factur-X-, ZUGFeRD- en XRechnung-XML schrijven, XMP-metadata synchroniseren en de combinatie van bestandsnaam, profiel, XMP-naamruimte en XML-guideline ID valideren, terwijl de leeszijde APIs toevoegt voor detectie, validatie, probleemlijsten en XML-extractie
Version 3.75.3
Opgelost
- PDF-samenvoegfunctie: lokale variabelen
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumenStructRootGlobalGenNumwerden alleen binnen voorwaardelijke blokken toegewezen, waardoor W1036-“variable might not be initialized”-waarschuwingen ontstonden op Delphi Win64-compilers 26 en 29 (RAD Studio 12 en 16); nulinitialisatie toegevoegd aan het begin van de functie
Version 3.75.2
Opgelost
- Compatibiliteit voor builds over meerdere versies: de
for-lus in de hex-stringparser (PDFlibStruct) gebruikte eenInt64-besturingsvariabele, die Delphi XE3/XE5 (compilers 26/27) als niet-ordinaal weigeren; herschreven als eenWhile-lus om de compatibiliteit met RAD Studio 12 en 14 te herstellen - Controle op referentie-XObjects (
PDFlibPDFUA): de dictionarypointerDwerd in de tak zonder stream en zonder dictionary niet geïnitialiseerd, waardoor op alle doelen een compilerhint ontstond; de tak zo herschikt datDaltijd wordt toegewezen vóór deAssigned-controle CreateFontPackage-wrapper (PDFlibFont): de onterechte W1035-“return value might be undefined” op Delphi ≤ XE8 onderdrukt en tegelijk de aanvullende H2077-hint over een dode toewijzing op nieuwere compilers vermeden, via een{$IF CompilerVersion}-guard- BMP-DPI-schrijver en PDF-incrementeel-opslagpad: verouderde
TStream.Seek(Longint, Word)-aanroepen vervangen doorPosition :=-toewijzingen (PDFlibPDFium,PDFlibDocument)
Version 3.75.1
Opgelost
- TIFF-parser voor meerdere pagina's: de lusafbrekingscontrole tegen buitensporig grote paginatellingen was ineffectief omdat
FPageCountalsWordwas gedeclareerd (maximum 65 535), waardoor de vergelijking> 65535altijd onwaar was; gewijzigd naarIntegerzodat de controle nu correct afgaat op pathologische bestanden - CFF-/Type 2-charsetsparser (Formaat 1 en Formaat 2): dode
Done := True-toewijzingen verwijderd die direct vóór eenBreakkwamen en daarom nooit werden gelezen, waardoor compilerhints verdwenen
Version 3.75.0
Beveiliging
- Het parsen van niet-vertrouwde ingebedde lettertypen (TrueType, Type 1, CFF en CMap) gehard tegen schrijfacties buiten de grenzen, onbeperkte charstring-recursie en buitensporige geheugentoewijzingen door foutieve lettertypegegevens
- De image-decoders (PNG, GIF, TIFF, JBIG2 en CCITT Group 3 en 4) gehard tegen lees- en schrijfacties buiten de grenzen, integer-overflow in breedte- en hoogterekeningen en verwijzingen naar een lege palette uit kwaadaardige images
- De streamfilters (LZW, ASCII85 en Flate predictors) gehard tegen bufferleesacties buiten de grenzen, deling door nul en niet-eindigende lussen op gemanipuleerde streamdata
- Cross-reference-, document-herbouw- en name-tree-parsing gehard tegen toegang buiten de grenzen en oneindige lussen veroorzaakt door foutieve of circulaire cross-referencegegevens
- AES-CBC-ontsleuteling valideert nu de blokuitlijning van de ciphertext en initialiseert het uitvoerbuffer met nullen, waardoor ongeïnitialiseerd heapgeheugen niet meer in ontsleutelde tekenreeksen en streams kan lekken
Opgelost
- SHA-256-, SHA-384- en SHA-512-detached-signature digests worden nu met de juiste cryptografische provider geproduceerd; eerder leverden ze een lege digest op en resulteerden ze in ongeldige signatures
- ASCII85- en RC4-decoding geven niet langer ongeïnitialiseerde data terug en gooien geen uitzondering meer op afgeknotte invoer of een lege key
- De GIF-achtergrondkleur wordt nu met het juiste blauwe kanaal gelezen in plaats van het groene kanaal te dupliceren
Version 3.74.1
Opgelost
- Een E2010 compileerfout over incompatibele types in de PAdES-signaturevalidatiegegevens (VRI) opgelost die het compileren van de library verhinderde
- De laatste compilerwaarschuwing en hints over ongebruikte variabelen verwijderd; alle Win32- en Win64-trial- en releaselibrary-builds compileren nu zonder waarschuwingen
Version 3.74.0
Toegevoegd
- De directe bestandspaden van
EncryptFileenDecryptFilelezen nu PDF's waarvan de cross-referencegegevens in cross-reference streams zitten, inclusief incrementeel bijgewerkte ketens en hybride-referencebestanden met een/XRefStm-zijsectie, in plaats van terug te vallen op de tragere volledige reader: de AES-256-bescherming van een benchmarkdocument van 1.25 GB daalde van ongeveer 4.4 naar 2.5 seconden en de ontsleuteling van ongeveer 1.7 naar 1.3 seconden - Herschrijvingen die objecten uit gecomprimeerde objectstreams meenemen, schrijven nu een cross-reference-streamtrailer uit, zodat die objecten aanwijsbaar blijven in de versleutelde of ontsleutelde uitvoer
Opgelost
- Een revisie zonder document
/IDin een incrementeel bijgewerkt bestand wist tijdens een directe herschrijving niet langer de overgeërfde identifier uit een eerdere revisie
Version 3.73.2
Gewijzigd
DASaveAsFilebundelt zijn uitvoerwrites nu en vindt het sluitwoord van elk object zonder per stap stringallocaties, waardoor de herschrijving van een benchmarkdocument van 2 GB met meer dan een miljoen objecten daalde van ongeveer 57 naar 11 seconden
Version 3.73.1
Gewijzigd
- De directe bestandspaden van
EncryptFileenDecryptFilelezen de bron nu via een schuivend venster en bundelen uitvoerwrites, zodat AES-256-bescherming van zeer grote PDF's met miljoenen objecten meerdere keren sneller draait: op een benchmarkdocument van 2 GB daalde encryptie van ongeveer 123 naar 32 seconden en ontsleuteling van ongeveer 127 naar 23 seconden - Objectlichamen die in het leesvenster passen, worden tijdens een directe AES-256-herschrijving niet langer twee keer van schijf opgehaald
Opgelost
- Directe AES-256-herschrijvingen van PDFs met hybride references (bestanden met een
/XRefStm-traileritem) vallen nu terug op de volledige reader in plaats van gecomprimeerde objecten te riskeren - Cross-reference-parsing in het directe bestandspad leest niet langer alles van de cross-reference-sectie tot het einde van het bestand in één keer, wat het geheugen kon uitputten bij bestanden van meerdere gigabytes waarvan de
/Prev-keten dicht bij het begin van het bestand wijst, en een gebroken/Prev-keten valt nu terug op de volledige reader in plaats van een onvolledig document te produceren
Version 3.73.0
Toegevoegd
- De SigningWorkbench-demo voert nu volledige cryptografische digestverificatie uit van detached CMS-signatures (
adbe.pkcs7.detachedenETSI.CAdES.detached) via de Windows CryptoAPI: de ondertekende bytebereiken worden opnieuw gehasht en gecontroleerd tegen de CMS-signature, een gewijzigd document wordt gemeld met de nieuwe SG203-foutcode, en elke signature krijgt een driedeligedigestValid-waarde in de JSON-, CSV- en HTML-rapporten - Nieuwe automatiseringsschakelaars voor SigningWorkbench:
--quiettoont alleen de batchesamenvatting en rapportpaden,--fail-faststopt de batch bij het eerste falende bestand, en het JSON-rapport registreert nu de bibliotheekversie
Version 3.72.0
Toegevoegd
- De ComplianceWorkbench-demo krijgt professionele batch-workflows:
--policy-filelaadt het auditbeleid uit een JSON-bestand zodat teams hun documentregels kunnen versioneren en delen,--baselinevergelijkt de run met een eerdere compliance-report.json en toont nieuwe fouten, herstelde bestanden en bestanden die blijven falen, en--preflight-detailsvoegt preflight-probleemregels toe aan de JSON- en HTML-rapporten - Nieuwe automatiseringsschakelaars voor ComplianceWorkbench:
--quiettoont alleen de batchesamenvatting en rapportpaden,--fail-faststopt de batch bij het eerste falende bestand, en het JSON-rapport registreert nu de bibliotheekversie
Version 3.71.2
Opgelost
AppendToFilevoegt incrementele updates opnieuw toe aan hetzelfde PDF-bestand dat metLoadFromFileis geladen; de streaming loader houdt het bronbestand nu leesbaar zonder de schrijfhendel te blokkeren die nodig is voor de update
Version 3.71.1
Toegevoegd
- ComplianceWorkbench- en SigningWorkbench-rapporten bevatten nu labels voor bevindingernst, velden voor hoogste ernst per bestand, samenvattingen van de ernstfrequentie per batch en overeenkomstige JSON-, CSV-, HTML- en console-uitvoer voor snellere beleidstriage
Version 3.71.0
Toegevoegd
- De inspectie in de SigningWorkbench-demo meldt nu de revisievolgorde en het DocMDP-certificeringsniveau van elke signature, markeert zwakke MD5/SHA-1-certificatesignaturealgoritmen en de legacy adbe.pkcs7.sha1 SubFilter met
--forbid-weak-digest(SG303/SG405), self-signed certificaten met--forbid-self-signed(SG406), documenten zonder certificeringssignature met--require-certified(SG304), en controleert altijd of het ondertekeningstijdstip binnen de geldigheidsperiode van het certificaat valt (SG407) - De ondertekenmodus van SigningWorkbench gebruikt nu de sign process API met nieuwe schakelaars
--subfilter(sha1, detached of cades voor PAdES-baselinesignatures) en--digest(auto tot sha512), en modernadbe.pkcs7.detachedmet SHA-256 is de nieuwe standaard voor ondertekenen - Nieuwe read-side accessor
TPDFlibSignDoc.GetSignatureDocMDPLevelByNamegeeft het DocMDP-certificeringsniveau van een signatureveld terug volgens ISO 32000-1 §12.8.2.2
Version 3.70.0
Toegevoegd
- De ComplianceWorkbench-demo handhaaft nu ook beleid voor permissies, metadata en omvang:
--require-print-alloweden--require-copy-allowedcontroleren de permissiebits van het document (PC205/PC206),--require-authoren--require-creation-datecontroleren de volledigheid van metadata (PC306/PC307), en--max-pagesen--max-file-sizebegrenzen de documentomvang (PC308/PC309) - Het archiefprofiel vereist nu ook een auteur en een creatiedatum, en het toegankelijke profiel vereist de kopieerpermissie waarop ondersteunende technologie vertrouwt
- ComplianceWorkbench-rapporten aggregeren nu een samenvatting van foutcodefrequenties over de batch, en de statistieken per bestand bevatten auteur, creatiedatum, bestandsgrootte en de status van print- en kopieerpermissies
Version 3.69.1
Opgelost
DecryptFileverwijdert opnieuw encryptie van AES-128- en RC4-beschermde documenten, inclusief documenten die alleen een eigenaarwachtwoord bevatten; sinds v3.67.4 meldde het snelle pad voor grote bestanden deze documenten ten onrechte als een verkeerd wachtwoord (error 404) in plaats van ze naar het reguliere ontsleutelpad te sturen, terwijl AES-256-documenten niet werden geraakt
Version 3.69.0
Toegevoegd
- Nieuwe SigningWorkbench-Delphi-demo: een consolehulpmiddel voor signatures en certificaten dat de signaturevelden van één PDF of een hele map inspecteert (SubFilter, ondertekeningstijd, ByteRange-dekking en het ondertekeningscertificaat met vervalcontroles), PDF's in batch ondertekent met een PKCS #12-certificaat en PFX-bestanden controleert; elke overtreding wordt gekoppeld aan een stabiele beleidsfoutcode (SG101–SG501) en de resultaten worden weggeschreven als JSON-, CSV- en HTML-rapporten met gelokaliseerde demogidsen voor alle 18 documentatietalen
- Nieuwe read-side accessors voor signatures op
TPDFlibSignDoc:GetSignatureFieldNamessomt de signaturevelden van een document op,GetSignatureTextValueByNamegeeft de /M-ondertekeningstijd, /Name, /Reason, /Location, /ContactInfo en /Type-items terug (met ontsleuteling bij versleutelde documenten), enGetSignatureValueByNamegeeft /Filter, /SubFilter, /Contents en de ByteRange-items terug op veldnaam
Opgelost
- De Windows CryptoAPI-import van
CertCloseStoreopgelost, die zonder de flagsparameter was gedeclareerd en op Win32 de stack van de aanroeper kon beschadigen wanneer een certificaatopslag werd gesloten
Version 3.68.0
Toegevoegd
- Nieuwe ComplianceWorkbench-Delphi-demo: een batchbeleid-auditconsolehulpmiddel dat één PDF of een hele map controleert tegen een configureerbaar nalevingsbeleid voor PDF/A- en PDF/UA-preflight, encryptieregels, PDF-versiebereik, Tagged PDF, linearisatie en documenttitel, elke overtreding rapporteert als een stabiele beleidsfoutcode (PC101–PC501), en JSON-, CSV- en HTML-rapporten schrijft met exitcodes die geschikt zijn voor automatisering
- De nieuwe demo wordt geleverd met beleidsprofielen die gangbare vereisten bundelen—archive, accessible, secure en web—met expliciete opdrachtregelopties die profielwaarden overschrijven, en bevat gelokaliseerde demogidsen voor alle 18 documentatietalen
Version 3.67.4
Gewijzigd
EncryptFileenDecryptFilegebruiken nu een directe AES-256-herschrijfroute voor grote classic-xref PDF's, waarbij versleutelde data tussen bestanden wordt gestreamd in plaats van elk object te laden en opnieuw te serialiseren; een benchmarkbestand van 2 GB voltooit file-to-file AES-256-encryptie en -decryptie nu via de Direct File API met resultaatcode 1 enLastErrorCode0
Opgelost
- De afhandeling van directe AES-256-stringtokens opgelost zodat dictionarydelimiters niet voor hexstrings worden aangezien en versleutelde lege strings correct ontsleutelen
Version 3.67.3
Wijzigingen
- De Delphi- en C++Builder-demo's voor DrawShapes, CreateWithImage, CreateTable, EditFormField en EmbeddedFonts zijn uitgebreid, zodat de gegenereerde PDF's nu praktische workflows tonen voor tekenen, afbeeldingsplaatsing, tabelopmaak, styling van formuliervelden en vergelijking van lettertype-insluiting in plaats van minimale uitvoer met één actie
Opgelost
- De CreateTable-demo stelt nu vóór het renderen van de tabel expliciet een A4-paginaformaat in, zodat de eerder niet-geïnitialiseerde paginaformaatvariabele in het Delphi-voorbeeld wordt vermeden
Version 3.67.2
Opgelost
- Een regressie uit de in v3.67.0 geïntroduceerde luie loader-side detectie is verholpen: detectie van contentfuncties kon tijdens het opslaan worden uitgevoerd en een expliciet gevraagde opslagversie (SetInformation 0) of een vergrendelde versie (LockSaveVersion) overschrijven, waardoor een strikte opslag naar een lagere versie content met een hogere versie niet meer weigerde en een vergrendelde versie omhoog kon verschuiven; detectie wordt nu uitgevoerd vóór elke expliciet ingestelde versie en nooit voor documenten die zijn gemaakt in plaats van geladen, waardoor het versiebeheer van vóór v3.67.0 wordt hersteld terwijl de besparingen van lui laden behouden blijven
Version 3.67.1
Gewijzigd
- Functiedetectie leest stream-objecten nu met een oppervlakkige parse die alleen de objectdictionary inspecteert en de streambody overslaat, omdat de scan de streaminhoud nooit onderzoekt; bij documenten met grote afbeeldingsstreams voorkomt dit dat body-bytes tijdens de detectie worden gelezen, waardoor de objectleestijd van een detectiepass met ongeveer 40% daalt (ongeveer 13 s in plaats van 20 s op een bestand van 2 GB met 1,6 miljoen objecten), terwijl de gedetecteerde functielijst en de effectieve PDF-versie identiek blijven
Version 3.67.0
Gewijzigd
- De detectie van inhoudskenmerken aan de laderzijde gebeurt nu uitgesteld (lazy) – in plaats van het hele document tijdens het laden te scannen, wordt ze pas bij het eerste gebruik uitgevoerd, wanneer de effectieve PDF-versie of de lijst met gedetecteerde kenmerken wordt opgevraagd of wanneer het document wordt opgeslagen; alleen-lezen taken zoals paginatelling, tekst- of beeldextractie en rendering die de versie nooit opvragen en niet opnieuw opslaan slaan de scan volledig over, waardoor de laadtijd van zeer grote documenten met ongeveer 80% wordt verkort (ongeveer 10 s in plaats van 56 s bij een bestand van 2 GB met 1,6 miljoen objecten), terwijl de set gedetecteerde kenmerken en de effectieve PDF-versie identiek blijven zodra de detectie is uitgevoerd
Version 3.66.1
Gewijzigd
- Het laden van zeer grote documenten met meerdere pagina's is nu aanzienlijk sneller: de detectie van inhoudskenmerken aan de laderzijde slaat regelcontroles over die het resultaat niet kunnen veranderen – zowel regels die al overeenkwamen als regels die niet op een bepaald object van toepassing zijn – waardoor de laadtijd van enorme bestanden ongeveer wordt gehalveerd terwijl de gedetecteerde kenmerken en de effectieve PDF-versie identiek blijven
Version 3.66.0
Gewijzigd
- Het laden van zeer grote documenten met meerdere pagina's gebruikt nu aanzienlijk minder geheugen op de piek. De inhoudsfeaturedetectie aan de laderzijde materialiseert het volledige objectmodel niet langer in één keer – het streamt via de willekeurige toegangslezer één object tegelijk – wat het piekgeheugengebruik op grote bestanden met ongeveer 90 % verlaagt terwijl de gedetecteerde functies en effectieve PDF-versie ongewijzigd blijven.
Version 3.65.0
Toegevoegd
- Documenten groter dan 2 GB kunnen nu worden geopend. De vorige in-memory buffer die de documentgrootte tot ongeveer 2 GB beperkte, is verwijderd.
Gewijzigd
- Bij het laden van een PDF uit een bestand worden objectgegevens nu op aanvraag uit de bron gelezen in plaats van het hele document in het geheugen te bufferen, wat het piekgeheugengebruik bij grote bestanden sterk vermindert.
- Een document dat uit een bestand is geladen, houdt dat bestand met gedeelde leestoegang geopend totdat het document wordt gesloten of gewist.
Opgelost
- Verbeterde robuustheid bij het laden van documenten met voorafgaande bytes vóór de %PDF- header en bij het verwerken van onjuiste cross-reference-gegevens.
Version 3.64.0
Gewijzigd
- Direct API-bewerkingen op zeer grote of objectrijke PDF's – EncryptFile, DecryptFile en DASaveAsFile – zijn nu drastisch sneller en lopen niet meer vast. Een document van 2 GB met ongeveer 1,6 miljoen objecten dat voorheen niet kon worden voltooid, wordt nu in ongeveer een minuut versleuteld, en de verwerkingstijd schaalt vrijwel lineair met het document in plaats van in te storten naarmate het aantal objecten groeit.
- Het versleutelen van grote documenten is aanzienlijk sneller – een bewerking die voorheen vele minuten duurde, wordt nu in seconden tot ongeveer een minuut voltooid – zonder wijziging in versleutelingssterkte, compatibiliteit van de cijfertekst of uitvoer.
Version 3.63.0
Opgelost
- Een proces-crash opgelost bij het laden van grote PDF-bestanden waarvan de interne byte-offsets de 32-bits grens (ongeveer 2 GB) overschrijden; de loader gebruikt nu overal 64-bits offsets, zodat bestanden tot bijna 2 GB betrouwbaar laden en bestanden van 2 GB of groter netjes een laadfout melden in plaats van te crashen.
Version 3.62.0
Gewijzigd
- AES-256-CBC-versleuteling en -ontsleuteling nemen nu ook op 32-bits Windows het hardwareversnelde AES-NI-pad, niet alleen op 64-bits, nog steeds met een automatische terugval naar de overdraagbare C-implementatie op processors zonder AES-NI. De versleutelde tekst blijft op elk platform ongewijzigd.
Version 3.61.0
Gewijzigd
- AES-256-CBC-versleuteling en -ontsleuteling gebruiken nu een hardwareversnelde AES-NI-backend op 64-bits Windows, met een automatische terugval naar de overdraagbare software-implementatie op processors zonder AES-NI. De versleutelde tekst is identiek op elk platform; alleen de snelheid van wachtwoordgebaseerde AES-256-PDF-versleuteling verandert.
Version 3.60.0
Toegevoegd
MergeFileListvoegt nu de logische-structuurbomen (Tagged PDF) van de invoerdocumenten samen tot één bereikbare structuurboom, in plaats van alleen de boom van het eerste document te behouden en de andere als onbereikbare objecten achter te laten. Structuurelementen op het hoogste niveau, de parent tree (met hertoegewezen pagina-/StructParents- en annotatie-/StructParent-sleutels),/RoleMap,/ClassMapen/IDTreeworden gecombineerd en de samengevoegde catalogus wordt als Tagged gemarkeerd (/MarkInfo /Marked true).
Gewijzigd
- Bij het samenvoegen van documenten met conflicterende
/RoleMap-,/ClassMap- of/IDTree-sleutels wordt het eerste voorkomen behouden. Het snelle pad (MergeFileListFast) blijft structuurinformatie weglaten.
Version 3.59.0
Gewijzigd
MergeFileListvoegt documenten nu in één doorgang samen (O(N) in plaats van O(N²)), waardoor het samenvoegen van veel bestanden aanzienlijk sneller wordt; het krijgt ook het samenvoegen van bladwijzers over meerdere documenten dat aan het snelle pad is toegevoegd.- Standaard slaat
MergeFileListnu onleesbare of versleutelde invoerbestanden over en gaat door met het samenvoegen van de rest, in plaats van de hele bewerking bij het eerste slechte bestand af te breken. Gebruik het nieuweMergeFileListStrictom het vorige gedrag (stoppen bij de eerste fout) te herstellen. - Logische structuur (Tagged PDF)-objecten uit de invoer blijven nu behouden door
MergeFileList(het snelle pad blijft ze verwijderen).
Toegevoegd
MergeFileListStrictvoegt een bestandslijst samen, maar stopt bij het eerste onleesbare of versleutelde bestand en behoudt de strikte stop-bij-fout-semantiek van eerdere versies.
Version 3.58.0
Toegevoegd
MergeFileListFastvoegt nu de bladwijzers (outlines) van het document uit alle invoerbestanden samen, zodat het snelle samenvoegpad naast de AcroForm-formuliervelden ook de bladwijzers behoudt.- Samengevoegde bladwijzers behouden hun hiërarchie en paginabestemmingen; het aantal bladwijzers op het hoogste niveau van de samengevoegde uitvoer is gelijk aan de som van de invoer.
Version 3.57.1
Gewijzigd
- Opslaan via de Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) is nu aanzienlijk sneller bij zeer grote documenten: ongewijzigde objecten worden rechtstreeks uit de bronbytes gekopieerd in plaats van opnieuw te worden geparseerd en geserialiseerd. Het opnieuw opslaan van een document van 60.000 pagina's / 883 MB daalde van ongeveer 33 seconden naar ongeveer 23 seconden.
Version 3.57.0
Gewijzigd
- De prestaties van
TPDFlib.MergeFileListFastvoor het samenvoegen van meerdere documenten zijn verder geoptimaliseerd: ongewijzigde niet-stream-objecten in de toegevoegde documenten worden nu rechtstreeks hergebruikt vanuit hun oorspronkelijke bronbytes met een byteniveau indirecte referentieverschuiving, waarbij de parse-en-reserialize-roundtrip wordt overgeslagen en de doorvoer bij documenten met meerdere pagina's wordt verbeterd. De samenvoeguitvoer blijft ongewijzigd, met identieke paginatelling. - Objecten die streams bevatten of tot de structuurboom behoren, blijven het bestaande decoderingspad gebruiken, zodat het snellere bytepad alleen wordt toegepast waar dat aantoonbaar veilig is.
Version 3.56.44
Gewijzigd
TPDFlib.MergeFileListFastis geoptimaliseerd door merge-metadata vooraf te reserveren en ongewijzigde objecten uit het eerste document vanuit hun oorspronkelijke brongegevens te schrijven. Dit vermindert geheugenverplaatsingen en vermijdbaar decodeer-/uitvoerwerk voor objecten bij snelle merges van meerdere bestanden.- De Delphi-GUI
MergePDFbundelt nu de resultaatlogging van de snelle modus en vermijdt herhaalde scans van de volledige memo-tekst, zodat grote invoerlijsten na afloop van een merge responsiever blijven.
Version 3.56.43
Gewijzigd
- Het gewone samenvoegpad van
TPDFlib.MergeFileListis geoptimaliseerd door de tussentijdse tijdelijke bestanden af te wisselen in plaats van de groeiende samengevoegde PDF vóór elke extra invoer te kopiëren. Dit vermindert schijf-I/O voor workflows met meerdere bestanden terwijl het bestaande contract voor het teruggegeven aantal behouden blijft.
Version 3.56.42
Toegevoegd
- 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.
Gewijzigd
- 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.
Opgelost
- 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.
Version 3.56.41
Toegevoegd
TPDFlib.DACopyFiletoegevoegd voor Direct Access workflows die een paginatelling en een ongewijzigde bestandskopie nodig hebben zonder de volledige normale objectgrafiek op te bouwen.- De Delphi
HugeFileBenchmarkdemo bevat nu eendirect-copyrij plus--opsen--skipfilters voor gerichte runs met grote bestanden.
Gewijzigd
- 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.
Version 3.56.40
Gewijzigd
- 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.
Version 3.56.39
Gewijzigd
- 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.
Version 3.56.38
Gewijzigd
- 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.
Opgelost
- Normale API-encryptie-uitvoer gerepareerd zodat
Encryptde trailer/IDaanmaakt of behoudt voordat AES-256-beveiligingsgegevens worden geschreven, waardoor versleutelde PDF's viaEncryptionStatusherlaaddetecteerbaar blijven.
Version 3.56.37
Toegevoegd
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.
Version 3.56.36
Toegevoegd
- De Delphi
PreflightReport-demo ondersteunt nu batch-directoryruns met--input-dir,--output-diren--recursive, en schrijft één rapport per PDF als<basename>.preflight.<ext>.
Gewijzigd
- 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.
Version 3.56.35
Toegevoegd
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.
Version 3.56.34
Toegevoegd
- 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.
Version 3.56.33
Toegevoegd
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.
Gewijzigd
- 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.
Version 3.56.32
Toegevoegd
- 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.
Gewijzigd
- De demo ondersteunt de opties
--input,--output,--pdfa,--pdfua,--bothen--first-issue, plus exitcodes voor automatiseringsvriendelijke resultaten voor geslaagd, probleem gevonden en runtimefout.
Version 3.56.31
Gewijzigd
GetCustomKeys(2)verbergt nu consequent door de bibliotheek beheerde Catalog-systeemvermeldingen, waaronder/OutputIntents,/Extensions,/Requirements,/Collectionen/NeedsRendering.
Opgelost
- PDF/A-outputintents die door
SetPDFAModeworden aangemaakt, verschijnen niet langer als aangepaste Catalog-sleutels, waardoor enumeratie van applicatiemetadata gescheiden blijft van PDF-compliancestructuren.
Version 3.56.25
Gewijzigd
- 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.
Version 3.56.24
Gewijzigd
- 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.
Version 3.56.23
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.56.22
Gewijzigd
- 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.
Version 3.56.21
Toegevoegd
- 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).
Gewijzigd
- 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.
Version 3.56.20
Toegevoegd
- 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").
Gewijzigd
- 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.
Version 3.56.19
Toegevoegd
- 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. - 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).
Gewijzigd
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.- 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.
Version 3.56.18
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.56.17
Toegevoegd
- 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.
Gewijzigd
- 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. 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).
Version 3.56.16
Toegevoegd
- 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).
Gewijzigd
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.
Version 3.56.15
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.56.14
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.56.8
Gewijzigd
- 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.
Version 3.56.13
Gewijzigd
- 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.
Version 3.56.12
Gewijzigd
- 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.
Version 3.56.11
Gewijzigd
- 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.
Version 3.56.10
Gewijzigd
- 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.
Version 3.56.9
Gewijzigd
- 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.
Version 3.56.7
Gewijzigd
- 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.
Version 3.56.6
Gewijzigd
- 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.
Version 3.56.5
Gewijzigd
- 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.
Version 3.56.4
Gewijzigd
- 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).
Version 3.56.3
Gewijzigd
- 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.
Version 3.56.2
Gewijzigd
- 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.
Version 3.56.1
Gewijzigd
- 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.
Version 3.56.0
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.55.6
Gewijzigd
- 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.
Version 3.55.5
Gewijzigd
- 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.
Version 3.55.4
Gewijzigd
- 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.
Version 3.55.3
Gewijzigd
- 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.
Version 3.55.2
Gewijzigd
- 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.
Version 3.55.1
Gewijzigd
- 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.
Version 3.55.0
Gewijzigd
- 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).
Version 3.54.0
Gewijzigd
- 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.
Version 3.53.0
Gewijzigd
- 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.
Version 3.52.0
Gewijzigd
- 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.
Version 3.51.0
Gewijzigd
- 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.
Version 3.50.0
Gewijzigd
- 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.
- 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.
Opgelost
- 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.
Version 3.49.0
Gewijzigd
- 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).
Version 3.48.0
Gewijzigd
- 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).
Version 3.47.0
Gewijzigd
- 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.
Version 3.46.1
Gewijzigd
- 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.
Version 3.46.0
Gewijzigd
- 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.
Version 3.45.0
Gewijzigd
- 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.
Version 3.44.1
Gewijzigd
- 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.
Version 3.44.0
Gewijzigd
- 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.
Version 3.43.0
Gewijzigd
- 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.
Opgelost
- 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.
Version 3.42.0
Gewijzigd
- 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).
Opgelost
- 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.
Version 3.41.0
Gewijzigd
- 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.
Version 3.40.0
Toegevoegd
- 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.
Gewijzigd
- GetInformation(201) retourneert '1' tot en met '6', overeenkomstig de actieve PDF/A-modus en consistent met de nieuwe modusnummering.
Opgelost
- 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.
Version 3.39.0
Gewijzigd
- 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.
Version 3.38.0
Gewijzigd
- 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.
Version 3.37.2
Gewijzigd
- 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.
Version 3.37.1
Gewijzigd
- 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.
Version 3.37.0
Gewijzigd
- 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.
Version 3.36.1
Gewijzigd
- 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.
Version 3.36.0
Gewijzigd
- 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.
Version 3.35.1
Gewijzigd
- 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.
Version 3.35.0
Gewijzigd
- 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.
Version 3.34.0
Gewijzigd
- 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.
Version 3.33.1
Toegevoegd
- 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.
Version 3.33.0
Gewijzigd
- 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.
Version 3.32.0
Gewijzigd
- 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.
Version 3.31.1
Gewijzigd
- 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.
Version 3.31.0
Opgelost
- 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.
Version 3.30.1
Toegevoegd
- 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.
Version 3.30.0
Gewijzigd
- 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.
Version 3.29.1
Toegevoegd
- 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.
Version 3.29.0
Gewijzigd
- 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.
Version 3.28.5
Gewijzigd
- 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.
Version 3.28.4
Gewijzigd
- 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.
Version 3.28.3
Gewijzigd
- 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.
Version 3.28.2
Gewijzigd
- 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.
Version 3.28.1
Gewijzigd
- 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.
Version 3.28.0
Gewijzigd
- 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.
Version 3.27.2
Opgelost
- 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.
Version 3.27.1
Gewijzigd
- 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.
Version 3.27.0
Gewijzigd
- 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.
Version 3.26.0
Gewijzigd
- 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.
Version 3.25.1
Gewijzigd
- 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.
Version 3.25.0
Gewijzigd
- 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.
Version 3.24.0
Gewijzigd
- 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.
Version 3.23.1
Gewijzigd
- 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(313) retourneert de PDF-versiestring waarop het opslagdoel momenteel is vergrendeld, of een lege string voor documenten met vrije versiebeheer.
Opgelost
- 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).
Version 3.23.0
Gewijzigd
- 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.
Version 3.22.0
Gewijzigd
- 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.
Version 3.21.0
Gewijzigd
- 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.
Opgelost
- 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.
Version 3.20.3
Gewijzigd
- 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.
Version 3.20.2
Gewijzigd
- 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.
Version 3.20.1
Gewijzigd
- 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.
Version 3.20.0
Gewijzigd
- 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.
Version 3.19.0
Gewijzigd
- 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).
Version 3.18.6
Gewijzigd
- 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).
Version 3.18.5
Toegevoegd
- Nieuwe regel: AcroForm /NeedAppearances wordt herkend als een PDF 1.5-feature volgens PDF 1.5 Table 218.
Gewijzigd
- De PDFFeatureRules-tabel bevat nu 96 regels (95 + 1 nieuw).
Opgelost
- 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)".
Version 3.18.4
Toegevoegd
- 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.
Gewijzigd
- PDFlibZLib gebruikt nu altijd de gebundelde statische zlib-ng object backend bij normale library-builds, waardoor het resterende System.ZLib-fallbackpad wordt verwijderd.
- 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.
Version 3.18.3
Gewijzigd
- 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.
Version 3.18.2
Gewijzigd
- 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.
Version 3.18.1
Gewijzigd
- 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.
Version 3.18.0
Gewijzigd
- 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.
Version 3.17.0
Gewijzigd
- 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.
Version 3.16.3
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.16.2
Gewijzigd
- 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.
Version 3.16.1
Toegevoegd
- 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.
Gewijzigd
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 179/179, en C++Builder Win64x GoogleTest slaagde voor 57/57.
Version 3.16.0
Toegevoegd
- 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).
Gewijzigd
- 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.
- 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.
Version 3.15.0
Gewijzigd
- 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.
Version 3.14.3
Gewijzigd
- 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.
Version 3.14.2
Gewijzigd
- 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.
Version 3.14.1
Gewijzigd
- 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.
Version 3.14.0
Gewijzigd
- 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.
Version 3.13.0
Gewijzigd
- 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.
Version 3.12.7
Toegevoegd
- De geautomatiseerde testdekking voor de PdfToImage-renderworkflow met directe toegang is uitgebreid in zowel de Delphi DUnitX- als de C++Builder GoogleTest-suites.
Gewijzigd
- 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.
Version 3.12.6
Gewijzigd
- 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.
Version 3.12.5
Toegevoegd
- Regressiedekking toegevoegd voor onbekende escapes in letterlijke strings en gemengde octale/niet-octale escape-reeksen.
Gewijzigd
- 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.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 141/141.
Version 3.12.4
Toegevoegd
- Regressiedekking toegevoegd voor sluitende-accolade-scheidingstekens in namen en sparse compressed-object xref stream-items.
Gewijzigd
- PDF 1.7-lexicale parsing is verbeterd zodat name objects nu correct stoppen bij het sluitende-accolade-scheidingsteken.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 139/139.
Opgelost
- SmartAccess-laden van xref stream compressed-object-items waarvan het objectstreamnummer groter is dan de PDF-bytelengte is opgelost.
Version 3.12.3
Toegevoegd
- Nieuwe AES-versleutelde PDFs schrijven crypt-filter Length-waarden nu als bitlengten, overeenkomstig het contract van het PDF 1.7 crypt filter dictionary.
Gewijzigd
- 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.
- 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.
Version 3.12.2
Gewijzigd
- 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.
- Validatie: Delphi Win32- en Win64-DUnitX-suites slaagden elk voor 134/134.
Opgelost
- Herschreven xref-streamtrailers behouden geen stream-only DecodeParms-sleutels meer wanneer PDFlibPas ze opslaat als klassieke trailerdictionaries.
Version 3.12.1
Gewijzigd
- 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.
Version 3.12.0
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.11.0
Toegevoegd
- 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.
Gewijzigd
- 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.
- 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.
Opgelost
- 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.
Version 3.10.3
Toegevoegd
- 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.
Version 3.10.2
Toegevoegd
- 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.
Version 3.10.1
Toegevoegd
- 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.
Version 3.10.0
Toegevoegd
- 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.
- 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.
Gewijzigd
- 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.
- 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.
Opgelost
- Een geheugenlek in de ImportEMF-demo opgelost (de TPDFlib-instantie werd aangemaakt maar nooit vrijgegeven).
Version 3.9.14
Gewijzigd
- 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.
Opgelost
- De page-range copy-demo gerepareerd zodat deze daadwerkelijk pagina's kopieert in plaats van altijd een fout te melden.
Version 3.9.13
Toegevoegd
- 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.
Opgelost
- 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.
Version 3.9.12
Gewijzigd
- 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.
Version 3.9.11
Opgelost
- 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.
Version 3.9.10
Opgelost
- 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.
Version 3.9.9
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.9.8
Opgelost
- 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.
Version 3.9.7
Toegevoegd
- Optionele PDFium-gebaseerde paginarendering op Windows toegevoegd, inclusief BMP-streamrendering, device-context rendering, memory rendering en printeruitvoer.
Gewijzigd
- De Delphi MultiFunction View/Print-demo bijgewerkt met een renderer selector zodat gebruikers kunnen schakelen tussen de bestaande GDI+-renderer en PDFium.
Version 3.9.6
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.9.5
Opgelost
- 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.
Version 3.9.4
Opgelost
- 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.
Version 3.9.3
Gewijzigd
- 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.
Beveiliging
- 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.
Version 3.9.2
Opgelost
- 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.
Version 3.9.1
Opgelost
- 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.
Version 3.9.0
Gewijzigd
- 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.
Opgelost
- 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.
Version 3.8.1
Opgelost
- 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.
Version 3.8.0
Beveiliging
- 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.
Version 3.7.0
Beveiliging
- 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.
Version 3.6.0
Gewijzigd
- 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.
Beveiliging
- 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.
Version 3.5.0
Toegevoegd
- 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.
Gewijzigd
- 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.
Version 3.4.0
Beveiliging
- 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.
Version 3.3.1
Toegevoegd
- 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.
Opgelost
- 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.
Version 3.3.0
Opgelost
- 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.