Versionsinformation
Versionshistorik
« Tillbaka till dokumentationsindex
Versionshistorik för PDFlibPas-biblioteket. Poster listas med den senaste först; varje release följer semantisk versionshantering enligt projektets releasepolicy.
Senaste version
- Senaste versionsnummer: v3.75.6; Utgivningsdatum: 2026-06-23
Version 3.333.0
Added
- Inspektion av inkrementella revisioner. En signatur täcker bytena i den revision den skrevs i, och allt som läggs till efteråt är en separat uppdatering vars innehåll avgör huruvida signaturen fortfarande står för dokumentet så som det är nu.
GetDocumentRevisionCount,GetDocumentRevisionStartochGetDocumentRevisionEndkartlägger dessa revisioner, ochGetSignatureRevisionIndexsäger vid vilken av dem signaturen slutar GetDocumentRevisionKindrapporterar vad en uppdatering gjorde, som det mest långtgående av de objekt den rörde: bokföringsdata, valideringsmaterial, en dokumenttidsstämpel, en signatur, ett formulärfält, en anteckning eller dokumentinnehåll. Att lägga till valideringsmaterial för långtidsvalidering ser därför inte längre ut som att redigera dokumentetGetDocumentRevisionChangesräknar upp varje objekt som en uppdatering lade till, ändrade eller tog bort, tillsammans med vad varje objekt är och, för en ändrad ordlista, vilka nycklar som faktiskt skiljer sigGetDocumentRevisionsCompleterapporterar huruvida hela historiken gick att återskapa. En kedja som är bruten, cyklisk eller längre än vad läsaren följer lämnar de äldsta uppdateringarna osedda, och antalen är då en undre gräns i stället för ett svar- Ett objekt vars tidigare version inte kan läsas, eller vars strömkropp aldrig jämfördes, rapporteras som obestämt i stället för som ofarligt: en uppdatering som skriver om en sida men lämnar dess ordlista orörd misstas inte för en ompaketering
Version 3.332.0
Added
ApplyPAdESLongTermValidationbefordrar en redan signerad PDF till PAdES-B-LT i ett enda anrop. Den bygger undertecknarcertifikatets väg från signaturen själv, samlar in OCSP- och CRL-material för varje länk via de adresser som certifikaten namnger och skriver certifikaten och återkallningsdatan till dokumentets säkerhetslager med en VRI-post för signaturen, i en enda inkrementell uppdatering.ApplyPAdESLongTermValidationToStreamskriver resultatet till en ström i stället för en fil- Beteendet är konfigurerbart via en
PADES_LTV_*-alternativmask: huruvida VRI-posten ska skrivas, huruvida OCSP-svarare ska frågas, huruvida falla tillbaka på CRL:er, huruvida utfärdaradresser ska följas för att fullständiga vägen och huruvida återkallning ska hoppas över för ett självutfärdat rotcertifikat - Ett tomt fältnamn bearbetar varje signatur till en revision; ett namngivet fält bearbetar bara det ena
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountochGetPAdESLTVErrorrapporterar vad det senaste anropet samlade och varför det stannade i förtid, så ett delvis resultat över en onåbar svarare syns i stället för att vara tyst- Material som är identiskt med något redan upplagt skrivs en gång och refereras av varje signatur som behöver det, och en signatur som inte bär något läsbart certifikat rapporteras i stället för att masquerera som en lyckad befordran
Version 3.331.0
Added
- En signatur bär sin egen certifieringsväg, så materialet som en profil för långtidsvalidering behöver kan läsas från den signerade filen ensam.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountochGetSignatureEmbeddedCertificateDERreturnerar de certifikat som signaturen bäddar in, ochGetSignatureCertificateChainLengthochGetSignatureCertificateChainDERordnar dem i en väg från undertecknaren och utåt GetSignatureContentsHashHexreturnerar nyckeln som enAddPAdESDSSVRI-post adresseras med, beräknad från signaturen själv- Undertecknarcertifikatet matchas oavsett om signaturen identifierar det genom utfärdare och serienummer eller genom subjektnyckelidentifierare, och en väg stannar vid den sista utfärdare som signaturen faktiskt bär i stället för att låtsas vara fullständig
Fixed
- DER-läsaren avvisar en angiven elementlängd som är större än datan i stället för att låta ett nästan maximalt värde svämma över sin gränskontroll, och genomgången av certifikattilläggen läser inte längre förbi slutet på ett avkortat eller för långt certifikat. Båda är nåbara från ett specialutformat dokument, så åtkomsterna ovan förblir säkra på otillförlitlig indata
- Signaturåtkomsterna läser dokumentet med ett delat handtag, så de svarar medan en verifierare eller visare redan har filen öppen i stället för att misslyckas som om signaturen saknades
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
CreateValidationReportochSaveValidationReportproducerar en strukturerad PDF/A- och PDF/UA-1-valideringsrapport i XML eller JSON. Varje fynd innehåller regel-id, den standard som äger den, ett kort regelnamn, ISO-klausulen den upprätthåller, en allvarlighetsgrad och antalet drabbade objekt, och rapporten avslutas med per-standard- och dokumentnivå-statistik över godkänd/underkänd- En standard som inte begärdes rapporteras som
not-checkedi stället för som en tyst godkänd, så att en delvis körning inte kan misstas för ett rent facit - Bygg-pipelines kan nu portvakt på ett regel-id eller en ISO-klausul i stället för att matcha delsträngar i prosa: rapportfamiljen för preflight renderar först en mänsklig rapport och konverterar texten till JSON, HTML eller CSV, medan valideringsrapporten sätts samman från rå kontroll-utdata och håller de maskinläsbara fälten intakta
Version 3.322.0
Added
- Referensen dokumenterar nu de fyra externt deklarerade publika typerna som används över
TPDFlib-ytan och som tidigare saknade egen sida:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoochTPDFlibWatermarkBase, vilket slutför täckningen av publika händelse-, logg-, uppräkningsresultat- och vattenstämpel-typer
Version 3.321.0
Added
CheckDocumentPolicyutvärderar deklarativa egna regler såsomFonts.NotEmbedded = 0,Security.Encrypted = noellerDocument.Pages <= 500mot dokumentet och rapporterar varje regel som godkänd eller underkänd med det faktiska värdet, vilket förvandlar en intags-port för förläggare, arkiv och tryckerier till konfiguration i stället för handskriven inspektionskod
Version 3.320.1
Fixed
- Att rita text i ett PDF/A-läge utan att först ladda ett typsnitt felar inte längre: PDF/A kräver att varje typsnittsprogram är inbäddat, så den implicita genvägen till ett inbyggt typsnitt vägrades och lämnade inget typsnitt valt, och
DrawTextoch de övriga textanropen kraschade i stället för att rita - Den implicita typsnittssökvägen löser nu ett verkligt inbäddningsbart typsnitt medan ett PDF/A-läge är aktivt, så text ritad utan ett uttryckligt
AddTrueTypeFont-anrop bäddas in och förblir konform; ett direktAddStandardFont-anrop vägrades fortfarande under PDF/A - På värdar där inget inbäddningsbart typsnitt kan lösas faller ritandet tillbaka på de inbyggda måtten i stället för att felas och rapporterar konformitetsbristen via
LastErrorCode605, så att filen kan fångas innan den publiceras som konform
Version 3.320.0
Added
GetDocumentFeatureReportreturnerar en strukturerad egenskapsrapport i ett enda anrop — dokumentmetadata, sid- och objektantal, krypteringstillstånd, typsnitts- och bildinventeringar, taggning och dispositioner, formulärfält, signaturer, bilagor och uppdelningen i byte per kategori — vilket ersätter de dusin separata frågor som en katalogiserings- eller intags-pipeline tidigare var tvungen att sätta samman
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSortochSetCollectionItemValuebygger PDF-portföljer ovanpå de befintliga bilagorna, så att en uppsättning inbäddade filer presenteras som ett bläddrbart paket med egna kolumner, sorteringsordning och värden per fil i stället för en vanlig bilagelistaGetCollectionViewochGetCollectionFieldCountrapporterar presentationsläget och antalet deklarerade kolumner för en laddad portfölj
Version 3.318.1
Fixed
- Textextraktions-alternativ 12 (ignorera roterad text) tar nu bort roterade avsnitt oavsett hur de vrids: en kvarts varv medurs och en kvarts varv moturs behandlades tidigare olika, så sidoliggande marginalnoter kastades i en riktning och returnerades i den andra
- Samma alternativ behåller sned text som endast är skev, såsom en syntetisk kursiv, och toleransen skalas nu med textstorleken och sidtransformationen, så stora sneda rubriker kastas inte längre som om de vore roterade
Version 3.318.0
Added
DecodeAllStreamsexpanderar de komprimerade strömmarna i ett dokument på plats, så att ett sparande producerar en kopia vars innehållsströmmar, metadata och struktur kan läsas direkt av diff-verktyg, forensisk granskning och support-arbetsflöden; bilder, prediktionsströmmar och korsreferensströmmar behåller sin kodning, och objektströmmar materialiseras först så att inget går förlorat
Version 3.317.0
Added
SetTrappedochGetTrappeddeklarerar och läser dokumentets trapping-tillstånd som PDF/X kräver, skrivet som det/Trapped-namn som specifikationen kräver i stället för som en textsträngSetOutputIntentSubtypeochGetOutputIntentSubtypeomtagggar utdata-avsikten, så att en laddad färgprofil kan beskriva ettGTS_PDFX-tryckvillkor i stället för detGTS_PDFA1-arkiveringsvillkor som PDF/A-lägena skapar
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyochGetEncryptEmbeddedFilesOnlybegränsar AES-kryptering till inbäddade filer: dokumentet öppnas och renderas i alla läsare utan lösenordsprompt medan dess bilagor förblir krypterade, det vanliga arrangemanget för fakturor, medicinska journaler och ärendefiler vars försättssidor är offentliga men vars nyttolast inte är det
Version 3.315.0
Added
- Textextraktions-alternativ 18 roterar avsnitt ritade vid 90, 180 eller 270 grader in i den horisontella läsrutan och grupperar varje kvarts varv separat, så att roterade marginalnoter, tabellrubriker och diagramaxeletiketter extraheras som läsbara rader i stället för att sammanflätas med den upprätta texten eller kastas
Fixed
DASetTextExtractionOptionsaccepterar alternativ 16 (avbindestreckning) och alternativ 17 (orddelning vid teckenmellanrum) i stället för att förkasta dem, och den direkta extraktions-sökvägen vidarebefordrar nu alternativ 15, 16 och 17 till extraktorn, så att borttagning av understreck-regel, avbindestreckning och teckenmellanrum-delning tillämpas på filhandtag på samma sätt som på ett laddat dokument
Version 3.314.0
Added
GetFontHasToUnicoderapporterar huruvida det valda typsnittet har en Unicode-mappning, och typsnittsinventeringen får ett motsvarandeHasToUnicode-fält per typsnitt samt enNoToUnicodeCount-sammanfattning, så att dokument kan kontrolleras för extraction-säkra och PDF/A-*u- eller PDF/UA-konverterbara typsnitt innan bearbetning
Version 3.313.0
Added
SetPDFAModefår läge 8 för PDF/A-2u (ISO 19005-2 Level U), den konformitetsnivå som deklarerar Unicode-textmappningar utan att tillåta inbäddade filer, vilket slutför PDF/A-2-familjen vid sidan av de befintliga 2b- och 2a-lägena
Version 3.312.0
Added
GetObjectByPathochGetObjectByPathCountläser valfri nod i objektträdet genom sökvägsuttryck såsomRoot/Pages/Kids[0]/MediaBox[2]ellerpages[0]/Type— typer, skalära värden, serialiserade former och elementantal i ett anrop, vilket ersätter handskriven objektvandring för metadata-undersökningar, efterlevnadskontroller och support-diagnostik
Version 3.311.0
Added
SetBlackPointCompensationdeklarerar svartpunktskompensation (ON, OFF eller Default) för efterföljande ritande via PDF 2.0:s/UseBlackPtComp-grafiktillstånd, vilket låter prepress- och korrektur-utdata fastställa mörktonade ICC-konverteringar som tidigare var visningsprogram-specifika; dokumentversionen höjs automatiskt och PDF/A-lägena förkastar tillståndet
Version 3.310.0
Added
SetCompressionLevelochGetCompressionLevelexponerar deflate-nivån för varje komprimering som biblioteket utför: 0 behåller den standardiserade SIMD-accelererade motorn, 1 gynnar dataflöde och 9 pressar arkiven minstaRecompressStreamsompackar varje vanlig FlateDecode-ström i det valda dokumentet på aktuell nivå och behåller den mindre kodningen per ström, vilket krymper dokument som ursprungligen skrevs med en snabb komprimeringsinställning utan att röra deras innehåll
Version 3.309.0
Added
SetObjectStreamModeochGetObjectStreamModelägger till en tre-tillstånds objektströmstyrning: inaktivera, generera (standard) eller bevara, där bevara behåller den ursprungliga komprimerade grupperingen av den laddade filen's och skriver behållarna ordagrant, vilket gör konverteringar av befintliga PDF 1.5+-filer billigare eftersom ingenting packas upp eller omgrupperas
Changed
- I bevarande-läge flyttas medlemmar som redigerats sedan laddning upp till toppnivå-objekt så att deras ändringar sparas, och varje återstående komprimerad medlem väljer automatiskt den binära korsreferensströms-formen
Version 3.308.0
Added
CheckDocumentStructurekör en en-anrops strukturell hälsokontroll: varje objekt och ström tvingas genom sin avkodare, vanliga Flate-strömmar verifieras strikt mot zlib-slutmärket så att trunkerad data fångas, och rapporten flaggar saknade trailers, olösliga kataloger och sidor, krypteringshanterare som inte stöds samt filer reparerade via byte-skanning med fynd per objekt och en sammanfattningsrad
Version 3.307.0
Fixed
- Skadade dokument som använder korsreferensströmmar repareras nu framgångsrikt: råkonstruktionen återhämtar medlemmarna i komprimerade objektströmmar och, när inget trailer-nyckelord finns någonstans i filen, syntetiserar trailern från den nyaste nåbara dokumentkatalogen, så att en trasig startxref-offset inte längre gör sådana filer oöppningsbara
Version 3.306.0
Added
ExportDocumentDataskriver dokumentets informationsnycklar, hela bokmärkesträdet och sidetikett-intervallen som redigerbar oformaterad text i det klassiska dump_data-radformatetImportDocumentDatatillämpar samma format tillbaka — informationsnycklar uppdateras, bokmärkesträdet byggs om med nästlingsnivåer och destinationssidor, och sidetikett-intervall ersätts — vilket möjliggör mass-bokmärkesredigering och metadata-migrering mellan dokument i ett anrop vardera hållet
Version 3.305.0
Added
AuditDocumentSpacebryter ner dokumentet's byte-användning per kategori — bilder, typsnittsprogram och -ordböcker, innehållsströmmar, form-XObjects, objektströmmar, inbäddade filer, metadata, strukturträd, annoteringar, sidträd och övrigt — med objektantal, byte-totaler och procentandelar, vilket svarar på varför en fil är så stor som den är och vilken optimering som lönar sig bäst
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTextochGetStructTreeItemIntPropertyläser strukturen för ett taggat dokument som en utplattad djupet-först objektlista — elementtyper (rå och rollmappad), alternativ och faktisk text, språk, titlar, markerat-innehåll-id, sidnummer samt förälder/barn-relationer
Changed
- Strukturträdsläsaren skyddar mot skadade dokument: referenscykler, objektnummer utanför intervall och träd nästlade bortom 64 nivåer klipps av i stället för att loopa
Version 3.303.1
Fixed
- Genomskinliga underlagga-stämplar skapade av
StampTextochStampImageblöder inte längre ut sin opacitet i det ursprungliga sidinnehållet — transparenstillståndet är nu begränsat till själva stämpeln, så att sidan behåller sin fulla opacitet
Version 3.303.0
Added
OverlayDocumentPagesstämplar sidorna av ett annat öppet dokument på det valda dokumentets sidor, en källsida per målsida, ovanför eller under det befintliga innehållet — brevhuvudspapper, sammanhängande sidbakgrunder och skannade formulärmallar i ett anrop- Käll-uttömning är konfigurerbar: stoppa, cykla genom källsidorna eller fortsätt upprepa den sista källsidan; ett ytterligare alternativ förhindrar att stämpeln förstoras bortom sin naturliga storlek
Changed
- Dokumentstämplar anpassas till målsidans CropBox och placeras upprätt på sidor som bär en
/Rotate-post, och varje källsida importeras en gång som en delad Form-XObject så att upprepade mallar aldrig duplicerar sina resurser
Version 3.302.0
Fixed
- AES-256-lösenord bearbetas nu med SASLprep (RFC 4013) innan hashning, så att lösenord som innehåller icke-ASCII-mellanslag, mjuka bindestreck, kompatibilitetstecken eller kombinerande sekvenser öppnas korrekt i Acrobat och andra konforma läsare
- Öppnande av AES-256-dokument försöker först det standardiserade beredda lösenordet och faller tillbaka på den äldre byte-formen, så att filer som skrivits av tidigare utgåvor med icke-ASCII-lösenord fortsätter att öppnas
Added
- Felkod 604 rapporterar ett AES-256-lösenord som förkastats av SASLprep eftersom det innehåller förbjudna kodpunkter eller bryter mot de dubbelriktade reglerna
Version 3.301.0
Added
SplitDocumentToFilesspränger det valda dokumentet till en batch utdatafiler med ett fast antal sidor var, med hjälp av en%p-filnamnsplatshållare
Changed
- Batch-delning tolkar källdokumentet en gång och kopierar varje stycke från samma minnes-interna struktur, vilket ersätter den upprepade fulla omtolkning som en loop över
ExtractFilePagesutför för varje intervall
Version 3.300.0
Added
CollateDocumentsslår samman sidor från flera öppna dokument till det valda dokumentet i rotation, och tar ett konfigurerbart antal sidor från varje källa per varv (A1, B1, A2, B2, …)CollateDocumentsExaccepterar en lista med sidintervall per källa där fallande intervall såsom3-1vänder en källa, så att fram- och omvända bak-skanner-passer slås samman till läsordning i ett anrop
Changed
- Sammanslagna kollationeringar importerar varje källa genom en enda objektkarta och flätar om per sidordning, så att typsnitt och bilder som delas inuti en källa skrivs endast en gång oavsett gruppstorlek
Version 3.299.0
Added
SetDeterministicDocumentIDochGetDeterministicDocumentIDbyter trailer-filidentifieraren till ett reproducerbart värde så att identiska indata producerar identiska utdata-byte för bygg-caching, innehålls-adresserbar lagring och jämförelse av regression på byte-nivåSetDocumentIDSeedtillhandahåller ett uttryckligt frö för den reproducerbara filidentifieraren; utan ett frö härleds identifieraren från dokumentets metadata, versionshuvud och sidantal
Changed
- Reproducerbara filidentifierare uppdateras endast vid fulla sparanden; inkrementella uppdateringar och krypterade dokument behåller sin befintliga identifierare så att signaturer och lösenordsskyddade filer fortsätter att öppnas korrekt
Version 3.298.0
Added
AddLinkToArticleThreadochSetOutlineArticleThreadkopplar sidhotspots och dispositioner till en artikeltråd eller bead via standard Thread-åtgärderAddActionNextArticleThreadochPDF_ACTION_BUILDER_THREADlägger till Thread-åtgärder i kedjade, formulär-, sid- och dokumentåtgärdsarbetsflöden
Changed
- Thread-åtgärdsmål använder stabila indirekta tråd- och beadreferenser och avvisar ogiltiga index utan att ändra målbehållaren
- Formulärfälts-åtgärdsbyggare avvisar ytterligare åtgärder medan PDF/A-läget är aktivt, vilket bevarar PDF/A-förbudet mot fält- och widget-
/AA-ordböcker
Version 3.297.0
Added
- Referensen för
DLflat-DLL dokumenterar nu alla ANSI-ingångspunkter medA-suffix (char) och lägger till 353 referenssidor som speglar sina Unicode-motsvarigheter med korrektaPAnsiCharDelphi- ochconst char *C-signaturer BufferUtilities,DirectAccessFunctionalityochMiscellaneousFunctionshar byggts om som rena indexsidor för funktionsgrupper drivna av det delade kategorischemat, vilket rättar trasig markup, felmärkta sektioner och saknade chips- Navigeringsindexet och det delade sökindexet täcker nu hela DLL-ytan för både Unicode- och ANSI-anropare
Fixed
- Tog bort den inaktuella
SetLogger-ingången, som inte hade något motsvarande symbol i källan; den dokumenterade egenskapen ärLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoochRemoveAlternateImageerbjuder typad skapande och inspektion av bildvarianter för visning och utskrift- Alternativa bilder kan associeras med en valfri innehållsgrupp eller en medlemskapsordbok, medan en variant per basbild kan väljas som standard för utskrift
Changed
- Den inbyggda renderaren väljer nu alternativa bilder för valfritt innehåll när en basbild är dold och respekterar utskriftsstandarden på utskriftsdestinationer
FindImagesregistrerar nu alternativa bild-XObjects som nås från sidresurser så att importerade varianter får användbara bild-handles
Version 3.295.0
Added
AddArticleThreadskapar standardefterföljande artikelnavigering med typade metadata, ordnade sidrektanglar, cirkulära bead-länkar och bead-arrayer per sidaArticleThreadCount,GetArticleThreadInfoochGetArticleThreadBeadinspekterar skapade eller importerade artikeltrådar med begränsad genomgång av skadade länkcykler
Changed
DeletePagestar nu bort artikeltrådar som förlorar alla beads och reparerar de cirkulära länkarna för överlevande trådar- Spårning av borttagna sidor behåller nu stabila indirekta sidreferenser så att disposition- och artikelupprensning inte kan förskjutas när sidträdsmarkören rör sig
Version 3.294.0
Added
SearchTextBatchsöker genom flera textfrågor medan varje sidextraktion är resident och returnerar det ursprungliga nollbaserade frågeindexet med varje träffSearchTextBatchEacherbjuder samma enkel-passering-sökning via en streaming-callback med förloppsrapportering och avbrytande
Changed
- Textsökning med enkel fråga och batch delar nu en matchande kärna och bevarar semantik för skiftlägeskänslighet, hela ord och sidintervall, medan upprepad sidextraktion, textvikning och beräkning av träffgeometri undvikes
Version 3.293.1
Fixed
- Rastrering av mesh-shading kompilerar nu på alla Delphi-versioner, vilket löser
E2089 Invalid typecastvid typkonverteringar från real till floating-point i GDI+-målaren - Parallell batch-sidrendering kompilerar nu på Delphi XE5 och XE6, där
System.Threadinginte är tillgängligt; äldre toolchains faller tillbaka på den seriella render-sökvägen som på icke-Windows - Uppräkning av skrivarfunktioner kastar inte längre ett incompatible-types-fel på äldre Delphi-versioner genom att anpassa
SetPrinter-anropet till resten av utskriftskoden - Uppräkning av certifikatarkiv bygger nu på RAD Studio 10.3 Rio, som tidigare avbröts med ett internt kompilatorfel vid optimering av uppräkningsrutinen
Version 3.293.0
Added
- Medlemskapsordböcker för valfritt innehåll kan nu skapas, uppdateras och räknas upp med kompatibilitetsprinciperna
AnyOn,AllOn,AnyOffochAllOff - Nästlade PDF 1.6
/VEsynlighetsuttryck stöderAnd,OrochNotvia en kompakt prefix-representation som delas av Delphi och C++Builder
Changed
- Scope för valfritt innehåll, innehållsströmmar, fångade sidor, bilder, formulärfält och annotationer accepterar nu antingen ett grupp-handle eller ett medlemskap-handle
- Renderingen utvärderar först giltiga
/VE-uttryck och faller tillbaka på/OCGsplus/Pför missformade eller ej stödda uttryck
Fixed
- Näslat valfritt innehåll kan inte längre göra innehåll synligt när en omslutande grupp eller ett medlemskap är dolt
- Medlemskapsordböcker utan effektiva valfria innehållsgrupper lämnar nu synligheten oförändrad såsom krävs av PDF-specifikationen
Version 3.292.0
Added
EnumAttachmentsrapporterar nu skapelse- och ändringsdatum, hexadecimala checksummor, associated-file-relationer och filspecifikations-objektnummer för både dokument- och annotationsbilagorValidateAttachmentChecksumverifierar en bilagas payload mot sin lagrade checksumma på begäran, medan nynästlade filer nu automatiskt får checksumma-metadata
Fixed
SetEmbeddedFileAFRelationshipaccepterar nu samma 1-baserade nästlade fil-index som resten av bilage-API:et, inklusive dokument med en enda bilaga
Version 3.291.0
Added
DeduplicateResourceskonsoliderar nu exakta dubbletter av bild-, Form-, mönster-, shading-, funktions-, ICC-profil-, teckensnittsprogram-, CMap-, Type 3 CharProc-, nästlad-fil-, metadata- och PostScript-strömmar över ett inläst dokument- Resursdubblering erbjuder oberoende typ-flaggor, torr-körnings-analys, valfritt insamlande av föräldralösa objekt och detaljerad hashing-, jämförelse-, payload-, referens- och per kategori-statistik
Changed
- Dubbeldetektering kanoniserar kompletta strömordböcker oberoende av nyckelordning, hashar varje kandidat-payload en gång med SHA-256 och bekräftar matchande buckets byte för byte innan referenser omdirigeras
- Exakta ekvivalensgrupper behåller det lägsta objektnumret och generationen för deterministisk output, medan missformade direkta-objekt-cykler och semantiska ordboksskillnader förblir osammanslagna
Version 3.290.0
Changed
PurgeUnusedResourcesberäknar nu en transitiv beroendestängning över mönster med tilor, Type 3-glyphs, annotations-utseendetillstånd, ExtGState soft-mask-grupper, bilder, shadings och nästlade färgrymder- Standardinställningarna för upprensning aktiverar nu mönster-, Type 3-, utseende-, soft-mask- och bildberoendeanalys med oberoende flaggor för anropare som behöver en snävare skanning
- Nästlade innehållsprogram och beroendeingångar cachas, delade resurscope privatiseras före beskärning, och missformade cykler begränsas av active-stream- och djupvakter
Fixed
- Sidresurser som endast används via bildfärgrymder, Indexed-baser, Separation- eller DeviceN-alternativ, Pattern-underliggande rymder, ICCBased-alternativ eller shading-ordböcker tas inte längre bort som oanvända
- Resurser som endast används av Type 3 CharProcs, tilmönster-celler, annotationsutseenden eller transparens-soft-mask-grupper tas inte längre bort från sitt eget eller ärvda scope
Version 3.289.0
Added
PurgeUnusedResourcestar nu bort namngivna sidresurser som inte refereras av utvalda innehållslager och kan returnera detaljerad per kategori-statistik- Resursupprensning stöder nu sidintervall, torr-körnings-rapportering, förlopp och avbrytande, rekursiv Form XObject-analys, borttagning av föråldrade ProcSet och valfritt insamlande av föräldralösa objekt
Changed
- Resursanalys följer nu PDF-namnens skiftlägeskänslighet, ärvda Form-resurser, anpassade färgrymder för inline-bilder och alla sju standard-resurskategorier
- Upprepade Form-program cachas, använda-resurs-uppsättningar använder sorterad uppslagning, och ordboksingångar tas bort i fallande ordning för förutsägbar prestanda vid stora dokument
Fixed
- Borttagning av ordboksingångar ogiltigförklarar nu nyckelindex för stora ordböcker så att senare uppslagningar inte kan returnera inaktuella ingångar
- Missformade strömmar och okända operatorer bevarar som standard sitt kompletta resurscope, medan delade eller ärvda resursordböcker klonas före mutation
Version 3.288.0
Added
- Digitala signaturer kan nu avge kompletta DocMDP-certifierings- och FieldMDP fältlås-strukturer med strukturella tillståndsrapporter för varje vald signatur
- RFC 3161-dokumenttidsstämplar, signaturtidsstämplar, PAdES-B-T-token-injektion, certifikatkedje-validering, OCSP-bevis och DSS- eller VRI-valideringsmaterial har nu kompletta arbetsflöden för skapande och verifiering
- RichMedia-annotationer stöder nu nästlade tillgångar, aktiverings- och avaktiveringsinställningar, poster-utseenden, uppräkning, extraktion och borttagning
- Affischutskrift stöder nu vektor-sidutläggning, överlappnings- och beskärningsmarkörer, hard-margin-medveten placering och återanvändbara tilplaner
- Taggade tabeller avger nu semantisk Table-, TR-, TH- och TD-struktur med stabila identifierare, header-associationer, spans, upprepade headers och artefakt-dekoration
- Visaren erbjuder nu tangentbords-tillgänglig AcroForm-redigering för text-, val-, kryssrut-, radio- och tryckknapp-fält medan åtgärder skickas till värdprogrammet
Changed
- Type 1-funktionsbaserade och Type 4 till 7 mesh-shadings renderas nu via naturlig funktionsutvärdering och begränsad mesh-tessellering
- ICCBased-färgrendering delar nu cachade transformationer över bilder och shadings medan kalibrerad färgrymds-beteende bevaras
- Inkrementella sparanden bygger nu om objektströmmar och korsreferensströmmar konsekvent, och valda signaturer verifieras mot sin egen signerade revision
Fixed
- SHA-1 signatur-tidsstämpelförfrågningar hashar nu undertecknarens signaturvärde med SHA-1 istället för att falla tillbaka på SHA-256
- Avvisade fältlås-ersättningar kastar inte längre bort en tidigare giltig fältlås-konfiguration
- Radio-widgets med dubblerade utseendetillståndsnamn bevarar nu den valda widgeten och håller syskon-widgets av
Version 3.287.0
Changed
- Inline-bildordböcker följer nu PDF-gränser för kommentarer, avgränsare, literals, hexadecimaler, arrayer och ordböcker med begränsad nästling
- Inline-bild-payloads använder nu formatmedveten terminering för raw-, DCT-, ASCII85-, ASCIIHex-, RunLength- och Flate-data
- Upptäckt av Flate-payload utför nu en begränsad inflate från innehållsströms-offsetet med exakt komprimerad-byte-redovisning, medan kedjade förlustfria filter delar ett end-to-end output-tak
- ASCII85-, ASCIIHex-, LZW-, prediktor-, färgprofil- och hjälp-bildströmmar tillämpar nu begränsat mellanliggande output utan för stora tillfälliga allokeringar
Fixed
- Missformade eller avkortade inline-bilder läser inte längre utöver källdata, loopar på oavslutade värden eller behåller inaktuell tillstånd över dekoder-återanvändning
- Packade bildrader beräknar nu komponentbitar före byte-avrundning, vilket förhindrar felaktiga längder för låg-bit RGB- och flerrads-bilder
- Resursfärgrymder bevarar nu sina ursprungliga namn medan de härleder Lab-, indirekta ICCBased- och DeviceN-komponentantal och avkodar Indexed-palett-strömmar under strikta gränser
- Inline-bildgränser avvisar nu konsekvent ogiltiga dimensioner, bitdjup, ej stödda filter, osäkra filterkedjor, komprimerade strömmar och tvetydiga slutmarkörer
- Indexed-färgrendering validerar nu varje palettåtkomst och avvisar avkortade uppslagsdata istället för att läsa utöver den avkodade tabellen
- PNG-prediktorer 10 till 15 avkodas nu korrekt för Flate- och LZW-strömmar, avvisar ogiltiga radfilter och validerar alla rad- och tillståndsstorlekar före allokering
- JPEG- och JPEG 2000-payloads verifierar nu sina kodade dimensioner, komponenter, precision, markörstruktur, box-längder och avkodade lagringsavtryck före bildallokering
- Inline-bildvalidering begränsar nu både packad och utökad bitmap-lagring och avgränsar ICC-profiler, JBIG2-globals och terminala filterparametrar
- Binära filter-payloads som innehåller inbäddad slutmarkör-text fortsätter nu till den första kandidaten som klarar begränsad formatvalidering
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
Tillagt
- En Delphi PDF/A-skyddsmatrisdemo 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
Tillagt
- En uttrycklig ReportAdapter-bryggmatris 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
Tillagt
- En avancerad workflow-demomatris 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
Tillagt
- Delphi-hjälp för kompakt konstruktion av Open Document-åtgärder, 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
Tillagt
- Delphi-hjälp för bitmap-till-JBIG2-skannad bildkomprimering, one-call image mask and color-key transparency setup, GoTo action chaining, and readable AcroForm event names for JavaScript or existing action assignment
- Utökad
ImportEMFFromFileExochImportEMFFromStreamExso theirOptionsflags can force bitmap import, enable EMF color-image JPEG recompression, and request GDI+ processing controls
Version 3.159.1
Ändrat
- Förbättrad
SaveToStreamoch sparande av bundna utdataströmmar 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
Tillagt
- Hjälp för bildplacering 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
RenderPageToMonochromeFileExför 1-bitars BMP-rendering with threshold conversion and isolated black-pixel cleanup before scanned-image compression workflows
Version 3.158.1
Tillagt
- Delphi-workflowdemonstrationer för återanvändbar export i rapportstil, 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
Tillagt
- APIer för kontroll av metadatakryptering 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
Tillagt
- APIer för direkt ritning av kakelmönster 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
Tillagt
- Delphi-hjälp för bundna utdataströmmar:
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
Tillagt
Abort,AbortedochResetAbortfor 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
Tillagt
- Hjälp för sidminiatyrer för bildimportalternativ och minnesbaserade källor, optional-content group lookup and state setters by group name, and
SetOpenActionNamedDestinationfor document-open jumps through named destinations
Rättat
GetDestNamelöser nu explicita mål-arrayreferenser, inklusive arrayer som returneras från en namngiven dokumentöppningsåtgärd
Version 3.153.0
Tillagt
- Smidiga APIer för kedjade formuläråtgärder, Hide and ImportData field triggers, initial optional-content group states, optional EMF imports, and color-key transparent image imports
Version 3.152.0
Tillagt
- Automatisk URL-länkning vid textritning, 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
Tillagt
DrawPie,DrawChord,DrawEllipticPieochDrawEllipticChordfor explicit closed circular and elliptic arc drawing with outline, fill, or fill-and-outline modes
Version 3.150.0
Tillagt
NewGraphicsStateochSetGraphicsStateso 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
Rättat
- Dubbla ActiveX-dispatch-IDer rättade for the Form XObject and miter-limit methods so late-bound COM callers resolve each method unambiguously
Version 3.149.0
Tillagt
SetMiterLimitför att styra geringsförhållanden to control stroke miter-limit ratios for paths that use miter joins- Exponerade
BeginFormXObject,EndFormXObjectochCancelFormXObjectvia DLL- och ActiveX-API:erna
Version 3.148.0
Tillagt
- Återanvändbara Form XObject-byggar-APIer:
BeginFormXObject,EndFormXObjectochCancelFormXObjectlåter anropare rita en återanvändbar mall med vanliga sidritningsanrop och placera den upprepade gånger via ritnings-APIer för fångade sidor
Version 3.147.0
Tillagt
SetTextTilingPatternochSetLineTilingPatternso captured-page tiling patterns can be reused for text, underline, and stroked graphics without duplicating drawing commands
Rättat
- Färgerna för stroked shader och tiling-pattern skriver nu färgoperatorn för streckmönster i stället för att uppdatera färgtillståndet för icke-streckning
Version 3.146.0
Tillagt
BeginOptionalContentochEndOptionalContentso callers can mark only subsequent drawing commands with an optional content group without rewriting the existing content stream
Rättat
- Mark-content-operatorer för scope-avslut töms nu omedelbart när optional content, tagged PDF eller artifact-scopes stängs i slutet av en innehållsström
Version 3.145.0
Tillagt
SetTransparencyExså att anropare kan ställa in separata transparensvärden för fyllning och streck för efterföljande ritad text och grafik samtidigt som det befintliga PDF 1.4-autouppgraderingsbeteendet bevaras
Version 3.144.0
Tillagt
AddLinkToNamedDestinationso a page hotspot can jump to a same-document named destination without resolving the target page at link creation time
Rättat
- Läsare för annoteringsåtgärder returnerar nu ingen åtgärd för sidor utan annoteringar i stället för att avreferera en tom annoteringscache
Version 3.143.0
Tillagt
- APIer för hantering av formulärfältsåtgärder so callers can bind an existing action to a field trigger, inspect the typed trigger action, and remove primary or additional field actions
Rättat
FormFieldJavaScriptActionavvisar nu PDF/A-dokument och ogiltiga utlösarnamn i stället för att skriva icke-konforma fältåtgärdsordlistor
Version 3.142.0
Tillagt
- APIer för kedjning av åtgärder 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
Tillagt
- Lade till
AddLinkToSubmitFormochAddLinkToResetFormså att sidans klickbara områden (hotspots) kan skicka in eller återställa AcroForm-fält genom standard-PDF-åtgärder utan JavaScript
Version 3.140.0
Tillagt
- Lade till
AppendToStreamså att arbetsflöden för inkrementell uppdatering kan skriva direkt till en av anroparen tillhandahållen ström istället för att först materialisera uppdateringen som enAnsiString
Ändrat
SaveToStreamserialiserar nu direkt till målströmmen, ochAppendToString(1)returnerar nu endast den inkrementella uppdateringssektionen utan att kopiera de ursprungliga käll-byten till en tillfällig buffert
Version 3.139.0
Tillagt
- Lade till
GetAnnotReplyToochGetAnnotReplyTypeså att trådade kommentarssvar kan inspekteras genom namngivna läsåtkomstmetoder istället för generiska egenskapstaggar för kommentarer
Version 3.138.0
Tillagt
- Lade till Delphi-exemplet
DocumentInspectionWorkbenchför att partiinspektera (batch) PDF-filer med kombinerad teckensnittsdiagnostik, bildsampling, färgrymdsupptäckt, inläsningstider samt JSON-, CSV- och HTML-rapporter
Version 3.137.0
Tillagt
- Lade till Delphi-exemplet
ImageDecodeBenchmarkför att mäta upptäckt av sidbilder, avkodade bild-bytes och upptäckt av sidfärgrymd med CSV- och HTML-tidsrapporter
Version 3.136.0
Tillagt
- Lade till
GetDocumentFontDiagnosticsochTPDFlibFontDiagnosticsför att summera dokumentets inbäddning av teckensnitt, delmängdsskapande, Standard 14, CID, Type3 och okända teckensnitt i ett enda anrop
Version 3.135.0
Tillagt
TPDFlibSignatureVerifier.VerifySignerCertificateChainbygger nu den inbäddade undertecknarens certifikatkedja med Windows CryptoAPI och returnerarvsValidendast när kedjan uppfyller Windows grundläggande förtroendepolicy, medan självsignerade eller på annat sätt opålitliga signeringscertifikat returnerarvsInvalidutan att ändraVerifySignatures resultat för innehållsintegritet
Version 3.134.0
Fixat
TPDFlibSignatureVerifier.VerifySignaturevaliderar nu äldreadbe.pkcs7.sha1-signaturer, returnerarvsValidnär den signerade sammanfattningen matchar de täckta/ByteRange-byten ochvsInvalidom det täckta innehållet ändras
Version 3.133.0
Tillagt
- Lade till
RenderPagesToFilesochDARenderPagesToFilesför att rendera godtyckliga sidintervall till numrerade utdatafiler samtidigt som renderarens konfiguration återanvänds för de valda sidorna
Version 3.132.0
Tillagt
- Lade till bekvämlighetsstämpelfunktionerna
AddPageHeaderochAddPageFootersom placerar text vid en fast övre eller nedre marginal på varje sida i ett intervall, med vänster-/mitten-/högerjustering och token-expansion (&Paktuell sida,&Ntotalt antal sidor,&Ddatum,&Tdokumenttitel,&&bokstavligt et-tecken) StampTextochStampImagemedsoUnderlayplacerar nu verkligen innehåll under befintligt sidinnehåll genom att lägga till ett nytt innehållslager i början (tidigare ritades det ovanpå somsoOverlay); backas av en nyPrependContentLayer-söderträdsmetod
Version 3.131.0
Tillagt
- Lade till
ScalePage(ScaleX, ScaleY, Anchor)som skalar den valda sidans innehåll genom att omsluta varje innehållslager i ettq sx 0 0 sy tx ty cm ... Q-grafiktillståndsblock och ändrar storlek på MediaBox och CropBox; ankaret behåller origo nere till vänster (0), centrerar innehållet (1) eller behåller uppe till vänster (2) - Utökade
EnumPageElementsmed en ny elementtypekPath: varje sida rapporterar nu också sina vektorbanor med en begränsningsruta, punktantal, stängningsflagga och målaroperatör, hämtat från innehållsströmmarna via den strukturerade innehållsmodellen
Version 3.130.0
Tillagt
- Lade till tre API:er för filstorleksoptimering som krymper inlästa dokument när de sparas om:
SubsetEmbeddedFontsskriver om varje inbäddat TrueType-teckensnittsprogram (FontFile2) ned till de Unicode-tecken som dokumentet faktiskt renderar via tjänsten FontSub.dllCreateFontPackage;DownsampleImages(MaxDPI, Quality, Filter)avkodar varje bild-XObject över mål-DPI:t, omsamplar den (box eller bilinjärt) och kodar om som JPEG eller PNG;NormalizeLZWStreamsskriver om varje ström som fortfarande är filtrerad med LZWDecode till FlateDecode genom den befintliga LZW-avkodaren och Flate-kodaren, vilket bevarar Predictor-parametrar
Version 3.129.0
Tillagt
- Lade till skapande av nätbaserad skuggning (mesh shading)-API:er för de fyra skuggningstyper som tidigare bara hade stöd för läsning/tolkning:
NewRGBFreeFormTriangleMesh(ShadingType 4, fri-form Gouraud-trianglar),NewRGBLatticeTriangleMesh(ShadingType 5, rutnäts-Gouraud),NewRGBCoonsPatchMesh(ShadingType 6, Coons patch-nät) ochNewRGBTensorPatchMesh(ShadingType 7, tensor-product patch-nät) — var och en bygger ett namngivet nätbaserat skuggningsmönster från en platt vertex- eller patch-lista med valbart koordinat-/färgbitdjup och en begränsningsruta, valbar medSetFillShader/SetLineShader/SetTextShaderlikt de befintliga axiella och radiella skuggningarna
Version 3.128.0
Tillagt
- Lade till en miniatyrbildsremsa för visaren:
TPDFlibThumbnailBarvisar en miniatyr av varje sida, renderad on-demand när rader rullas in i vyn, med sidnumret inunder; att klicka på en miniatyrbild hoppar den anslutna visaren till den sidan — vilket kompletterar familjen av visningskontroller (visare, bokmärkespanel, sökpanel, miniatyrbilder)
Version 3.127.0
Tillagt
- Lade till en sökpanel för visaren:
TPDFlibSearchPanel.RunSearchsöker igenom hela det anslutna dokumentet och listar en rad per träff med dess sidnummer och matchande text; att klicka på en träff hoppar visaren till den sidan
Version 3.126.0
Tillagt
- Lade till en bokmärkespanel för visaren:
TPDFlibOutlineViewerlistar dokumentets bokmärkesstruktur med indrag och hoppar den anslutna visaren (viaAttachViewer) till ett bokmärkes målsida när den klickas; den bygger på en återanvändbar panelbasklass som senare sidopaneler delar
Version 3.125.0
Tillagt
- Lade till textmarkering i visningskontrollen: dra med vänster musknapp för att markera, tryck Ctrl+C eller anropa
CopySelectedTextför att kopiera markeringen till urklipp; den fångade texten är tillgänglig genom egenskapenSelectedText, ordnad uppifrån och ned med radbrytningar mellan blocken - Lade till
GetTextInRegion, som returnerar texten för en rektangulär sidregion direkt — samma blockbaserade sökning som musmarkeringen använder, tillgänglig för anpassade markeringsgränssnitt
Version 3.124.0
Tillagt
- Visningskontrollen förrenderar nu angränsande sidor i en bakgrundstråd, så att sidbyte framåt eller bakåt visar nästa sida omedelbart; arbetstråden använder sin egen dokumentinstans och lämnar över färdiga renderingar till cachen utan att blockera användargränssnittet
- Lade till länkinteraktivitet i visaren: att klicka på en länkkommentar utlöser
OnLinkClickmed sidnumret och samma typade åtgärdssammanfattning somGetAnnotActionInfoproducerar (webbadress, dokumentdestination, namngiven åtgärd och så vidare);LinkActionAtPagePointexponerar det underliggande träfftestet för anpassad hantering
Version 3.123.0
Tillagt
- Visningskontrollen har fått kontinuerlig rullning:
SetDisplayModeväxlarTPDFlibViewermellan enkelsidig visning och en kontinuerlig vertikal rullning genom hela dokumentet, där endast de sidor som är synliga i visningsområdet renderas och den aktuella sidan följer rullningspositionen (utlöserOnPageChangenär sidor kommer in i vyn) - Renderade sidor sparas nu i en least-recently-used bitmappscache, så att rullning fram och tillbaka inte renderar om; minnesbudgeten är som standard 128 MB och justeras med
SetCacheLimit, vilket vräker de äldsta sidorna när budgeten krymper eller fylls - Lade till musrullning och tangentbordsnavigering för visaren: PageUp/PageDown (sidsteg i enkelsidigt läge, visningsområdessteg i kontinuerligt läge), piltangenter, Home och End
Version 3.122.0
Tillagt
- Lade till en interaktiv PDF-visningskontroll:
TPDFlibViewerär en rullande VCL-kontroll som öppnar ett dokument från fil eller ansluter till en befintligTPDFlib-instans, visar sidor genom den valda renderingsmotorn (GDI+, Cairo eller PDFium), och erbjuder sidnavigering (GoToPage/NextPage/PrevPagemed enOnPageChange-händelse) och zoomkontroll — en fast procentsats, anpassa till bredd (fit-to-width) eller anpassa till sida (fit-to-page), omberäknas automatiskt när kontrollens storlek ändras; sidor bredare än visningsområdet rullas, smalare sidor centreras - Lade till ett design-time-paket (
Package\PDFlibViewerPkg.dpk) som registrerar kontrollen på losLab PDF-palettsidan för dra-och-släpp-användning i IDE:n
Version 3.121.0
Tillagt
- Automatisk formning av komplexa skript i
DrawText: text som innehåller arabiska, hebreiska, indiska eller andra tecken med komplexa skript upptäcks och formas nu automatiskt — kontextuella bokstavsformer, obligatoriska ligaturer och höger-till-vänster-ordning blir rätt utan kodändringar; standard-14-namnen mappas till sina metrikkompatibla installerade typsnitt (Helvetica till Arial, Times till Times New Roman, Courier till Courier New) ochGetTextWidthmäter genom samma formningspass så att justeringen förblir konsekvent; latinsk, kyrillisk, grekisk och CJK-text behåller sin befintliga ritbana byte för byte - Lade till
SetTextShapingför att växla den automatiska dirigeringen (aktiverad som standard; skicka 0 för att återställa det exakta beteendet före formning)
Version 3.120.0
Ändrat
- Följeslagarteckensnitt för formad text inbäddas nu som delmängder när de sparas, enbart med de glyfer som dokumentet visar, vilket krymper utdatafilerna dramatiskt (ett fullständigt teckensnittsprogram på över en megabyte reduceras till de använda glyferna); det delmängdsanpassade teckensnittet behåller sin glyfnumrering, bär ett delmängdstaggat
BaseFont-namn och riktiga/W-bredder per glyf, och får en ToUnicode-karta som översätter varje formad glyf tillbaka till dess källtecken — så att kopiering eller extrahering avDrawShapedText-utdata returnerar den ursprungliga strängen, inklusive båda bokstäverna bakom en lam-alef-ligatur
Version 3.119.0
Tillagt
- Lade till ritning av text med komplexa skript:
DrawShapedTextformar arabiska, hebreiska och andra komplexa skriptsträngar innan de ritas — kontextuella bokstavsformer, obligatoriska ligaturer som lam-alef, och höger-till-vänster-ordning blir alla korrekta — och skriver de formade glyferna genom ett Type0 (Identity-H)-följeslagarteckensnitt som bäddar in hela teckensnittsprogrammet, så former utan en egen teckenkod renderas exakt; ett följeslagarteckensnitt skapas per typsnitt och återanvänds över anrop - Lade till
GetShapedTextWidth, som mäter text genom samma formningspass så att ligaturtext mäter sin verkliga ritade bredd — använd det för att högerjustera eller centrera formade stycken
Version 3.118.0
Lagt till
- Lade till grunden för textformning av komplexa skript (complex-script text shaping): en ny Uniscribe-bindning (usp10.dll) omvandlar arabiska, hebreiska och andra komplexa skriptsträngar till korrekt ordnade och formade glyfsekvenser — kontextuella arabiska former, obligatoriska ligaturer som lam-alef, och höger-till-vänster-ordning — och rapporterar varje glyfs teckensnittsglyfindex, framsteg och källteckenkluster; detta är formningsmotorn som senare versioner bygger ritbanan på, och den laddas lazily så plattformar utan Uniscribe behåller helt enkelt den befintliga tecken-för-tecken-banan
Version 3.117.0
Lagt till
- Lade till ICC-profilintrospektion:
GetOutputIntentICCInfotolkar den ICC-profil som är kopplad till dokumentets OutputIntent och rapporterar dess version, enhetsklass, datafärgrymd, profilanslutningsfärgrymd, renderingsintent och komponentantal — användbart för att inspektera utskriftsförhållanden för PDF/A- och PDF/X-filer; renderarens hantering av ICCBased-färgrymder härleder nu också komponentantalet från själva profilhuvudet när en skuggnings färgrymd varken har/Alternateeller/N
Version 3.116.0
Lagt till
- Lade till ett tabellmedvetet textextraheringsläge:
GetPageTextalternativ 10 grupperar vänsterkanterna på sidans textblock i globala kolumnpositioner och matar ut tabbseparerade rader, så att tabellayouter extraheras som en färdig att importera TSV med vertikalt justerade celler som förblir justerade över rader
Version 3.115.0
Lagt till
- Lade till sidutskjutning (imposition):
ImposePagesNUplägger ut varje sida i dokumentet på nya ark i ett n-up-rutnät (2-up, 4-up, 9-up eller vilket Columns x Rows-arrangemang som helst) med varje sida aspeaktanpassad och centrerad i sin cell som live vektorinnehåll, eller — med häftesalternativet — producerar ark för sadelhäftning vars sidparning viks till ett häfte när de skrivs ut dubbelsidigt och staplas
Version 3.114.0
Lagt till
- Utökade de typade åtgärdsläsarna
GetAnnotActionInfoochGetOutlineActionInfotill ytterligare fyra åtgärdstyper — Hide (med antalet dolda mål och flaggan för dölj/visa), SubmitForm (inlämnings-URL och fältantal), ResetForm (fältantal) och ImportData (källfil) — samt exponerar namndelen för Named-åtgärder (t.ex.NextPage); båda läsarna delar nu en tolkare, så att kommentar-länkar och bokmärken rapporterar identisk information
Version 3.113.0
Lagt till
- Lade till formateringshjälpare för formulärfält:
SetFormFieldNumberFormat(decimaler, separatorstil, negativ stil och valutaplacering),SetFormFieldPercentFormatochSetFormFieldDateFormat(Acrobat-datumformatsträngar sommm/dd/yyyy) skriver var och en standard-Acrobat-formaterings-JavaScript-paret till fältets ytterligare åtgärder — ett tangenttrycksfilter plus en visningsformaterare — så att kompatibla läsare validerar inmatning och renderar formaterade värden utan handskrivet JavaScript
Version 3.112.0
Lagt till
- Lade till skapande av ljudkommentarer:
AddSoundAnnotationFromFileläser en okomprimerad PCM WAV-fil (8 eller 16 bitar, mono eller stereo) och bäddar in dess samplingar bakom en högtalarikon-kommentar som en/Sound-ström i den signerade kodningen som PDF-ljudmaskineriet förväntar sig, vilket slutför tur-och-retur-stödet tillsammans med de befintligaGetAnnotSoundToFile/GetAnnotSoundToString-läsarna
Version 3.111.0
Lagt till
- Lade till trådade kommentarssvar (ISO 32000-1 §12.5.6.3):
AddAnnotationReplylägger till ett svar på en befintlig kommentar som en dold Text-kommentar vars/IRTrefererar till målet med/RT-svarsrelationen, så att Acrobat och andra visare visar den trådad under målet i kommentarspanelen; kombinera medAddAnnotationStateoch FDF-kommentarsutbytet för kompletta tur-och-retur-granskningsflöden för samarbete
Version 3.110.0
Lagt till
- Lade till mesh- och funktionsbaserad skuggningsrendering, vilket slutför täckningen av alla sju PDF-skuggningstyper: fri-form Gouraud-triangelnät (typ 4), rutnäts-Gouraud-nät (typ 5), Coons patch-nät (typ 6) och tensor-product patch-nät (typ 7) avkodas från deras bitpackade dataströmmar — inklusive flaggor för delade kanter,
/Decode-värdemappning och valfria/Function-färgskalor — och ritas via Cairo-motorns inbyggda mesh-gradienter; funktionsbaserade skuggningar (typ 1) approximeras genom att sampla skuggningsfunktionen över dess domän till ett fint rutnät; färgrymder som stöds täcker DeviceRGB, DeviceGray, DeviceCMYK och ICCBased-alternativ (GDI+-motorn saknar mesh-gradientprimitiver och lämnar mesh-skuggade områden omålade)
Version 3.109.0
Lagt till
- Färdigställde ramverket för innehållsredigering (fas 4) med redigering på textnivå:
TPDFContentProgram.GetTextRunsräknar upp en sidas textvisande instruktioner med det teckensnittsresurs och storlek som är aktivt vid varje en (spårar teckensnittsstatus genom save/restore-nästning), ochReplaceTextRunbyter ut den visade texten på plats — en verklig innehållsströmsersättning som behåller originalposition, teckensnitt och färg, till skillnad från överläggsbaserade metoder som maskerar den gamla texten och ritar ovanpå
Version 3.108.0
Lagt till
- Lade till en objektmodell för sidgeometri till ramverket för innehållsredigering (fas 3):
TPDFContentProgram.LiftPathlyfter ett banobjekt (move/line/curve/rectangle-konstruktionsoperatörer plus klipp- och målaroperatörerna som avslutar den) till en redigerbarTPDFPathbestående av delbanor och segment;TPDFPath.Transformtillämpar en affin matris på varje punkt (flytta, skala, rotera eller skeva befintlig grafik);LowerPathskriver tillbaka den modifierade geometrin över de ursprungliga instruktionerna, redo förWritePageContentLayer
Version 3.107.0
Lagt till
- Utökade ramverket för innehållsredigering (fas 2) med bekvämligheter på instruktionsnivå för
TPDFContentProgram:InsertFromSourcetolkar ett innehållsklipp och skarvar in dess instruktioner vid valfri position;SetOperandskriver om en enskild operand från källsyntax (numrera om en koordinat, färga om en fyllning);OperandTextläser tillbaka en operand;InstructionGroup,FindNextOpochFindNextGroupnavigerar instruktionslistan efter operatör eller efter ISO 32000-1-operatörskategori
Version 3.106.0
Lagt till
- Lade till den första fasen av ramverket för strukturerad innehållsredigering:
ParsePageContentLayeravkodar ett sidinnehållslager till ett redigerbartTPDFContentProgram— en lista med instruktioner, där varje del är en PDF-innehållsoperatör (alla 73 operatörer i ISO 32000-1 Tabell 51) med sina avkodade operandobjekt — ochWritePageContentLayerserialiserar programmet tillbaka in på sidan, så anropare kan tolka, inspektera, ta bort eller ordna om ritinstruktioner och skriva om sidan;GetPageContentLayerCountrapporterar antalet innehållslager, vilka redigeras oberoende av varandra; utfärdaren är beteende-bevarande (en omodifierad tur-och-retur renderar pixel-identiskt), okända operatörer överlever oförändrade och inbäddade bilder bärs ordagrant
Version 3.105.0
Lagt till
- Lade till ett textextraheringsläge i läsordning:
GetPageTextalternativ 9 returnerar sidtexten i visuell läsordning med hjälp av rekursiv blankstegsanalys (XY-cut), så att layouter med flera kolumner matas ut kolumn för kolumn — en fullbreddsrubrik först, sedan hela vänstra kolumnen, därefter den högra kolumnen — istället för att fläta samman kolumnerna rad för rad som de geometriska uppifrån-och-ned/vänster-till-höger-ordningarna gör
Version 3.104.0
Lagt till
- Lade till introspektion för signaturcertifikat i signaturverifieraren:
GetSignerCertificateavkodar PKCS#7-nyttolasten för det första signaturfältet och returnerar en typad sammanfattning av det inbäddade signaturcertifikatet — ämne (subject) och utfärdare (issuer) visningsnamn, serienumret i konventionell hex-form, giltighetsfönstret i UTC (NotBefore/NotAfter) och en bekvämlighetsflagga som rapporterar om certifikatet för närvarande ligger inom det fönstret; undertecknaren matchas bland de inbäddade certifikaten genom utfärdare och serienummer
Version 3.103.0
Lagt till
- Lade till
NewRGBRadialShader, den radiella motsvarigheten tillNewRGBAxialShader: registrerar en namngiven radiell gradient med två cirklar (ShadingType 3, ISO 32000-1 §8.7.4.5.3) som blandar mellan två RGB-färger, med valfri färgutvidgning bortom cirklarna; välj den med befintligaSetFillShader,SetLineShaderellerSetTextShaderför att måla cirkulära "glöd"-fyllningar, linjer och text
Version 3.102.0
Lagt till
- Lade till radiell (ShadingType 3) gradientrendering (ISO 32000-1 §8.7.4.5.4): sidrenderaren målar nu radiella skuggningar med två cirklar som används av
sh-operatörer och skuggningsmönsterfyllningar, utöver de tidigare stödda axiella (ShadingType 2) gradienterna; stöds genom både GDI+- och Cairo-rastermotorerna med fler-stopp-färgfunktioner, färgrymderna DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased och hantering av/Extend
Version 3.101.0
Lagt till
- Lade till molniga kanteffekter (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectförvandlar kanten på en Square-, Circle-, Polygon- eller FreeText-kommentar till ett "revisionsmoln" av anslutna halvcirklar genom att skriva ordlistan för kanteffekt/BE, med intensitet 1 eller 2 som matchar Acrobats Cloudy-stilar och 0 som tar bort effekten igen;GetAnnotCloudyEffectläser tillbaka inställningen (0 = inget moln, annars 1..2-intensiteten)
Version 3.100.0
Lagt till
- Lade till granskningsstatus för kommentarer (ISO 32000-1 §12.5.6.3):
AddAnnotationStateregistrerar en ändring av granskningsstatus för en befintlig kommentar genom att lägga till en dold Text-kommentar vars/IRTpekar på målet och vars/State+/StateModelbär statusen, stöder modellenReview(None/Accepted/Rejected/Cancelled/Completed) och modellenMarked(Unmarked/Marked) som används av Acrobats arbetsflöde för kommentarsgranskning;GetAnnotStateochGetAnnotStateModelläser tillbaka de registrerade strängarna från valfri kommentar (tom om den saknas)
Fixat
- Fixade ett startfel vid inläsning som förhindrade applikationer byggda med nyare utvecklingsversioner från att starta (en Windows-certifikatnamnsuppslagning var bunden till en icke-existerande DLL-ingångspunkt), och reparerade kompileringsregressioner i FDF-kommentarsimporten, sidintervallsrotation och signaturflaggornas sökvägar
Version 3.99.0
Tillagt
- Lade till API:er för att läsa dokumentfingeravtryck och övergångar:
GetDocumentFileIDreturnerar den permanenta dokumentidentifieraren från trailerns/ID-array (hex-kodat första element), användbart som en stabil cache-nyckel eller dokumentfingeravtryck;GetPageTransitionär lässide-motsvarigheten tillSetPageTransition, som returnerar övergångsstilen som ett typatTPDFlibPageTransition-värde plus visningsvaraktighet och övergångsvaraktighet genom att omvänt mappa de lagrade/Trans/S-,/Dm- och/M-posterna
Version 3.98.0
Tillagt
- Lade till rotation av sidintervall och miniatyrbilds-introspektion:
RotatePageRangetillämpar en 0/90/180/270-rotation på varje sida i ett intervall (omsluter den befintliga ensidigaRotatePageså att anropare inte längre behöver en loop per sida);HasPageThumbnailrapporterar om en sida bär på en/Thumb-post;GetPageThumbnailInfoläser miniatyrbilden XObjects bredd, höjd och bitar-per-komponent
Version 3.97.0
Tillagt
- Lade till utökade egenskapsläsare för anteckningar:
GetAnnotColorläser/C-färgarrayen (0..1 RGB, med en HasColor-flagga som särskiljer “ingen explicit färg” från “explicit svart”);GetAnnotBorderWidthläser/BS /W, och faller tillbaka på den äldre/Border-arrayen;GetAnnotOpacityläser/CA-linje-alfa (standard 1.0);GetAnnotCreationDateläser/CreationDate-tidsstämpeln;GetAnnotFlagsläser byte-värdet för synlighet/utskriftsflaggor/F
Version 3.96.0
Tillagt
- Lade till säkerhets-introspektions-API:er för lässidan:
IsEncryptedrapporterar om det laddade dokumentet bär på en/Encrypt-ordbok;GetEncryptionLevelreturnerar en typad styrka (0=ingen, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) som matchar krypteringsalternativen på skrivsidan;GetUserPermissionsreturnerar det råa/P-behörighetsordet för direkt bittestning;IsOwnerPasswordrapporterar om dokumentet öppnades med ägarautentiseringsuppgiften
Version 3.95.0
Tillagt
- Lade till avancerad utskrift och textersättning:
PrintDocumentAdvanceddriver den fullständiga skrivarens DEVMODE (duplex, orientering, färg, utskriftskvalitet, pappersstorlek, pappersfack) ovanpå kopior/kollationering genom en typadTPDFlibPrintSettings-post, och tillämpar varje icke-standardfält via den befintliga profilsmekanismen för anpassade skrivare;SearchAndReplaceTextkör en sökning över ett sidintervall och, för varje träff, maskerar det ursprungliga textblocket med en ogenomskinlig vit rektangel och ritar om ersättningstexten vid blockets ursprung med anroparens valda teckensnitt, vilket speglar överlagrings-ersättningsbeteendet hos PDFtoolkit SearchAndReplace
Version 3.94.0
Tillagt
- Lade till antecknings-FDF-utbyte (Acrobat “Exportera/Importera Kommentarer”):
ExportAnnotationsToFDFStringochExportAnnotationsToFDFgår igenom varje sidas/Annotsoch serialiserar varje anteckning som en/Type /Annot-post inuti en FDF/Annots-array, bärande på/Subtype,/Contents,/Rect, författaretiketten/T,/Subjoch det 0-baserade/Page-indexet;ImportAnnotationsFromFDFStringochImportAnnotationsFromFDFtolkar en sådan FDF med en liten tillståndsmaskin och återskapar varje post som en ny anteckning på den matchande sidan, vilket bevarar den fullständiga anteckningsordboken snarare än att kollapsa den till en fästis
Version 3.93.0
Tillagt
- Lade till signaturcertifiering och formulärfältsegenskaps-API:er:
SetSignProcessDocMDPförvandlar nästa signatur som produceras av en signeringsprocess till en certifierande (författar) signatur genom att bifoga en DocMDP/Reference-transformering på nivå 1/2/3 (inga ändringar / formulärifyllnad / anteckningar) och ställa in AcroForms/SigFlagsAppendOnly-bit;GetSigFlags/SetSigFlagsläser och skriver den råa AcroForm/SigFlags-byten direkt;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationochGetFormFieldAllowedValuesexponerar perfälts/Ff-stilbitar,/Q-textjusteringen och/Opt-valsarrayen som typade värden
Version 3.92.0
Tillagt
- Lade till bekvämlighets-API:er för bilage-export och formulärfält:
SaveAllAttachmentsgår igenom den enhetliga bilagelistan (dokumentnivåns/EmbeddedFilesplus sidovisa/FileAttachment-anteckningar) och skriver varje ström till en katalog under dess filspecifikationsnamn, och avhjälper kollisioner med ett numeriskt suffix;RemoveFormFieldByNamelöser upp ett fullständigt kvalificerat fältnamn till dess index och tar bort det;RenameFormFieldbyter namn på ett fält utifrån dess namn utan en separat indexuppslagning
Version 3.91.0
Tillagt
- Lade till dokumentomfattande uppräknings-API:er:
EnumDocumentFontsgår igenom varje Font-ordbok (och anroparFindFontsförst om det behövs) och returnerar enTPDFlibDocumentFontper teckensnitt med dess objektnummer,/BaseFont-namn, typ, kodning och inbäddnings-/delmängdsstatus, vilket tar bort behovet av att anropaSelectFontför varje post och fråga skalära hämta-funktioner;EnumAttachmentsförenar namnträdet/EmbeddedFilespå dokumentnivå med sidovisa/FileAttachment-anteckningar till en endaTPDFlibAttachment-lista, och registrerar varje posts källa, 1-baserade källindex, filnamn, MIME-undertyp, beskrivning och bytestorlek
Version 3.90.0
Tillagt
- Lade till skrivskyddade introspektions-API:er för anteckningar, bokmärken och dokumentversionen:
GetPDFVersionreturnerar den effektiva PDF-versionssträngen (t.ex.1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameochGetAnnotRectExexponerar de per-anteckning-specifika fälten som namngivna omslag (så anropare behöver inte längre magiska egenskapstagg-nummer) över den befintligaAnalyseAnnot-cachen;GetOutlineLevelreturnerar ett bokmärkes djup i förhållande till strukturroten ochGetOutlineIsOpenrapporterar om det är utökat i en visare (negativ/Countbetyder kollapsat), vilket speglar den layoutstatus som en bokmärkespanel skulle rendera
Version 3.89.0
Lagt till
- Lade till en enhet för JBIG2-bildkodare
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), porterad från syskonprodukten HotPDF, med två backends: på Win64 är C++jbig2encaritmetisk kodare (ITU-T T.88) statiskt länkad viaPDFlibJBIG2EncC+HPDFCLibs(228 leptonica/jbig2enc-objekt underthirdparty/Win64x/) och registrerad som standard-backend, vilket matchar HotPDFs produktionsväg; på andra mål, eller närUseExternalEncoderär False, komprimerar en ren Pascal-MMR-fallback bilevel-scanlines med CCITT G4-kodaren och omsluter dem i JBIG2-segmenthuvuden (sidinfo-typ 48 + omedelbar generic-region typ 38) - Lade till en LZW-kodarenhet
PDFlibLZWEnc(TPLLZWEncoder.Compress), kodarmotsvarigheten till den befintligaPDFlibLZW-avkodaren: producerar en PDF-specifikation/LZWDecode-ström med 9..12-bitars koder med variabel bredd, ClearCode/EOI och PDF-standard EarlyChange-semantik, plus valfri TIFF Predictor 2 (horisontell differens) så att en tur-och-retur genom avkodaren återskapar de ursprungliga bytena
Version 3.88.0
Tillagt
- Lade till en CCITT Group 3 / Group 4 (T.6) bilevel-bildkodarenhet
PDFlibCCITTEnc(TPLCCITTEncoder), kodarens motsvarighet till den befintliga avkodarenPDFlibCCITT: den kodar enpf1bit-bitmapp till en CCITT G3 1D / G3 2D / G4 (T.6)-byteström viaCompressImage/Execute, portad från syskonprodukten HotPDF (båda delar losLab-licensen); detta tillhandahåller den saknade kodaren så att monokrom bilddata kan produceras för utmatning medCCITTFaxDecode, med fullständig bildpipeline- ochRenderPageToMonochromeFileG4-utmatningsintegration som följer
Version 3.87.0
Tillagt
- Implementerade kryptografisk signaturverifiering för fristående (detached) PKCS#7-signaturer:
TPDFlibSignatureVerifier.VerifySignature(tidigare en stubb som returneradevsUnknown) beräknar nu om dokumentsammanfattningen över de två/ByteRange-segmenten och validerar den mot det signerademessageDigest-attributet och undertecknarens offentliga nyckel via Windows CryptoAPI (CryptVerifyDetachedMessageSignature), vilket returnerarvsValid/vsInvalidföradbe.pkcs7.detachedochETSI.CAdES.detached-underfilter; detta är det första verifieringslagret och täcker endast sammanfattnings-+signaturintegritet (certifikatkedja, CRL/OCSP-återkallande och validering av RFC 3161 tidsstämpelstoken ligger fortfarande utanför ramen och kommer att läggas till i senare lager)
Version 3.86.0
Tillagt
- Lade till en återanrop (callback) per bokmärke under sammanslagning: händelsen
OnMergeOutlineutlöses för varje källa på toppnivå medanMergeFileList/MergeFileListFast/MergeFileListStrictlänkar det sammanslagna bokmärkesträdet, vilket låter anroparen byta namn (Title) eller kasta (Skip=True) ett inkommande bokmärke innan det landar i måldokumentet; återanropet tar emot det 0-baserade källdokumentindexet så att anropare kan tillämpa policys per dokument
Version 3.85.0
Tillagt
- Lade till signering från Windows systemcertifikatlager:
SetSignProcessCertFromStoreslår upp signeringscertifikatet från ett namngivet lager ("MY"/"Root"/...) via Subject-enkelnamn (vanligtvis CN, matchas utan hänsyn till skiftläge; ett tomt namn väljer det första certifikatet som har en privat nyckel) och återanvänder den befintliga PKCS#7-signeringspipelinen, så ett dokument kan signeras utan att en.pfx/.p12-fil tillhandahålls; kombinera medSetSignProcessKeysetför att väljaCURRENT_USER(1) motLOCAL_MACHINE(2)
Version 3.84.0
Tillagt
- Lade till inbäddning av teckensnittsprogram för redan inlästa dokument:
EmbedMissingFontsgår igenom varje Font-ordbok, läser det matchande installerade systemteckensnittsprogrammet via BaseFont-namn och skriver tillbakaFontFile2ellerFontFile3, och returnerar antalet teckensnitt som fick ett program;EmbedFontProgrambäddar in ett enskilt teckensnitt via namn med hjälp av det installerade systemteckensnittet;EmbedFontProgramFromFilebäddar in ett enskilt teckensnitt med en.ttf- eller.otf-fil tillhandahållen av anroparen för teckensnitt som inte är installerade på systemet - Added
SetEmbedAllFonts, a writer-side guard that promotesAddTrueTypeFontEmbed=0toEmbed=1so newly created documents cannot accidentally reference non-embedded system fonts outside PDF/A mode as well
Version 3.83.0
Tillagt
- Lägger till bekvämlighets-API:er för rendering:
RenderPageToMonochromeFilerenderar en sida till en 1-bitars monokrom bitmapp (för fax/arkivering/OCR-scenarier) genom nedskalning från 24-bitars via GDI-halvtons-rastrering utan att ändra kärnrenderaren;RenderPageRegionToFilerenderar enbart en angiven delrektangel (“Left,Top,Width,Height”) av sidan till en bitmapp, vilket kopplar in den tidigare frånkoppladeRenderPageToDCClip-pipelinen
Version 3.82.0
Tillagt
- Lägger till FDF-formulärdataexport:
ExportFormDataToFDFskriver alla formulärfältnamn och värden i det aktuella dokumentet till en fristående FDF-fil (en/Fields-array innesluten i%FDF-1.2), ochExportFormDataToFDFStringreturnerar en sträng med samma struktur, vilket gör det enklare att lagra formulärdata separat från PDF:en eller sammanfoga det senare; icke-ASCII-byte är escape-kodade med tre oktala siffror enligt ISO 32000-1
Version 3.81.0
Tillagt
- Lägger till bekvämlighets-API:er för sidor och struktur:
SetPageTransitionskriver presentationsövergångseffekter (17 standardövergångar för/Trans, inklusive Split/Blinds/Wipe/Dissolve/Glitter, etc.) och sidvisningstid för en angiven sida;GetPageFontCountochGetPageFontIDräknar upp de teckensnitt som refereras till av en angiven sida;SetMeasurementUnitaccepterar en typiserad enhetsuppräkning (lägger till twips och points till de befintliga pixlar/millimeter/tum), tillsammans med enhetskonverteringshjälparnaConvertToPointsochConvertFromPoints;SaveToFileOptionssamlar sparalternativ som komprimering, linjärisering och bevarande av ändringsdatum i en enda post
Version 3.80.0
Tillagt
- Lägger till bekvämlighets-API:er för säkerhet och signaturer:
EncryptFileExaccepterar en typiserad namngiven behörighetsuppsättning (TPDFlibUserPermissions, som skiljer mellan 8 namngivna behörighetsbitar såsom lågupplöst och högupplöst utskrift) istället för ett rått behörighetsheltal;TPDFlibSignatureVerifier.GetSignatureMetadataläser fältnamn, Filter, SubFilter, signeringstid, anledning, plats, kontaktinformation, undertecknare och ByteRange-strukturvalidering direkt från signaturdictionaryn utan PKCS#7-avkodning;PrintDocumentExanger antalet kopior och sorteringsläge i ett enda anrop
Version 3.79.0
Tillagt
- Lägger till bekvämlighets-API:er för redigering:
MaskRectritar en ogenomskinlig fylld rektangel över ett område på en angiven sida (för maskering/redigering);SetPageThumbnailFromFilebifogar en sid-/Thumbdirekt från en bildfil utan att förorena innehållsströmmens ritstatus;FlattenFormFieldsOnPageRangeplattar ut alla formulärfält över ett sidintervall (bakar in utseenden i statiskt innehåll och tar bort aktiva fält);InsertAnnotationinfogar en byggd annotationsdictionary på en angiven plats;NewMarkupAnnotationskapar markups-annotationer (highlight/strikeout/underline/squiggly) i ett steg och skriver quad-punkter, färg och opacitet;StampTextochStampImagestämplar vattenstämplar över ett sidintervall, med stöd för opacitet, rotationsvinkel och staplingsposition
Version 3.78.0
Tillagt
- Lägger till API:er för textsökning och sidnummeruppräkning:
SearchTextsöker efter en frågeterm i ett angivet sidintervall och returnerar sidnumret och gränsrektangeln för varje träff, med alternativ för skiftlägeskänslighet och matchning av hela ord;EnumPageElementsräknar upp alla textblock och inbäddade bildelement på en angiven sida, och returnerar enhetligt elementtyp, rektangel, text, teckensnittsnamn och bild-ID;GetTextInAreaExär en rektangelmedveten version avGetTextInArea, som returnerar varje textblock inom området och dess gränsrektangel
Version 3.77.0
Tillagt
- Lägger till skrivskyddade introspektions-API:er för att fylla den tidigare "kan skriva men kan inte läsa"-asymmetrin:
FindOutlineByTitlehittar bokmärken via titel (stöder 3 djup: endast syskon/endast barn/hela underträdet);GetOutlineActionInfoochGetAnnotActionInforeturnerar åtgärdstypen för ett bokmärke eller en annotation (GoTo/GoToR/URI/Launch/Named/JavaScript) och URI, JavaScript, eller filnamnsnyttolast som en typiserad struktur;GetOutlineDestinationInforeturnerar målsidan, Fit-typ (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV), och koordinater;EnumSignatures,GetSignatureFieldCount, ochGetSignatureFieldInforäknar upp signaturfält och rapporterar om de är signerade
Version 3.76.3
Ändrat
- Factur-X EXTENDED-profilen i E-Invoice-demon använder nu standardvärdet för conformance och standard guideline-ID, och ZUGFeRD 1.0-fakturan lägger till summeringselementen
ChargeTotalAmountochAllowanceTotalAmount; alla 6 profiler producerar nu PDF/A-3b- och PDF/A-3u-utdata som godkänns av både veraPDF (PDF/A-efterlevnad) och Mustang (affärsregler för elektroniska fakturor)
Version 3.76.2
Åtgärdat
- XMP-metadata för hybridfakturor av typ Factur-X/ZUGFeRD deklarerar nu PDF/A-tilläggsschemat (
pdfaExtension:schemas) för att beskrivafx:-fakturaegenskaperna; tidigare gjorde avsaknaden av denna deklaration att den genererade PDF/A-3 bedömdes som icke-efterlevande av validerare som veraPDF
Ändrat
- E-Invoice-demons faktura-XML inkluderar nu säljarens och köparens elektroniska adresser samt säljarens telefonnummer, vilket låter fler profiler klara ZUGFeRD/Factur-X-affärsregelsvalideringen
- E-Invoice-demons profilkatalog, XML-konstruktion och PDF/A-3-genereringsflöde har brutits ut till en delad unit som både GUI:n och det nya externa validerartestverktyget återanvänder
Version 3.76.1
Åtgärdat
- Åtgärdade en krasch vid klick på Generera i E-Invoice-demon: inbyggda standardteckensnitt är inte tillgängliga i PDF/A-läge, så demon bäddar nu in ett TrueType-teckensnitt för att rendera fakturasidan
Ändrat
- E-Invoice-demon tar bort PDF/A-3a-alternativet (sällan använt för elektroniska fakturor), och XRechnung-profilen använder nu PDF/A-3u som standard
Version 3.76.0
Ändrat
- GUI:n i E-Invoice-demon är nu datadriven: fakturanummer, utfärdandedatum, köpare och säljare, nettobelopp, momssats och valuta är redigerbara, och faktura-XML:en matchar exakt de synliga sidobeloppen i stället för att använda fast platshållarinnehåll
- Demon genererar strukturellt korrekt faktura-XML per profil: Factur-X, XRechnung och ZUGFeRD 2.0 använder
CrossIndustryInvoice-strukturen, medan ZUGFeRD 1.0 COMFORT använder sin egenCrossIndustryDocument-struktur med radposter, skattetotaler och betalningsvillkor - Belopp skrivs till XML:en med ett fast engelskt decimalpunktsformat så att lokaliserade tusentalsavgränsare eller kommatecken inte bryter schemat, och användarinmatning escapas innan skrivning
- Demon lägger till en live XML-förhandsvisning, innehållsjämvkontroller på profilnivå, tolkning av den likadant namngivna externa
.validation.json-valideringsrapporten, och läser uttryckligen in databasens sRGB ICC-utdataintention vid generering
Version 3.75.6
Tillagt
SetPDFAModelägger till läge7, vilket tillåter PDF/A-3u-metadata och fortsatt tillåter PDF/A-3-associerade filer; E-Invoice GUI-demot erbjuder också ett PDF/A-3u-alternativ, och ZUGFeRD 2.0 BASIC-profilen använder nu PDF/A-3u som standard
Version 3.75.5
Tillagt
- Lägger till ett Delphi E-Invoice GUI-demo som kan välja Factur-X-, ZUGFeRD- och XRechnung-profiler, generera PDF/A-3-hybridfakturor, bädda in matchande XML-filnamn och guideline ID, köra containervalidering i gränssnittet samt visa XMP-fakturainformation, valideringsproblem och extraherad XML
Version 3.75.4
Tillagt
- Lägger till stöd för PDF/A-3-associerade filer och e-faktura-XML:
AddPDFA3AssociatedFileFromStringkan skapa Catalog/AF-associerade filer direkt från minnesbytes,AddFacturXAssociatedFileFromStringkan skriva Factur-X-, ZUGFeRD- och XRechnung-XML, synkronisera XMP-metadata och validera kombinationen av filnamn, profil, XMP-namnrymd och XML-guideline ID, medan lässidan lägger till API:er för detektering, validering, problemlista och XML-extraktion
Version 3.75.3
Åtgärdat
- PDF-sammanslagningsfunktionen: lokala variabler
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumochStructRootGlobalGenNumtilldelades bara inne i villkorliga block, vilket gav W1036 “variable might not be initialized”-varningar i Delphi Win64-kompilatorerna 26 och 29 (RAD Studio 12 och 16); lade till nollinitialisering vid funktionsstart
Version 3.75.2
Åtgärdat
- Kompatibilitet för fler versioner i bygget:
for-loopen i hexsträngsparsern (PDFlibStruct) använde enInt64-loopvariabel, som Delphi XE3/XE5 (kompilatorerna 26/27) avvisar som icke-ordinal; omskriven som enWhile-loop för att återställa kompatibilitet med RAD Studio 12 och 14 - Kontrollen för referens-XObject (
PDFlibPDFUA): ordbokspekarenDvar inte initialiserad i grenen för varken ström eller ordbok, vilket gav ett kompilatorhint på alla mål; strukturerade om grenen så attDalltid tilldelas föreAssigned-kontrollen - Omslaget
CreateFontPackage(PDFlibFont): tystade det felaktiga W1035-hintet “return value might be undefined” i Delphi ≤ XE8 samtidigt som det kompletterande H2077-hintet om död tilldelning i nyare kompilatorer undveks, via ett{$IF CompilerVersion}-skydd - BMP-DPI-skrivaren och PDF:s inkrementella sparväg: ersatte föråldrade anrop till
TStream.Seek(Longint, Word)med tilldelningar tillPosition :=(PDFlibPDFium,PDFlibDocument)
Version 3.75.1
Åtgärdat
- TIFF-parsern för flera sidor: loopens avslutningsskydd mot alltför stora sidantal var verkningslöst eftersom
FPageCountdeklarerades somWord(maximalt 65 535), vilket gjorde jämförelsen> 65535alltid falsk; ändrat tillIntegerså att skyddet nu utlöses korrekt på patologiska filer - CFF-/Type 2-teckenuppsättningsparsern (Format 1 och Format 2): tog bort döda tilldelningar
Done := Truesom direkt föregick enBreakoch därför aldrig lästes, vilket eliminerade kompilatorhint
Version 3.75.0
Säkerhet
- Härdade parsningen av otillförlitliga inbäddade teckensnitt (TrueType, Type 1, CFF och CMap) mot skrivningar utanför gränserna, obegränsad charstring-recursion och för stora minnesallokeringar från felaktiga teckensnittsdata
- Härdade bildavkodarna (PNG, GIF, TIFF, JBIG2 och CCITT Group 3 and 4) mot läsningar och skrivningar utanför gränserna, heltalsöverslag i bredd- och höjdkalkyler samt dereferenser av tom palett från illvilliga bilder
- Härdade strömfilter (LZW, ASCII85 och Flate-prediktorer) mot buffertläsningar utanför gränserna, division med noll och icke-avslutande loopar på konstruerad strömdata
- Härdade parsningen av korsreferenser, dokumentåteruppbyggnad och namntresträd mot åtkomst utanför gränserna och oändliga loopar orsakade av felaktiga eller cirkulära korsreferensdata
- AES-CBC-dekryptering validerar nu blockjusteringen hos chiffertexten och nollinitialiserar utbufferten, vilket förhindrar att oinitialiserat heapminne läcker in i dekrypterade strängar och strömmar
Åtgärdat
- SHA-256, SHA-384 och SHA-512 för frikopplade signaturer produceras nu med rätt kryptografisk leverantör; tidigare returnerades en tom digest och ogiltiga signaturer uppstod
- ASCII85- och RC4-avkodning returnerar inte längre oinitialiserade data eller kastar ett undantag vid avkortad indata eller en tom nyckel
- GIF-bakgrundsfärgen läses nu med rätt blå kanal i stället för att duplicera den gröna kanalen
Version 3.74.1
Åtgärdat
- Åtgärdade ett E2010-kompilatorfel av typen incompatible-types i stödet för PAdES-signaturvalideringsdata (VRI) som hindrade biblioteket från att kompileras
- Tog bort den sista kompilatorvarningen och ledtrådarna om oanvända variabler; alla Win32- och Win64-byggnader för trial- och release-bibliotek kompileras nu rent
Version 3.74.0
Tillagt
- De direkta filsökvägarna för
EncryptFileochDecryptFileläser nu PDF:er vars korsreferensdata ligger i korsreferensströmmar, inklusive inkrementellt uppdaterade kedjor och hybridreferensfiler med ett/XRefStm-sidosektion, i stället för att falla tillbaka till den långsammare fullständiga läsaren: AES-256-skydd av ett 1.25 GB-benchmarkdokument sjönk från cirka 4,4 till 2,5 sekunder och dekrypteringen från cirka 1,7 till 1,3 sekunder - Omskrivningar som bär objekt lagrade i komprimerade objektströmmar skickar nu ut en trailer för korsreferensström, vilket gör att dessa objekt kan adresseras i den krypterade eller dekrypterade utdata
Åtgärdat
- En revision utan ett dokument
/IDi en inkrementellt uppdaterad fil raderar inte längre identifieraren som ärvts från en tidigare revision under en direkt omskrivning
Version 3.73.2
Ändrat
DASaveAsFileaggregerar nu sina utmatningsskrivningar och hittar varje objekts avslutande nyckelord utan strängallokering per steg, vilket kortar omskrivningen av ett 2 GB-benchmarkdokument med över en miljon objekt från cirka 57 till 11 sekunder
Version 3.73.1
Ändrat
- De direkta filsökvägarna för
EncryptFileochDecryptFileläser nu källan genom ett glidande fönster och aggregerar utmatningsskrivningar, så att AES-256-skydd av mycket stora PDF-filer med miljontals objekt går flera gånger snabbare: på ett 2 GB-benchmarkdokument sjönk krypteringen från cirka 123 till 32 sekunder och dekrypteringen från cirka 127 till 23 sekunder - Objektkroppar som ryms i läsfönstret hämtas inte längre två gånger från disk under en direkt AES-256-omskrivning
Åtgärdat
- Direkta AES-256-omskrivningar av hybridreferens-PDF:er (filer som bär en trailerpost
/XRefStm) faller nu tillbaka till den fullständiga läsaren i stället för att riskera att komprimerade objekt tappas bort - Korsreferensparsningen i den direkta filsökvägen läser inte längre allt från korsreferenssektionen till slutet av filen i ett svep, vilket kunde tömma minnet på flergigabytesfiler vars
/Prev-kedja pekar nära början av filen, och en trasig/Prev-kedja faller nu tillbaka till den fullständiga läsaren i stället för att skapa ett ofullständigt dokument
Version 3.73.0
Tillagt
- SigningWorkbench-demot utför nu fullständig kryptografisk digestverifiering av frikopplade CMS-signaturer (
adbe.pkcs7.detachedochETSI.CAdES.detached) via Windows CryptoAPI: de signerade byteområdena hashas om och kontrolleras mot CMS-signaturen, ett ändrat dokument rapporteras med den nya felkoden SG203, och varje signatur har ett tredelatdigestValid-fält i JSON-, CSV- och HTML-rapporterna - Nya automatiseringsväxlar för SigningWorkbench:
--quietskriver bara ut batchsammanfattningen och rapportsökvägarna,--fail-faststoppar batchen vid den första fil som misslyckas, och JSON-rapporten registrerar nu biblioteksversionen
Version 3.72.0
Tillagt
- ComplianceWorkbench-demot får professionella batcharbetsflöden:
--policy-fileläser granskningspolicyn från en JSON-fil så att team kan versionshantera och dela sina dokumentregler,--baselinejämför körningen med en tidigare compliance-report.json och listar nya fel, åtgärdade filer och filer som fortsätter att misslyckas, och--preflight-detailsbäddar in preflight-problemlinjer i JSON- och HTML-rapporterna - Nya automatiseringsväxlar för ComplianceWorkbench:
--quietskriver bara ut batchsammanfattningen och rapportsökvägarna,--fail-faststoppar batchen vid den första fil som misslyckas, och JSON-rapporten registrerar nu biblioteksversionen
Version 3.71.2
Åtgärdat
AppendToFilelägger åter till inkrementella uppdateringar i samma PDF-fil som laddades medLoadFromFile; den strömmande inläsaren håller nu källfilen läsbar utan att blockera skrivhandtaget som behövs för uppdateringen
Version 3.71.1
Tillagt
- Rapporterna från ComplianceWorkbench och SigningWorkbench innehåller nu etiketter för fyndens allvarlighetsgrad, per fil högsta allvarlighetsgrad, frekvenssammanfattningar för batchens allvarlighetsgrader och matchande JSON-, CSV-, HTML- och konsolutdata för snabbare policytriage
Version 3.71.0
Tillagt
- Granskningen i SigningWorkbench-demot rapporterar nu revisionsordningen och DocMDP-certifieringsnivån för varje signatur, flaggar svaga MD5/SHA-1-certifikatsignaturalgoritmer och det äldre SubFilter
adbe.pkcs7.sha1med--forbid-weak-digest(SG303/SG405), självsignerade certifikat med--forbid-self-signed(SG406), dokument utan certifieringssignatur med--require-certified(SG304), och kontrollerar alltid om signeringstiden ligger inom certifikatets giltighetsperiod (SG407) - Signeringsläget i SigningWorkbench använder nu signprocess-API:t med de nya växlarna
--subfilter(sha1, detached eller cades för PAdES-baslinjesignaturer) och--digest(auto till sha512), och moderntadbe.pkcs7.detachedmed SHA-256 är nu standard för signering - Den nya läsaccessorn
TPDFlibSignDoc.GetSignatureDocMDPLevelByNamereturnerar DocMDP-certifieringsnivån för ett signaturfält enligt ISO 32000-1 §12.8.2.2
Version 3.70.0
Tillagt
- ComplianceWorkbench-demot upprätthåller nu även policyer för behörighet, metadata och storlek:
--require-print-allowedoch--require-copy-allowedkontrollerar dokumentets behörighetsbitar (PC205/PC206),--require-authoroch--require-creation-datekontrollerar fullständigheten i metadata (PC306/PC307), och--max-pagesoch--max-file-sizesätter gränser för dokumentets storlek (PC308/PC309) - Arkivprofilen kräver nu också en författare och ett skapelsedatum, och tillgänglighetsprofilen kräver den kopieringsbehörighet som hjälpmedelstekniken förlitar sig på
- ComplianceWorkbench-rapporterna sammanställer nu en frekvenssammanfattning av felkoder över hela batchen, och per-filsmåtten inkluderar författare, skapelsedatum, filstorlek samt status för utskrifts- och kopieringsbehörighet
Version 3.69.1
Åtgärdat
DecryptFiletar åter bort kryptering från AES-128- och RC4-skyddade dokument, inklusive dokument som bara har ett ägarlösenord; sedan v3.67.4 har den snabba sökvägen för stora filer felrapporterat dessa dokument som om de hade fel lösenord (error 404) i stället för att skicka dem till den vanliga dekrypteringsvägen, medan AES-256-dokument inte påverkades
Version 3.69.0
Tillagt
- Ny SigningWorkbench-Delphi-demo: ett konsolverktyg för signatur- och certifikatsgranskning som inspekterar signaturfälten i en PDF eller en hel katalog (SubFilter, signeringstid, ByteRange-täckning och signeringscertifikatet med utgångskontroller), batchsignerar PDF:er med ett PKCS #12-certifikat och granskar PFX-filer; varje överträdelse mappas till en stabil policyfelkod (SG101–SG501) och resultaten skrivs som JSON-, CSV- och HTML-rapporter med lokaliserade demoguider för alla 18 dokumentationsspråk
- Nya läsaccessorer för signaturer på
TPDFlibSignDoc:GetSignatureFieldNameslistar ett dokuments signaturfält,GetSignatureTextValueByNamereturnerar signeringstiden /M, /Name-, /Reason-, /Location-, /ContactInfo- och /Type-posterna (med dekryptering för krypterade dokument), ochGetSignatureValueByNamereturnerar /Filter, /SubFilter, /Contents och ByteRange-posterna efter fältnamn
Åtgärdat
- Åtgärdade importen av
CertCloseStorefrån Windows CryptoAPI, som deklarerades utan parametern för flaggor och kunde korrumpera anropsstacken på Win32 när ett certifikatarkiv stängdes
Version 3.68.0
Tillagt
- Ny ComplianceWorkbench-Delphi-demo: ett konsolverktyg för batchpolicygranskning som kontrollerar en PDF eller en hel katalog mot en konfigurerbar compliance-policy som omfattar PDF/A- och PDF/UA-preflight, krypteringsregler, PDF-versionintervall, Tagged PDF, linjärisering och dokumenttitel, rapporterar varje överträdelse som en stabil policyfelkod (PC101–PC501) och skriver JSON-, CSV- och HTML-rapporter med automatiseringsvänliga avslutningskoder
- Det nya demot levereras med policyprofiler som samlar vanliga kravuppsättningar—archive, accessible, secure och web—med explicita kommandoradsväxlar som åsidosätter profilvärden, och innehåller lokaliserade demoguider för alla 18 dokumentationsspråk
Version 3.67.4
Ändrat
EncryptFileochDecryptFileanvänder nu en direkt AES-256-omskrivningssökväg för stora klassiska xref-PDF:er och strömmar krypterade data mellan filer i stället för att ladda och serialisera om varje objekt; en benchmarkfil på 2 GB slutför nu fil-till-fil AES-256-kryptering och dekryptering via Direct File API med resultatkod 1 ochLastErrorCode0
Åtgärdat
- Åtgärdade hanteringen av strängtoken i direkt AES-256 så att ordboksavgränsare inte misstas för hexsträngar och tomma krypterade strängar dekrypteras korrekt
Version 3.67.3
Ändrat
- Delphi- och C++Builder-demona för DrawShapes, CreateWithImage, CreateTable, EditFormField och EmbeddedFonts har byggts ut så att de genererade PDF-filerna nu visar praktiska arbetsflöden för ritning, bildplacering, tabellayout, formulärfältsstil och jämförelse av teckensnittsinbäddning i stället för minimal utdata från en enda åtgärd
Åtgärdat
- CreateTable-demot anger nu uttryckligen A4-sidstorlek innan tabellen renderas, vilket undviker den tidigare oinitierade variabeln för sidstorlek i Delphi-exemplet
Version 3.67.2
Åtgärdat
- Åtgärdade en regression från den lata loader-sidans detektering som infördes i v3.67.0: detektering av innehållsfunktioner kunde köras vid sparning och skriva över en uttryckligen begärd sparversion (SetInformation 0) eller en låst version (LockSaveVersion), så en strikt sparning till lägre version avvisade inte längre innehåll med högre version och en låst version kunde driva uppåt; detekteringen körs nu före varje uttryckligt satt version och körs aldrig för dokument som skapats i stället för laddats, vilket återställer versionskontrollbeteendet före v3.67.0 samtidigt som besparingarna från lat laddning behålls
Version 3.67.1
Ändrat
- Funktionsdetektering läser nu stream-objekt med en ytlig parsning som bara granskar objektdictionaryt och hoppar över stream-kroppen, eftersom skanningen aldrig undersöker stream-innehåll; för dokument med stora bildstreams undviks därmed läsning av kroppens bytes under detektering, vilket minskar objektläsningstiden för en detekteringspass med ungefär 40% (cirka 13 s i stället för 20 s på en fil på 2 GB med 1,6 miljoner objekt), medan den detekterade funktionslistan och den effektiva PDF-versionen förblir identiska
Version 3.67.0
Ändrat
- Innehållsfunktionsdetekteringen på inläsarsidan sker nu fördröjt (lazy) – i stället för att skanna hela dokumentet vid inläsning körs den först vid första användningen, när den effektiva PDF-versionen eller listan över upptäckta funktioner efterfrågas eller när dokumentet sparas; skrivskyddade arbetsflöden som sidräkning, text- eller bildextrahering och rendering som aldrig efterfrågar versionen eller sparar om hoppar över skanningen helt, vilket minskar inläsningstiden för mycket stora dokument med ungefär 80% (cirka 10 s i stället för 56 s för en fil på 2 GB med 1,6 miljoner objekt), medan uppsättningen upptäckta funktioner och den effektiva PDF-versionen förblir identiska när detekteringen väl körts
Version 3.66.1
Ändrat
- Inläsning av mycket stora flersidiga dokument är nu betydligt snabbare: innehållsfunktionsdetekteringen på inläsarsidan hoppar över regelkontroller som inte kan ändra resultatet – både regler som redan matchat och regler som inte kan tillämpas på ett visst objekt – vilket ungefär halverar inläsningstiden för enorma filer samtidigt som de identifierade funktionerna och den effektiva PDF-versionen förblir identiska
Version 3.66.0
Ändrat
- Inläsning av mycket stora flersidiga dokument kräver nu drastiskt mindre minne vid toppbelastning. Innehållsfunktionsdetektionen på laddarsidan materialiserar inte längre hela objektmodellen på en gång – den strömmar genom direktåtkomstläsaren ett objekt i taget – vilket minskar working set-toppen med ungefär 90 % för enorma filer och bevarar de identifierade funktionerna och den effektiva PDF-versionen oförändrade.
Version 3.65.0
Tillagt
- Dokument större än 2 GB kan nu öppnas. Den tidigare bufferten i minnet som begränsade dokumentstorleken till cirka 2 GB har tagits bort.
Ändrat
- Vid inläsning av en PDF från en fil läses objektdata nu in på begäran från källan i stället för att hela dokumentet buffras i minnet, vilket kraftigt minskar den högsta minnesanvändningen för stora filer.
- Ett dokument som lästs in från en fil håller filen öppen med delad läsåtkomst tills dokumentet stängs eller töms.
Åtgärdat
- Förbättrad robusthet vid inläsning av dokument som innehåller inledande byte före %PDF- header och vid hantering av felaktiga cross-reference-data.
Version 3.64.0
Ändrat
- Direct API-åtgärder på mycket stora eller objektrika PDF-filer – EncryptFile, DecryptFile och DASaveAsFile – är nu dramatiskt snabbare och hänger sig inte längre. Ett 2 GB stort dokument med cirka 1,6 miljoner objekt som tidigare inte kunde slutföras krypteras nu på ungefär en minut, och bearbetningstiden skalar ungefär linjärt med dokumentet i stället för att kollapsa när antalet objekt växer.
- Kryptering av stora dokument är betydligt snabbare – en åtgärd som tidigare tog många minuter slutförs nu på sekunder till ungefär en minut – utan ändring av krypteringsstyrka, kompatibilitet för chiffertext eller utdata.
Version 3.63.0
Åtgärdat
- Åtgärdade en processkrasch vid inläsning av stora PDF-filer vars interna byte-offset överskrider 32-bitarsgränsen (cirka 2 GB); inläsaren använder nu 64-bitars offset genomgående, så att filer nära 2 GB läses in tillförlitligt och filer på 2 GB eller större rapporterar ett inläsningsfel korrekt i stället för att krascha.
Version 3.62.0
Ändrat
- AES-256-CBC-kryptering och -dekryptering tar nu den hårdvaruaccelererade AES-NI-vägen även på 32-bitars Windows, inte bara på 64-bitars, fortfarande med automatisk återgång till den portabla C-implementeringen på processorer utan AES-NI. Den krypterade texten är oförändrad på alla plattformar.
Version 3.61.0
Ändrat
- AES-256-CBC-kryptering och -dekryptering använder nu en hårdvaruaccelererad AES-NI-backend på 64-bitars Windows, med automatisk återgång till den portabla programvaruimplementeringen på processorer som saknar AES-NI. Den krypterade texten är identisk på alla plattformar; endast hastigheten för lösenordsbaserad AES-256-PDF-kryptering ändras.
Version 3.60.0
Tillagt
MergeFileListsammanfogar nu indokumentens logiska strukturträd (Tagged PDF) till ett enda nåbart strukturträd, i stället för att enbart behålla det första dokumentets träd och lämna de övriga som onåbara objekt. Strukturelement på översta nivån, parent tree (med ommappade sid-/StructParents- och annoterings-/StructParent-nycklar),/RoleMap,/ClassMapoch/IDTreekombineras, och den sammanfogade katalogen markeras som Tagged (/MarkInfo /Marked true).
Ändrat
- Vid sammanfogning av dokument med motstridiga
/RoleMap-,/ClassMap- eller/IDTree-nycklar behålls den första förekomsten. Den snabba vägen (MergeFileListFast) fortsätter att utelämna strukturinformation.
Version 3.59.0
Ändrat
MergeFileListslår nu samman dokument i en enda genomgång (O(N) i stället för O(N²)), vilket gör sammanslagning av många filer avsevärt snabbare; den får också den sammanslagning av bokmärken över flera dokument som lagts till i den snabba vägen.- Som standard hoppar
MergeFileListnu över oläsbara eller krypterade indatafiler och fortsätter att slå samman resten, i stället för att avbryta hela åtgärden vid den första felaktiga filen. Använd den nyaMergeFileListStrictför att återställa det tidigare beteendet att stoppa vid första felet. - Logiska struktur-objekt (Tagged PDF) från indata bevaras nu av
MergeFileList(den snabba vägen fortsätter att förkasta dem).
Tillagt
MergeFileListStrictslår samman en fillista men stoppar vid den första oläsbara eller krypterade filen och behåller den strikta stoppa-vid-fel-semantiken från tidigare versioner.
Version 3.58.0
Tillagt
MergeFileListFastslår nu samman dokumentets bokmärken (dispositioner) från alla indatafiler, så att den snabba sammanslagningsvägen bevarar bokmärkena utöver AcroForm-formulärfälten.- Sammanslagna bokmärken behåller sin hierarki och sina sidmål; antalet bokmärken på översta nivån i den sammanslagna utdatan motsvarar summan av indata.
Version 3.57.1
Ändrat
- Att spara via Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) är nu betydligt snabbare för mycket stora dokument: oförändrade objekt kopieras direkt från källbytena i stället för att tolkas och serialiseras om. Att spara om ett dokument på 60 000 sidor / 883 MB minskade från cirka 33 sekunder till ungefär 23 sekunder.
Version 3.57.0
Ändrat
- Prestandan för
TPDFlib.MergeFileListFastvid sammanslagning av flera dokument har optimerats ytterligare: oförändrade icke-strömobjekt i bifogade dokument återanvänds nu direkt från sina ursprungliga källbytes med en indirekt referensförskjutning på bytenivå, vilket hoppar över analys- och reserialiseringsturen och förbättrar genomströmningen för flersidiga dokument. Sammanslagningsresultatet är oförändrat, med identiska sidantal. - Objekt som innehåller strömmar eller tillhör strukturträdet fortsätter att använda den befintliga avkodningsvägen, så den snabbare bytevägen tillämpas bara där det är bevisligen säkert.
Version 3.56.44
Ändrat
TPDFlib.MergeFileListFasthar optimerats genom att förallokera merge-metadata och skriva oförändrade objekt i det första dokumentet från deras ursprungliga källdata, vilket minskar minnesrörelser och onödigt objektavkodnings-/utdataarbete vid snabba merge-körningar med flera filer.- Delphi-GUI:t
MergePDFbatchar nu resultatloggningen i snabbt läge och undviker upprepade genomsökningar av hela memo-texten, så stora indatalistor förblir mer responsiva efter att en merge har slutförts.
Version 3.56.43
Ändrat
- Den ordinarie sammanfogningsvägen i
TPDFlib.MergeFileListhar optimerats genom att växla mellan mellanliggande temporära filer i stället för att kopiera den växande sammanfogade PDF-filen före varje ytterligare indatafil. Det minskar disk-I/O i arbetsflöden med flera filer och bevarar det befintliga kontraktet för returantalet.
Version 3.56.42
Tillagt
- AES-regressionstäckning har lagts till för fall där indatabuffer och resultatmål aliasar varandra vid återställning av krypterade streams under sparning, inklusive stora payloads på 504 KB som tidigare avslöjade felet.
Ändrat
- Det normala API-flödet
LoadFromFile,Encrypt,SaveToFile, omladdning,DecryptochSaveToFileslutförs åter på stora laddade PDFer, samtidigt som AES-CBC-dekrypteringsoptimeringen med färre kopior behålls.
Åtgärdat
- Den bufferbaserade AES-256-dekrypteringsvägen som infördes i v3.56.41 har korrigerats så att anropare kan tilldela dekrypteringsresultatet tillbaka till samma
AnsiStringsom tillhandahöll ciphertextbufferten utan åtkomstfel.
Version 3.56.41
Tillagt
- Lade till
TPDFlib.DACopyFileför Direct Access arbetsflöden som behöver sidantal och en oförändrad filkopia utan att bygga hela den normala objektgrafen. - Delphi
HugeFileBenchmarkdemo innehåller nu endirect-copyrad samt filtren--opsoch--skipför fokuserade körningar med stora filer.
Ändrat
- Optimerade AES-256-dekryptering med buffertbaserade AES-CBC-dekrypteringsvägar som används vid dekryptering av inlästa strängar och streams, vilket minskar extra kopiering av chiffertext i stora krypterade streams.
Version 3.56.40
Ändrat
- Delphi- och C++Builder-demos
HelloWorldskapar nu en rikare start-PDF med dokumentinformation, utdata med valt standardteckensnitt, ett formgivet titelblock, enkel vektorgrafik och vagledning for nasta steg, samtidigt som samma bygg-och-kor-arbetsflode behalls. - Alla demoanteckningar for Delphi och C++Builder har ersatts med webblasaranpassade
Readme.html-sidor, inklusive hjalpanteckningar for losenord, begransade filer och signeringsresultat; demoindexen leder nu anvandare till HTML-anteckningarna.
Version 3.56.39
Ändrat
- Sparvägarna i den direkta fil-API:n bygger nu korsreferensuppslagstabeller linjärt, vilket gör
DASaveAsFileoch relaterade direktsparvägar mycket snabbare för PDF-filer med mycket höga objektantal eller täta sidträd. - Den optimerade writern behåller samma semantik för kedjan av fria objekt och undviker upprepade objektnummersökningar under fullständig xref-generering, vilket förbättrar stora direktspararbetsflöden utan att ändra det publika API:t eller utmatningskontraktet.
Version 3.56.38
Ändrat
- Det normala API-arbetsflödet
LoadFromFile,Encrypt,SaveToFile, reload,DecryptochSaveToFilebevarar nu krypterat tillstånd före explicitDecrypt, vilket matchar det direkta fil-API:ets beteende för stora äldre PDF-filer.
Åtgärdat
- Korrigerade normal API-krypteringsutdata så att
Encryptskapar eller bevarar trailern/IDinnan AES-256-säkerhetsdata skrivs, vilket gör att krypterade PDF-filer fortsatt kan upptäckas vid omladdning viaEncryptionStatus.
Version 3.56.37
Tillagt
- Lade till
TPDFlib.ComparePreflightReports, en rad-för-rad-jämförare för preflight-rapporter i oformaterad text som ignorerar flyktigaGenerated:-tidsstämpelrader och returnerar en tom sträng när stabilt rapportinnehåll matchar. - Delphi-demon
PreflightReportstöder nu--compare <file>i enfils-läge, skriver en UTF-8.diff.txt-rapport och returnerar exitkod 2 när den genererade textrapporten skiljer sig från baslinjen.
Version 3.56.36
Tillagt
- Delphi-demon
PreflightReportstöder nu batchkörningar av kataloger med--input-dir,--output-diroch--recursive, och skriver en rapport per PDF som<basename>.preflight.<ext>.
Ändrat
- Batchläget skriver en UTF-8
preflight-summary.csv-fil som registrerar varje käll-PDF, status för godkänd/misslyckad, antal problem och sökvägen till den genererade rapporten, samtidigt som det befintliga exitkodskontraktet för automatisering bevaras.
Version 3.56.35
Tillagt
ReportFormat = 3lägger till CSV-utdata iTPDFlib.CreatePreflightReportExochTPDFlib.SavePreflightReportEx, vilket producerar UTF-8-rader för rapportmetadata, varje vald efterlevnadskontroll, enskilda problemkoder och meddelanden samt den slutliga sammanfattningen.- Delphi-demon
PreflightReportstöder nu--format csvoch--csvså att kommandoradsbaserade preflight-körningar kan mata kalkylblad eller enkla CI-tolkare utan efterbearbetning av JSON eller skrapning av text.
Version 3.56.34
Tillagt
- Lade till formatmedvetna API:er
TPDFlib.CreatePreflightReportExochTPDFlib.SavePreflightReportExför att generera PDF/A- och PDF/UA-1-preflight-rapporter som oformaterad text, JSON eller fristående HTML, samtidigt som de befintliga rapport-API:erna endast för text bevaras. - Delphi-demon
PreflightReportstöder nu--format text|json|htmlsamt genvägarna--jsonoch--html, så att samma kommandoradsarbetsflöde kan producera läsbara rapporter eller maskinläsbara CI-artefakter.
Version 3.56.33
Tillagt
- Lade till
TPDFlib.CreatePreflightReportochTPDFlib.SavePreflightReportså att program kan generera återanvändbara rapporter i oformaterad text från de inbyggda PDF/A- och PDF/UA-1-efterlevnadskontrollerna utan att manuellt räkna upp string-list-handtag.
Ändrat
- Delphi-demon
PreflightReportanropar nu rapport-API:erna på biblioteksnivå direkt, vilket håller exemplet fokuserat på kommandoradsarbetsflöde, valda kontroller, första-problem-läge och automatiseringsvänliga exitkoder.
Version 3.56.32
Tillagt
- Lade till en ny Delphi
PreflightReport-konsoldemo som kör PDF/A- och PDF/UA-1-kontroller medCheckFileCompliance, räknar upp problemlistor medGetStringListCountochGetStringListItemoch skriver en preflight-rapport i oformaterad text.
Ändrat
- Demon stöder alternativen
--input,--output,--pdfa,--pdfua,--bothoch--first-issue, samt exitkoder för automatiseringsvänliga resultat för godkänd, problem hittat och körningsfel.
Version 3.56.31
Ändrat
GetCustomKeys(2)döljer nu bibliotekshanterade Catalog-systemposter konsekvent, inklusive/OutputIntents,/Extensions,/Requirements,/Collectionoch/NeedsRendering.
Åtgärdat
- PDF/A output intents som skapas av
SetPDFAModevisas inte längre som anpassade Catalog-nycklar, vilket håller uppräkningen av programmetadata separat från PDF-efterlevnadsstrukturer.
Version 3.56.25
Ändrat
- Skrivarsidans GetPDFUADiagnostics får det matchande problemet
MULTIPLE-H-CHILDREN:N, i paritet med läsaren10044från v3.56.24. ISO 14289-1 §7.4.4 förbjuder fler än ett direkt H-barn per taggträdsnod; skrivarsidans kontroll utlöses när FStructElems-trädet i minnet innehåller en sådan överträdelse. - En ny nästlad CountMultipleHChildren-hjälpare går igenom trädet depth-first och räknar H-barn på varje nivå. Kontrollen körs tillsammans med de befintliga LIST-STRUCT / LIST-NO-NUMBERING-genomgångarna och delar samma FStructElems-traverseringsmönster.
Version 3.56.24
Ändrat
- PDF/UA-1-granskningen får ISO 14289-1 §7.4.4-kontrollen för H-taggars unicitet.
10044rapporterar varje strukturnod som har fler än ett direkt H-barn — specifikationen förbjuder detta i starkt strukturerade dokument, och samma begränsning gäller för alla taggträdsnoder oavsett övergripande strukturläge. Den andra §7.4.4 SHALL-regeln (ett dokument ska vara antingen starkt eller svagt strukturerat, inte båda) kräver dokumentomfattande heuristik och är avsiktligt utelämnad från denna granskning. - En ny pre-order-vandrare för strukturträdet (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) räknar direkta H-barn per nod och rekurserar depth-first. Återanvänder samma K-formavkodare som de befintliga vandrarna för rubriker / listor / anteckningar.
Version 3.56.23
Tillagt
- Nya
Lib/PDFlibPDFUAFontInspect.pasimplementerar en tolerant vandrare för SFNT-tabellkataloger och en parser för cmap-undertabellkataloger. Tabellen Adobe Glyph List med 4281 namn som lades till som stomme i den föregående infrastrukturcommiten är nu inkopplad via Differences-kontrollen. Program som inte kan tolkas som SFNT (Type 1 PFB / PFA, OpenType collection, godtyckligt skräp) hoppas över tyst — falska negativa föredras framför falska positiva på granskningslagret.
Ändrat
- PDF/UA-1-granskningen får de två ISO 14289-1 §7.21.6-kontrollerna för typsnittsprogram som ordbokslagerkontrollerna i v3.56.10 behövde skjuta upp tills en TrueType-parser fanns tillgänglig.
10034rapporterar icke-symboliska TrueType-program vars inbäddade SFNT cmap-tabell endast innehåller den symboliska posten (platformID=3, encodingID=0) — §7.21.6 första stycket kräver minst en icke-symbolisk cmap-undertabell så att programmet kan rendera de kodpunkter som deklareras av dess /Encoding.10035rapporterar icke-symboliska TrueType/Encoding /Differences-arrayer vars glyfnamn inte är medlemmar i Adobe Glyph List (.notdefundantagen) — §7.21.6 tredje stycket kräver att varje Differences-post hamnar i AGL.
Version 3.56.22
Ändrat
- PDF/UA-1-granskningen får ISO 14289-1 §7.18.6-kontroller för media clip data.
10042rapporterar media clip data-ordböcker (identifierade av/S /MCD, valfritt/Type /MediaClip) som saknar den obligatoriska/CT-posten för innehållstyp.10043rapporterar samma ordböcker när de saknar den obligatoriska/Alt-arrayen. ISO 32000-1 Table 274 listar båda nycklarna som valfria, men ISO 14289-1 §7.18.6 gör dem obligatoriska så att skärmläsare kan meddela en meningsfull beskrivning för inbäddad multimedia. - Detta är fas 6 i PDF/UA-planen för djupgranskning (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Den körs utan beroende av någon typsnittsprogram- eller innehållsströmparser, så den är den första uppföljande underklassen efter serien v3.56.0..v3.56.13.
Version 3.56.21
Tillagt
- Nya
SetSignProcessCommitmentTypeskriver det CAdES-signerade attributetcommitment-type-indication(OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3) inuti PAdES-B-B SignerInfo. Accepterar heltalskoder 1..6 som mappar till de välkända ETSI commitment OIDsid-cti-ets-proofOfOrigintillid-cti-ets-proofOfCreation; skicka 0 för att rensa. Koder utanför intervallet avvisas. - Nya
SetSignProcessSignaturePolicyskriver det CAdES-signerade attributetsignature-policy-identifier(OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Tar policy-OID i punktdecimal form, policydokumentets hash som en hexsträng med versaler och en kod för sammanfattningsalgoritm (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=auto/SHA-256). Attributet bärSignaturePolicyIdSEQUENCE medsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE).
Ändrat
- Båda attributen får effekt endast när SubFilter är
ETSI.CAdES.detached(PAdES-B-B-sökvägen); de utökar den befintligargAuthAttr-arrayen tillsammans medcontent-typeochsigning-certificate-v2. PAdES Table 1 rad d) förbjuder att kombineracommitment-type-indicationmed posten/Reasoni PDF Signature Dictionary; anroparen ansvarar för att inte ange båda.
Version 3.56.20
Tillagt
- Nya
AddPAdESDSSVRIkopplar en Signature VRI-underordbokspost till den DSS som håller på att byggas, vilket fullbordar strukturen Validation Related Information enligt ETSI EN 319 142-1 v1.2.1 klausul 5.4.2.3. Posten nycklas av den versala hexkodade SHA-1 för signaturens '/Contents-byte; dessCert/CRL/OCSP-underarrayer fylls genom att referera till motsvarande överordnade DSS-strömmar via 0-baserade index som anges som kommaseparerade listor (t.ex."0,2,5").
Ändrat
- Den underliggande
TSmartPDFDocument.AddPAdESDSSWithVRIspårar strömobjektnumren som skrivs för varje cert / CRL / OCSP och använder dem för att skriva VRI-underarrayerna som indirekta referenser tillbaka till samma strömmar som de överordnade DSS-arrayerna redan pekar på, vilket uppfyller specifikationens krav att VRI-poster delar lagring med den överordnade DSS-ordboken. Den ursprungligaAddPAdESDSS-ingångspunkten fortsätter att fungera oförändrat för anropare som inte behöver VRI. - Varje VRI-underordbok per signatur bär den valfria
/Type /VRI-markören så att verktyg som går igenom katalogen viaType-taggar kan känna igen strukturen utan att lösa om den överordnade sökvägen.
Version 3.56.19
Tillagt
- Nytt PAdES-B-T-arbetsflöde för att koppla en RFC 3161 / RFC 5816 signature-time-stamp (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) till en befintlig PAdES-B-B-signatur.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringöppnar en signerad PDF,SetPAdESSignatureTimeStampFieldnamnger fältet,GetPAdESSignatureValueHashHexreturnerar SHA-256- (eller 384 / 512-) hashen av signerarens 'signatureValueför inlämning till en TSA,GetPAdESSignatureCMSBytesexponerar den befintliga CMS-nyttolasten,SetPAdESSignatureCMSBytesaccepterar de utökade CMS-byten som anroparen sätter ihop via valfritt CMS-bibliotek, ochEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringfogar in den nya CMS i den ursprungliga/Contents-platshållaren. - Nya
SetSignProcessReserveContentsBytesvidgar/Contents-platshållaren vid initial signeringstid så att den i efterhand utökade CMS ryms utan att överskrida den ursprungliga reservationen. Typiska TSA-utfärdade TimeStampTokens lägger till 2-6 KB i SignerInfo; skicka 1024-8192 här för att lämna marginal. Utan tillräcklig reserv returnerar utökningsanropet13(utdataöversvämning).
Ändrat
BuildPAdESSignatureTimeStampAttributeär en tillståndslös hjälpare som omsluter en TSA-utfärdad TimeStampToken i den CMS Attribute SEQUENCE somSignerInfo.unsignedAttrsförväntar sig, så anropare som redan har ett CMS-bibliotek till hands kan hoppa över OID + SET-of-rördragningen.- Biblioteket levererar ingen TSA HTTP-klient; anroparen hämtar TimeStampToken (vanligen 30-50 rader TSP-begäran + HTTP POST mot t.ex. FreeTSA eller DigiCert). Windows CryptoAPI
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRskulle i princip automatisera CMS-injektionen i biblioteket, men returnerarCRYPT_E_INVALID_INDEX(0x80091008) på den frikopplade SignedData-form som PAdES skriver, så sökvägen med CMS-byte från anroparen används i stället.
Version 3.56.18
Tillagt
- Nya ASN.1-hjälpare
DER_IntegerFromLittleEndian(hanterar Win32CRYPT_INTEGER_BLOB-byteordningen) ochDER_ContextTagExplicit(omsluter en nyttolast i en konstruerad kontextspecifik tagg) kompletterarPDFlibASN1-mikrokodaren. Nya deklarationerCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTiPDFlibCryptoAPIger signeringssökvägen åtkomst till de tolkade certifikatfälten.
Ändrat
- PAdES-attributet
signing-certificate-v2bäddar nu in det valfria fältetIssuerSerialsom definieras av RFC 5035 (ESSCertIDv2). Signeringscertifikatets ' issuer Distinguished Name omsluts i ettGeneralName [4] EXPLICIT directoryNameCHOICE inutiGeneralNames, följt av certifikatets serienummer som ett ASN.1 INTEGER. Serienummerbyten kommer little-endian från Windows CryptoAPI (CRYPT_INTEGER_BLOB) och vänds till big-endian med utfyllnadsbyten för positivt heltal tillagd när den höga biten är satt, vilket matchar hur OpenSSL och BouncyCastle skriver samma fält. - Verifierare som korskontrollerar paren utfärdarnamn + serienummer mot sin kandidatlista för kedjebyggnad (särskilt EU DSS i strikt läge) hittar nu båda identifierarna i signing-cert-v2-attributet; tidigare v3.56.17-utdata gav endast
certHash-referensen.
Version 3.56.17
Tillagt
- Ny
PDFlibASN1-enhet tillhandahåller en fokuserad DER (X.690)-mikrokodare - längdprefix, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER - som används för att bygga attributvärdetSigningCertificateV2. Kodaren följer standardreglerna för base-128 OID-bågar och utelämnar det valfria fältethashAlgorithmnär det bara skulle upprepa standardvärdet SHA-256, vilket matchar vad OpenSSL och BouncyCastle skriver.
Ändrat
- Den inbyggda
ETSI.CAdES.detached-signeringssökvägen producerar nu strukturellt överensstämmande PAdES-B-B-signaturer. Biblioteket bygger CMS authenticated attributes självt -content-type(id-data) ochsigning-certificate-v2från RFC 5035 / RFC 5816 med en SHA-256-hash av signeringscertifikatet - och lämnar dem tillCryptSignMessageviargAuthAttr. När det fältet inte är NULL slutar Windows CryptoAPI att automatiskt injicera attributetsigning-timesom PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) förbjuder, så den resulterandeSignerInfobär de obligatoriska attributen och endast dessa. ApplySignaturedirigerar nuETSI.CAdES.detachedvia råbyte-sökvägen (samma som används avadbe.pkcs7.detached) i stället för att mata in en förberäknad sammanfattning. CryptoAPI beräknar numessageDigestauthenticated attribute över det faktiska signerade innehållet, vilket är vad verifierare förväntar sig.- SHA-384 och SHA-512 respekteras också när signing-certificate-v2-attributet byggs: fältet
hashAlgorithmskrivs med matchandeAlgorithmIdentifieri stället för att förlita sig på standardvärdet. SHA-1 uppgraderas tyst till SHA-256 i detta sammanhang eftersom PAdES-B-B inte tillåter SHA-1 (klausul 6.2.1).
Version 3.56.16
Tillagt
- Nya
SetSignProcessDigestAlgorithmväljer algoritmen för signeringens message-digest:1= SHA-1 (föråldrad),2= SHA-256 (modern standard),3= SHA-384,4= SHA-512,0= auto (SHA-256 för varje SubFilter utom den äldreadbe.pkcs7.sha1-sökvägen, som stannar på SHA-1 för byte-stabil bakåtkompatibilitet). ETSI EN 319 142-1 v1.2.1 §6.2.1 förbjuder MD5 och hänvisar till ETSI TS 119 312 för rekommenderade kryptografiska sviter, så PAdES-signerare bör välja SHA-256 eller starkare. - Lade till hash-hjälparna
SHA256StreamRange,SHA384StreamRangeochSHA512StreamRangebredvid den befintligaSHA1StreamRange; signeringssökvägen använder dem för att beräkna sammanfattningen av PDF ByteRange med den valda algoritmen. PKCS#7SignerInfo.digestAlgorithmOID och de faktiska hashbytena garanteras nu stämma överens (den tidigare koden skickade alltid SHA-1-sammanfattningen oavsett förhandlad algoritm).
Ändrat
TPDFlibPFXFile.SignDatatar nu enDigestAlgorithm-parameter och väljer korrekt OID för varje par (SubFilter, algoritm):2.16.840.1.101.3.4.2.1/.2/.3för SHA-256/384/512 på detached och anpassade SubFilters (RFC 5754), och matchandesha256WithRSAEncryption-familj-OID:er för den äldreadbe.pkcs7.sha1-sökvägen.
Version 3.56.15
Tillagt
- Nya
SetSignProcessDocTimeStampväxlar en signeringsprocess till PAdES Document Time-stamp-läge enligt ETSI EN 319 142-1 v1.2.1 §5.4.3. Den resulterande Signature Dictionary bär/Type /DocTimeStampoch/SubFilter /ETSI.RFC3161, utelämnar de otillåtna nycklarna/M,/Reason,/Location,/ContactInfooch/Name, och reserverar en 8192-byte (eller anroparstorlek) hexplatshållare i/Contentsför en externt hämtad RFC 3161 TimeStampToken.
Ändrat
- Passthrough aktiveras automatiskt när DocTimeStamp-läge väljs eftersom TimeStampToken kommer från en extern TSA.
SetSignProcessInfo-anrop som görs efter växling till DocTimeStamp-läge ignoreras tyst för att hålla signaturordboken specifikationsenlig. - Den befintliga automatiska injektionen av PAdES
/Extensions /ESICsom lades till i v3.56.8 täcker redan DocTimeStamp eftersom dess SubFilter börjar medETSI., så en Document Time-stamp PDF deklarerar det obligatoriska katalogtillägget utan ytterligare koppling.
Version 3.56.14
Tillagt
- Nytt API för augmentering av PAdES Document Security Store (DSS).
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringöppnar en tidigare signerad PDF,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPmellanlagrar DER-kodat valideringsmaterial, ochEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringskriver en inkrementell uppdatering som innehåller en/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>-ordbok enligt ETSI EN 319 142-1 v1.2.1 §5.4.2.2. Detta är byggstenen för att lyfta en PAdES-B-B / B-T-signatur till PAdES-B-LT långsiktig validering.
Ändrat
- DSS-processen höjer automatiskt katalogposten
/Extensions /ESICtill minstExtensionLevel 1när valideringsmaterial läggs till, vilket matchar kravet i §5.6, och slår ihop nya certifikat, CRL:er och OCSP-svar i de befintliga arrayerna/Certs//CRLs//OCSPsvid upprepade anrop så att revisioner ackumuleras i stället för att skriva över. GetPAdESDSSProcessResult/ReleasePAdESDSSProcessfullbordar livscykeln och speglar den befintligaSignProcess-API-ytan.
Version 3.56.8
Ändrat
- PAdES-baslinjeöverensstämmelse: när en signatur skapas med ett PAdES SubFilter (
ETSI.CAdES.detachedellerETSI.RFC3161) får dokumentkatalogen nu automatiskt posten/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>som krävs av ETSI EN 319 142-1 v1.2.1 §5.6. Posten läggs till genom samma inkrementella uppdatering som bär signaturen, nedgraderar aldrig en befintlig högre/ExtensionLeveloch följer indirekta/Extensions- eller/ESIC-referenser när käll-PDF:en redan lagrar dem som separata objekt. - Den Adobe-ekvivalenta tilläggsmarkör som SetSignProcessCustomSubFilter skriver för PDF-filer skapade via
TPDFlibär nu/ADBE /BaseVersion /1.7 /ExtensionLevel 8(varExtensionLevel 5), vilket matchar den alternativa deklaration som PAdES-baslinjesignaturer får använda; nivå 5 täckte endast ISO 32000-2-formulär / 3D / RichMedia-funktioner och identifierade inte faktiskt PAdES-tilläggen.
Version 3.56.13
Ändrat
- När SetPDFUAMode är aktivt och dokumentet sparas får varje L (list)-strukturelement som saknar ett explicit
ListNumbering-attribut nu automatiskt/O = List /ListNumbering = None. ISO 14289-1 §7.6 kräver att varje L-tagg deklarerar sin numreringsstil; den nyaApplyPDFUAListNumbering-fixeringen vid sparning ansluter till den befintliga familjenApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet. - Författare som bryr sig om en specifik liststil bör fortfarande anropa SetStructElemListNumbering före EndTag; den automatiska fixeringen utlöses endast när inget ListNumbering-attribut finns vid sparning, så explicita värden bevaras.
- Diagnostikmeddelandet för skrivarsidans
LIST-NO-NUMBERING:Nnoterar nu att den automatiska fixeringen maskerar problemet vid sparning, så användarna förstår både det saknade attributet och det automatiska reparationsbeteendet.
Version 3.56.12
Ändrat
- PDF/UA-1-granskningen får tre nya ISO 14289-1-kontroller.
10031rapporterar Link-kommentarer vars URI-åtgärdsordbok bär/IsMap = true(förbjudet av §7.18.5 om inte motsvarande funktionalitet tillhandahålls någon annanstans i innehållet; författare med ett legitimt IsMap-fall kan undertrycka diagnostiken själva).10032rapporterarNote-strukturelement som saknar posten/ID— §7.9 kräver att varje Note-tagg deklarerar ett unikt ID.10033rapporterar antal duplicerade par när två eller fler Note-taggar delar samma/ID-värde. - Kollisionsdetektering för Note-ID görs genom att samla ID:n i en sorterad TStringList och gå igenom intilliggande par, så en grupp med tre Notes som delar ett ID räknas som två duplicerade par.
- Kontrollen av URI-åtgärder går igenom varje sidas '
/Annots-array, filtrerar efter/Subtype /Linkoch inspekterar sedan/A /S /URIoch booleska/IsMap. Indirekta referenser avrefereras i varje steg så att utbrutna åtgärdsordböcker beter sig likadant som inline-varianter.
Version 3.56.11
Ändrat
- ISO 14289-1 §7.6 kräver att varje L (list)-strukturelement bär ett explicit
ListNumbering-attribut.10030(läsarsidan) ochLIST-NO-NUMBERING:N(skrivarsidan) rapporterar L-taggar som utelämnar det. Läsarsidans vandrare avkodar båda/A-formerna (en enda attributordbok, eller en array av ordböcker blandade med revisionsheltal) och letar efter nyckeln/ListNumberingoavsett ägare. Skrivarsidans kontroll inspekterarTPDFStructElem.Attributesefter samma namn över både den finaliserade strukturlistan och den fortfarande öppna taggstacken. - Giltiga
ListNumbering-värden enligt ISO 32000-1 Table 347 ärNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. Granskningen kontrollerar endast att nyckeln finns, inte vilket värde som valts — varje L-tagg behöver ett av dessa.
Version 3.56.10
Ändrat
- PDF/UA-1-granskningen får ISO 14289-1 §7.21.6-reglerna för TrueType-kodning.
10028rapporterar icke-symboliska TrueType-typsnitt vars/Encoding(eller/BaseEncodinginuti en Encoding-ordbok) varken ärMacRomanEncodingellerWinAnsiEncoding.10029rapporterar symboliska TrueType-typsnitt som över huvud taget bär en/Encoding-post (förbjudet av §7.21.6 fjärde stycket). - Symboliskt kontra icke-symboliskt avgörs från FontDescriptor
/Flagsbit 3 (mask4), med återanvändning av den befintligaUAFontDescriptorSymbolic-hjälparen från underklass 4. Hela §7.21.6 första stycket (det inbäddade TrueType-programmet måste innehålla matchande cmap-poster) kräver tolkning av TrueType-typsnittsprogrammet och återstår fortfarande; ordbokslagerreglerna ovan är det praktiska lager som denna granskning kan verifiera utan en TrueType-parser. - Regler för Differences-array i §7.21.6 (endast AGL-glyfnamn, närvaro av Microsoft Unicode cmap) förblir utanför omfång av samma skäl — de kräver inspektion av typsnittsprogram.
Version 3.56.9
Ändrat
- PDF/UA-1-granskningen får en fullständig ISO 14289-1 §7.18.4-kontroll.
10027rapporterar Widget-kommentarer vars/StructParentlöses via strukturträdets '/ParentTreemen inte landar på ett strukturelement med/S = Form. Den tidigare partiella kontrollen i v3.56.7 (10026) fångade bara Widgets som helt saknar/StructParent; den nya kontrollen fullbordar regeln genom att följa number-tree-pekaren och verifiera destinationstaggen. - En ny
NumberTreeLookup-hjälpare implementerar ISO 32000-1 §7.9.7 number-tree-formen (platt/Nums-rot, mellanliggande/Kidsintervallerade av/Limits). Framtida granskningar som behöver lösa/StructParents-sidposter eller/PageLabels-etiketter kan återanvända den. - Verifieringen av Widget-kommentars Form-tagg använder en tvånivåmodell: en Widget utan
/StructParentrapporteras som10026; en Widget vars/StructParentfinns men inte löses till/S = Formrapporteras som den mer specifika10027. Detta undviker dubbelräkning av samma överträdelse under båda koderna.
Version 3.56.7
Ändrat
- När SetPDFUAMode är aktivt och dokumentet sparas tas alla
TrapNet-kommentarposter nu automatiskt bort från varje sidas '/Annots-array. ISO 14289-1 §7.18.2 förbjuderTrapNet-kommentarer; den nyaApplyPDFUAStripTrapNet-fixeringen vid sparning ansluter till den befintliga familjenApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationshipså att PDF/UA-lägesdokument slutar skriva kvarvarandeTrapNettyst. - PDF/UA-1-granskningen får en partiell §7.18.4-kontroll.
10026rapporterar Widget-kommentarer som saknar/StructParent— en Widget utan/StructParentkan inte nås från strukturträdet och kan därför inte nästlas i enForm-strukturtagg. Full strukturell verifiering (att lösa/StructParentviaParentTreeoch bekräfta att föräldern/SärForm) lämnas till en uppföljande version. - Skrivarsidans GetPDFUADiagnostics får det matchande problemet
WIDGET-NO-STRUCTPARENT:N. Det befintliga TRAPNET-ANNOT-meddelandet noterar nu också att SetPDFUAMode automatiskt tar bort dessa vid sparning.
Version 3.56.6
Ändrat
- PDF/UA-1-granskningen får två ISO 14289-1 §7.4.2-kontroller för rubrikhierarki.
10024rapporterar när det första rubrikelementet i dokumentordning inte är H1 (eller H).10025rapporterar antalet överhoppade rubriknivåer i en fallande sekvens (t.ex. H1 följt av H3 utan H2). Båda kontrollerna delar en enda pre-order-genomgång av strukturträdet som avkodar de nästlade/K-formerna (en enda StructElem, array av StructElems / IndRefs / MCRs). - Skrivarsidans GetPDFUADiagnostics får det matchande problemet
FIRST-HEADING-NOT-H1, i paritet med läsaren10024. Den tidigare befintliga skrivarkontrollen HEADING-LEVEL-SKIP har nu en följeslagare som också fångar problem av typen "first heading was H2".
Version 3.56.5
Ändrat
- När SetPDFUAMode är aktivt och dokumentet senare krypteras får krypteringsbehörighetsnyckeln (
/Pi krypteringsordboken) nu automatiskt bit 10 (mask$200, "Extract text and graphics in support of accessibility") satt, även när anroparen inte inkluderadeppCanCopyAccessiTPDFExtraPermissionssom skickades till Encrypt. ISO 14289-1 §7.16 kräver att varje krypterad överensstämmande fil tillåter tillgänglighetsextraktion, och biten är annars lätt att missa. Biten är alltid säker att sätta — den ger endast ytterligare åtkomst till hjälpmedelsteknik, inte till andra extraktionsvägar. - Skrivarsidans GetPDFUADiagnostics får ett nytt
ENCRYPT-NO-ACCESS-problem som utlöses när PDFUAMode är på och krypteringsordbokens '/Pbit 10 är rensad. Detta fångar kantfallet i anropsordning där användaren först anropadeEncrypt()och först därefter SetPDFUAMode — diagnostiken säger åt användaren att anropaEncrypt()igen så att krypteringsordboken skrivs om med den korrigerade/P.
Version 3.56.4
Ändrat
- Skrivarsidans GetPDFUADiagnostics får fem nya ISO 14289-1-kontroller så att dokumentgranskningen i minnet fångar samma överträdelser som läsarsidans CheckFileCompliance ComplianceTest=2-granskning.
SUSPECTS-TRUEflaggar MarkInfo/Suspects=true (§7.1: PDF/UA-överensstämmande filer kräver Suspects=false).ROLEMAP-STANDARD-REMAP:Nflaggar AddRoleMap-anrop som skulle mappa om en standardstrukturtagg — §7.1 förbjuder ommappning av standardtaggar.DC-TITLE-MISSINGflaggar en tom XMP dc:title (separat från DOCINFO-TITLE-MISSING, som kontrollerar /Info /Title).TRAPNET-ANNOT:Nflaggar TrapNet-kommentarer (§7.18.2 förbjuder dem).ANNOT-PAGE-NO-TABS-S:Nflaggar sidor med kommentarer vars sidordbok /Tabs inte är /S (§7.18.3 kräver tabbordning via strukturträdet på dessa sidor). - Skrivarsidans och läsarsidans PDF/UA-1-granskningar är nu ungefär i paritet: varje problem som läsarsidans granskning rapporterar på en sparad fil kan också nås från diagnostiken i minnet, med undantag för respektive funktions formatkonventioner (nyradseparerad text kontra NNNNN-code-stränglista).
Version 3.56.3
Ändrat
- PDF/UA-1-granskningen får sina §7.21-typsnittskontroller.
10020rapporterar alla icke-Standard-14-typsnitt vars FontDescriptor saknarFontFile/FontFile2/FontFile3(§7.21.4.1: varje renderat typsnitt måste bädda in sitt program).10021rapporterar CIDFontType2-ättlingar utan en/CIDToGIDMap-post (§7.21.3.2).10022pekar ut Standard 14-typsnitt (Helvetica, Times, Courier, Symbol, ZapfDingbats och fet / kursiv-varianter) som refereras utan ett inbäddat program — §7.21.4 NOTE 5 gör klart att det inte finns något undantag från inbäddning för dessa typsnitt.10023rapporterar typsnitt som saknar en/ToUnicodeCMap och inte matchar undantagslistan i §7.21.7 (fördefinierade MacRoman / MacExpert / WinAnsi-kodningar, Type 0 med Adobe-GB1 / CNS1 / Japan1 / Korea1-teckensamlingar, icke-symbolisk TrueType). - Sammansatta Type 0-typsnitt inspekteras på båda lagren:
/ToUnicodepå själva Type 0-föräldraordboken, och inbäddning //CIDToGIDMappå den första efterkommande CIDFont. Type 3-typsnitt hoppar över inbäddningskontrollen (deras glyfer är inline CharProcs) men deltar fortfarande i/ToUnicode-kontrollen. - PDFlibPDFA-hjälparna för liknande typsnittsarbete delades avsiktligt inte — ett halvdussin korta rutiner (borttagning av subset-prefix, Standard-14-namntabell, FontFile-närvaro, Symbolic-flagga) dupliceras lokalt som
UA*-hjälpare så att PDF/A-granskningen kan fortsätta utvecklas utan att bryta PDF/UA, och vice versa.
Version 3.56.2
Ändrat
- PDF/UA-1-granskningen får fem ytterligare ISO 14289-1-kontroller som täcker kommentarer, inbäddade filer och valfritt innehåll.
10015rapporterar Link-kommentarer som saknar en icke-tom/Contentsalternativ beskrivning (§7.18.5) så att skärmläsare kan meddela länkmål.10016och10017flaggar FileSpec-ordböcker för inbäddade filer som saknar de obligatoriska/F- eller/UF-filnamnsnycklarna (§7.11).10018flaggar konfigurationsordböcker för valfritt innehåll som utelämnar en icke-tom/Name-textsträng (§7.10).10019flaggar konfigurationsordböcker för valfritt innehåll som innehåller den förbjudna nyckeln/AS(§7.10). - Genomgången av kommentarer per sida som redan drev TrapNet- och
/Tabs /S-kontrollerna samlar nu också Link //Contents-data i samma pass, vilket håller granskningen O(N) på objektantalet.
Version 3.56.1
Ändrat
- PDF/UA-1-granskningen får fem nya ISO 14289-1-kontroller.
10010verifierar behörigheten för tillgänglighetsextraktion (bit 10 i krypteringsnyckeln/P) på krypterade filer (§7.16).10011upptäcker dynamiska XFA-formulär via<dynamicRender>required</dynamicRender>-elementet inuti XFA XDP-paketet (§7.15).10012flaggar Form XObjects som bär en/Ref-post — referens-XObjects är förbjudna (§7.20).10013flaggarTrapNet-kommentarer (§7.18.2).10014går igenom varje sida och rapporterar alla sidor med kommentarer vars sidordbok inte anger/Tabs /S(§7.18.3) så att tabbordningen följer strukturträdet. - Alla fem nya koder flödar genom samma CheckFileCompliance + GetStringListItem-handtagspar som den föregående versionen lade till — det finns ingen ny offentlig API-yta.
Version 3.56.0
Tillagt
- Ny läsarsidesgranskning
CheckCompliancePDFUAvaliderar en extern PDF mot ISO 14289-1 (PDF/UA-1). Den kompletterar den befintliga skrivarsideskontrollen GetPDFUADiagnostics genom att acceptera valfri indata-PDF (egen utdata, skannerutdata, tredjepartsinnehåll) och lista PDF/UA-1-överträdelser på samma sätt som CheckFileCompliance redan rapporterar PDF/A-problem.
Ändrat
- CheckFileCompliance accepterar nu
ComplianceTest = 2för att köra den nya PDF/UA-1-granskningen. PDF/A-testet underComplianceTest = 1är oförändrat, och problemlistan flödar fortfarande tillbaka genom det befintliga GetStringListCount / GetStringListItem-handtagsparet. - Första versionen täcker de grundläggande PDF/UA-1-överensstämmelsegrindarna från §5 (XMP
pdfuaid:part-identifiering) och §7.1 (Catalog/Metadata-ström, tagged-PDF-markör, strukturträd, visartitelinställning, dokumentspråk, XMPdc:title,/Suspects-värde och förbudet mot ommappning av standardstrukturtaggar). Åtta diagnostikkoder utfärdas —10001till10009— vilket håller nummerområdet visuellt separerat från PDF/A00xxx-koderna. - Djupare PDF/UA-1-klausuler (säkerhet, kommentarer, XObjects, typsnittssubsetting) spåras för uppföljande patchversioner ovanpå samma granskningsramverk.
Version 3.55.6
Ändrat
- Varje nygenererat XMP-paket bär nu en xmpMM:InstanceID-egenskap i formatet uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Identifieraren genereras via Win32 CoCreateGuid och ger varje producerat dokument ett unikt, versionsoberoende fingeravtryck enligt rekommendation i ISO 19005-1 §6.7.2 (Cor2) och PDF/A-bästa praxis-guider. Icke-Windows-byggena (där XMP-paketet förblir tomt) påverkas inte.
- xmpMM-namnrymden (http://ns.adobe.com/xap/1.0/mm/) ingår nu i XMP-paketets SelectionNamespaces; nya SetXMPMM- och GenerateInstanceID-hjälpare ligger till grund för InstanceID-utskriften och ger grunden för framtida stöd för xmpMM:History / xmpMM:DerivedFrom.
- PDF/A Extension Schema-beskrivningsschemat (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) läggs inte till i denna version. Att skapa ett anpassat tilläggsschema kräver flerstegsbyggande av bag / seq / strukturerade egenskaper utöver den nuvarande SetDublinCore / SetXMPBasic-formen; arbetet spåras för en framtida version. Dokument som behöver deklarera anpassade XMP-egenskaper fortsätter att falla tillbaka till LoadFromString-sökvägen.
Version 3.55.5
Ändrat
- PDF/A-dokument får nu sina annoteringsflaggor /F normaliserade vid sparning. ISO 19005-1 §6.5.3 kräver att Print-biten är 1 och att bitarna Hidden / Invisible / NoView är 0 på varje kommentar; skrivaren tillämpar nu den masken vid sparning så att anropare inte behöver komma ihåg bitlayouten. Fallet /Subtype /Popup är undantaget — popupfönster är barn till andra kommentarer och skrivs traditionellt inte ut.
- AcroForm-flaggan /NeedAppearances tvingas nu till false vid sparning när dokumentet är i något PDF/A-läge. ISO 19005-1 §6.9 kräver att flaggan saknas eller är false; tidigare lämnade skrivaren kvar det värde som anroparen hade satt, vilket skapade dokument som bad visningsprogrammet att återskapa utseenden vid öppning och tyst bröt mot specifikationen när anroparen hade satt den till true. Korrigeringen körs även för dokument där flaggan tidigare saknades — skrivaren emitterar en explicit /NeedAppearances false för att inte lämna någon tvetydighet för valideraren.
Version 3.55.4
Ändrat
- AddStandardFont avvisar nu anrop i PDF/A-läge. ISO 19005-1 §6.3.4 upphäver PDF-referensens undantag att "Standard 14 may be unembedded": varje teckensnittsprogram i en överensstämmande fil måste vara inbäddat, och biblioteket inkluderar inte Standard 14-konturerna. Fasaden returnerar 0 tyst; anropare bör byta till AddTrueTypeFont eller AddType1Font med en riktig teckensnittsfil.
- AddTrueTypeFont uppgraderar nu tyst Embed=0 (ingen inbäddning) till Embed=1 (bädda in hela teckensnittet) när PDF/A-läge är aktivt. Den icke-inbäddade referensvägen producerade PDF som var beroende av visningsprogrammets teckensnittsreserv till en systeminstallation av Arial / Times / Courier, vilket bryter mot ISO 19005-1 §6.3.4. Befintliga anropare som begärde inbäddning (Embed=1 eller 2) påverkas inte.
- Kontrollen av efterlevnad för icke-symbolisk TrueType /Encoding (ISO 19005-1 §6.3.7 Cor2 kräver WinAnsi eller MacRoman som kodningsnamn eller BaseEncoding, utan /Differences) läggs inte till i denna version eftersom biblioteket redan emitterar /WinAnsiEncoding för icke-symboliska TrueType-delmängder, och den djupare verkställigheten skulle kräva spårning av symbolisk kontra icke-symbolisk dispatch genom delmängdsvägen. CheckCompliancePDFA 00034 / 00035 (tillagda i v3.51.0) flaggar all icke-överensstämmande utdata vid validering.
Version 3.55.3
Ändrat
- TrueType-baserade CIDFontType2-teckensnittsdictionaries innehåller nu uttryckligen /CIDToGIDMap /Identity. ISO 19005-1 §6.3.3.2 (Cor2) kräver att posten finns för varje inbäddad Type 2 CIDFont; PDF-referensen tillåter det implicita standardvärdet Identity, men PDF/A kräver ett explicit värde. Skrivaren utelämnade tidigare nyckeln helt, vilket fick veraPDF (och CheckCompliancePDFA 00033 tillagd i v3.51.0) att flagga filen. Namnet /Identity matchar GID-som-CID-layouten som skrivaren redan producerade implicit, så befintliga dokument renderas identiskt.
- FontDescriptor /CharSet (för Type 1-delmängder) och /CIDSet (för CIDFont-delmängder) förblir TODO; skrivaren skulle behöva spåra vilka glyfnamn / CIDs som hamnade i delmängden för att fylla i dem korrekt. CheckCompliancePDFA 00031 och 00032 (också tillagda i v3.51.0) flaggar frånvaron så att användare ser problemet vid validering.
Version 3.55.2
Ändrat
- AddImageDirectFromString avvisar nu PDF/A-inkompatibla filter vid ingångspunkten. Att skicka Filter = 'LZWDecode' avvisas för varje PDF/A-del (ISO 19005-1 §6.1.10 plus motsvarande ISO 19005-2 / -3-regler). Att skicka Filter = 'JBIG2Decode' eller 'JPXDecode' avvisas för PDF/A-1 (lägen 1 och 2). PDF/A-2 och PDF/A-3 tillåter JPXDecode enligt ISO 19005-2 §6.2.8.3 med begränsningar i underspecifikationen (antal färgkanaler, enhetligt bitdjup, METH/APPROX-krav) som spärren på skrivarsidan inte verkställer — anropare i dessa lägen måste fortfarande säkerställa att JPEG 2000-strömmen är överensstämmande. Fasaden returnerar 0 tyst när ett förbjudet filter begärs.
- TIFF-, PNG-, JPEG- och JPEG 2000-indata som läses in via AddImageFromFile / AddImageFromStream påverkas inte: importeraren dekomprimerar källbyte och kodar om med FlateDecode (eller DCTDecode för JPEG-nyttolaster), så LZW-indata sprids aldrig till utdatafiltrets kedja. CheckCompliancePDFA-valideraren som lades till i v3.50.0 (00004) och v3.52.0 (00022, 00023) ger ett andra försvar vid validering för varje indirekt väg som fortfarande släpper in ett förbjudet filter i utdata.
Version 3.55.1
Ändrat
- AddLinkToHideField avvisar nu anrop i PDF/A-läge. Den föregående versionen lämnade en kommentar som hävdade att åtgärden var PDF/A-kompatibel, men ISO 19005-1 Cor2 lade till /Hide i listan över förbjudna åtgärder (§6.6.1), och ISO 19005-2 / -3 ärver begränsningen. Fasaden returnerar 0 tyst när den anropas i PDF/A-läge, i linje med AddLinkToJavaScript och AddLinkToImportData.
- AddSWFAnnotationFromFile avvisar nu anrop i PDF/A-läge. SWF- / RichMedia-annoteringar kapslar in Flash-media som är förbjudna av ISO 19005-1 §6.5.2 (inga Movie- / Sound-undertyper) och förstärks av ISO 19005-2 §6.3.1 (ingen 3D / Sound / Screen / Movie). Fasaden returnerar 0 tyst.
- AddEmbeddedFile och AddLinkToEmbeddedFile avvisar nu anrop i PDF/A-1- och PDF/A-2-lägen. ISO 19005-1 §6.1.11 förbjuder /EF, och ISO 19005-2 §6.8 tillåter endast inbäddade PDF/A-filer; i stället för att verifiera den rekursiva PDF/A-heten hos den bifogade nyttolasten vägrar skrivaren helt enkelt anropet i dessa lägen. PDF/A-3 (SetPDFAMode 5 eller 6) förblir tillåtet — se v3.55.0 för automatisk injicering av /AFRelationship.
- SetOpenActionMenu avvisar nu MenuItem-värden utanför vitlistan {NextPage, PrevPage, FirstPage, LastPage} när dokumentet är i PDF/A-läge. ISO 19005-1 §6.6.1 begränsar namngivna åtgärder till den uppsättningen, så tidigare producerade API:t tyst icke-överensstämmande Find- / Print- / FullScreen Open-Action-dictionaries som veraPDF skulle avvisa.
- NewOptionalContentGroup avvisar nu anrop i PDF/A-1-lägen (SetPDFAMode 1 eller 2). ISO 19005-1 §6.1.13 förbjuder Catalog-nyckeln /OCProperties. PDF/A-2 (lägen 3/4) och PDF/A-3 (lägen 5/6) tillåter valfritt innehåll med begränsningarna i respektive §6.9, så spärren utlöses endast för PDF/A-1.
Version 3.55.0
Ändrat
- PDF/A-3-dokument får nu automatiskt en /AFRelationship-post på varje inbäddad fil. Tidigare kunde en PDF/A-3-fil som skapats med biblioteket misslyckas vid validering eftersom ISO 19005-3 Annex E, Table E.1 kräver AFRelationship på varje inbäddad filspecifikation. Skrivaren injicerar nu det konfigurerade standardvärdet ('Unspecified' direkt från start) i varje FileSpec-dictionary som saknar posten vid sparning, vilket speglar den automatiska PDF/UA AFRelationship-injicering som introducerades tidigare. Endast PDF/A-3-lägen (SetPDFAMode 5 = PDF/A-3b eller 6 = PDF/A-3a) utlöser den automatiska injiceringen; PDF/A-1 och PDF/A-2 avvisar fortfarande inbäddade filer helt enligt ISO 19005-1 §6.1.11 och ISO 19005-2 §6.8.
- SetPDFA3DefaultAFRelationship är ett nytt API som åsidosätter standardvärdet som skrivaren skriver när en inbäddad fil saknar en /AFRelationship-post. Accepterar värdena från ISO 19005-3 Table E.1: 'Source' (den inbäddade filen är källmaterialet som producerade PDF-innehållet), 'Data' (filen är strukturerade data bakom en visuell tabell eller ett diagram), 'Alternative' (en alternativ återgivning, till exempel en ljudversion), 'Supplement' (en kompletterande representation, till exempel en MathML-form av en ekvation), 'Unspecified' (relationen kan inte beskrivas av ovanstående), eller något registrerat andraklassnamn. Tom sträng återställer till 'Unspecified'. Åsidosättningar per fil är fortsatt tillgängliga via SetEmbeddedFileAFRelationship.
- De nya API:erna exponeras i Delphi-fasaden som TPDFlib.SetPDFA3DefaultAFRelationship och via DLL som DLSetPDFA3DefaultAFRelationship (PWideChar) och DLSetPDFA3DefaultAFRelationshipA (PAnsiChar).
Version 3.54.0
Ändrat
- LoadOutputIntentProfile är ett nytt API som ersätter den medföljande sRGB OutputIntent-profilen med en extern ICC-profil inläst från disk. Krävs vid produktion av PDF/A-dokument i färgrymderna DeviceCMYK eller DeviceGray, eftersom biblioteket endast levereras med en sRGB-profil. Typisk användning är att först anropa SetPDFAMode (som initierar OutputIntent-skelettet) och sedan LoadOutputIntentProfile('C:\\path\\to\\FOGRA39.icc', 'DeviceCMYK') för att byta profilbyte och tagga dokumentet med den nya färgrymden. Returnerar 1 vid framgång, 0 om filen inte hittas eller färgrymden är okänd. Exponeras i Delphi-fasaden som TPDFlib.LoadOutputIntentProfile och via DLL som DLLoadOutputIntentProfile (PWideChar-form) och DLLoadOutputIntentProfileA (PAnsiChar-form). ISO 19005-1 §6.2.2 tillåter valfri registrerad ICC-profil i DestOutputProfile-strömmen.
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep och SetTextColorSep lyckas nu i PDF/A-läge när dokumentets OutputIntent-profil är DeviceCMYK. Tidigare avvisade dessa API:er varje anrop i PDF/A-läge oavsett OutputIntent, vilket hindrade överensstämmande CMYK-dokument från att produceras. Spärren är nu PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK', vilket matchar regeln i ISO 19005-1 §6.2.3.3 att DeviceCMYK är tillåtet när OutputIntent använder en CMYK-profil, och ISO 19005-1 §6.2.3.4 som tillåter Separation-alternativ vars basfärgrymd också är överensstämmande.
- SetTextShader lyckas nu i PDF/A-läge när OutputIntent-profilen är antingen DeviceRGB eller DeviceCMYK. Shaders i sig är inte förbjudna av PDF/A; valideraren (läsarsidan) verifierar att shaderns interna färgrymd matchar OutputIntent. Det tidigare strikta avvisningsbeteendet förhindrade överensstämmande användning av shaders.
- Upplåsningen för CMYK / Separation / Shader beror på OutputIntentColorSpace-taggen som sätts av AddOutputIntent och LoadOutputIntentProfile (introducerad i v3.53.0). Att anropa SetPDFAMode utan LoadOutputIntentProfile behåller färgrymden som DeviceRGB (den medföljande sRGB-profilen), så CMYK-anrop avvisas fortfarande som standard — det nya beteendet är opt-in via LoadOutputIntentProfile.
Version 3.53.0
Ändrat
- OutputIntent-dictionaryn innehåller nu de fullständiga PDF/A-skelettfält som rekommenderas av ISO 19005-1 §6.2.2 och Adobe Acrobat preflight: /OutputCondition (läsbar beskrivning av färgvillkor), /Info (lång identifieringstext) och /RegistryName (register-URL, standard är http://www.color.org). Värdena är som standard "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" för äldre anropsplatser med ett argument; den nya AddOutputIntent-överlagringen tar de fyra anpassade fälten direkt så att anropare kan fylla i dem för sina egna färgvillkor.
- AddOutputIntent får en ny överlagring med fem argument: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). Den äldre formen med ett argument fortsätter att fungera oförändrat; den delegerar nu till den nya överlagringen med sRGB-standardvärdena. Argumentet ColorSpace väljer också komponentantalet /N som skrivs in i den inbäddade ICC-profildictionaryn (3 för DeviceRGB, 4 för DeviceCMYK, 1 för DeviceGray); själva den inbäddade profilen förblir den medföljande sRGB-strömmen tills det kommande LoadOutputIntentProfile-API:t levereras i v3.54.0.
- TPDFDocument exponerar OutputIntentColorSpace som en läs-/skrivbar egenskap som spårar färgrymden för det senaste AddOutputIntent-anropet. Detta blir spärrvillkoret för begränsningarna på skrivarsidan för CMYK / Separation / Shader i v3.54.0, där färg-API:er som idag avvisar varje anrop i PDF/A-läge endast avvisar när färgrymden inte matchar OutputIntent.
Version 3.52.0
Ändrat
- CheckCompliancePDFA granskar nu annoteringar, grafikstatus, åtgärder och form XObjects, vilket fullbordar PDF/A-validerarens täckning på läsarsidan av ISO 19005-1-kapitel 6.2-6.6 och motsvarande differentialregler för PDF/A-2/-3. Valideraren rapporterar 14 nya problemklasser (00050-00067): förbjudna annoteringsundertyper (00050; ISO 19005-1 §6.5.2 förbjuder FileAttachment / Sound / Movie för PDF/A-1, och ISO 19005-2 §6.3.1 förbjuder 3D / Sound / Screen / Movie för PDF/A-2 och PDF/A-3), annotering /CA annat än 1.0 (00051; §6.5.3), annotering /F saknas eller med Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052; §6.5.3, med /Subtype /Popup undantagen), annotering /AA (00054; §6.6.2), annoteringsutseendedict med andra nycklar än /N eller icke-överensstämmande /N-värde (00055; §6.5.3 Cor2), Widget-annotering med /A (00056; §6.9), ExtGState /TR (00058; §6.2.8), ExtGState /TR2 annat än /Default (00059; §6.2.8), och endast i PDF/A-1: ExtGState /SMask annat än /None (00061; §6.4), /BM annat än Normal eller Compatible (00062; §6.4), /CA eller /ca annat än 1.0 (00063; §6.4).
- Granskningen av åtgärder överallt (00064, 00065) ersätter OpenAction-only-kontrollen från v3.50.0 med en fullständig genomsökning som flaggar förbjudna /S-åtgärdsvärden (Launch, Sound, Movie, ResetForm, ImportData, JavaScript, Hide, SetState, NOP, Trans, GoTo3DView, Rendition, SetOCGState) och namngivna åtgärder vars /N ligger utanför {NextPage, PrevPage, FirstPage, LastPage}, oavsett var åtgärden finns (annotering /A, widget /A, outline /A, catalog /OpenAction osv.). ISO 19005-1 §6.6.1.
- XObject-granskningen (00066, 00067) rapporterar PostScript- och Reference XObjects samt förbjudna nycklar på Form XObjects (/OPI, /PS, /Subtype2 = /PS) och Image XObjects (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
Version 3.51.0
Ändrat
- CheckCompliancePDFA granskar nu efterlevnad för teckensnitt och färgrymder utöver de strukturella kontroller som lades till i v3.50.0. Valideraren rapporterar nio nya problemklasser: minst ett teckensnittsprogram är inte inbäddat (00030; ISO 19005-1 §6.3.4 kräver att varje teckensnittsprogram, inklusive Standard 14-ersättningar, är inbäddat), Type 1-delmängd saknar /CharSet i sin FontDescriptor (00031; §6.3.5), CIDFont-delmängd saknar /CIDSet (00032; §6.3.5), CIDFontType2 saknar /CIDToGIDMap (00033; §6.3.3.2 Cor2), icke-symbolisk TrueType med en icke-överensstämmande /Encoding (00034; §6.3.7 Cor2 kräver WinAnsi/MacRoman direkt eller som BaseEncoding, utan /Differences), symbolisk TrueType som fortfarande innehåller /Encoding (00035; §6.3.7 Cor2), minst ett teckensnitt saknar /ToUnicode i PDF/A-Na- eller PDF/A-Nu-dokument (00036; §6.3.8 fyrklassundantag tillämpat), ICCBased-färgrymd som inte bäddar in sin profilström (00037; §6.2.3.2), och en fil som använder både DeviceRGB och DeviceCMYK (00038; §6.2.3.3 förbjuder blandningen).
- Kontrollen /ToUnicode (00036) är begränsad till överensstämmelsenivåerna A och U eftersom endast dessa nivåer kräver Unicode-mappning enligt ISO 19005-1 §6.3.8 och ISO 19005-2 §6.2.11.7. Level B-filer (PDF/A-1b, PDF/A-2b, PDF/A-3b) flaggas inte. Fyrklassundantaget känner igen fördefinierade kodningar (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), Standard 14 Type 1 BaseFonts som proxy för Adobe Standard Latin- / Symbol-glyfnamnsteckensnitt, och Type 0-teckensnitt vars underordnade CIDFont använder registren Adobe-GB1, Adobe-CNS1, Adobe-Japan1 eller Adobe-Korea1.
- Teckensnittsgranskningen går igenom varje Font-dictionary, klassificerar den efter Subtype (Type1, MMType1, TrueType, Type3, Type0 med dess underordnade CIDFontType0 eller CIDFontType2) och skickar sedan vidare till relevanta kontroller. Type 0-kompositteckensnitt delegerar inbäddnings- och delmängdskontroller till sin underordnade CIDFont samtidigt som /ToUnicode behålls på Type 0-omslaget. Delmängdsdetektering använder standardkonventionen med ett prefix på sex versaler.
Version 3.50.0
Ändrat
- CheckCompliancePDFA rapporterar nu 15 ytterligare PDF/A-avvikelser som valideraren tidigare missade: saknad trailer /ID-array (00013), saknad Document Catalog /Metadata-ström (00014), /Filter tillämpat på /Metadata-strömmen (00015), stream dictionaries som refererar till externa filer via /F, /FFilter eller /FDecodeParms (00016), inbäddade filer deklarerade via /EF i valfri filspecifikationsdictionary eller via Name tree-posten /EmbeddedFiles i PDF/A-1-dokument (00017, 00018), /OpenAction som pekar på en förbjuden åtgärdstyp (00019), /AA additional-action-dictionaries i Document Catalog eller på valfri Page (00020, 00021), JBIG2Decode- eller JPXDecode-filter i PDF/A-1-dokument (00022, 00023), Crypt-filter vars /Name inte är /Identity (00024), /Requirements i Document Catalog (00025), /Perms med andra nycklar än /UR3 och /DocMDP (00026), och /AcroForm /NeedAppearances satt till true (00027). Valideraren flaggar nu förbjudna Catalog /OpenAction-åtgärdstyper (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) och named-action /N-värden utanför tillåtelselistan {NextPage, PrevPage, FirstPage, LastPage} enligt ISO 19005-1 §6.6.1.
- Filterspecifika kontroller (JBIG2Decode, JPXDecode) och kontroller av inbäddade filer (/EF, /EmbeddedFiles) förblir begränsade till PDF/A-1 eftersom ISO 19005-2 §6.2.8.3 och §6.8 uttryckligen lättar på dessa begränsningar för PDF/A-2 och PDF/A-3. Dokumentstrukturkontroller (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) gäller för varje PDF/A-del.
Åtgärdat
- PDFAID-parsern accepterar U-överensstämmelsesuffixet (PDF/A-2U, PDF/A-3U) tillsammans med de befintliga A- och B-varianterna, så CheckCompliancePDFA ger inte längre en felaktig varning "00005 PDFA Mark NOT Found or invalid" när den skannar en PDF/A-2U- eller PDF/A-3U-fil som producerats av ett annat verktyg. Unicode-mappningsnivåerna för överensstämmelse som lades till i ISO 19005-2:2011 känns nu igen av valideraren.
Version 3.49.0
Ändrat
- AddLinkToImportData skapar en Link-annotering vars åtgärd är en PDF-import-data-åtgärd (/S /ImportData) som fyller dokumentets AcroForm-fält från en extern FDF-fil när användaren klickar på länken (ISO 32000-1 §12.6.4.8, Table 198). Parametern FileName refereras som en filespec-dictionary, med samma regler för sökvägsnormalisering som används av AddLinkToFile / AddLinkToFileEx (bakåtsnedstreck konverteras till framåtsnedstreck enligt ISO 32000-1 §7.11.2.1). Options bit 0 växlar den synliga ramen och bitarna 1–3 väljer länkens markeringsläge (Invert, Outline, Push), i linje med befintliga AddLinkTo*-konventioner. PDF 1.4 eller senare. INTE tillåtet i PDF/A eftersom åtgärden refererar till en extern resurs; fasaden returnerar tyst 0 när den anropas i PDF/A-läge. Exponeras i Delphi-biblioteket och DLL-gränssnittet som DLAddLinkToImportData / DLAddLinkToImportDataA (PWideChar- och PAnsiChar-form).
Version 3.48.0
Ändrat
- AddLinkToHideField skapar en Link-annotering vars åtgärd är en PDF-hide-åtgärd (/S /Hide) som växlar synligheten för ett eller flera AcroForm-fält när användaren klickar på länken (ISO 32000-1 §12.6.4.10, Table 196). FieldNames accepterar ett eller flera fullständigt kvalificerade fältnamn separerade med kommatecken, semikolon eller radbrytningar; ett enskilt namn emitterar /T som en textsträng och två eller flera namn emitterar /T som en array, båda formerna tillåtna av specifikationen. HideFlag väljer synlighetsriktning: ett värde som inte är noll döljer de listade fälten (/H true) och noll visar dem (/H false). Options bit 0 växlar den synliga ramen och bitarna 1–3 väljer länkens markeringsläge (Invert, Outline, Push), i linje med AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 eller senare. PDF/A-kompatibel eftersom ingen extern resurs refereras. Exponeras i Delphi-biblioteket och DLL-gränssnittet som DLAddLinkToHideField / DLAddLinkToHideFieldA (PWideChar- och PAnsiChar-form).
Version 3.47.0
Ändrat
- AddLinkToNamedAction skapar en Link-annotering vars åtgärd är en PDF-namngiven åtgärd (/S /Named) som utlöser ett av de fyra standardiserade navigeringskommandona för visningsprogram definierade i ISO 32000-1 §12.6.4.11, Table 194: NextPage, PrevPage, FirstPage och LastPage. Parametern NamedActionType väljer kommandot (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); värden utanför detta intervall faller tillbaka till NextPage så att skrivaren alltid emitterar ett specifikationsöverensstämmande /N-namn. Options bit 0 växlar den synliga ramen och bitarna 1–3 väljer länkens markeringsläge (Invert, Outline, Push), i linje med befintliga AddLinkToWeb- / AddLinkToPage-konventioner. Annoteringen kräver PDF 1.1 eller senare och är kompatibel med PDF/A eftersom ingen extern resurs refereras. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
Version 3.46.1
Ändrat
- AddCaretAnnotation skapar en caret-markup-annotering (PDF /Subtype /Caret) vid den angivna rektangeln och markerar en position på sidan där text eller innehåll har infogats, utelämnats eller på annat sätt behöver granskarens uppmärksamhet. Stöder två symboltyper (None och Paragraph) via SymbolType (0 / 1), konfigurerbar färg, opacitet, titel, innehåll samt tidsstämplar för skapande/ändring. Definierad i ISO 32000-1 §12.5.6.11. PDF 1.5 eller senare. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
- Denna post slutför återfyllnaden av geometriska annoteringar som började med v3.44.0 Square+Circle. PDFlibPas skapar nu Text-, Stamp-, FreeText-, TextMarkup- (Highlight/Underline/Squiggly/StrikeOut), Square-, Circle-, Line-, Polygon-, PolyLine-, Ink- och Caret-annoteringar, utöver befintligt stöd för Link, FileAttachment, SVG, U3D och SWF.
Version 3.46.0
Ändrat
- AddInkAnnotation skapar en ink markup-annotering (PDF /Subtype /Ink) som representerar handskrivna streck eller frihandsmarkeringar ritade på sidan. Streck anges som en enda sträng där flera streck separeras med '|' eller radbrytning, och inom varje streck följer koordinatparen samma blankstegs-/komma-/semikolon-/tabbformat som används av AddPolygonAnnotation. Exempelvis beskriver "100 100 110 105 120 110 | 200 200 210 205" två separata streck. Stöder konfigurerbar rambredd, bläckfärg, opacitet, titel, innehåll och tidsstämplar. Definierad i ISO 32000-1 §12.5.6.13. PDF 1.3 eller senare. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
- Varje streck måste innehålla ett jämnt antal värden (minst fyra), annars returnerar anropet 0 utan att någon annotering skrivs. /Rect beräknas automatiskt från den kombinerade utbredningen av alla streck plus en liten utfyllnad så att strecken förblir inom annoteringens begränsningsruta.
Version 3.45.0
Ändrat
- AddPolygonAnnotation skapar en sluten polygon-markup-annotering (PDF /Subtype /Polygon) med hörn angivna som en sträng av koordinatpar separerade med blanksteg, kommatecken, semikolon eller tabbar (t.ex. "100 100 200 100 200 200 100 200"). Stöder konfigurerbar rambredd, ramfärg, valfri inre fyllningsfärg, opacitet, titel, innehåll och tidsstämplar. Definierad i ISO 32000-1 §12.5.6.9. PDF 1.5 eller senare. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
- AddPolyLineAnnotation skapar en öppen polyline-markup-annotering (PDF /Subtype /PolyLine) med samma vertexsträngformat och konfigurerbara ändlinjestilar vid varje ändpunkt (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Definierad i ISO 32000-1 §12.5.6.9. PDF 1.5 eller senare. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
- Båda annoteringarna kräver minst två vertexpunkter (fyra tal) och ett jämnt totalt antal tal; anropet returnerar 0 om vertexsträngen inte kan tolkas som en giltig lista med par. /Rect beräknas från vertexutbredningen plus utfyllnad proportionell mot rambredden så att änddekorationer förblir synliga.
- Båda annoteringarna höjer dokumentversionen till PDF 1.5 när de emitteras under ett lägre minimi-versionslås.
Version 3.44.1
Ändrat
- AddLineAnnotation skapar en linje-markup-annotering (PDF /Subtype /Line) mellan två ändpunkter, med konfigurerbar rambredd, linjefärg, valfri inre fyllningsfärg, ändlinjestilar för båda ändar (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), opacitet, titel, innehåll samt tidsstämplar för skapande/ändring. Definierad i ISO 32000-1 §12.5.6.7. PDF 1.3 eller senare. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
- Annoteringens /Rect beräknas från de två ändpunkterna plus en utfyllnad proportionell mot rambredden så att änddekorationer förblir inom annoteringens begränsningsruta.
Version 3.44.0
Ändrat
- AddSquareAnnotation skapar en rektangel-markup-annotering (PDF /Subtype /Square) vid den angivna rektangeln, med konfigurerbar rambredd, ramfärg, valfri inre fyllningsfärg, opacitet, titel, innehåll samt tidsstämplar för skapande/ändring. Definierad i ISO 32000-1 §12.5.6.8. PDF 1.3 eller senare. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
- AddCircleAnnotation skapar en ellips-markup-annotering (PDF /Subtype /Circle) inskriven i den angivna rektangeln, med samma konfigurerbara ram, fyllning, opacitet, titel, innehåll och tidsstämplar som AddSquareAnnotation. Definierad i ISO 32000-1 §12.5.6.8. PDF 1.3 eller senare. Tillgänglig i Delphi-biblioteket och DLL-gränssnitten.
- Båda nya annoteringarna höjer automatiskt dokumentversionen till PDF 1.3 när de emitteras under ett lägre minimi-versionslås och emitterar en standarduppsättning fält för markup-annotering (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P) så att befintliga granskningsflöden i Acrobat, Foxit och Edge kan redigera dem efter skapande.
Version 3.43.0
Ändrat
- SetStructElemSpaceBefore och SetStructElemSpaceAfter sätter attributen /SpaceBefore och /SpaceAfter (Layout-ägare) på det för närvarande öppna strukturelementet och uttrycker avstånd före och efter blocknivåelement i punkter. Definierat i ISO 32000-1 §14.8.5.4.2 Table 340. Tillgängligt i Delphi-biblioteket, ActiveX (Dispids 73008051/73008052) och DLL-gränssnitten.
- SetStructElemStartIndent och SetStructElemEndIndent sätter attributen /StartIndent och /EndIndent (Layout-ägare) och uttrycker indrag från skrivriktningsmedvetna start- och slutkanter av innehållsrektangeln i punkter. Definierat i ISO 32000-1 §14.8.5.4.2 Table 340. Tillgängligt i Delphi-biblioteket, ActiveX (Dispids 73008053/73008054) och DLL-gränssnitten.
- SetStructElemColor sätter attributet /Color (Layout-ägare) som en RGB-triplett (varje komponent 0.0-1.0), vilket beskriver elementets förgrundsfärg för reflow-motorer och efterföljande färgkontrastkontroller. Definierat i ISO 32000-1 §14.8.5.4.2 Table 340. Tillgängligt i Delphi-biblioteket, ActiveX (Dispid 73008055) och DLL-gränssnitten.
Åtgärdat
- Korrigerade ett serialiseringsfel i BuildStructElemDictRef: numeriska attributvärden med en enda token (såsom SpaceBefore, SpaceAfter, StartIndent, EndIndent) skrevs som PDF-namn i stället för PDF-nummer. Korrigeringen gäller både grenar med en ägare och flera ägare.
Version 3.42.0
Ändrat
- Tre nya efterlevnadskontroller har lagts till: kod 00006 flaggar krypterade dokument (kryptering är förbjuden i alla PDF/A-versioner); kod 00007 flaggar dokument som saknar en OutputIntents-post i katalogen (krävs av alla PDF/A-versioner); koderna 00011 och 00012 flaggar dokument som saknar MarkInfo eller StructTreeRoot när överensstämmelsenivån är -a (tillgänglighet).
Åtgärdat
- CheckCompliancePDFA validerar nu korrekt alla sex PDF/A-lägen (1a, 1b, 2a, 2b, 3a, 3b). PDFAID-kontrollen (kod 00005) accepterar någon av de sex giltiga XMP-markörerna i stället för endast '1B'. Versionsgränskontrollen (00002) använder 1.4 för PDF/A-1 och 1.7 för PDF/A-2 och PDF/A-3.
- OCProperties-kontrollen (kod 00003) är nu villkorad: den gäller endast PDF/A-1-dokument, där valfritt innehåll (lager) är förbjudet. PDF/A-2 och PDF/A-3 tillåter lager och flaggas inte längre.
Version 3.41.0
Ändrat
- PDF/A-läget verkställer nu förbjudna operationer på API-nivå. När ett PDF/A-läge är aktivt (något av lägena 1-6) returnerar anrop till SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK eller något annat CMYK-/Separation-/Shader-API 0 och har ingen effekt, i linje med PDF/A's krav på en enda sRGB output intent.
- Transparens är förbjuden i PDF/A-1 (lägen 1 och 2): SetTransparency, SetBlendMode och SetPageTransparencyGroup returnerar 0 och är no-ops när det aktiva läget är 1 eller 2. PDF/A-2 och PDF/A-3 (lägen 3-6) tillåter begränsad transparens och är inte begränsade.
- JavaScript-åtgärder är förbjudna i alla PDF/A-lägen (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript och AddLinkToJavaScript returnerar alla 0 och är no-ops när något PDF/A-läge är aktivt. ISO 19005-1 §6.6.1 förbjuder uttryckligen JavaScript i PDF/A-dokument.
- API:er för filbilagor (EmbedFile, AddFileAttachment) blockeras i PDF/A-1- och PDF/A-2-lägen (1-4). De förblir funktionella i PDF/A-3 (lägen 5 och 6), som uttryckligen tillåter godtyckliga inbäddade filer.
Version 3.40.0
Tillagt
- SetPDFAMode stöder nu överensstämmelsenivåerna PDF/A-2 och PDF/A-3. Skicka NewMode=3 för PDF/A-2b, 4 för PDF/A-2a, 5 för PDF/A-3b eller 6 för PDF/A-3a. PDF/A-2 riktar sig mot PDF 1.7 och tillåter lager, interaktiva formulär, JPEG2000-bilder och begränsad transparens. PDF/A-3 utökar PDF/A-2 genom att tillåta godtyckliga inbäddade filer (valfri MIME-typ). Alla -a-varianter skriver automatiskt /MarkInfo och de taggade PDF-strukturmarkörer som krävs av tillgänglighetsnivån.
Ändrat
- GetInformation(201) returnerar '1' till '6' enligt det aktiva PDF/A-läget, i linje med den nya lägesnumreringen.
Åtgärdat
- Korrigerat: SetPDFAMode(1) (PDF/A-1a) var tidigare en no-op på grund av ett internt routningsfel som introducerades i v3.20.0. Den skriver nu korrekt /MarkInfo och /OutputIntents och sätter XMP pdfaid:part=1/conformance=A.
Version 3.39.0
Ändrat
- SetStructElemWritingMode sätter attributet /WritingMode (Layout-ägare) på det för närvarande öppna strukturelementet. Giltiga värden är LrTb (vänster till höger, standard för latinska skriftsystem), RlTb (höger till vänster, för arabiska och hebreiska) och TbRl (uppifrån och ned, höger till vänster, för traditionell vertikal CJK-text). Definierat i ISO 32000-1 §14.8.5.4.2 Table 340. Tillgängligt i Delphi-biblioteket, ActiveX (Dispid 73008049) och DLL-gränssnitten.
- SetStructElemListNumbering sätter attributet /ListNumbering (List-ägare) på det för närvarande öppna strukturelementet. Värden som stöds inkluderar None, Disc, Circle, Square (oordnade markörer) och Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (ordnad numrering). Attributet sätts på L-elementet (lista) och gör det möjligt för hjälpmedelsteknik att meddela listtypen korrekt. Definierat i ISO 32000-1 §14.8.5.3.2 Table 336. Tillgängligt i Delphi-biblioteket, ActiveX (Dispid 73008050) och DLL-gränssnitten.
Version 3.38.0
Ändrat
- SetStructElemColSpan sätter attributet /ColSpan (Table-ägare) på det för närvarande öppna strukturelementet och anger hur många kolumner cellen spänner över. Definierat i ISO 32000-1 §14.8.5.7.2 Table 337. Tillgängligt i Delphi-biblioteket, ActiveX (Dispid 73008047) och DLL-gränssnitten.
- SetStructElemRowSpan sätter attributet /RowSpan (Table-ägare) på det för närvarande öppna strukturelementet och anger hur många rader cellen spänner över. Definierat i ISO 32000-1 §14.8.5.7.2 Table 337. Tillgängligt i Delphi-biblioteket, ActiveX (Dispid 73008048) och DLL-gränssnitten.
- Båda funktionerna är bekvämlighetsomslag motsvarande att anropa AddTagAttribute med Owner='Table' och respektive attributnamn. De kompletterar SetStructElemScope för fullständigt beskrivna tabellceller i komplexa tabeller eller tabeller med spännande rubriker.
Version 3.37.2
Ändrat
- GetPDFUADiagnostics rapporterar nu FORM-NO-TOOLTIP:N när N interaktiva formulärfält (Widget-annoteringar) saknar en TU-post (verktygstips / tillgängligt namn). ISO 14289-1 §7.18.4 kräver att alla interaktiva formulärfält har en TU-post så att hjälpmedelsteknik kan meddela fältets syfte för användaren när fältet får fokus. /TU är det tillgängliga namnet som skärmläsare läser upp; det skiljer sig från /T, som är det partiella fältnamnet som används för programmatisk åtkomst och formulärinlämning.
Version 3.37.1
Ändrat
- GetPDFUADiagnostics rapporterar nu LIST-STRUCT:N när N LI- eller LBody-strukturelement förekommer utanför sitt obligatoriska överordnade element. ISO 32000-1 §14.8.4.4 kräver att LI är ett direkt barn till L (lista) och att LBody är ett direkt barn till LI (listpost). Felaktig listnästling hindrar hjälpmedelsteknik från att korrekt traversera och meddela listinnehåll, och kan orsaka valideringsfel för dokumentstruktur i PDF/UA-1-validerare.
Version 3.37.0
Ändrat
- BeginTagEx2 är ett nytt API som öppnar ett strukturelement och sätter alla huvudsakliga elementegenskaper i ett enda anrop. Utöver parametrarna TagType, AltText, ActualText och Lang i BeginTagEx accepterar BeginTagEx2 Title (/T, för Tags-navigationspanelen), ElemID (/ID, unik elementidentifierare) och Expansion (/E, fulltext för en förkortning eller akronym). Att skicka en tom sträng för någon av dessa tre ytterligare parametrar motsvarar att utelämna motsvarande setter. BeginTagEx2 minskar mallkod för välbeskrivna element — i stället för att anropa BeginTagEx följt av SetStructElemTitle, SetStructElemID och SetStructElemExpansion separat kan alla sju egenskaper sättas i ett anrop. Funktionen är tillgänglig i Delphi-biblioteket, ActiveX (Dispid 73008046) och DLL-gränssnitten.
Version 3.36.1
Ändrat
- GetPDFUADiagnostics rapporterar nu TABLE-TH-NO-SCOPE:N när N TH-strukturelement (tabellrubrikceller) saknar ett Scope-attribut. ISO 32000-1 §14.8.4.3.4 Table 337 definierar Scope (Row, Column eller Both) som attributet som beskriver vilka dataceller en rubrikcell gäller för. Utan det kan skärmläsare och annan hjälpmedelsteknik inte tillförlitligt koppla rubrikceller till dataceller i komplexa tabeller eller tabeller med flera rubriker, vilket krävs av ISO 14289-1 §7.5. Anropa SetStructElemAttr('Table','Scope', 'Column') (eller 'Row' / 'Both') direkt efter att varje TH-element taggats.
Version 3.36.0
Ändrat
- SetStructElemExpansion är ett nytt API som sätter posten /E (expansionstext) på det för närvarande öppna strukturelementet (ISO 32000-1 §14.9.5). Expansionstexten är den fullständigt utskrivna formen av en förkortning eller akronym som finns i elementet — t.ex. "World Wide Web" för en Span vars text är "WWW". Skärmläsare läser upp expansionen i stället för att försöka uttala de förkortade tecknen, vilket är avgörande för tillgängligheten i tekniskt och vetenskapligt innehåll. PDF/UA-1 (ISO 14289-1 §7.2) kräver att naturligt språk kan fastställas entydigt; /E är standardmekanismen för förkortningar och akronymer. Funktionen är tillgänglig i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.35.1
Ändrat
- GetPDFUADiagnostics rapporterar nu DOCINFO-TITLE-MISSING när dokumentinformationsdictionaryns /Title-post saknas eller är tom. PDF/UA-1 (ISO 14289-1) kräver en dokumenttitel så att skärmläsare kan meddela den när dokumentet öppnas. Den befintliga DISPLAYDOCTITLE-FALSE-kontrollen bekräftar att titeln visas i visningsprogrammets titelrad; DOCINFO-TITLE-MISSING är kompletterande — den bekräftar att själva titelvärdet är satt. Anropa SetDocumentInfo('Title', ...) för att ange värdet.
Version 3.35.0
Ändrat
- SetStructElemTitle är ett nytt API som sätter posten /T (titel) på det för närvarande öppna strukturelementet (ISO 32000-1 §14.7.2 Table 324). Titeln är en läsbar etikett som identifierar den specifika elementinstansen — till exempel "Chapter 1", "Summary Table" eller "Figure 3: Quarterly Sales" — och visas i Tags-navigationspanelen i PDF-visare och används av verktyg för tillgänglighetsåtgärder. /T skiljer sig från /Alt (alternativ text för användare med renderingsbegränsningar) och /ActualText (textkorrigering på glyfnivå); den är mest användbar på icke-textuella containerelement som Table, Figure, Form, Sect och Div. Skicka en tom sträng för att rensa ett tidigare satt värde. Funktionen är tillgänglig i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.34.0
Ändrat
- SetStructElemAltText är ett nytt API som sätter posten /Alt på det för närvarande öppna strukturelementet (ISO 32000-1 §14.9.3). Det motsvarar att skicka AltText till BeginTag men gör att den alternativa textbeskrivningen kan sättas eller uppdateras efter att elementet har öppnats — användbart när beskrivningen beräknas separat från elementtypen. PDF/UA-1 (ISO 14289-1 §7.5) kräver Alt-text på Figure- och Formula-element; GetPDFUADiagnostics rapporterar redan FIGURE-NO-ALT:N för saknade värden. Funktionen är tillgänglig i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.33.1
Tillagt
- GetPDFUADiagnostics inkluderar nu en ROLEMAP-UNMAPPED:N-kontroll som upptäcker anpassade strukturelementtypsnamn som används i dokumentet men saknar post i /RoleMap-dictionaryn. ISO 14289-1 §7.1 och ISO 32000-1 §14.7.3 kräver att varje icke-standardiserad strukturtyp mappas till en standard-PDF-typ (såsom P, Span eller Figure) så att hjälpmedelsteknik kan avgöra hur elementet ska hanteras. När N omappade typer hittas innehåller problembeskrivningen listan över typnamn så att anropare vet vilka AddRoleMap-poster som behövs. Alla 49 standardstrukturtyper definierade i ISO 32000-1 Table 333 (PDF 1.7) känns igen och undantas från rapporten.
Version 3.33.0
Ändrat
- SetStructElemLang är ett nytt API som sätter posten /Lang på det för närvarande öppna strukturelementet (ISO 32000-1 §14.9.2). Språktaggen åsidosätter dokumentnivåspråket som deklareras av SetDocumentLanguage eller SetPDFUAMode för elementet och alla dess efterkommande, vilket gör det möjligt för flerspråkiga dokument att märka varje spann med rätt BCP 47-språktagg (t.ex. 'en-US', 'fr', 'zh-Hant-TW'). Skärmläsare använder /Lang på elementnivå för att välja lämplig text-till-tal-motor eller röst när dokumentet läses upp. Funktionen är tillgänglig i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.32.0
Ändrat
- SetStructElemActualText är ett nytt API som sätter posten /ActualText på det för närvarande öppna strukturelementet (ISO 32000-1 §14.9.4). Använd det för att ange den exakta Unicode-text som en glyfsekvens representerar när extraktion från innehållsströmmen skulle ge felaktiga resultat — de vanligaste fallen är OpenType-ligaturglyfer (U+FB00 ff, U+FB01 fi, U+FB02 fl) och förkortningar med icke-uppenbara expansioner. ActualText kompletterar, snarare än ersätter, det renderade innehållet; det åsidosätter vad hjälpmedelsteknik och textextraktorer läser ut för det elementet utan att undertrycka visuell rendering. Funktionen är tillgänglig i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.31.1
Ändrat
- GetPDFUADiagnostics kontrollerar nu Formula-strukturelement utöver Figure-element när saknad Alt-text rapporteras (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 kräver alternativa beskrivningar för både grafiska figurer och matematiska formler; tidigare skannades endast Figure-element.
- GetPDFUADiagnostics rapporterar nu PDF-VERSION-LOW när dokument's PDF-version är under 1.7. PDF/UA-1 (ISO 14289-1) definieras mot PDF 1.7 (ISO 32000-1:2008); dokument på PDF 1.5 eller 1.6 skulle inte uppfylla basspecifikationens krav. Anropa SetPDFUAMode för att automatiskt höja versionen till 1.7.
Version 3.31.0
Åtgärdat
- Strukturelement-ID:n och association av tabellrubriker stöds nu. SetStructElemID tilldelar en unik strängidentifierare (/ID) till det för närvarande öppna strukturelementet; ID:n samlas i ett /IDTree-namnträd på strukturträdsroten när dokumentet sparas, vilket gör att tillgänglighetsverktyg och korsreferenser kan hitta element efter ID (ISO 32000-1 §14.7.4). SetStructElemHeaders associerar den aktuella tabellcellen (TD eller TH) med en eller flera rubrikceller via en kommaseparerad lista över tidigare tilldelade ID:n, och skriver /Headers-arrayen i Table-attributägarens dictionary (ISO 32000-1 §14.8.5.7.2). Tillsammans stöder dessa två funktioner komplex tabellmärkning för PDF/UA-1 (ISO 14289-1 §7.10) och WCAG 2.x SC 1.3.1. Båda funktionerna är tillgängliga i Delphi-biblioteket, ActiveX och DLL-gränssnitten. AddTagAttribute hanterar nu också attributet /Headers korrekt med kommaavgränsade värden skrivna som PDF-textsträngsarrayer.
Version 3.30.1
Tillagt
- GetPDFUADiagnostics inkluderar nu en HEADING-LEVEL-SKIP:N-kontroll som upptäcker hopp i rubriknivå i dokumentordning (t.ex. en H1 direkt följd av en H3 utan en H2 däremellan). Kontrollen gör en förordningstraversering av hela strukturelementträdet och räknar varje förekomst där nästa rubriknivå överstiger den föregående med mer än ett. Generiska H-element behandlas som H1. Att gå tillbaka till en rubrik på högre nivå (H3 → H1) räknas inte som ett hopp. WCAG 2.x Success Criterion 1.3.1 och ISO 14289-1 §7.1 kräver att rubriker nästlas utan luckor.
Version 3.30.0
Ändrat
- Strukturelementattribut stöds nu för taggade PDF- och PDF/UA-dokument. Tre nya API-funktioner gör det möjligt att koppla attribut till det strukturelement som för närvarande byggs på taggstacken: AddTagAttribute (allmänt, valfri ägare/namn/värde), SetStructElemScope (bekvämlighetsomslag som sätter attributet /Scope under Table-ägaren, för TH-rubrikceller — ISO 32000-1 §14.8.5.7.2), och SetStructElemBBox (bekvämlighetsomslag som sätter attributet /BBox under Layout-ägaren, för figurer och andra visuellt positionerade element — ISO 32000-1 §14.8.5.4). När dokumentet sparas skrivs attribut som /A-attributdictionaries i varje strukturelement; flera attribut från samma ägare grupperas i en dictionary, och attribut från olika ägare skrivs som en array av dictionaries. Alla tre funktionerna är tillgängliga i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.29.1
Tillagt
- GetPDFUADiagnostics inkluderar nu två ytterligare kontroller: om några Figure-strukturelement i dokumentet saknar Alt-textvärde (rapporteras som FIGURE-NO-ALT:N, enligt ISO 14289-1 §7.5 och ISO 32000-1 §14.9.3), och om några strukturelement fortfarande är öppna eftersom EndTag inte anropades (rapporteras som STRUCT-UNCLOSED:N). Figurkontrollen gör en fullständig rekursiv genomgång av strukturelementträdet och täcker element på alla nästlingsdjup.
Version 3.29.0
Ändrat
- GetPDFUADiagnostics är ett nytt diagnostik-API som kontrollerar ett dokument för potentiella PDF/UA-1-efterlevnadsproblem (ISO 14289-1) och returnerar en radbrytningsseparerad lista med fynd. Sex kontroller utförs: om MarkInfo/Marked är satt (taggad PDF), om dokumentkatalogen har en /Lang-post, om ViewerPreferences/DisplayDocTitle är true, om XMP-metadata innehåller en pdfuaid:part-identifierare, antalet icke-undantagna annoteringar som saknar en Contents-post, och antalet inbäddade filer som saknar en AFRelationship-post. Varje fynd identifieras av en kort kod (t.ex. LANG-MISSING, ANNOT-NO-CONTENTS:3) följt av en läsbar beskrivning. Returnerar en tom sträng när inga problem hittas. Tillgängligt i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.28.5
Ändrat
- Tillgänglighetsförbättring för PDF/UA-1-annoteringar: när en FileAttachment-annotering saknar Contents-post och inget /T-fält används filnamnet från annotering's inbäddade filspecifikation (/FS /UF eller /F) nu som tillgänglig reservbeskrivning. Detta fullbordar fallback-kedjan för annoteringens Contents: /T → Link URI → Stamp name → FileAttachment filename. Skärmläsare får namnet på den bifogade filen i stället för tystnad, vilket uppfyller ISO 14289-1 §7.18.1 för de vanligaste annoteringstyperna.
Version 3.28.4
Ändrat
- Tillgänglighetsförbättring för PDF/UA-1-annoteringar: när en Stamp-annotering saknar Contents-post (eller har en tom sådan) och inget /T-fält används stämpeltypnamnet från annotering's /Name-post nu som tillgänglig reservbeskrivning (t.ex. "Approved", "Draft", "Confidential", "Final"). Detta utökar fallback-kedjan för annoteringens Contents som introducerades i v3.28.3 till att omfatta stämpelannoteringar, vilka är vanliga i arbetsflöden med granskade eller godkända dokument och ofta saknar ett explicit Contents-värde.
Version 3.28.3
Ändrat
- Tillgänglighetsförbättring för PDF/UA-1-annoteringar: när en Link-annotering saknar Contents-post (eller har en tom sådan) och inget /T-fält används URI:n från annotering's URI-åtgärd nu som tillgänglig reservbeskrivning. Detta gäller endast under SetPDFUAMode-bearbetning och endast för Link-annoteringar som har en /URI-åtgärd. Skärmläsare får URL:en som sista utvägens etikett, vilket uppfyller ISO 14289-1 §7.18.1 i det vanliga fallet där författare skapar hyperlänkar utan att ange en läsbar beskrivning.
Version 3.28.2
Ändrat
- SetEmbeddedFileAFRelationship är ett nytt API för att explicit sätta AFRelationship-värdet på en inbäddad fil's filspecifikationsdictionary. Detta krävs av ISO 14289-1 (PDF/UA-1) §7.11 och låter anropare ange den semantiska relationen mellan en inbäddad fil och dokumentinnehållet genom att välja bland de fem giltiga värdena: Source, Data, Alternative, Supplement eller Unspecified. När SetPDFUAMode är aktivt tilldelas varje inbäddad fil utan en AFRelationship-nyckel automatiskt Unspecified; använd denna funktion för att åsidosätta standardvärdet före sparning. Tillgängligt i Delphi-biblioteket, ActiveX och DLL-gränssnitten.
Version 3.28.1
Ändrat
- När SetPDFUAMode anropas på ett dokument vars XMP-metadata innehåller bibliotekets generiska standardtitel i stället för en dokumentspecifik titel, ersätts titeln nu automatiskt med värdet från dokument's /Info Title-post (om en sådan finns). Detta säkerställer att pdfuaid:part-1 XMP-paketet återspeglar den faktiska dokumenttiteln i stället för en platshållare, vilket uppfyller förväntningarna hos PDF/UA-1-verifierare.
- XMP-parsern (LoadFromString) läser nu dc:title-värdet från befintlig XMP-metadata när ett dokument läses in, så rundtrippning av en PDF som redan har dc:title bevarar den titeln korrekt i stället för att återgå till standardplatshållaren.
Version 3.28.0
Ändrat
- BeginArtifactEx(ArtifactType, ArtifactSubtype) är ett nytt tagged-PDF-API som utökar BeginArtifact för att uttrycka både artefaktens /Type och Pagination /Subtype i ett enda anrop. När båda parametrarna inte är tomma skrivs operatorn /Artifact << /Type /T /Subtype /S >> BMC, vilket möjliggör fullständigt specificerade Pagination-artefakter som sidhuvuden och sidfötter enligt ISO 32000-1 §14.8.2.2.1. Om endast en parameter inte är tom används motsvarande form med en enda nyckel. DLL-ingångspunkterna DLBeginArtifactEx och DLBeginArtifactExA exporteras också.
Version 3.27.2
Åtgärdat
- BeginArtifact skiljer nu korrekt mellan artefakttyper och pagineringsundertyper. När argumentet är Pagination, Layout eller Page (artefakttyper enligt ISO 32000-1 §14.8.2.2.1 Table 330) skriver marked-content-operatorn /Type i stället för /Subtype. Andra värden som Header, Footer och Watermark fortsätter att skrivas som /Subtype. Detta korrigerar den tidigare felaktiga utdata som skrev /Subtype /Pagination när anroparen avsåg att markera en pagineringsartefakt.
Version 3.27.1
Ändrat
- När PDF/UA-läge är aktivt och dokumentet innehåller inbäddade filer får varje filspecifikationsordlista som saknar en AFRelationship-post nu automatiskt en sådan vid sparning. Värdet som skrivs är /Unspecified, vilket uppfyller kravet i ISO 14289-1 §7.11 att varje inbäddad fil ska ha en AFRelationship-nyckel. Detta gäller både filer som lagts till via EmbedFile och inbäddade filer som redan finns i ett inläst dokument.
Version 3.27.0
Ändrat
- AddRoleMap(CustomType, StandardType) är ett nytt tagged-PDF-API som registrerar en mappning från ett anpassat (icke-standardiserat) namn på en strukturelementtyp till en standard-PDF-strukturtyp. När dokumentet sparas skrivs mappningarna till RoleMap-ordlistan i strukturträdets rot, vilket uppfyller kravet i ISO 14289-1 §7.1 för dokument som använder programspecifika taggnamn. Flera mappningar kan registreras; duplicerade nycklar skrivs över av det senaste anropet. DLL-ingångspunkterna DLAddRoleMap och DLAddRoleMapA exporteras också.
Version 3.26.0
Ändrat
- BeginTagEx(TagType, AltText, ActualText, Lang) är ett nytt tagged-PDF-API som utökar BeginTag med ett uttryckligt naturligt språk-attribut. När Lang inte är tomt skrivs det till strukturelementets' /Lang-attribut, vilket möjliggör språkanmärkning per element som krävs av ISO 14289-1 §7.2 för flerspråkiga dokument. Skicka en tom Lang-sträng för att bete sig identiskt med BeginTag. DLL-ingångspunkterna DLBeginTagEx och DLBeginTagExA exporteras också.
Version 3.25.1
Ändrat
- TrueType-teckensnitt utan delmängd som läses in med Windows standardkodtabell (WinAnsiEncoding) får nu en ToUnicode CMap-ström, vilket möjliggör tillförlitlig Unicode-textextrahering och kopiera/klistra in för dessa teckensnitt. Tidigare skrevs en ToUnicode-ström endast när en uttrycklig kodtabellsåsidosättning eller Differences-array fanns; den vanliga sökvägen med standardkodning saknade den.
- Samma korrigering gäller TrueType-teckensnitt som läses in med en uttrycklig icke-standardkodtabell men utan Differences-array, och teckensnitt som läses in via formatet för paketerade teckensnitt.
Version 3.25.0
Ändrat
- När PDF/UA-läge är aktivt får icke-undantagna annoteringar (alla typer utom Widget, PrinterMark och TrapNet) som saknar en icke-tom Contents-post nu automatiskt en sådan vid sparning. Annoteringens' /T-värde (titel/författare) används som reserv, vilket uppfyller ISO 14289-1 §7.18.1 för annoteringar som har en titel men ingen uttrycklig tillgänglig beskrivning.
Version 3.24.0
Ändrat
- När PDF/UA-läge är aktivt får interaktiva formulärfält som saknar en TU-post (verktygstips/alternativ beskrivning) nu automatiskt en sådan vid sparning. Fältets' partiella namn (/T-post) används som reservvärde, vilket säkerställer att skärmläsare kan identifiera varje fält. Tryckknappar undantas korrekt från detta krav enligt ISO 14289-1 §7.18.4.
Version 3.23.1
Ändrat
- GetInformation(200) returnerar '1' när PDF/UA-1-läge är aktivt för det valda dokumentet, vilket gör det möjligt för anropare att fråga efter status för överensstämmelseläge vid körning.
- GetInformation(201) returnerar '1' för PDF/A-1a, '2' för PDF/A-1b, eller en tom sträng när PDF/A-läget är avstängt.
- GetInformation(313) returnerar PDF-versionssträngen som sparmålet för närvarande är låst till, eller en tom sträng för dokument med fri versionshantering.
Åtgärdat
- GetInformation(311) och GetInformation(312) returnerar nu korrekt versionskravssträngen och funktionsnamnet från den senaste versionslåsningskonflikten (tidigare annonserat i v3.20.3-posten men ännu inte implementerat).
Version 3.23.0
Ändrat
- SetMarkInfo(Marked) är nu ett publikt API, vilket gör att MarkInfo.Marked-flaggan kan anges oberoende av den fullständiga PDF/UA-1-konfiguration som utförs av SetPDFUAMode. När Marked är 1 anges även MarkInfo.Suspects till false enligt kravet i ISO 14289-1 §7.18.6.
- När PDF/UA-läge är aktivt får alla sidor automatiskt en /Tabs /S-post vid sparning, vilket uppfyller kravet på strukturbaserad tabbordning i ISO 14289-1 §7.18.4.
- HTML-referensdokumentation har lagts till för SetPDFUAMode, SetDocumentLanguage, SetMarkInfo, BeginTag, EndTag, BeginArtifact och EndArtifact, med fullständiga syntaxtabeller och användningsexempel.
Version 3.22.0
Ändrat
- BeginTag(TagType, AltText, ActualText) öppnar ett tagged-PDF-strukturelement i den aktuella innehållsströmmen, skriver en BDC-operator med ett automatiskt tilldelat MCID och registrerar elementet i dokumentets strukturträd. TagType är valfri standardstrukturtyp i PDF (P, H1, Figure, Table osv.). AltText och ActualText är valfria tillgänglighetssträngar kodade som PDF-textsträngar (UTF-16BE).
- EndTag stänger det senast öppnade strukturelementet och skriver motsvarande EMC-operator till innehållsströmmen.
- BeginArtifact(SubType) markerar ett innehållsområde som en PDF-artefakt (pagineringsartefakt, bakgrund osv.) och skriver en BMC-operator. SubType är valfri; när den anges skrivs den som /Artifact << /Subtype /SubType >>.
- EndArtifact stänger artefaktområdet med en EMC-operator.
- Vid sparning, när några taggade strukturelement har registrerats, bygger biblioteket automatiskt hela StructTreeRoot, tilldelar StructParents-nycklar till berörda sidor och skriver ParentTree-nummerträdet, vilket uppfyller kraven i ISO 32000-1 §14.7 för tagged PDF.
- Standard Type 1-teckensnitt (Helvetica, Times, Courier-familjen, Symbol) och inbäddade Type 1-teckensnitt med WinAnsi-kodning får nu en ToUnicode CMap-ström, vilket möjliggör tillförlitlig Unicode-textextrahering och kopiera/klistra in för dessa teckensnittstyper.
Version 3.21.0
Ändrat
- SetPDFUAMode(Language) aktiverar PDF/UA-1 (ISO 14289-1)-överensstämmelseläge: höjer automatiskt dokumentet till PDF 1.7, skriver MarkInfo.Marked och MarkInfo.Suspects, aktiverar DisplayDocTitle i ViewerPreferences, anger Catalog.Lang när Language inte är tomt och skriver pdfuaid:part = 1 XMP-namnrymdsposten som krävs av ISO 14289-1 Section 6.7.11.
- SetDocumentLanguage(Language) skriver Catalog /Lang-posten direkt, vilket gör att dokumentspråket kan deklareras oberoende av PDF/UA-läge.
- MarkInfo.Suspects anges nu till false när MarkInfo.Marked anges till true, vilket uppfyller strukturkravet för tagged-PDF i ISO 14289-1 (Section 7.18.6).
- Encrypt tvingar nu behörighetsflaggan CanCopyAccess (innehållskopiering för tillgänglighet) när dokumentet är i PDF/UA-läge, enligt kravet i ISO 14289-1 Section 7.17.
Åtgärdat
- Choice-formulärfält (rullgardinsmenyer) har inte längre ett meningslöst hårdkodat verktygstipsvärde; TU lämnas oangivet så att anroparen kan tilldela en meningsfull etikett via API:t för formulärfältsegenskaper.
Version 3.20.3
Ändrat
- Encrypt och AddSWFAnnotationFromFile returnerar nu omedelbart 0 med LastErrorCode 602 när sparversionen är låst under det minimum som krävs av den valda krypteringsstyrkan eller annoteringstypen, i stället för att fortsätta tyst och misslyckas först vid sparning.
- GetInformation(311) och GetInformation(312) återspeglar nu det motstridiga versionskravet vid skrivning när en låst version blockerar funktioner på tilläggsnivå som AES-256 eller RichMedia-annoteringar.
Version 3.20.2
Ändrat
- AddU3DAnnotationFromFile höjer nu automatiskt dokumentversionen till PDF 1.6 när en 3D-annotering läggs till i ett dokument med lägre version, i linje med versionshöjningsbeteendet för alla andra PDF 1.6+-API-ingångspunkter.
Version 3.20.1
Ändrat
- PDF 1.2-sparmål tillämpas nu som strikta PDF 1.2-kontrakt. Att spara PDF 1.3+-objekt som sidans TrimBox-data under ett PDF 1.2-mål misslyckas innan utdata skrivs i stället för att skapa en fil med blandade versioner.
- Överensstämmelse med PDF 1.7 Adobe extension-level ingår nu i sparförkontrollen. AESV3, AES-256, RichMedia, Projection, geospatiala ordlistor och ETSI-signaturunderfilter kontrolleras mot den erforderliga ExtensionLevel.
- AES-256-kryptering, RichMedia-annoteringar, geospatiala ordlistor och ETSI-signaturunderfilter deklarerar nu motsvarande Adobe Extensions-post när PDFlib automatiskt höjer ett dokument till PDF 1.7-tilläggsinnehåll.
- Append-sparningar använder nu samma versionsöverensstämmelsegrind som fullständiga sparningar.
- Medföljande valfria PDFium runtime-DLL:er har uppdaterats för Win32 och Win64. GDI+ förblir standardrenderaren; PDFium är fortsatt opt-in via SetPDFiumFileName och SelectRenderer(3).
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 207/207 vardera, och C++Builder Win64x GoogleTest klarade 61 tester med 2 befintliga exempelberoende tester överhoppade.
Version 3.20.0
Ändrat
- Ytterligare åtta PDFlib-skrivaringångspunkter dirigeras nu via Phase 3 EnsureMinVersion så att dokumentversionen automatiskt höjs till det minimum som krävs av funktionen som skrivs: SetDocumentMetadata (PDF 1.4 - /Metadata XMP-ström) 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)
- Tillsammans med v3.15.0-uppsättningen (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) och v3.17.0-uppsättningen (åtta JavaScript-/inbäddad fil-/XFA-/SWF-poster) höjer PDFlib nu FVersion automatiskt över tjugoen skrivaringångspunkter.
- NewOptionalContentGroup höjde tidigare FVersion direkt; den går nu via EnsureMinVersion så att LockSaveVersion respekteras och höjningen registreras i AutoBumpedFeatures.
Version 3.19.0
Ändrat
- PDF-versionsöverensstämmelse vid sparning och inläsning känner nu också igen fyra tidigare uppskjutna funktioner: Btn /Ff bit 15 NoToggleToOff (endast radioknapp) -> PDF 1.4 DeviceN /Subtype /NChannel (förfining av färgrymd) -> PDF 1.6 FontFile3 /Subtype /OpenType (teckensnittsprogramtyp) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached or ETSI.RFC3161 -> PDF 1.7
- NChannel-regeln matchar DeviceN-färgrymdens arrayform [/DeviceN names alternateSpace tintTransform attributes] när attributordlistan vid index 4 har /Subtype /NChannel.
- FontFile3 OpenType-regeln aktiveras endast när strömmen nås via en överordnad nyckel med namnet 'FontFile3', så orelaterade strömmar som råkar ha /Subtype /OpenType flaggas inte.
- PDFFeatureRules-tabellen innehåller nu 103 regler (99 + 4 nya).
Version 3.18.6
Ändrat
- PDF-versionsöverensstämmelse vid sparning och inläsning känner nu igen /AA (ytterligare åtgärder) med medvetenhet om containertyp: Catalog /AA (utlösare på dokumentnivå) -> PDF 1.4 Annot /AA (annoteringsutlösare) -> PDF 1.4 Page /AA (sidutlösare) -> PDF 1.5
- Formulärfältets /AA (PDF 1.2) omfattas fortsatt av det befintliga sparavtalet för PDF 1.3; ingen regel behövs.
- Tabellen PDFFeatureRules innehåller nu 99 regler (96 + 3 nya).
Version 3.18.5
Tillagt
- Ny regel: AcroForm /NeedAppearances känns igen som en PDF 1.5-funktion enligt PDF 1.5 Table 218.
Ändrat
- Tabellen PDFFeatureRules innehåller nu 96 regler (95 + 1 ny).
Åtgärdat
- PDF-versionsöverensstämmelse vid sparning och inläsning klassificerar nu korrekt Page /Tabs som en PDF 1.5-funktion; den klassificerades tidigare felaktigt som PDF 1.4. Specifikationsändringsdokumentet för PDF 1.4 (Adobe TN #5409) listar inte /Tabs, och PDF 1.5 Table 8.10 introducerar "Tabs (Optional; PDF 1.5)".
Version 3.18.4
Tillagt
- Regressionsskyddet för zlib-ng omfattar nu nyttolaster i gränsstorlek, PNG-liknande skannradsdata, lagrade flerblocksströmmar och kända zlib-strömmar över Delphi- och C++Builder-testkörarna.
Ändrat
- PDFlibZLib använder nu alltid den medföljande statiska zlib-ng-objektbackenddelen i normala biblioteksbyggen, vilket tar bort den återstående reservvägen via System.ZLib.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 194/194 vardera, och C++Builder Win64x GoogleTest klarade 58 tester med 2 befintliga exempelberoende tester överhoppade.
Version 3.18.3
Ändrat
- Delphi- och C++Builder-demoprogram som genererar PDF- eller textutdata öppnar nu det genererade dokumentet automatiskt efter en lyckad sparning.
- Installerpaketeringen håller nu byggartefakter utanför demomappar och gör C++Builder-exempel samt DLL- och ActiveX/OCX-moduler till valbara komponenter; deras matchande filer installeras endast när komponenten är vald.
Version 3.18.2
Ändrat
- Delphi- och C++Builder-demona EditFormField rensar nu /NeedAppearances innan fältvärden uppdateras, så varje redigerat textfält får en uppdaterad normal utseendeström i den sparade PDF-filen.
- Detta håller den sparade /AP-strömmen synkroniserad med det lagrade /V-värdet och undviker visningsprogramberoende skillnader där fokusering av fältet visar text som saknades i det statiska fältutseendet.
Version 3.18.1
Ändrat
- PDF-versionsöverensstämmelse vid sparning och inläsning känner nu också igen bitnivåflaggor för formulärfält /Ff och 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-arv följs inte: endast ordböcker som uttryckligen bär /Ff eller /SigFlags utlöser reglerna.
- Tabellen PDFFeatureRules innehåller nu 95 regler (87 + 8 nya på bitnivå).
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 191/191 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.18.0
Ändrat
- PDF-versionsöverensstämmelse vid sparning och inläsning känner nu också igen nio ytterligare funktioner på undernyckel- och bitnivå: annoteringsflaggor på bitnivå (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 distinkta undernycklar för katalog och sida: /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
- Tabellen PDFFeatureRules innehåller nu 87 regler (78 på kapitelnivå + 9 på undernyckel-/bitnivå).
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 189/189 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.17.0
Ändrat
- Ytterligare åtta ingångspunkter i PDFlib writer går nu via Phase 3 EnsureMinVersion så att dokumentversionen höjs automatiskt till den minsta version som krävs av funktionen som genereras: 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)
- Tillsammans med uppsättningen i v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) täcker PDFlib nu tretton writer-ingångspunkter för högre versioner från början till slut.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 187/187 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.16.3
Tillagt
- Nytt PDFlib-API: LockSaveVersion(Version) låser dokumentet till Version och hindrar Phase 3 writer-side EnsureMinVersion från att automatiskt höja det över den. UnlockSaveVersion tar bort låset.
Ändrat
- Grinden vid sparning är oförändrad: writer-genererade funktioner över den låsta versionen ger fortfarande LastErrorCode 602 vid sparning, i stället för att tyst höja sidhuvudet.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 184/184 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.16.2
Ändrat
- Inlästa PDF-filer exponerar nu en vy enbart för bidragande funktioner av funktionsdetekteringen vid inläsning via GetInformation(103) ("ContributorFeatures"). Listan innehåller endast funktioner vars minsta nödvändiga version är strikt större än HeaderVersion (key 100), så den besvarar direkt "varför är den effektiva versionen högre än filhuvudet?".
- GetInformation(101) ("DetectedFeatures") är oförändrad och listar fortfarande varje matchad funktion oavsett bidrag.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 181/181 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.16.1
Tillagt
- Utökat testskydd för detektering på inläsarsidan med sex ytterligare syntetiska fixturer: transparens-ExtGState på sidan (ingen versionshöjning), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), /OCProperties + OCG-innehåll (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), en kombinationsfixtur med flera funktioner och en kontroll av ögonblicksbildsstabilitet.
Ändrat
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 179/179 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.16.0
Tillagt
- Nya GetInformation-nycklar: 100 returnerar HeaderVersion (bokstavligt %PDF-X.Y), 101 returnerar DetectedFeatures (CRLF-avgränsade funktioner matchade vid inläsning), 102 returnerar AutoBumpedFeatures (CRLF-avgränsade funktioner som utlöste writer-side EnsureMinVersion).
Ändrat
- Inlästa PDF-dokument går nu igenom ett innehållsdrivet versionsdetekteringspass: varje indirekt objekt gås igenom med tabellen funktion-till-minimiversion som används av grinden vid sparning, och FVersion höjs över det bokstavliga värdet i %PDF-X.Y-huvudet när innehållet faktiskt kräver en högre version. Till exempel höjer en /UserUnit-sidpost den effektiva versionen till PDF 1.6 även när filhuvudet säger PDF 1.4.
- Grinden vid sparning påverkas inte: dokument vars effektiva version höjdes vid inläsning och sedan uttryckligen sänktes med SetInformation(0, ...) ger fortfarande LastErrorCode 602 vid sparning.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 173/173 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.15.0
Ändrat
- Writer-ingångspunkter som producerar funktioner som kräver en viss minsta PDF-version höjer nu automatiskt dokumentets PDF-version. Att anropa SetTransparency på ett dokument markerat som PDF 1.3 höjer nu sidhuvudet till PDF 1.4 i stället för att sparningen misslyckas med LastErrorCode 602.
- Samma automatiska höjning har kopplats in i SetPageUserUnit (>=1.6), Encrypt med Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 respektive), och tvåsidiga varianter av SetPageLayout (>=1.5).
- Beteendeförändring jämfört med 3.14.x: program som tidigare förlitade sig på v3.12.6-grinden "save target rejects writer-emitted features" lyckas nu med den höjda versionen. Inlästa PDF-filer som redan innehåller funktioner från högre versioner går fortfarande genom den befintliga grinden vid sparning, så att läsa in en taggad PDF och välja PDF 1.3 misslyckas fortfarande med LastErrorCode 602.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 170/170 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.14.3
Ändrat
- PDF-versionsöverensstämmelse vid sparning känner nu också igen de återstående PDF 1.6-ordbokstyperna för 3D (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) och PDF 1.7-annoteringsundertyperna Redact, RichMedia och Projection samt de tillhörande ordböckerna /Type /Requirement och /ReqHandler.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 168/168 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.14.2
Ändrat
- PDF-versionsöverensstämmelse vid sparning känner nu också igen PDF 1.5-funktioner: /XFA-formulär, /AlternatePresentations, /Renditions-namnträd, multimediaordböckerna /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers och annoteringsundertypen Screen.
- Sparning som PDF 1.4 avvisar nu dokument som innehåller dessa funktioner med LastErrorCode 602.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 166/166 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.14.1
Ändrat
- PDF-versionsöverensstämmelse vid sparning känner nu också igen PDF 1.4-funktioner: tagged-PDF /StructTreeRoot /MarkInfo och StructElem-ordböcker, dokumentposten /Lang och sidposten /Tabs, /OutputIntents och /OutputIntent-ordböcker, användningsrättssignaturen /UR3 samt PDF 1.4-annoteringsundertyperna Polygon, PolyLine, Caret, Ink, Popup och Watermark.
- Sparning som PDF 1.3 avvisar nu dokument som innehåller dessa funktioner med LastErrorCode 602.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 165/165 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.14.0
Ändrat
- PDF-versionsöverensstämmelse vid sparning känner nu även igen PDF 1.3-funktioner som smooth shading, function-objekt, ICCBased- och DeviceN-färgrymder, sidposter för /TrimBox /BleedBox /ArtBox, /ToUnicode CMaps, filbilagor och /Sound- och /Movie-anteckningar, /Type /Filespec- och /Type /EmbeddedFile-dictionaries, nycklarna /Group /EF /Alternates /Mask samt JavaScript-åtgärder.
- PDF 1.2-anropare sparar nu enligt PDF 1.3-kontraktet: den bokstavliga %PDF-1.2-headern bevaras, men grinden accepterar PDF 1.3-funktioner. PDF 1.4 och senare funktioner avvisas fortfarande med LastErrorCode 602.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 162/162 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.13.0
Ändrat
- PDF-versionsöverensstämmelsegrinden som avvisar funktioner från senare versioner vid sparning har omstrukturerats till en dedikerad modul, så att regeluppsättningen kan växa utan att dokumentkärnan påverkas.
- Ingen användarsynlig beteendeförändring jämfört med v3.12.7: samma funktioner utanför versionen avvisas fortfarande med LastErrorCode 602.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 155/155 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.12.7
Tillagt
- Utökade den automatiserade testtäckningen för renderingsarbetsflödet PdfToImage med direktåtkomst i både Delphi DUnitX- och C++Builder GoogleTest-sviterna.
Ändrat
- Delphi VCL GUI-testköraren registrerar nu Syntax- och XRef-fixturerna, vilket matchar konsolkörarens täckning.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 147/147 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
Version 3.12.6
Ändrat
- Sparning som PDF 1.3, 1.4, 1.5, 1.6 eller 1.7 upprätthåller nu den valda versionen som fullsparningens utdatakontakt.
- Fullständiga sparningar tar bort katalogens /Version-åsidosättningar, tar bort katalogtillägg och metadataposter som inte stöds för lägre mål och undertrycker PDF 1.4 XMP-metadataströmmar vid sparning som PDF 1.3.
- SaveToFile, SaveToString och SaveToStream misslyckas nu med LastErrorCode 602 när den valda PDF-målversionen är lägre än funktioner som fortfarande finns i dokumentet, såsom transparens, optional content, JPX, UserUnit, 3D eller AES crypt-filter-funktioner.
Version 3.12.5
Tillagt
- Lade till regressionstäckning för okända escapes i bokstavliga strängar och blandade oktala/icke-oktala escape-sekvenser.
Ändrat
- Förbättrad parsning av bokstavliga strängar i PDF 1.7 så att okända escape-sekvenser ignorerar omvänt snedstreck enligt standarden.
- Oktala escapes i bokstavliga strängar förbrukar nu endast oktala siffror och bevarar en efterföljande icke-oktal siffra som vanliga strängdata.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 141/141 vardera.
Version 3.12.4
Tillagt
- Lade till regressionstäckning för högerklammer som namn-avgränsare och glesa xref stream-poster för komprimerade objekt.
Ändrat
- Förbättrad lexikal parsning av PDF 1.7 så att namnobjekt nu stoppar korrekt vid högerklammeravgränsaren.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 139/139 vardera.
Åtgärdat
- Åtgärdade SmartAccess-inläsning av xref stream-poster för komprimerade objekt vars objektströmsnummer är större än PDF-byte-längden.
Version 3.12.3
Tillagt
- Nya AES-krypterade PDF-filer skriver nu crypt-filter Length-värden som bitlängder, vilket matchar PDF 1.7-kontraktet för crypt filter-dictionaries.
Ändrat
- Förbättrad kompatibilitet för krypterade dokument i PDF 1.7 för filer med standard security handler som använder StrF, StmF, EFF, Identity, None eller namngivna StdCF-liknande crypt filters.
- Metadataströmmar respekterar nu EncryptMetadata=false under dekrypterings-, krypterings- och kopierings-/sparningsarbetsflöden i stället för att behandlas som vanliga strömmar.
- Inbäddade filströmmar innehåller nu /Type /EmbeddedFile och använder beslutsvägen för embedded-file crypt-filter när krypterade dokument läses in eller sparas.
- Externa inbäddade filströmmar främjar nu FDecodeParms till DecodeParms när FFilter främjas till Filter, vilket bevarar strömmens avkodningsparametrar.
- XRef stream Prev/XRefStm-värden och stora numeriska offsetvärden behåller nu 64-bitars precision genom parser- och SmartAccess-vägarna.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 137/137 vardera.
Version 3.12.2
Ändrat
- Förbättrad kompatibilitet för strömavkodning i PDF 1.7. Generisk strömavkodning respekterar nu /DP som ett DecodeParms-alias, löser indirekta arrayposter för avkodningsparametrar och accepterar standardfilterförkortningarna /AHx och /LZW.
- PDF-utdata för stora filer skriver nu xref-, startxref-, linearization- och digital signature ByteRange-offsetvärden via 64-bitars formateringsvägar i stället för att snäva in dessa värden genom 32-bitars heltalshjälpare.
- Inlästa dokument behandlar nu en katalogpost /Version som den effektiva PDF-versionen när den är nyare än filheaderns version.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 134/134 vardera.
Åtgärdat
- Omskrivna xref-stream-trailers behåller inte längre stream-only DecodeParms-nycklar när PDFlibPas sparar dem som klassiska trailer-dictionaries.
Version 3.12.1
Ändrat
- Genererade PDF-filer öppnas nu med första sidan storleksanpassad till visningsfönstrets tillgängliga höjd's, så att hela första sidan är synlig uppifrån och ned vid den största zoom som får plats i fönstret. Konfigurera en anpassad OpenAction (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) på dokumentet för att åsidosätta denna standard.
Version 3.12.0
Tillagt
- Lade till 32-byte-justerade malloc/calloc/realloc/free CRT-stubbar för de statiska C-biblioteken och åtgärdade TPDFJPEGImage.Compress så att jpeg_mem_dest-buffertar frigörs via samma C free-väg som allokerade dem.
- Utökade de offentliga valideringsanteckningarna för att lyfta fram den strikta automatiserade täckningen bakom denna version: biblioteksbyggen, komprimeringsrundresor, HelloWorld /FlateDecode-utdata, JPEG-rendering, bildarbetsflöden, teckensnitt, formulär, säkerhet, signering, utskrift och C++Builder-demo-härledda arbetsflöden.
Ändrat
- De statiska Windows-backendarna inkluderar nu libjpeg-turbo NASM SIMD-objekt för Win32 och Win64, plus zlib-ng x86 SIMD-dispatchobjekt för Win64x zlib-ng-uppsättningen.
- Omarbetade zlib-ng-återbyggnadsskripten så att Win64x bcc64x- och diagnostiska MSVC-byggen kompilerar generiska, SSE2-, SSSE3-, SSE4.1/SSE4.2-, PCLMULQDQ- och AVX2-källfiler med funktionsflaggor per fil i stället för att förlita sig på en global kompileringsväxel.
Version 3.11.0
Tillagt
- Lade till ett litet zlib-ng-bryggobjekt för Win64-byggen så att Pascal-kod behåller stabila zlib-kompatibla ingångspunkter medan Delphi och C++Builder använder sina egna länkar-kompatibla objektuppsättningar.
Ändrat
- Bytte Windows Flate-komprimering och -dekomprimering till zlib-ng i zlib-kompatibelt läge. Win32, Delphi Win64 och C++Builder Win64x länkar nu ABI-matchade statiska zlib-ng-objektuppsättningar från Lib\thirdparty\Win32, Lib\thirdparty\Win64 och Lib\thirdparty\Win64x.
- Uppdaterade alla C++Builder-demoprojekt för att definiera PDFLIB_CPPBUILDER, vilket matchar GoogleTest-köraren och förhindrar att Win64x-demon länkar Delphi Win64 zlib-ng-objekten.
Åtgärdat
- Win64-vägen går inte längre via Delphi's System.ZLib-enhet, så PDF-strömskomprimering/-dekomprimering kan dra nytta av zlib-ng-backenden precis som 32-bitarsbygget.
Version 3.10.3
Tillagt
- Utökade C++Builder GoogleTest-sviten för att täcka varje demo under Demo\C++Builder. Fas 1-layouten med 7 fixturer växte till 15 fixturer / 52 GoogleTest-fall, alla godkända på Win64x. Nyligen täckta demon: 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
Tillagt
- Lade till en C++Builder GoogleTest-körare under Tests\C++Builder som testar Lib\PDFlibrary.pas via samma {$JPHNE}-genererade HPP-headers som används av C++Builder-demon. Den första fasen speglar sju centrala Delphi-scenarier (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, PdfToImage-rendering) som 17 GoogleTest-fall, alla godkända på Win64x.
- Utökade Delphi DUnitX-sviten med Tests.Print som täcker PrintPDF- och ShowPrinterBins-demon (uppräkning av standardskrivare, konfiguration av anpassad skrivare, utskriftsalternativ, utskriftsjobb med omdirigering till fil) och ett renderer-switch-test i Tests.Render som testar MultiFunction-demots' GDI+ / PDFium / Cairo-motorval på samma käll-PDF.
Version 3.10.1
Tillagt
- Lade till 57 namngivna sidstorlekar i SetPageSize så att samma kanoniska sidstorleksnamn också fungerar här: 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
Tillagt
- Lade till inbyggda C++Builder-versioner för varje Delphi-exempel under Demo. Demona för PDF-skapande, sidmanipulering, teckensnitt, bild, säkerhet, signering, rendering och utskrift kan nu byggas och köras från C++Builder utan någon wrapper på Delphi-sidan.
- Lade till en kort engelsk Readme.txt i varje Delphi-demo-mapp som beskriver vad demot visar, vilket API det fokuserar på och hur det körs; en HTML-översikt på Demo\Delphi\index.html länkar till alla, grupperade efter ämne.
Ändrat
- Varje nytt demo finns i Demo\C++Builder\<Name>\ som ett konsolprojekt som använder Lib\PDFlibrary.pas direkt och levereras med de indatafiler som behövs för att köras.
- Speglade samma Readme.txt för varje C++Builder-demo med ett Run-avsnitt omskrivet för konsolarbetsflödet (argv-argument i stället för Open/SaveDialogs); en matchande Demo\C++Builder\index.html listar varje C++Builder-demo med samma ämnesgrupper.
Åtgärdat
- Åtgärdade en minnesläcka i ImportEMF-demot (TPDFlib-instansen skapades men frigjordes aldrig).
Version 3.9.14
Ändrat
- Städade upp demona för radbruten text och HTML-paginering så att vart och ett fokuserar på sitt eget API och körs från en enda knapp.
- Bytte namn på två demoprojekt (EmbeddedFonts och PdfPermission) så att de kompilerade körbara filerna matchar mappnamnen i stället för äldre prototypnamn.
Åtgärdat
- Åtgärdade sidintervallkopieringsdemot så att det faktiskt kopierar sidor i stället för att alltid rapportera fel.
Version 3.9.13
Tillagt
- Införde en automatiserad DUnitX-testsvit (konsol- och VCL GUI-körare) som täcker hjälpenheter — buffert, AES, ZLib, Unicode och digest-hashning — samt arbetsflöden på biblioteksnivå inklusive dokumentskapande, spara till fil och spara till stream, inläsningsrundresor samt AES-128/AES-256-kryptering.
Åtgärdat
- Åtgärdade ett streampositionsfel i den interna buffertläsaren: tvåbytes ordläsningar flyttade läsmarkören fyra byte i stället för två. I buffertar längre än två byte hamnade efterföljande läsningar på fel offset och returnerade tyst felaktiga data. Effekten märktes tydligast vid parsning av binära datastrukturer som blandar byte- och ordläsningar.
Version 3.9.12
Ändrat
- GDI+-bildrendering använder nu som standard jämn, högkvalitativ bikubisk interpolation vid skalning av rasterbilder till skärm- eller exportupplösning. Tidigare var standardvärdet närmaste granne, vilket gav synliga trappstegsartefakter på små bilder (logotyper, miniatyrer) som förstorades för skärmförhandsvisning eller hög-DPI-export. Anropare som föredrar det skarpare läget närmaste granne kan återställa det gamla beteendet via SetGDIPlusOptions.
Version 3.9.11
Åtgärdat
- Åtgärdade Cairo-rendering av PDF-bilder som använder färgnyckeltransparens (en /Mask-färgintervallarray i bildordlistan). Tidigare, när en sida innehöll en bild med denna form av transparens, utelämnade Cairo-renderaren bilden helt i stället för att komponera den mot sidbakgrunden. Korrigeringen härleder en alfakanal per pixel från de deklarerade färgnyckelintervallen och renderar resultatet som en transparent bild, vilket ger utdata som visuellt överensstämmer med GDI+-renderaren.
Version 3.9.10
Åtgärdat
- Åtgärdade en Cairo-renderingsregression där allt sidinnehåll efter en sekvens med beskuren bild felaktigt begränsades till bildens' urklippsrektangel. PDF-sidor som sparar grafiktillståndet, tillämpar en urklippsbana, målar en bild och sedan återställer tillståndet — en vanlig layoutteknik för inramade eller kantförsedda bilder — renderade all efterföljande text, former och grafik endast inom det beskurna området. Cairo-tillståndsspara och -återställning mappas nu korrekt till PDF-operatorerna q/Q, så urklippsregionen kasseras efter att bilden har ritats.
Version 3.9.9
Tillagt
- Lade till en Cairo-baserad PDF-renderingsmotor som ett tredje renderingsalternativ jämte GDI+ och PDFium. Anropa SelectRenderer(2) före rendering för att aktivera den; motorn kräver cairo.dll från den medföljande DLL\Cairo-mappen. Cairo-rendering stöder samma utdatalägen som GDI+: export av bitmapfil och stream (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), rendering till device context och direkt utskrift.
Ändrat
- MultiFunction View/Print-demot visar nu en trevägs renderarväljare så att användare kan jämföra GDI+-, PDFium- och Cairo-utdata sida vid sida på samma dokument utan kodändringar.
Version 3.9.8
Åtgärdat
- Undertryckte två ovidkommande kompilatordiagnostiker i Win32 C-runtime-shimmen som visades i RAD Studio 13.1 och senare. En utfasningsvarning (W1000) utlöstes eftersom ett kapabilitetsskydd för kompilatorversion inte propagerades till kompilatorer nyare än Delphi 2009, vilket fick dem att kompilera mot ett utfasat memory-manager-API. En ledtråd om oanvänd variabel (H2164) utlöstes för en intern kompatibilitetsvariabel som endast behövs för Delphi 7-byggen; den är nu begränsad till den versionens' villkorsblock. Båda problemen var endast diagnostiska och hade ingen påverkan vid körning.
Version 3.9.7
Tillagt
- Lade till valfri PDFium-baserad sidrendering på Windows, inklusive BMP-streamrendering, device-context-rendering, minnesrendering och utskrift.
Ändrat
- Uppdaterade Delphi MultiFunction View/Print-demot med en renderarväljare så att användare kan växla mellan den befintliga GDI+-renderaren och PDFium.
Version 3.9.6
Tillagt
- Lade till separata Inno Setup-skript för det fullständiga PDFlibPas-paketet och testpaketet, med releaseinriktade undantag för metadata från versionshantering, byggutdata, IDE-cachar, lokala agentfiler och medföljande tredjepartskällträd som inte ingår i det levererade paketet.
Ändrat
- Testinstallationsprogrammet bygger och paketerar nu binära testbibliotek för RAD Studio 11.3, 12.3 och 13.1, plus Delphi-testdemon, innan installationsprogrammet genereras.
Version 3.9.5
Åtgärdat
- Åtgärdade Win32-biblioteksbyggen under RAD Studio 9.0 / Delphi XE2. Byggskriptet skickade en flagga för DCU-utdatakatalog som bara finns från Delphi 2010 och framåt; XE2's kompilator tolkade flaggan annorlunda, vilket gav en förvanskad utdatasökväg och ett fatalt fel innan någon källfil behandlades. Skriptet väljer nu automatiskt rätt flagga baserat på målkompilatorversionen.
- Korrigerade ett relaterat skydd för kompilatorversion i bibliotekskällan som anropade en namnkvalificerad runtime-funktion som introducerades i XE4 under ett XE2+-villkor. Byggen riktade mot XE2 och XE3 löser nu rätt kompatibilitetsimport i stället.
Version 3.9.4
Åtgärdat
- Åtgärdade skrivarkonfiguration för nätverks- och serverdelade skrivare genom att tillämpa pappersfack, media, duplex, kvalitet och andra utskriftsinställningar via skrivarens DEVMODE-handtag i stället för skrivarens device context-handtag.
Version 3.9.3
Ändrat
- Uppdaterade den medföljande AES-backenden till Brian Gladman's AES-källor från 2018 på både Win32 och Win64. Reproducerbara byggskript gör nu att de statiska AES-objekten kan byggas om från källkod när som helst. Ett ABI-fel i Pascal-bindningarna upptäcktes och åtgärdades under processen: AES-CBC-funktionerna för kryptering och dekryptering saknade sin deklaration för C-anropskonvention, så Win32-byggen skickade tyst argument i fel registerordning, vilket potentiellt kunde ge felaktig krypterad utdata. Win64-byggen påverkades inte eftersom plattformen tillämpar en enhetlig anropskonvention.
Säkerhet
- Härdade tredjeparts-ombyggnadsskripten så att de MSVC-baserade zlib-, JPEG- och CRT-stub-skripten kan startas från repository-roten såväl som från thirdparty-katalogen; tidigare krävde de att arbetskatalogen var inställd på thirdparty-mappen.
Version 3.9.2
Åtgärdat
- Uppgraderade JPEG 2000-backenden från äldre OpenJPEG 1.5 till OpenJPEG 2.5.4 på både Win32 och Win64. Båda plattformarna använder nu statisk objektlänkning, så JPEG 2000-kodning och -avkodning fungerar utan ytterligare runtime-DLL. Den moderna codecen ger aktuell JP2/J2K-hantering av headers, ett callback-drivet stream-API samt ackumulerade fel- och säkerhetskorrigeringar från upstream-projektet. Det publika TJpeg2000Bitmap-API:t är oförändrat.
Version 3.9.1
Åtgärdat
- Åtgärdade JPEG-sidrendering och bildexport efter uppgraderingen till libjpeg-turbo, vilket återställde PdfToImage JPG-konvertering och TPDFJPEGImage.SaveToStream-utdata på Win32 och Win64.
- Korrigerade Win32 libjpeg-turbo ABI-bindningar så att callbacks, strukturjustering, boolean-fält och minnesbaserade JPEG-destinationer matchar libjpeg-turbo 3.1.90.
- Åtgärdade Win32 FlateDecode-streamdekomprimering med den medföljande zlib 1.3.2-backenden, vilket återställde inläsning av PDF xref-streamar för filer som PdfToImage-exempeldokumentet.
Version 3.9.0
Ändrat
- Uppgraderade den medföljande JPEG 2000-backenden från äldre OpenJPEG 1.5 till OpenJPEG 2.5.4. JPEG 2000-inläsning och -sparande använder nu den moderna codecen, callback-drivet stream-API och aktuell JP2/J2K-hantering av headers, samtidigt som det publika TJpeg2000Bitmap-API:t bevaras.
Åtgärdat
- JPEG 2000-utdata väljer nu automatiskt ett giltigt OpenJPEG-upplösningsantal för små bilder, och Win32 statiska backenden beror inte längre på saknade MSVCRT-hjälpexporter.
Version 3.8.1
Åtgärdat
- Eliminerade alla 16 kosmetiska länkvarningar W1028 "Bad global symbol definition" på Win32 och Win64. Namnbyten på källnivå tar bort de redundanta Pascal-side-dubbletterna (jpeg_std_error och jmemnobs-allokeringsstubbarna löses nu enbart från obj-lagret); de tre återstående bcc32 / vc64 obj-symbolerna (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table) som måste förbli länklösta mot Pascal-side-data fråntas nu sina COFF-symbolnamn via en ObjConv-efterbehandlingspass under thirdparty\build-jpeg-vc64.bat. Ingen publik API-ändring; ren länkarutdata för både Delphi Win32- och Win64-byggen.
Version 3.8.0
Säkerhet
- Win64 JPEG-codec uppgraderades från IJG-liknande libjpeg till libjpeg-turbo 3.1.90, vilket slutför JPEG-migreringen som startade i v3.7.0 (Win32). Både Win32- och Win64-sökvägarna delar nu samma moderna JPEG-codec, med samma SIMD-optimerade inre loopar och 30+ ackumulerade CVE-/fuzz-korrigeringar från upstream. Publikt PDFlibPas-API oförändrat.
Version 3.7.0
Säkerhet
- Win32 JPEG-codec uppgraderades från IJG libjpeg-6b till libjpeg-turbo 3.1.90. Betydligt snabbare JPEG-kodning/-avkodning genom SIMD-optimerade inre loopar, plus de 30+ CVE-/fuzz-korrigeringar som ackumulerats i libjpeg-turbo upstream. Publikt PDFlibPas-API (TPDFJPEGImage-klassen, DumpJPEG-funktioner) är oförändrat; befintliga PDF/JPEG-kodvägar kör snabbare utan att källändringar krävs.
Version 3.6.0
Ändrat
- Win64 zlib-sökvägen är oförändrad i denna release - den fortsätter att använda Delphi-medföljande System.ZLib-enheten.
- Aktiverade Win64-link-time CRT-shimmen PDFlibCLibs.pas (introducerad i v3.5.0) för Win32 zlib-sökvägen, vilket tillhandahåller memcpy / memset / malloc / free-symboler som de nya zlib 1.3.2 obj-filerna refererar till.
Säkerhet
- Win32 zlib uppgraderades från 1.2.x till 1.3.2. Inkluderar de standardmässiga 25+ CVE-/fuzz-korrigeringarna som ackumulerats upstream sedan 1.2.8, plus de nya inflateBack9 / inflateTree9-startpunkterna som används av streams med 64-bitars fönster. Publikt PDFlibPas-API (DeflateStr / InflateStr / InflateStrParms) är oförändrat.
Version 3.5.0
Tillagt
- Lade till bygginfrastruktur för OpenJPEG 2.5.4. Själva OpenJPEG-källträdet hämtas separat av användaren (git clone uclouvain/openjpeg till Lib/thirdparty/OpenJPEG/) så att det kan uppgraderas utan att röra PDFlibPas's byggkonfiguration.
- Lade till Lib/PDFlibCLibs.pas, en Win64 link-time CRT-shim som används av Win64-backenden. Den överbryggar gapet mellan MSVC-kompilerade C obj-filer och Delphis Win64-länkare (dcc64 / Win64x ld.lld / BCB ilink64), som inte drar in msvcrt.dll automatiskt.
Ändrat
- Levererade ny bygginfrastruktur för de medföljande C-bild-/komprimeringsbiblioteken: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Byggskript för både Embarcadero bcc32 (Win32) och MSVC cl.exe (Win64) finns i Lib/thirdparty/ tillsammans med källträden, så att alla med RAD Studio + VS2022 kan bygga om de statiska obj-filerna från ren källkod.
Version 3.4.0
Säkerhet
- Härdade generering av krypteringsnyckel, AES-initieringsvektor och Perms-behörighetsblock mot förutsägbara slumptalskällor. Krypterade PDF-filer som produceras på system som startats nära samma väggklockstid är inte längre trivialt korrelerbara; AES-256-dokument behåller nu sin fulla nyckelstyrka.
- Härdade parsning av bildordlistor mot felaktigt formade eller fientliga PDF-filer som deklarerar orimliga värden för Width, Height, BitsPerComponent eller DeviceN-komponentantal. Värden utanför intervallet klampas innan någon pixelbuffertaritmetik, vilket förhindrar krascher när sådana filer öppnas.
- Härdade traversering av korsreferenser och sidträd mot dokument vars /Prev xref-kedjor eller /Parent-sidlänkar bildar en cykel eller är överdrivet djupa. Läsaren avvisar nu felaktigt formade strukturer rent i stället för att rekursivt fortsätta tills stacken tar slut.
Version 3.3.1
Tillagt
- Lade till inline-kommentarer med motivering kring renderingsfixarna i PDFlibRenderer.pas som redan fanns i den initiala Git-baslinjen. Kommentarerna dokumenterar varför SetPen skalar linjebredder efter den aktiva canvas-transformeringen, och varför Type 3-fontens CharProc d0/d1-operatorer måste konsumera sina operander. Inget runtime-beteende ändrades.
Åtgärdat
- Förenklade de komponentvisa Windows-byggskripten. Mapparna DLL/, OCX/ och Dylib/ innehåller inte längre separata build12-* / build13-*-varianter: varje plattform har nu ett enda build-Win32 / build-Win64-skript som låser till senaste RAD Studio och accepterar ett valfritt "debug"-argument.
Version 3.3.0
Åtgärdat
- Fixade rendering av transformerade linjer i PDFlibRenderer.pas. SetPen tillämpar nu den aktuella canvas-transformeringens skala på PDF-linjebredder innan Picasso anropas, vilket förhindrar för stora eller för små linjer på banor vars koordinater redan har transformerats. Detta fixar Type 3-glyfkonturer som kunde renderas som tjocka, oregelbundna block.
- Fixade hanteringen av Type 3-fontens CharProc d0/d1 i innehållsströmsparsern. d0 konsumerar nu sina två breddoperander, och d1 konsumerar sina sex operander för bredd/omslutande ruta innan senare ritkommandon körs, vilket förhindrar att inaktuella operander korrumperar glyf- eller bangeometri.