ChangeLog
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.
Språk:English (US)English (UK)Español (España)Español (Latinoamérica)DeutschFrançaisItaliano日本語Português (Brasil)NederlandsSvenskaPolskiTürkçe한국어العربيةРусский简体中文繁體中文
v3.56.42 2026-05-27
- 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. - 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. - 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.
v3.56.41 2026-05-27
- 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. - 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.
- Delphi
HugeFileBenchmarkdemo innehåller nu endirect-copyrad samt filtren--opsoch--skipför fokuserade körningar med stora filer.
v3.56.40 2026-05-26
- 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.
v3.56.39 2026-05-26
- 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.
v3.56.38 2026-05-26
- 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. - 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.
v3.56.37 2026-05-26
- 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.
v3.56.36 2026-05-26
- 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>. - 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.
v3.56.35 2026-05-26
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.
v3.56.34 2026-05-26
- 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.
v3.56.33 2026-05-26
- 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. - 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.
v3.56.32 2026-05-26
- 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. - 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.
v3.56.31 2026-05-25
GetCustomKeys(2)döljer nu bibliotekshanterade Catalog-systemposter konsekvent, inklusive/OutputIntents,/Extensions,/Requirements,/Collectionoch/NeedsRendering.- 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.
v3.56.25 2026-05-23
- 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.
v3.56.24 2026-05-23
- 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.
v3.56.23 2026-05-23
- 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. - 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.
v3.56.22 2026-05-23
- 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.
v3.56.21 2026-05-23
- 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). - 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.
v3.56.20 2026-05-23
- 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"). - 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.
v3.56.19 2026-05-23
- 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. 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.- 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). - 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.
v3.56.18 2026-05-23
- 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. - 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.
v3.56.17 2026-05-23
- 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. - 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. 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).
v3.56.16 2026-05-23
- 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). 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.
v3.56.15 2026-05-23
- 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. - 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.
v3.56.14 2026-05-23
- 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. - 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.
v3.56.8 2026-05-23
- 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.
v3.56.13 2026-05-23
- 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.
v3.56.12 2026-05-23
- 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.
v3.56.11 2026-05-23
- 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.
v3.56.10 2026-05-23
- 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.
v3.56.9 2026-05-23
- 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.
v3.56.7 2026-05-23
- 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.
v3.56.6 2026-05-23
- 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".
v3.56.5 2026-05-23
- 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.
v3.56.4 2026-05-23
- 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).
v3.56.3 2026-05-23
- 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.
v3.56.2 2026-05-23
- 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.
v3.56.1 2026-05-23
- 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.
v3.56.0 2026-05-23
- 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. - 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.
v3.55.6 2026-05-22
- 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.
v3.55.5 2026-05-22
- 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.
v3.55.4 2026-05-22
- 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.
v3.55.3 2026-05-22
- 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.
v3.55.2 2026-05-22
- 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.
v3.55.1 2026-05-22
- 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.
v3.55.0 2026-05-22
- 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).
v3.54.0 2026-05-22
- 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.
v3.53.0 2026-05-22
- 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.
v3.52.0 2026-05-22
- 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.
v3.51.0 2026-05-22
- 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.
v3.50.0 2026-05-22
- 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.
- 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.
- 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.
v3.49.0 2026-05-21
- 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).
v3.48.0 2026-05-21
- 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).
v3.47.0 2026-05-21
- 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.
v3.46.1 2026-05-21
- 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.
v3.46.0 2026-05-21
- 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.
v3.45.0 2026-05-21
- 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.
v3.44.1 2026-05-21
- 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.
v3.44.0 2026-05-21
- 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.
v3.43.0 2026-05-20
- 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.
- 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.
v3.42.0 2026-05-20
- 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.
- 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).
v3.41.0 2026-05-20
- 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.
v3.40.0 2026-05-20
- 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.
- 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.
- GetInformation(201) returnerar '1' till '6' enligt det aktiva PDF/A-läget, i linje med den nya lägesnumreringen.
v3.39.0 2026-05-20
- 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.
v3.38.0 2026-05-20
- 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.
v3.37.2 2026-05-20
- 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.
v3.37.1 2026-05-20
- 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.
v3.37.0 2026-05-20
- 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.
v3.36.1 2026-05-20
- 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.
v3.36.0 2026-05-20
- 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.
v3.35.1 2026-05-20
- 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.
v3.35.0 2026-05-20
- 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.
v3.34.0 2026-05-20
- 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.
v3.33.1 2026-05-20
- 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.
v3.33.0 2026-05-20
- 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.
v3.32.0 2026-05-20
- 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.
v3.31.1 2026-05-20
- 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.
v3.31.0 2026-05-19
- 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.
v3.30.1 2026-05-19
- 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.
v3.30.0 2026-05-19
- 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.
v3.29.1 2026-05-19
- 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.
v3.29.0 2026-05-19
- 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.
v3.28.5 2026-05-19
- 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.
v3.28.4 2026-05-19
- 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.
v3.28.3 2026-05-19
- 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.
v3.28.2 2026-05-19
- 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.
v3.28.1 2026-05-19
- 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.
v3.28.0 2026-05-19
- 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å.
v3.27.2 2026-05-19
- 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.
v3.27.1 2026-05-19
- 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.
v3.27.0 2026-05-19
- 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å.
v3.26.0 2026-05-19
- 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å.
v3.25.1 2026-05-19
- 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.
v3.25.0 2026-05-19
- 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.
v3.24.0 2026-05-19
- 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.
v3.23.1 2026-05-19
- 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(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).
- 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.
v3.23.0 2026-05-19
- 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.
v3.22.0 2026-05-19
- 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.
v3.21.0 2026-05-19
- 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.
- 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.
v3.20.3 2026-05-19
- 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.
v3.20.2 2026-05-19
- 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.
v3.20.1 2026-05-17
- 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.
v3.20.0 2026-05-17
- 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.
v3.19.0 2026-05-17
- 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).
v3.18.6 2026-05-17
- 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).
v3.18.5 2026-05-17
- 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)".
- Ny regel: AcroForm /NeedAppearances känns igen som en PDF 1.5-funktion enligt PDF 1.5 Table 218.
- Tabellen PDFFeatureRules innehåller nu 96 regler (95 + 1 ny).
v3.18.4 2026-05-13
- 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.
- 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.
- 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.
v3.18.3 2026-05-12
- 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.
v3.18.2 2026-05-12
- 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.
v3.18.1 2026-05-10
- 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.
v3.18.0 2026-05-10
- 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.
v3.17.0 2026-05-10
- 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.
v3.16.3 2026-05-10
- 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.
- 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.
v3.16.2 2026-05-10
- 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.
v3.16.1 2026-05-10
- 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.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 179/179 vardera, och C++Builder Win64x GoogleTest klarade 57/57.
v3.16.0 2026-05-10
- 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.
- 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).
- 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.
v3.15.0 2026-05-10
- 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.
v3.14.3 2026-05-10
- 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.
v3.14.2 2026-05-10
- 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.
v3.14.1 2026-05-10
- 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.
v3.14.0 2026-05-10
- 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.
v3.13.0 2026-05-10
- 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.
v3.12.7 2026-05-09
- Utökade den automatiserade testtäckningen för renderingsarbetsflödet PdfToImage med direktåtkomst i både Delphi DUnitX- och C++Builder GoogleTest-sviterna.
- 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.
v3.12.6 2026-05-09
- 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.
v3.12.5 2026-05-09
- 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.
- Lade till regressionstäckning för okända escapes i bokstavliga strängar och blandade oktala/icke-oktala escape-sekvenser.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 141/141 vardera.
v3.12.4 2026-05-09
- Förbättrad lexikal parsning av PDF 1.7 så att namnobjekt nu stoppar korrekt vid högerklammeravgränsaren.
- Åtgärdade SmartAccess-inläsning av xref stream-poster för komprimerade objekt vars objektströmsnummer är större än PDF-byte-längden.
- Lade till regressionstäckning för högerklammer som namn-avgränsare och glesa xref stream-poster för komprimerade objekt.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 139/139 vardera.
v3.12.3 2026-05-08
- 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.
- 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.
- 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.
v3.12.2 2026-05-08
- 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.
- Omskrivna xref-stream-trailers behåller inte längre stream-only DecodeParms-nycklar när PDFlibPas sparar dem som klassiska trailer-dictionaries.
- Validering: Delphi Win32- och Win64-DUnitX-sviterna klarade 134/134 vardera.
v3.12.1 2026-05-06
- 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.
v3.12.0 2026-05-06
- 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.
- 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.
v3.11.0 2026-05-05
- 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.
- 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.
- 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.
- 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.
v3.10.3 2026-05-01
- 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.
v3.10.2 2026-05-01
- 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.
v3.10.1 2026-05-01
- 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.
v3.10.0 2026-04-30
- 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.
- 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.
- 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.
- 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ärdade en minnesläcka i ImportEMF-demot (TPDFlib-instansen skapades men frigjordes aldrig).
v3.9.14 2026-04-30
- Åtgärdade sidintervallkopieringsdemot så att det faktiskt kopierar sidor i stället för att alltid rapportera fel.
- 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.
v3.9.13 2026-04-30
- Å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.
- 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.
v3.9.12 2026-04-30
- 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.
v3.9.11 2026-04-30
- Å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.
v3.9.10 2026-04-30
- Å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.
v3.9.9 2026-04-29
- 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.
- 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.
v3.9.8 2026-04-29
- 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.
v3.9.7 2026-04-29
- Lade till valfri PDFium-baserad sidrendering på Windows, inklusive BMP-streamrendering, device-context-rendering, minnesrendering och utskrift.
- Uppdaterade Delphi MultiFunction View/Print-demot med en renderarväljare så att användare kan växla mellan den befintliga GDI+-renderaren och PDFium.
v3.9.6 2026-04-29
- 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.
- 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.
v3.9.5 2026-04-29
- Å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.
v3.9.4 2026-04-29
- Å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.
v3.9.3 2026-04-29
- 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.
- 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.
v3.9.2 2026-04-29
- 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.
v3.9.1 2026-04-29
- Å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.
v3.9.0 2026-04-29
- 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.
- 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.
v3.8.1 2026-04-29
- 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.
v3.8.0 2026-04-29
- 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.
v3.7.0 2026-04-28
- 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.
v3.6.0 2026-04-28
- 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.
- 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.
v3.5.0 2026-04-28
- 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.
- 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.
v3.4.0 2026-04-28
- 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.
v3.3.1 2026-04-27
- 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.
- 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.
v3.3.0 2026-04-26
- 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.