Änderungsprotokoll
Versionshistorie
« Zurück zum Dokumentationsindex
Versionshistorie der PDFlibPas-Bibliothek. Die Einträge sind in absteigender Reihenfolge aufgelistet; jede Version folgt der Semantischen Versionierung gemäß der Veröffentlichungsrichtlinie des Projekts.
Letzte Veröffentlichung
- Neueste Version: v3.75.6; Veröffentlichungsdatum: 2026-06-23
Version 3.333.0
Added
- Inspektion inkrementeller Revisionen. Eine Signatur deckt die Bytes der Revision ab, in die sie geschrieben wurde, und alles danach Angehängte ist eine separate Aktualisierung, deren Inhalt entscheidet, ob die Signatur noch für das Dokument in seinem jetzigen Stand steht.
GetDocumentRevisionCount,GetDocumentRevisionStartundGetDocumentRevisionEndlegen diese Revisionen aus, undGetSignatureRevisionIndexsagt, an welcher eine Signatur endet GetDocumentRevisionKindmeldet, was eine Aktualisierung bewirkt hat, als das weitreichendste der von ihr berührten Objekte: Buchführung, Validierungsmaterial, ein Dokumentenzeitstempel, eine Signatur, ein Formularfeld, eine Annotation oder Dokumentinhalt. Das Hinzufügen von Validierungsmaterial für die Langzeitvalidierung erscheint daher nicht mehr wie eine Bearbeitung des DokumentsGetDocumentRevisionChangeslistet jedes Objekt auf, das eine Aktualisierung hinzugefügt, geändert oder gelöscht hat, zusammen damit, was jedes ist und, bei einem geänderten Dictionary, welche Schlüssel tatsächlich abweichenGetDocumentRevisionsCompletemeldet, ob die gesamte Historie wiederherstellbar war. Eine Kette, die unterbrochen, zyklisch oder länger ist, als der Reader folgt, lässt die ältesten Aktualisierungen ungesehen, und die Zähler sind dann eine Untergrenze statt einer Antwort- Ein Objekt, dessen frühere Version nicht gelesen werden kann oder dessen Stream-Körper nie verglichen wurde, wird als unbestimmt statt als unbedenklich gemeldet: eine Aktualisierung, die eine Seite umschreibt, während ihr Dictionary unangetastet bleibt, wird nicht mit einem Neupacken verwechselt
Version 3.332.0
Added
ApplyPAdESLongTermValidationhebt ein bereits signiertes PDF in einem Aufruf auf PAdES-B-LT an. Es erstellt den Signaturgeber-Zertifikatspfad aus der Signatur selbst, sammelt OCSP- und CRL-Material für jedes Glied über die von den Zertifikaten genannten Adressen und schreibt die Zertifikate und Sperrdaten in einer einzigen inkrementellen Aktualisierung mit einem VRI-Eintrag für die Signatur in den Document Security Store.ApplyPAdESLongTermValidationToStreamschreibt das Ergebnis in einen Stream statt in eine Datei- Das Verhalten ist über eine
PADES_LTV_*-Optionsmaske konfigurierbar: ob der VRI-Eintrag geschrieben wird, ob OCSP-Responder angefragt werden, ob auf CRLs zurückgegriffen wird, ob Ausstelleradressen zur Vervollständigung des Pfads gefolgt wird und ob die Sperrprüfung für eine selbst ausgestellte Root übersprungen wird - Ein leerer Feldname verarbeitet jede Signatur zu einer Revision; ein benanntes Feld verarbeitet nur dieses eine
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountundGetPAdESLTVErrormelden, was der letzte Aufruf gesammelt hat und warum er vorzeitig abbrach, sodass ein Teilergebnis über einem unerreichbaren Responder sichtbar statt still ist- Material, das mit bereits Bereitgestelltem identisch ist, wird einmal geschrieben und von jeder Signatur, die es benötigt, referenziert, und eine Signatur ohne lesbares Zertifikat wird gemeldet, statt als erfolgreiche Anhebung ausgegeben zu werden
Version 3.331.0
Added
- Eine Signatur bringt ihren eigenen Zertifizierungspfad mit, sodass das Material, das ein Langzeitvalidierungsprofil benötigt, allein aus der signierten Datei gelesen werden kann.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountundGetSignatureEmbeddedCertificateDERgeben die Zertifikate zurück, die eine Signatur einbettet, undGetSignatureCertificateChainLengthsowieGetSignatureCertificateChainDERordnen sie zu einem vom Signaturgeber ausgehenden Pfad GetSignatureContentsHashHexgibt den Schlüssel zurück, unter dem einAddPAdESDSSVRI-Eintrag angesprochen wird, berechnet aus der Signatur selbst- Das Signaturgeberzertifikat wird erkannt, gleich ob die Signatur es über Aussteller und Seriennummer oder über die Subject-Key-Identifikation benennt, und ein Pfad endet beim letzten Aussteller, den die Signatur tatsächlich enthält, anstatt vorzutäuschen, vollständig zu sein
Fixed
- Der DER-Reader lehnt eine deklarierte Elementlänge zurück, die größer als die Daten ist, anstatt einen fast-maximalen Wert seine Bereichsprüfung umschlingen zu lassen, und das Durchlaufen der Zertifikatserweiterungen liest nicht mehr über das Ende eines abgeschnittenen oder zu langen Zertifikats hinaus. Beides ist über ein präpariertes Dokument erreichbar, daher bleiben die obigen Zugriffsfunktionen bei nicht vertrauenswürdiger Eingabe sicher
- Die Signaturzugriffsfunktionen lesen das Dokument mit einem gemeinsamen Handle, sodass sie antworten, während ein Prüfprogramm oder Viewer die Datei bereits geöffnet hat, anstatt so zu versagen, als sei die Signatur nicht vorhanden
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
CreateValidationReportundSaveValidationReporterzeugen einen strukturierten PDF/A- und PDF/UA-1-Validierungsbericht in XML oder JSON. Jeder Befund trägt die Regel-ID, den Standard, der sie besitzt, einen kurzen Regelnamen, die ISO-Klausel, die sie durchsetzt, einen Schweregrad und die Anzahl der betroffenen Objekte, und der Report schließt mit pro-Standard- und Dokumentebenen-Pass/Fail-Statistiken- Ein Standard, der nicht angefordert wurde, wird als
not-checkedgemeldet und nicht als stiller Bestanden-Eintrag, sodass ein teilweiser Lauf nicht für eine fehlerfreie Bescheinigung gehalten werden kann - Build-Pipelines können nun auf eine Regel-ID oder eine ISO-Klausel filtern statt Teilstrings in Prosa zu vergleichen: die Preflight-Report-Familie erzeugt zuerst einen menschenlesbaren Report und wandelt diesen Text in JSON, HTML oder CSV um, während der Validierungsreport aus der rohen Prüfausgabe zusammengestellt wird und die maschinenlesbaren Felder intakt hält
Version 3.322.0
Added
- Die Referenz dokumentiert nun die vier extern deklarierten öffentlichen Typen, die auf der
TPDFlib-Oberfläche verwendet werden und zuvor keine eigene Seite hatten:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoundTPDFlibWatermarkBase, womit die Abdeckung öffentlicher Ereignis-, Logger-, Enumerations-Ergebnis- und Wasserzeichen-Typen vervollständigt wird
Version 3.321.0
Added
CheckDocumentPolicywertet deklarative Hausregeln wieFonts.NotEmbedded = 0,Security.Encrypted = nooderDocument.Pages <= 500gegen das Dokument aus und meldet jede Regel als bestanden oder fehlgeschlagen mit dem tatsächlichen Wert, was eine Aufnahme-Schranke für Verlage, Archive und Druckereien zu Konfiguration statt handgeschriebenem Inspektionscode macht
Version 3.320.1
Fixed
- Das Zeichnen von Text in einem PDF/A-Modus ohne vorheriges Laden einer Schriftart führt nicht mehr zu einem Fehler: PDF/A fordert, dass jedes Schriftprogramm eingebettet ist, daher wurde der implizite Shortcut zu einer eingebauten Schriftart verweigert und keine Schriftart ausgewählt, und
DrawTextund die anderen Textaufrufe stürzten ab statt zu zeichnen - Der implizite Schriftartpfad löst nun eine echte einbettbare Schriftart auf, während ein PDF/A-Modus aktiv ist, sodass Text, der ohne einen expliziten
AddTrueTypeFont-Aufruf gezeichnet wird, eingebettet wird und konform bleibt; ein direkterAddStandardFont-Aufruf wird unter PDF/A weiterhin verweigert - Auf Rechnern, auf denen keine einbettbare Schriftart aufgelöst werden kann, fällt das Zeichnen auf die eingebauten Metriken zurück statt abzustürzen und meldet die Konformitätslücke über
LastErrorCode605, sodass die Datei abgefangen werden kann, bevor sie als konform veröffentlicht wird
Version 3.320.0
Added
GetDocumentFeatureReportgibt in einem Aufruf einen strukturierten Eigenschafts-Report zurück — Dokumentmetadaten, Seiten- und Objektanzahlen, Verschlüsselungsstatus, Schriftart- und Bildbestände, Tagging und Inhaltsverzeichnisse, Formularfelder, Signaturen, Anhänge und die Byte-Aufschlüsselung nach Kategorie — und ersetzt die guten zwölf separaten Abfragen, die ein Katalogisierungs- oder Aufnahme-Pipeline zuvor zusammenstellen musste
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSortundSetCollectionItemValuebauen PDF-Portfolios auf den vorhandenen Anhängen auf, sodass eine Reihe eingebetteter Dateien als durchsuchbares Paket mit eigenen Spalten, Sortierreihenfolge und Pro-Datei-Werten präsentiert wird statt als einfache AnhangslisteGetCollectionViewundGetCollectionFieldCountmelden den Präsentationsmodus und die Anzahl der deklarierten Spalten eines geladenen Portfolios
Version 3.318.1
Fixed
- Die Textextraktionsoption 12 (rotierten Text ignorieren) verwirft nun rotierte Textfolgen, egal wohin sie drehen: eine Vierteldrehung im Uhrzeigersinn und eine Vierteldrehung gegen den Uhrzeigersinn wurden früher unterschiedlich behandelt, sodass seitliche Randnotizen in einer Richtung verworfen und in der anderen zurückgegeben wurden
- Die gleiche Option behält schräg gestellten Text, der nur geschert ist, etwa einen synthetischen Kursivdruck, und die Toleranz skaliert nun mit der Textgröße und der Seitentransformation, sodass große schräge Überschriften nicht länger verworfen werden, als wären sie rotiert
Version 3.318.0
Added
DecodeAllStreamsexpandiert die komprimierten Streams eines Dokuments an Ort und Stelle, sodass das Speichern eine Kopie erzeugt, deren Inhalts-Streams, Metadaten und Struktur direkt von Diff-Werkzeugen, forensischer Prüfung und Support-Workflows gelesen werden können; Bilder, Prädiktions-Streams und Querverweis-Streams behalten ihre Kodierung, und Objekt-Streams werden zuerst materialisiert, sodass nichts verloren geht
Version 3.317.0
Added
SetTrappedundGetTrappeddeklarieren und lesen den Dokument-Überfüllzustand, den PDF/X erfordert, geschrieben als der/Trapped-Name, den die Spezifikation verlangt, statt als TextzeichenketteSetOutputIntentSubtypeundGetOutputIntentSubtypestufen die Ausgabeabsicht neu ein, sodass ein geladenes Farbprofil eineGTS_PDFX-Druckbedingung beschreiben kann statt derGTS_PDFA1-Archivierungsbedingung, die die PDF/A-Modi erzeugen
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyundGetEncryptEmbeddedFilesOnlybeschränken die AES-Verschlüsselung auf eingebettete Dateien: das Dokument öffnet und rendert in jedem Reader ohne Passwortabfrage, während seine Anhänge verschlüsselt bleiben, die Standardanordnung für Rechnungen, Patientenakten und Akten, deren Deckblätter öffentlich sind, deren Nutzdaten aber nicht
Version 3.315.0
Added
- Die Textextraktionsoption 18 dreht Textfolgen, die bei 90, 180 oder 270 Grad gezeichnet wurden, in den horizontalen Leserahmen und gruppiert jede Vierteldrehung separat, sodass rotierte Randnotizen, Tabellenköpfe und Diagramm-Achsenbeschriftungen als lesbare Zeilen extrahiert werden, anstatt sich mit dem aufrechten Text zu überlappen oder verworfen zu werden
Fixed
DASetTextExtractionOptionsakzeptiert Option 16 (Trennstrichentfernung) und Option 17 (Zeichenabstand-Worttrennung), statt sie abzuweisen, und der Direktzugriffs-Extraktionspfad leitet nun die Optionen 15, 16 und 17 an den Extraktor weiter, sodass Unterstrich-Regel-Entfernung, Trennstrichentfernung und Zeichenabstand-Trennung für Datei-Handles genauso gelten wie für ein geladenes Dokument
Version 3.314.0
Added
GetFontHasToUnicodemeldet, ob die ausgewählte Schriftart eine Unicode-Abbildung enthält, und der Schriftartbestand erhält ein passendes Pro-Schriftart-FeldHasToUnicodesowie eineNoToUnicodeCount-Zusammenfassung, sodass Dokumente vor der Verarbeitung auf extraktionssichere und PDF/A-*u- oder PDF/UA-konvertierbare Schriftarten geprüft werden können
Version 3.313.0
Added
SetPDFAModeerhält den Modus 8 für PDF/A-2u (ISO 19005-2 Level U), die Konformitätsstufe, die Unicode-Textabbildungen deklariert, ohne eingebettete Dateien zuzulassen, und damit die PDF/A-2-Familie neben den vorhandenen 2b- und 2a-Modi vervollständigt
Version 3.312.0
Added
GetObjectByPathundGetObjectByPathCountlesen jeden Knoten des Objektbaums über Pfadausdrücke wieRoot/Pages/Kids[0]/MediaBox[2]oderpages[0]/Type— Typen, Skalarwerte, serialisierte Formen und Elementanzahlen in einem Aufruf, was handgeschriebenes Objekt-Walking für Metadaten-Prüfungen, Konformitäts-Stichproben und Support-Diagnosen ersetzt
Version 3.311.0
Added
SetBlackPointCompensationdeklariert die Schwarzpunktkompensation (ON, OFF oder Default) für das nachfolgende Zeichnen über den PDF-2.0-/UseBlackPtComp-Grafikzustand, wodurch Druckvorstufen- und Proofing-Ausgaben Dunkelton-ICC-Konvertierungen festlegen können, die bisher nur beim Betrachter bekannt waren; die Dokumentversion wird automatisch angehoben und PDF/A-Modi weisen den Zustand zurück
Version 3.310.0
Added
SetCompressionLevelundGetCompressionLevellegen die Deflate-Stufe für jede Komprimierung offen, die die Bibliothek durchführt: 0 behält das Standard-SIMD-beschleunigte Modul, 1 bevorzugt Durchsatz und 9 quetscht Archive am kleinstenRecompressStreamsdeflatiert jeden einfachen FlateDecode-Stream des ausgewählten Dokuments auf der aktuellen Stufe neu und behält die kleinere Kodierung pro Stream, wodurch Dokumente, die ursprünglich mit einer schnellen Komprimierungseinstellung geschrieben wurden, verkleinert werden, ohne ihren Inhalt zu berühren
Version 3.309.0
Added
SetObjectStreamModeundGetObjectStreamModefügen eine drei-zuständige Objekt-Stream-Steuerung hinzu: deaktivieren, erzeugen (Standard) oder erhalten, wobei erhalten die ursprüngliche komprimierte Gruppierung der geladenen Datei's beibehält und die Container wörtlich schreibt, was Umwandlungen bestehender PDF-1.5+-Dateien günstiger macht, weil nichts ausgepackt oder neu gruppiert wird
Changed
- Im Erhalten-Modus werden Elemente, die seit dem Laden bearbeitet wurden, zu Objekten der obersten Ebene befördert, damit ihre Änderungen gespeichert werden, und jedes verbleibende komprimierte Element wählt automatisch die binäre Querverweis-Stream-Form
Version 3.308.0
Added
CheckDocumentStructureführt eine ein-Aufruf-strukturelle Gesundheitsprüfung durch: jedes Objekt und jeder Stream wird durch seinen Dekoder gezwungen, einfache Flate-Streams werden streng gegen die zlib-Endmarkierung verifiziert, sodass abgeschnittene Daten erkannt werden, und der Report kennzeichnet fehlende Trailer, nicht auflösbare Kataloge und Seiten, nicht unterstützte Verschlüsselungs-Handler und per Byte-Scan reparierte Dateien mit Pro-Objekt-Befunden und einer Zusammenfassungszeile
Version 3.307.0
Fixed
- Beschädigte Dokumente, die Querverweis-Streams verwenden, werden nun erfolgreich repariert: die Roh-Rekonstruktion stellt die Mitglieder komprimierter Objekt-Streams wieder her und, wenn nirgendwo in der Datei ein Trailer-Schlüsselwort existiert, synthetisiert den Trailer aus dem neuesten erreichbaren Dokumentkatalog, sodass eine defekte startxref-Position solche Dateien nicht mehr unöffbar macht
Version 3.306.0
Added
ExportDocumentDataschreibt die Dokument-Informations-Schlüssel, den gesamten Lesezeichen-Baum und die Seitenbeschriftungs-Bereiche als bearbeitbaren Klartext im klassischen dump_data-ZeilenformatImportDocumentDatawendet das gleiche Format zurück an — Informations-Schlüssel werden aktualisiert, der Lesezeichen-Baum wird mit Verschachtelungsebenen und Zielseiten neu aufgebaut und Seitenbeschriftungs-Bereiche werden ersetzt — und ermöglicht Massen-Lesezeichen-Bearbeitung und Metadaten-Migration zwischen Dokumenten in jeweils einem Aufruf in jede Richtung
Version 3.305.0
Added
AuditDocumentSpacebricht die Byte-Nutzung des Dokuments's nach Kategorie auf — Bilder, Schriftprogramme und Wörterbücher, Inhalts-Streams, Form-XObjects, Objekt-Streams, eingebettete Dateien, Metadaten, Strukturbaum, Anmerkungen, Seitenbaum und sonstiges — mit Objektanzahlen, Byte-Summen und Prozenten, und beantwortet, warum eine Datei so groß ist, wie sie ist, und welche Optimierung sich am meisten auszahlt
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTextundGetStructTreeItemIntPropertylesen den Strukturbaum eines getaggten Dokuments als abgeflachte Tiefenfolge-Elementliste — Elementtypen (roh und rollenabgebildet), alternativer und tatsächlicher Text, Sprache, Titel, Marked-Content-IDs, Seitenzahlen und Eltern/Kind-Beziehungen
Changed
- Der Strukturbaum-Leser schützt vor beschädigten Dokumenten: Referenz-Zyklen, außerhalb des Bereichs liegende Objektnummern und Bäume, die tiefer als 64 Ebenen verschachtelt sind, werden abgeschnitten, statt zu schleifen
Version 3.303.1
Fixed
- Durchscheinende Unterlage-Stempel, die von
StampTextundStampImageerzeugt werden, übertragen ihre Deckkraft nicht mehr in den ursprünglichen Seiteninhalt — der Transparenz-Zustand ist nun auf den Stempel selbst beschränkt, sodass die Seite ihre volle Deckkraft behält
Version 3.303.0
Added
OverlayDocumentPagesstempelt die Seiten eines anderen geöffneten Dokuments auf die Seiten des ausgewählten Dokuments, eine Quellseite pro Zielseite, über oder unter dem vorhandenen Inhalt — Briefkopfpapier, durchgehende Seitenhintergründe und gescannte Formularvorlagen in einem Aufruf- Die Quell-Erschöpfung ist konfigurierbar: anhalten, durch die Quellseiten kreisen oder die letzte Quellseite wiederholt fortsetzen; eine weitere Option verhindert, dass der Stempel über seine natürliche Größe hinaus vergrößert wird
Changed
- Dokument-Stempel werden an die CropBox der Zielseite's angepasst und aufrecht auf Seiten platziert, die einen
/Rotate-Eintrag tragen, und jede Quellseite wird einmal als gemeinsames Form-XObject importiert, sodass wiederholte Vorlagen niemals ihre Ressourcen duplizieren
Version 3.302.0
Fixed
- AES-256-Passwörter werden nun vor dem Hashen mit SASLprep (RFC 4013) verarbeitet, sodass Passwörter, die Nicht-ASCII-Leerzeichen, bedingte Bindestriche, Kompatibilitätszeichen oder Kombinationsfolgen enthalten, in Acrobat und anderen konformen Readern korrekt geöffnet werden
- Das Öffnen von AES-256-Dokumenten versucht zuerst das vorbereitete Standard-Passwort und fällt auf die ältere Byte-Form zurück, sodass Dateien, die von früheren Versionen mit Nicht-ASCII-Passwörtern geschrieben wurden, weiterhin geöffnet werden
Added
- Der Fehlercode 604 meldet ein AES-256-Passwort, das von SASLprep zurückgewiesen wurde, weil es verbotene Codepunkte enthält oder die bidirektionalen Regeln verletzt
Version 3.301.0
Added
SplitDocumentToFileszerlegt das ausgewählte Dokument in einen Stapel von Ausgabedateien mit jeweils einer festen Anzahl von Seiten, unter Verwendung eines%p-Dateinamen-Platzhalters
Changed
- Die Stapelaufteilung parst das Quelldokument einmal und kopiert jeden Block aus derselben Speicher-internen Struktur und ersetzt das wiederholte vollständige Neu-Parsen, das eine Schleife über
ExtractFilePagesfür jeden Bereich durchführt
Version 3.300.0
Added
CollateDocumentsführt Seiten aus mehreren geöffneten Dokumenten in Rotation in das ausgewählte Dokument zusammen und nimmt eine konfigurierbare Anzahl von Seiten von jeder Quelle pro Runde (A1, B1, A2, B2, …)CollateDocumentsExakzeptiert eine Pro-Quelle-Seitenbereichsliste, in der absteigende Bereiche wie3-1eine Quelle umkehren, sodass Vorwärts- und umgekehrte Rückseiten-Scanner-Durchläufe in einem Aufruf in Lesereihenfolge zusammengeführt werden
Changed
- Zusammengeführte Kollationen importieren jede Quelle über eine einzige Objekt-Abbildung und verschachteln per Seiten-Neuanordnung, sodass Schriftarten und Bilder, die innerhalb einer Quelle geteilt werden, unabhängig von der Gruppengröße nur einmal geschrieben werden
Version 3.299.0
Added
SetDeterministicDocumentIDundGetDeterministicDocumentIDschalten die Datei-ID im Trailer auf einen reproduzierbaren Wert um, sodass identische Eingaben identische Ausgabe-Bytes für Build-Caching, inhaltsadressierbaren Speicher und Byte-Ebenen-Regressionsvergleich erzeugenSetDocumentIDSeedliefert einen expliziten Seed für die reproduzierbare Datei-ID; ohne einen Seed wird die ID aus den Dokumentmetadaten, dem Versions-Header und der Seitenanzahl abgeleitet
Changed
- Reproduzierbare Datei-IDs werden nur bei vollständigen Speicherungen aktualisiert; inkrementelle Aktualisierungen und verschlüsselte Dokumente behalten ihre vorhandene ID, sodass Signaturen und passwortgeschützte Dateien weiterhin korrekt geöffnet werden
Version 3.298.0
Added
AddLinkToArticleThreadundSetOutlineArticleThreadverbinden Seiten-Hotspots und Gliederungen mit einem Artikel-Thread oder einer Bead über Standard-Thread-AktionenAddActionNextArticleThreadundPDF_ACTION_BUILDER_THREADfügen Thread-Aktionen zu verketteten, Formular-, Seiten- und Dokumentaktions-Workflows hinzu
Changed
- Thread-Aktionsziele verwenden stabile indirekte Thread- und Bead-Referenzen und lehnen ungültige Indizes ab, ohne den Zielcontainer zu ändern
- Formularfeld-Aktionskonstruktoren lehnen zusätzliche Aktionen ab, während der PDF/A-Modus aktiv ist, und wahren damit das PDF/A-Verbot von Feld- und Widget-
/AA-Wörterbüchern
Version 3.297.0
Added
- Die
DLFlat-DLL-Referenz dokumentiert nun jedenA-Suffix-ANSI-(char)-Einstiegspunkt und fügt 353 Referenzseiten hinzu, die ihren Unicode-Gegenstücken mit exaktenPAnsiCharDelphi- undconst char *C-Signaturen entsprechen BufferUtilities,DirectAccessFunctionalityundMiscellaneousFunctionswurden als saubere Funktionsgruppen-Indexseiten neu aufgebaut, gesteuert durch das gemeinsame Kategorie-Schema, wobei fehlerhafte Auszeichnung, falsch beschriftete Abschnitte und fehlende Chips korrigiert wurden- Der Navigationsindex und der gemeinsame Suchindex erfassen nun die gesamte DLL-Oberfläche für sowohl Unicode- als auch ANSI-Aufrufer
Fixed
- Der veraltete
SetLogger-Eintrag wurde entfernt, da er kein entsprechendes Symbol im Quelltext besaß; die dokumentierte Eigenschaft istLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoundRemoveAlternateImagebieten typisierte Erstellung und Inspektion von Anzeige- und Druckbildvarianten- Alternativbilder können mit einer Optional-Content-Gruppe oder einer Membership-Dictionary verknüpft werden, während eine Variante pro Basisbild als Druckstandard ausgewählt werden kann
Changed
- Der integrierte Renderer wählt nun Optional-Content-Alternativbilder aus, wenn ein Basisbild ausgeblendet ist, und berücksichtigt den Druckstandard bei Drucker-Zielen
FindImagesregistriert nun Alternativbild-XObjects, die aus Seitenressourcen erreichbar sind, sodass importierte Varianten verwendbare Bild-Handles erhalten
Version 3.295.0
Added
AddArticleThreaderstellt standardkonforme Artikelnavigation mit typisierten Metadaten, geordneten Seitenrechtecken, zirkulären Bead-Verknüpfungen und seitenweisen Bead-ArraysArticleThreadCount,GetArticleThreadInfoundGetArticleThreadBeadinspizieren erstellte oder importierte Artikel-Threads mit begrenzter Traversierung beschädigter Verknüpfungszyklen
Changed
DeletePagesentfernt nun Artikel-Threads, die alle Beads verlieren, und repariert die zirkulären Verknüpfungen verbleibender Threads- Die Nachverfolgung gelöschter Seiten behält nun stabile indirekte Seitenreferenzen bei, sodass die Outline- und Artikel-Bereinigung beim Bewegen des Seitenstruktur-Cursors nicht abweichen kann
Version 3.294.0
Added
SearchTextBatchdurchsucht mehrere Textabfragen, während jede Seitenextraktion resident ist, und gibt bei jedem Treffer den nullbasierten Ursprungs-Abfrageindex zurückSearchTextBatchEachbietet dieselbe einstufige Suche über einen Streaming-Callback mit Fortschrittsanzeige und Abbruchmöglichkeit
Changed
- Einzelabfrage- und Batch-Textsuche nutzen nun einen gemeinsamen Matching-Kern und bewahren die Semantik für Groß-/Kleinschreibung, ganze Wörter und Seitenbereiche, während wiederholte Seitenextraktion, Text-Folding und Treffergeometrie vermieden werden
Version 3.293.1
Fixed
- Die Mesh-Shading-Rasterisierung lässt sich nun auf allen Delphi-Versionen kompilieren und behebt
E2089 Invalid typecastbei Real-zu-Fließkomma-Umwandlungen im GDI+-Painter - Das parallele Batch-Seitenrendering lässt sich nun auf Delphi XE5 und XE6 kompilieren, wo
System.Threadingnicht verfügbar ist; ältere Toolchains greifen wie unter Nicht-Windows auf den seriellen Renderpfad zurück - Die Abfrage der Druckerfähigkeiten löst auf älteren Delphi-Versionen keinen Fehler wegen inkompatibler Typen mehr aus, indem der
SetPrinter-Aufruf an den restlichen Druckcode angeglichen wurde - Die Zertifikatsspeicher-Enumeration lässt sich nun unter RAD Studio 10.3 Rio erstellen, das zuvor mit einem internen Compilerfehler beim Optimieren der Enumerationsroutine abbrach
Version 3.293.0
Added
- Optional-Content-Membership-Dictionaries lassen sich nun mit den Kompatibilitätsrichtlinien
AnyOn,AllOn,AnyOffundAllOfferstellen, aktualisieren und enumerieren - Verschachtelte PDF 1.6-
/VE-Sichtbarkeitsausdrücke unterstützenAnd,OrundNotüber eine kompakte Präfix-Darstellung, die von Delphi und C++Builder gemeinsam genutzt wird
Changed
- Optional-Content-Scopes, Content-Streams, erfasste Seiten, Bilder, Formularfelder und Annotationen akzeptieren nun wahlweise ein Gruppen-Handle oder ein Membership-Handle
- Das Rendering wertet zuerst gültige
/VE-Ausdrücke aus und greift bei fehlerhaften oder nicht unterstützten Ausdrücken auf/OCGsplus/Pzurück
Fixed
- Verschachtelter Optional-Content kann Inhalt nicht mehr sichtbar machen, wenn eine umschließende Gruppe oder Membership ausgeblendet ist
- Membership-Dictionaries ohne wirksame Optional-Content-Gruppen lassen die Sichtbarkeit nun unverändert, wie von der PDF-Spezifikation gefordert
Version 3.292.0
Added
EnumAttachmentsmeldet nun Erstellungs- und Änderungsdaten, hexadezimale Prüfsummen, Associated-File-Beziehungen und Dateispezifikations-Objektnummern für sowohl Dokument- als auch AnnotationsanhängeValidateAttachmentChecksumprüft eine Anhang-Nutzlast bei Bedarf gegen ihre gespeicherte Prüfsumme, während neu eingebettete Dateien nun automatisch Prüfsummen-Metadaten erhalten
Fixed
SetEmbeddedFileAFRelationshipakzeptiert nun dieselben 1-basierten Embedded-File-Indizes wie der restliche Anhang-API, einschließlich Dokumenten mit einem einzelnen Anhang
Version 3.291.0
Added
DeduplicateResourceskonsolidiert nun exakt duplizierte Image-, Form-, Pattern-, Shading-, Function-, ICC-Profile-, Font-Program-, CMap-, Type 3 CharProc-, Embedded-File-, Metadata- und PostScript-Streams über ein geladenes Dokument hinweg- Die Ressourcen-Deduplizierung bietet unabhängige Typ-Flags, Dry-Run-Analyse, optionale Orphan-Sammlung sowie detaillierte Hashing-, Vergleichs-, Nutzlast-, Referenz- und Pro-Kategorie-Statistiken
Changed
- Die Duplikaterkennung kanonisiert vollständige Stream-Dictionaries unabhängig von der Schlüsselreihenfolge, hasht jede Kandidaten-Nutzlast einmal mit SHA-256 und bestätigt passende Buckets Byte für Byte, bevor Referenzen umgeleitet werden
- Exakte-Äquivalenz-Gruppen behalten die niedrigste Objektnummer und -generation für deterministische Ausgabe bei, während fehlerhafte Direct-Object-Zyklen und semantische Dictionary-Unterschiede unzusammengeführt bleiben
Version 3.290.0
Changed
PurgeUnusedResourcesberechnet nun einen transitiven Abhängigkeits-Abschluss über Tiling-Patterns, Type 3-Glyphen, Annotations-Appearance-States, ExtGState-Soft-Mask-Gruppen, Bilder, Shadings und verschachtelte Farbräume- Die Standard-Bereinigungsoptionen aktivieren nun Pattern-, Type 3-, Appearance-, Soft-Mask- und Bild-Abhängigkeitsanalyse mit unabhängigen Flags für Aufrufer, die einen engeren Scan benötigen
- Verschachtelte Content-Programme und Abhängigkeitseinträge werden zwischengespeichert, gemeinsam genutzte Ressourcen-Scopes werden vor dem Beschneiden privatisiert und fehlerhafte Zyklen werden durch Active-Stream- und Tiefen-Wächter begrenzt
Fixed
- Seitenressourcen, die nur über Bildfarbräume, Indexed-Basen, Separation- oder DeviceN-Alternativen, Pattern-Underlying-Spaces, ICCBased-Alternativen oder Shading-Dictionaries genutzt werden, werden nicht mehr als ungenutzt entfernt
- Ressourcen, die nur von Type-3-CharProcs, Tiling-Pattern-Zellen, Annotations-Appearances oder Transparenz-Soft-Mask-Gruppen genutzt werden, werden nicht mehr aus ihrem eigenen oder geerbten Scope entfernt
Version 3.289.0
Added
PurgeUnusedResourcesentfernt nun benannte Seitenressourcen, die von ausgewählten Content-Layern nicht referenziert werden, und kann detaillierte Pro-Kategorie-Statistiken zurückgeben- Die Ressourcenbereinigung unterstützt nun Seitenbereiche, Dry-Run-Reporting, Fortschritt und Abbruch, rekursive Form-XObject-Analyse, Entfernung veralteter ProcSets und optionale Orphan-Object-Sammlung
Changed
- Die Ressourcenanalyse folgt nun der PDF-Namens-Groß-/Kleinschreibung, geerbten Form-Ressourcen, benutzerdefinierten Inline-Image-Farbräumen und allen sieben Standard-Ressourcenkategorien
- Wiederholte Form-Programme werden zwischengespeichert, genutzte Ressourcen-Sets verwenden sortierte Nachschlagevorgänge und Dictionary-Einträge werden in absteigender Reihenfolge entfernt, für vorhersagbare Performance bei großen Dokumenten
Fixed
- Das Entfernen von Dictionary-Einträgen invalidiert nun Schlüsselindizes großer Dictionaries, sodass spätere Nachschlagevorgänge keine veralteten Einträge zurückgeben können
- Fehlerhafte Streams und unbekannte Operatoren bewahren standardmäßig ihren vollständigen Ressourcen-Scope, während gemeinsam genutzte oder geerbte Ressourcen-Dictionaries vor der Mutation geklont werden
Version 3.288.0
Added
- Digitale Signaturen können nun vollständige DocMDP-Zertifizierungs- und FieldMDP-Field-Lock-Strukturen ausgeben, mit strukturellen Berechtigungsberichten für jede ausgewählte Signatur
- RFC-3161-Dokument-Zeitstempel, Signatur-Zeitstempel, PAdES-B-T-Token-Injektion, Zertifikatsketten-Validierung, OCSP-Evidenz und DSS- oder VRI-Validierungsmaterial verfügen nun über vollständige Erstellungs- und Verifizierungs-Workflows
- RichMedia-Annotationen unterstützen nun eingebettete Assets, Aktivierungs- und Deaktivierungseinstellungen, Poster-Appearances, Enumeration, Extraktion und Entfernung
- Das Poster-Drucken unterstützt nun Vektor-Seiten-Ausschießen, Überdeckungs- und Schnittmarken, Hard-Margin-bewusste Platzierung und wiederverwendbare Tile-Pläne
- Getaggte Tabellen geben nun semantische Table-, TR-, TH- und TD-Struktur mit stabilen Bezeichnern, Header-Zuordnungen, Spans, wiederholten Headern und als Artefakt markierter Dekoration aus
- Der Viewer bietet nun tastaturzugängliche AcroForm-Bearbeitung für Text-, Choice-, Check-Box-, Radio- und Push-Button-Felder und leitet dabei Aktionen an die Host-Anwendung weiter
Changed
- Type-1-funktionsbasierte und Type-4-bis-7-Mesh-Shadings rendern nun durch native Funktionsauswertung und begrenzte Mesh-Tesselierung
- Das ICCBased-Farbrendering teilt nun zwischengespeicherte Transformationen über Bilder und Shadings hinweg und bewahrt dabei das kalibrierte Farbraum-Verhalten
- Inkrementelle Speichervorgänge erstellen nun Object-Streams und Cross-Reference-Streams konsistent neu, und ausgewählte Signaturen werden gegen ihre eigene signierte Revision verifiziert
Fixed
- SHA-1-Signatur-Zeitstellanforderungen hashen nun den Signaturwert des Signierers mit SHA-1, statt auf SHA-256 zurückzugreifen
- Abgelehnte Field-Lock-Ersetzungen verwerfen nicht mehr eine zuvor gültige Field-Lock-Konfiguration
- Radio-Widgets mit doppelten Appearance-State-Namen bewahren nun das ausgewählte Widget und lassen Geschwister-Widgets aus
Version 3.287.0
Changed
- Inline-Image-Dictionaries folgen nun PDF-Kommentar-, Trennzeichen-, Literal-, Hexadezimal-, Array- und Dictionary-Grenzen mit begrenzter Schachtelung
- Inline-Image-Nutzlasten verwenden nun formatbewusste Terminierung für Raw-, DCT-, ASCII85-, ASCIIHex-, RunLength- und Flate-Daten
- Die Flate-Nutzlastsuche führt nun ein begrenztes Inflate ab dem Content-Stream-Offset mit exakter komprimierter Byte-Buchführung durch, während verkettete verlustfreie Filter sich eine End-to-End-Ausgabeobergrenze teilen
- ASCII85-, ASCIIHex-, LZW-, Prädikator-, Farbprofil- und Hilfsbild-Streams erzwingen nun begrenzte Zwischenausgabe ohne übergroße temporäre Zuweisungen
Fixed
- Fehlerhafte oder abgeschnittene Inline-Images lesen nicht mehr über Quelldaten hinaus, schleifen nicht mehr über nicht terminierte Werte und behalten veralteten Zustand bei Decoder-Wiederverwendung nicht mehr bei
- Gepackte Bildzeilen berechnen nun Komponentenbits vor der Byte-Rundung und verhindern so fehlerhafte Längen bei Low-Bit-RGB- und Mehrzeilen-Bildern
- Ressourcen-Farbräume bewahren nun ihre ursprünglichen Namen, während sie Lab-, indirekte ICCBased- und DeviceN-Komponentenanzahlen ableiten und Indexed-Paletten-Streams unter strengen Grenzen dekodieren
- Inline-Image-Grenzen lehnen nun konsistent ungültige Abmessungen, Bittiefen, nicht unterstützte Filter, unsichere Filterketten, komprimierte Streams und mehrdeutige Endmarkierungen ab
- Das Indexed-Farbrendering validiert nun jeden Palettenzugriff und lehnt abgeschnittene Nachschlagedaten ab, statt über die dekodierte Tabelle hinaus zu lesen
- PNG-Prädiktoren 10 bis 15 dekodieren nun korrekt für Flate- und LZW-Streams, lehnen ungültige Zeilenfilter ab und validieren alle Zeilen- und State-Größen vor der Zuweisung
- JPEG- und JPEG-2000-Nutzlasten verifizieren nun ihre kodierten Abmessungen, Komponenten, Präzision, Marker-Struktur, Box-Längen und dekodierten Speicherbedarf vor der Bildzuweisung
- Die Inline-Image-Validierung begrenzt nun sowohl gepackten als auch erweiterten Bitmap-Speicher und schränkt ICC-Profile, JBIG2-Globals und terminale Filterparameter ein
- Binäre Filter-Nutzlasten, die eingebetteten Endmarkierungs-Text enthalten, setzen nun beim ersten Kandidaten fort, der die begrenzte Formatvalidierung besteht
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExkann Form XObject-Anweisungen mit konfigurierbarer Tiefe, Zyklenschutz und Ausführungsreihenfolge nach dem Tiefensuche-Verfahren rekursiv aufzählen- Inhalts-Snapshots machen nun die Identität des Aufrufbaums verfügbar, die Stream- und übergeordnete XObject-Informationen, die Identität des Ressourcen-Bereichs, den Form-Traversierungsstatus sowie die Anzahl der Nachkommen enthält
- Eigenständige Inhalts-Tracker können bereichsbezogene Schriftarten registrieren und einen isolierten Form-Ausführungszustand mit Matrixverkettung und Bounding-Box-Clipping initialisieren
Changed
- Rekursive Inhaltsverfolgung wählt jedes Form-Ressourcenverzeichnis unabhängig aus, erbt aufrufende Ressourcen für kompatible Legacy-Forms, bewahrt die geerbte Schriftartenidentität und speichert decodierte Form-Programme über wiederholte Aufrufe hinweg im Cache
Version 3.266.0
Added
- Von
GetTextRunszurückgegebene Textläufe tragen nun den Glyphenursprung (OriginX/OriginY) und die vollständigen Textmatrixkomponenten (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY), die durch das Abspielen von BT, Td, TD, Tm und T* neben den Show-Operatoren erfasst wurden, sodass Konsumenten Glyphen ohne separaten Text-Trichter-Durchlauf lokalisieren können - Mesh-Shading-Decodierung leitet nun Lab-, CalRGB- und CalGray-Farbräume durch den Farbmanager, anstatt auf Schwarz zurückzufallen, wodurch korrekte Füllungen für Nicht-DeviceRGB-Freiform- und Coons-Patches erzeugt werden
- Schwärzung gibt nun neben der bestehenden Inhaltsentfernung eine echte
/Subtype /Redact-Annotation mit/Rect, der Innenfarbe/ICund optionalem Overlay-Text aus, sodass schwärzungsfähige Viewer den bereinigten Bereich markieren - Bibliotheksoperationen geben nun über den zuvor inaktiven
Loggerstrukturierte Protokolleinträge an Lade- und Speichergrenzen aus, mit ISO-8601 UTC-Zeitstempeln und einer zwischengespeichertenTStreamWriter-Dateisenke, die die Protokolldatei nicht mehr bei jeder Zeile neu öffnet - Neue
Tests.Memory-Fixture schützt Erstellungs-/Zeichen-/Speicher-/Freigabe- undNewDocument-Zyklen vor Heap-Regression, und der Konsolen-Test-Runner aktiviert nunReportMemoryLeaksOnShutdown - EMF-Interpretation zählt nun unbekannte oder private Datensätze über die Eigenschaft
UnknownRecordCount, sodass stille Lücken in Metadateien beobachtbar sind
Changed
- Wörterbuch-Schlüsselsuche (
TPDFDictionary.FindIndexByKeyName) erstellt einen verzögerten Open-Addressing-Hash-Index für Wörterbücher mit mehr als 16 Einträgen, wodurch die lineare Suche, die die Renderer-Lookups für Resources/ColorSpace/Font/ExtGState dominierte, in eine O(1)-Prüfung umgewandelt wird - sRGB-Gamma-Konvertierung (
XYZ2RGB) verwendet eine gemeinsame Nachschlagetabelle mit 4096 Einträgen anstelle von dreiPower(x, 1/2.4)-Aufrufen pro Pixel, und die Lab-zu-XYZ-Kubierung verwendet nun direkte Multiplikationen; beide sind die dominierenden Kosten pro Pixel bei der Decodierung von Lab- oder ICC-basierten Bildern - Seitensuche (
TPDFPageTree.GetPage) gibt bei wiederholtem Zugriff das zwischengespeicherte Seitenwörterbuch zurück, anstatt bei jedem Aufruf den Seitenbaum erneut zu durchlaufen - Operator-Dispatch im Content-Stream (
ContentOperatorFromName) unterteilt die 73 Operatoren nach dem ersten Byte, wodurch die lineare Suche pro Token auf einen kurzen Restvergleich reduziert wird - PDF/A-Farbraumprüfung führt nun eine Rekursion in den Basis- oder Alternativraum von Indexed, Separation, DeviceN und ICCBased bis zu einer Tiefe von 8 durch, sodass eine versteckte DeviceCMYK-Farbton-Transformation oder ein bloßer Lab-Name markiert wird, anstatt stillschweigend durchzugehen
- Finalisierung geformter Schriftarten durchläuft nun den beim Zeichnen aufgezeichneten Satz verwendeter Glyphen, anstatt alle 65536 Glyphenplätze viermal pro Speichervorgang zu scannen
- Zeichenfolgen-Escape-Routinen (Literal-String, XFDF, Stempel und variable Token-Erweiterung) erstellen die Ausgabe über
TStringBuilderoder Zwei-Wege-Zuweisung, wodurch die O(n^2)-Verkettung aus den Hot-Paths für Speichern und Formular-Export entfernt wird - AES-Stream-Verschlüsselung/-Entschlüsselung verwendet ihren Chunk-Puffer über Schleifeniterationen hinweg wieder, anstatt ihn pro Block neu zuzuweisen
- Parsing von zusammengesetzten Glyphen im TrueType-Parser vergrößert das Komponenten-Array geometrisch statt um jeweils ein Element
- Mesh-Shading-
ReadBitsliest die minimal abdeckenden Bytes in einem Durchgang undWriteBitsdimensioniert den Ausgabepuffer vor, wodurch eine Neuzuweisung pro Bit entfällt - Painter-Kreiskontrollpunkt verwendet eine vorberechnete Kappa-Konstante und die Bogenquadrierung verwendet
Sqranstelle vonPower
Fixed
- Nicht-Windows-Kompilierungsfehler in
PDFlibParallelbehoben, bei dem die Stub-Body-Signatur fürPDFlibRenderPagesParallelnicht mit der Schnittstellendeklaration übereinstimmte
Version 3.265.0
Added
- 59 C++Builder-Konsolendemos hinzugefügt, um die C++Builder-Demosuite an Delphi anzupassen, wodurch die Gesamtzahl von 33 auf 92 Demos erhöht wurde, die dieselben API-Oberflächen abdecken
- Erweiterung von Demo/C++Builder/index.html von 35 auf 92 Einträge mit den Abschnitten Navigation, Color & ICC, Barcode & media sowie Structure & compliance hinzugefügt
Fixed
- Alle 33 vorhandenen C++Builder cbproj-Dateien korrigiert, bei denen 20 Bibliothekskomponenten (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer usw) in ihrer DelphiCompile-Liste fehlten, was das Kompilieren jeder C++Builder-Demo verhinderte
Version 3.264.0
Added
- Grafikzustands-Snapshots des Inhalts lösen nun
Do-Operanden als Bild-, Formular- oder PostScript-XObjects auf und melden deren Ressourcennamen, Objektnummern und transformierte Grenzen - Form-Snapshots machen die ursprünglichen
/Matrix- und/BBox-Werte zusammen mit Ressourcen-, Gruppen-, Transparenzgruppen- und Referenzformularindikatoren verfügbar - Eigenständige Inhalts-Tracker können XObject-Streams über
RegisterXObjectvorregistrieren
Changed
- Seiteninhaltszustands-Aufzählung kompiliert nun XObject-Ressourcen der ausgewählten Seite vor und berechnet die Aufrufgrenzen aus allen vier transformierten Ecken
Version 3.263.0
Added
- Grafikzustands-Snapshots des Inhalts machen nun aktuelle Pfadgrenzen, den aktuellen Punkt, die Pfadkomplexität, ausstehende Clipping-Regeln und effektive Clipping-Grenzen verfügbar
- Eigenständige Inhalts-Tracker können eine explizite Clipping-Grenze über
SetInitialClipBoundsinitialisieren
Changed
- Seiteninhaltszustands-Aufzählung folgt nun dem verzögerten
W- undW*-Clipping, exakten transformierten kubischen Extrema, derq/Q-Clipping-Wiederherstellung und denCropBox-Grenzen der ausgewählten Seite
Version 3.262.0
Added
- Grafikzustands-Snapshots des Inhalts melden nun den Schriftschreibmodus, den exakten Textversatz pro Anweisung und ob Schriftmetriken aufgelöst wurden
- Eigenständige Inhalts-Tracker können Schriftmessungen über
OnMeasureTextbereitstellen
Changed
- Seiteninhaltszustands-Aufzählung rückt nun Textmatrizen für
Tj,TJ,'und"unter Verwendung einfacher oder zusammengesetzter Schriftmetriken, horizontaler Skalierung, Abständen und vertikaler Schreibregeln vor
Version 3.261.0
Added
- Grafikzustands-Verfolgung des Inhalts kann nun
ExtGState-Ressourcen der Seite auflösen, einschließlich Transparenz, Überblendung, Überdrucken, Soft-Masken, Gerätesteuerungen und eingebetteten Schriftreferenzen TPDFContentStateTrackerkann externe Grafikzustands-Wörterbücher für die eigenständige Inhaltsprogramm-Analyse vorregistrieren
Changed
- Externe Grafikzustands-Parameter werden nun kumulativ angewendet und nehmen an vollständigen
q/Q-Speicher- und Wiederherstellungs-Snapshots teil
Version 3.260.0
Added
- Ein-Durchgangs-Verfolgung des effektiven Grafikzustands für strukturierte Inhaltsprogramme und vollständige ausgewählte Seiten hinzugefügt
- Snapshots machen CTM, Textmatrizen, Linienstil, Strichmuster, Farben, Textzustand und Grafikzustands-Stapeltiefe vor oder nach jeder Anweisung verfügbar
Changed
- Bildplatzierungs-Aufzählung bildet nun alle vier Ecken des Einheitsquadrats ab, was zu korrekten Grenzen unter Rotation und Scherung führt
Version 3.259.0
Added
- Typisierte Zeit-, Spezialmuster- und beliebige Masken-Hilfsprogramme für interaktive Formularfelder hinzugefügt
- Bereichsvalidierung mit unabhängig optionalen, null-sicheren Grenzen hinzugefügt
- Summen-, Mittelwert-, Produkt-, Minimum- und Maximum-Feldberechnungen mit automatischer Registrierung der Berechnungsreihenfolge hinzugefügt
Security
- Generierte JavaScript-Zeichenfolgenwerte demaskieren (escapen) nun Anführungszeichen, Backslashes, Steuerzeichen und JavaScript-Zeilentrennzeichen
Version 3.258.0
Added
- Typisierte
SetOCGState-Aktionserstellung für Formularfeldereignisse, bestehende Aktionen und Aktionsketten hinzugefügt - Optional-Content-Aktionen behalten Zustandsänderungen von links nach rechts, wiederholte Gruppen und die optionale Option für die Radiobutton-Beziehung bei
Changed
- Optional-Content-Aktionsaufzählung gibt nun kanonische Gruppen-Handles zurück, die über die Writer-APIs hin- und zurückgeleitet werden können
Version 3.257.0
Added
- Vollständiges explizites Schreiben von Remote-Zielen mit nullbasierten Seiten, allen Standard-Fit-Typen, Nullable-XYZ-Werten und Tri-State-Fensteroptionen hinzugefügt
- Vollständiges Schreiben von Start-Aktionen für portable Dateien, Windows-Parameter, Standardverzeichnisse und Öffnen- oder Druckvorgänge hinzugefügt
- Bestehende Aktions-Handles können diese Payloads nun aktualisieren oder an Aktionsketten anhängen, ohne dass containerspezifische Duplikat-APIs erforderlich sind
Security
- Remote-Go-To- und Launch-Aktions-Builder weisen nun den PDF/A-Modus zurück, bevor sie eine Aktionskette ändern
Version 3.256.0
Added
- Die Inspektion von Remote-Go-To-Aktionen meldet nun benannte und explizite Ziele, nullbasierte Zielseiten, Fit-Typen, Koordinaten und Zoomwerte
- Die Inspektion von Launch-Aktionen meldet nun Windows-Anwendungsparameter, Standardverzeichnisse sowie Öffnen- oder Druckvorgänge
- Aktionsinformationen unterscheiden eine fehlende
/NewWindow-Einstellung von einem expliziten false-Wert und identifizieren arraybasierte Ziele
Version 3.255.0
Added
- Typisierte Builder für Remote-Aktionen mit benanntem Ziel und Aktionen zum Starten externer Anwendungen hinzugefügt
- URI-Aktions-Builder unterstützen nun Koordinaten-Map-Anfragen über das standardmäßige
/IsMap-Flag - Die neuen Aktionsarten funktionieren über die vorhandene erweiterte Builder-Schnittstelle hinweg in Lebenszyklus-, Formularfeld- und verketteten Aktions-APIs
Version 3.254.0
Added
- 14 Delphi-API-Abdeckungsdemos für Bibliotheksbereiche hinzugefügt, für die es keine dedizierte Demo gab: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction und PadesDssDemo
- Die Abschnitte Navigation, Color & ICC, Barcode & media und Structure & compliance zum Delphi-Demoindex hinzugefügt, wodurch sich die Gesamtzahl der aufgelisteten Demos von 56 auf 92 erhöht
- Readme.en-us.html-Anleitungen für die 20 Demos hinzugefügt, die zuvor ohne diese ausgeliefert wurden
Changed
- Die Projektdatei Formatter.config auf alle Delphi-Demoquellen angewendet, sodass Operatorabstände, Einrückungen und Groß-/Kleinschreibung von Schlüsselwörtern einem Stil folgen, und NewLineBeforeThen auf False gesetzt, damit If...Then auf einer einzelnen Zeile bleibt
- Fehlerbehandlung in den klassischen GUI-Demos gehärtet: Rückgabewerte von SaveToFile werden nun konsistent überprüft, Lebensdauern von TPDFlib- und sekundären Objekten sind immer durch try/finally geschützt und Fehlermeldungen enthalten LastErrorCode
Fixed
- Invertierte Polarität von SaveToFile in ImageToPdf behoben, die Erfolg als Fehlschlag behandelte, und verhindert, dass AddTrueTypeSubsettedFont eine veraltete Datei öffnet, wenn das Speichern fehlschlägt
- Ressourcenlecks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt und PdfPermission behoben, bei denen Instanzen von TPDFlib, TStream, TBitmap, TOpenDialog oder TStringList auf einem Ausnahmepfad entweichen konnten
- Toten Code in AddFormattedTitle (ungenutzte RectParts-Allokation, redundantes try/except um StrToFloatDef) und MultiFunction (überschriebener SetTextSize-Aufruf) entfernt
Version 3.253.0
Added
- Typisierte Aktionsdetails für Thread-, Sound-, Movie-, Optional-Content-, Rendition-, Transition- und 3D-View-Aktionen hinzugefügt
- Wiederverwendbare Aktions-Handle-Suche und geordnete Optional-Content-Statusaufzählung hinzugefügt
- Vollständige PDF-Übergangsdatensätze hinzugefügt, die die Stile Replacement, Fly, Push, Cover, Uncover und Fade abdecken
Fixed
- Wipe- und Glitter-Übergänge speichern nun ihre Richtung in
/Di, lesen die Seitenanzeigedauer aus dem Seiten-Dictionary und löschen sowohl Übergangs- als auch Timing-Einträge - Standardmäßige Pre-PDF-1.5-Übergangsstile erzwingen keine PDF-1.5-Ausgabeversion mehr
Version 3.252.0
Added
- Single-Pass-Formularfeld-Aktionserkennung mit typisierten Aktionsdetails über primäre, Widget- und Feld-Trigger hinweg hinzugefügt
- Vollständige Berechnungsreihenfolge-Aufzählung, Suche pro Feld und Entfernung für interaktive Formulare hinzugefügt
- Bulk-Formularfeld-Snapshots um Berechnungsreihenfolge und Aktionsanzahl erweitert
Changed
- Widget-Lebenszyklus-Trigger unterstützen nun Aktionen für Seite öffnen, Seite schließen, Seite sichtbar und Seite ausgeblendet mit der erforderlichen PDF-1.5-Versionsbehandlung
Version 3.251.0
Added
- Single-Pass-Aufzählung benannter Ziele über ältere Katalogeinträge und moderne Namensbäume hinweg mit aufgelösten Seiten- und Ansichtsparametern hinzugefügt
- Entfernung benannter Ziele, vollständige Beschriftungen für Drucktasten, Positionierung von Schaltflächentexten und Namen für Formularfeld-Mappings hinzugefügt
- Bulk-Formularfeld-Snapshots um Mapping-Namen, Schaltflächenbeschriftungen und Positionen von Schaltflächentexten erweitert
Fixed
- Die Bearbeitung von Namensbäumen unterstützt nun direkte Zielwerte und verwendet eine eindeutige Multi-Knoten-Indexkodierung
Version 3.250.0
Added
- Single-Pass-Formularfeld-Snapshots mit Feldidentität, Typ, Seite, Flags, Werten und Choice-Status hinzugefügt
- Typisierte Choice-Feld-Flag-Abfragen sowie validierte Zugriffsfunktionen für den ausgewählten Index und den obersten sichtbaren Index hinzugefügt
Fixed
- Einfachauswahl-Choice-Felder behalten kein Mehrfachauswahl-
/I-Array mehr bei, und der Wechsel von Mehrfachauswahl zu Einfachauswahl ersetzt nun das alte/V-Array durch einen String-Wert
Version 3.249.0
Added
- Zustandsbehaftete Textsuchtraversierung in einem Durchgang hinzugefügt, sodass Anwendungen zwischengespeicherte Treffer durchlaufen können, ohne Seiten doppelt zu extrahieren
- Bulk-Export von Formularwerten und namensbasierte Anwendung mit optionalem Schutz für schreibgeschützte Felder hinzugefügt
Version 3.248.0
Added
- Behaltene Viewer-Auswahlen mit Geometrie im Seitenbereich, extrahiertem Text, Aufzählung, Löschung und einem ablehnbaren Marquee-Ereignis hinzugefügt
- Präzise Bitmap-Erfassung des aktuellen Ansichtsbereichs und Dateiausgabe einschließlich persistenter Overlays hinzugefügt
Version 3.247.0
Added
- Unabhängige Viewer-Steuerelemente für die Formularbearbeitung durch den Benutzer und die Aktivierung von Anmerkungen hinzugefügt
- Konfigurierbare Vordergrundfarbe für Text- und Choice-Formulareditoren hinzugefügt
Version 3.246.0
Added
- Typisierte Linienendstile, Forminnenfarben, Link-Hervorhebungsmodi, FreeText-Ausrichtung, geöffneter Zustand von Text-Anmerkungen und Caret-Symbole hinzugefügt
- Anmerkungs-Setter validieren kompatible Untertypen und erhöhen bei Bedarf automatisch die minimale PDF-Version
Version 3.245.1
Fixed
- Seitengröße und Memo-Layout beim FastReport-Export korrigiert, sodass A4-Berichte ihren beabsichtigten Maßstab beibehalten, Text innerhalb der Memo-Grenzen bleibt und unkonfigurierte Memo-Rahmen ausgeblendet bleiben
Version 3.245.0
Added
OnPasswordhinzugefügt, sodass Anwendungen nach der Zurückweisung der ursprünglichen Anmeldeinformationen durch ein verschlüsseltes Dokument ein anderes Passwort bereitstellen können- Passwort-Wiederholungsversuche funktionieren nun konsistent für Datei-, Stream- und String-Ladevorgänge, legen die Nummer des nächsten Versuchs offen und ermöglichen dem Handler den Abbruch
Security
- Passwort-Callbacks sind auf insgesamt sechzehn Versuche beschränkt und jeder Wiederholungsversuch verwendet einen neuen Parser und Entschlüsselungsstatus
Version 3.244.0
Added
SetXMPPropertyExzum sicheren Schreiben skalarer Eigenschaften in vom Aufrufer definierten XMP-Namensräumen hinzugefügt- Benutzerdefinierte XMP-Werte werden über das XML-DOM escaped, wiederholte Schreibvorgänge ersetzen die passende Namespace-Eigenschaft und ungültige oder reservierte XML-Namen werden abgewiesen
Version 3.243.0
Added
- Typisierte Dokumenten-Lebenszyklus-Aktionen für die Trigger vor dem Schließen, vor dem Speichern, nach dem Speichern, vor dem Drucken und nach dem Drucken hinzugefügt
- Typisierte Aktionen zum Öffnen und Schließen von Seiten mit gemeinsamer Unterstützung für URI-, benannte, JavaScript-, Formular- und Ziel-Aktions-Builder hinzugefügt
- Aktionsinspektions- und -entfernungsmethoden für jeden Dokumenten- und Seitenlebenszyklus-Trigger hinzugefügt
Version 3.242.0
Added
SaveChangeshinzugefügt, um Änderungen an die ursprünglich geladene Datei anzuhängen und die aktualisierte xref-Kette für wiederholte inkrementelle Speicherungen automatisch neu zu ladenSaveChangesvalidiert das Reload-Passwort vor dem Schreiben und behält das ausgewählte öffentliche Dokument-Handle nach dem Reload bei
Changed
AppendToFilelehnt nun ein Ziel ab, dessen aktuelle Länge sich von der geladenen Quelle unterscheidet, was das Anfügen veralteter inkrementeller Offsets an eine extern geänderte Datei verhindert
Version 3.241.0
Added
GetLastOutlineundGetLastChildOutlinefür den direkten Zugriff auf das Ende einer Lesezeichenliste hinzugefügtGetOutlineChildCountundGetOutlineSiblingIndexfür die leichtgewichtige Überprüfung von Lesezeichenbäumen ohne Zuweisung eines vollständigen Baum-Snapshots hinzugefügt
Version 3.240.0
Added
SaveAllAttachmentsExmit Richtlinien für Überschreiben, Überspringen und automatische Umbenennung bei Konflikten sowie einem Benennungs-Callback pro Anhang hinzugefügt- Anhangsexporte reduzieren nun angeforderte Namen auf sichere Leaf-Namen und schützen für Windows reservierte Gerätenamen
Fixed
- Fehler in
SaveAllAttachmentsbehoben, bei dem die Funktion zurückkehrte, ohne Dateien zu schreiben, da der Anhang-Snapshot zwar gezählt, aber nicht zugewiesen und befüllt wurde
Version 3.239.0
Added
OnPageMouseDown,OnPageMouseMoveundOnPageMouseUphinzugefügt, sodass Viewer-Hosts einsbasierte Seitennummern und Top-Down-PDF-Punktkoordinaten unabhängig von Zoom, Scrollen und Ansichtsrotation erhaltenRegionAtClientPoint,ActiveRegionundOnActiveRegionChangehinzugefügt, um Links, Nicht-Link-Annotationen und Formularfelder beim Ein- oder Austreten des Zeigers zu unterscheidenCreatePDFlibViewerDefaultPopupMenuundInstallPDFlibViewerDefaultPopupMenuhinzugefügt, die die vorhandenen Viewer-Aktionsklassen zu einem fertigen Kontextmenü für Kopieren, Zoom, Anpassen, Drehen, Navigation, Speichern und Drucken zusammensetzen
Version 3.238.0
Added
OnOperationProgressmit typisierter Operationsart, Lebenszyklusphase, aktuellen und gesamten Einheiten, Prozentsatz und Detailtext hinzugefügt, während der klassischeOnProgress-Prozentsatz-Callback erhalten bleibt- Einstiegspunkte für Datei, Stream und String zum Laden, Speichern, Suchen, Zusammenführen und Rendern von Seiten melden nun Start- und Endphasen; Operationen mit Zwischenfortschritt melden zudem
opRunning - Das Festlegen von
CancelwährendopStartingoderopRunningaktiviert den vorhandenenAbort-Status und bietet alten sowie neuen Aufrufern einen gemeinsamen Abbruchpfad
Fixed
LoadFromFilebehält nun den Fehlercode 404 für ein falsches Passwort bei, anstatt ihn nach dem Bereinigen mit dem generischen Ladefehler 401 zu überschreiben
Version 3.237.0
Added
SearchTextEachundTPDFlibSearchHitEventhinzugefügt, um jeden Texttreffer sofort auszugeben, ohne ein Ergebnisarray zuzuweisen oder zu dimensionierenSearchTextundSearchTextEachmelden nun den Seitenfortschritt überOnProgressund berücksichtigen sowohlAbortals auch den Callback-Abbruch, wobei der Callback-Abbruch bisResetAbortden vorhandenen Abbruch-Status nutzt- Das Suchfeld und die Suchhervorhebungsebene des Viewers nutzen nun die Streaming-API in einem Durchgang, wodurch die bisherigen Limits von 256 Zeilen und 512 Hervorhebungen entfallen
Fixed
- Die Ganzwortsuche wird nun über ein früheres Vorkommen eines Teilstrings im selben Textblock fortgesetzt, um eine spätere, korrekt begrenzte Übereinstimmung zu finden
Version 3.236.0
Added
GetPrinterCapabilitieszum Erfassen eines Live-Druckertreiber-Snapshots ohne Starten eines Druckauftrags hinzugefügt- Das typisierte Ergebnis
TPDFlibPrinterCapabilitiesenthält Papier-IDs, Namen und Millimeterabmessungen, Zufuhrfach-IDs und -Namen, Unterstützung für Duplex, Farbe, Querformat und Sortierung, den Druckeranschluss sowie die maximal vom Treiber gemeldete Kopienanzahl - Treiber, die Papier- oder Fach-Metadaten auslassen, geben dennoch die verbleibenden Funktionen mit leeren Arrays zurück, während ungültige Druckernamen einen vollständig bereinigten Snapshot liefern
Version 3.235.0
Added
SendDocumentByMailzum Speichern des geladenen Dokuments in einer temporären PDF-Datei und zum Versenden als SMTP-Anhang über den integrierten Windows-CDO-Provider hinzugefügt- Referenzgezählter Erweiterungspunkt
IPDFlibMailProviderhinzugefügt, sodass Anwendungen einen anderen Transport bereitstellen, Nicht-Windows-Hosts unterstützen und E-Mail-Workflows ohne Netzwerkzugriff testen können - Jeder Versand verwendet ein isoliertes temporäres Verzeichnis, bereinigt den Anzeigenamen des Anhangs und entfernt sowohl die PDF-Datei als auch deren Verzeichnis nach der Rückkehr des Providers, wobei
GetLastMailErrorValidierungs-, Speicher-, Transport- und Plattformfehler meldet
Version 3.234.0
Added
- Variablenplatzhalter für Stempel-, Kopf- und Fußzeilentext hinzugefügt:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>und<%LongTime%>werden nun neben den klassischen &-Token pro Seite aufgelöst - Jeder benutzerdefinierte Platzhalter
<%name%>wird über das neueOnCalcVariable-Ereignis aufgelöst, das den Namen und die Seitennummer empfängt und den Ersatz liefert – fortlaufende Nummern, Chargencodes und Clientfelder werden ohne Vorverarbeitung des Textes gestempelt, wobei unbekannte Platzhalter ohne Handler unverändert bleiben
Version 3.233.0
Added
- Hochgestellt-/Tiefgestellt-Erkennung zur Textextraktion hinzugefügt: das neue
GetTextBlockVAlignmeldet die Basislinienklassifizierung jedes extrahierten Textblocks (0 = Basislinie, 1 = hochgestellt, 2 = tiefgestellt) relativ zu seiner visuellen Zeile, sodass chemische Formeln, Exponenten und Fußnotenzeichen erkannt werden können - Ein Block wird als hoch- oder tiefgestellt klassifiziert, wenn er merklich kleiner als der dominante Text der Zeile ist und sein vertikales Zentrum innerhalb einer Texthöhe über oder unter dem dominanten Zentrum liegt
Version 3.232.0
Added
- Worttrennung auf Zeichenebene zur Textextraktion hinzugefügt:
SetTextExtractionOptions(17, 1)teilt Textsegmente ohne Leerzeichen überall dort wieder in Wörter auf, wo ein zeichenweiser Schritt viel breiter als der mittlere Glyphenschritt des Segments ist – Dokumente, die ganze Zeilen als einen einzigen Operator mit Kerning-Lücken statt Leerzeichen zeichnen, werden nun in denGetPageText-Modi 7 und 9-11 als separate Wörter extrahiert - Die Breitenarrays bleiben an den verbreiterten Text angepasst, sodass Block-Quads und zeichenweise Breitenangaben konsistent bleiben
Version 3.231.0
Added
- Layout-erhaltenden Festgitter-Textexport hinzugefügt:
GetPageText(11)bildet die Seitengeometrie auf ein dicktengleiches Zeichengitter ab – Zeilen gruppieren sich nach Basislinie, jeder Block landet in seiner aus der durchschnittlichen Zeichenbreite berechneten Spalte, und kürzere Zellen werden mit echten Leerzeichen aufgefüllt, sodass Tabellen und Formulare in Text-Viewern, Terminals und Diffs ohne Tabstopps ihre visuelle Ausrichtung behalten - Die Referenzseite für
GetPageTextdokumentiert nun die Modi für Lesereihenfolge (9), tabulatorgetrennte Tabellen (10) und Festgitter (11)
Version 3.230.0
Added
- Entfernung von Bindestrichen zur Textextraktion hinzugefügt:
SetTextExtractionOptions(16, 1)fügt über Zeilenumbrüche hinweg getrennte Wörter ("inter-" am Zeilenende gefolgt von "national" wird zu "international") in den zeilenorientierten Ausgaben derGetPageText-Modi 7 und 9 wieder zusammen - Die Heuristik führt eine Zusammenführung nur durch, wenn dem Bindestrich ein Buchstabe vorausgeht und die nächste Zeile mit einem Kleinbuchstaben beginnt, sodass numerische Bereiche, Eigennamen und Großbuchstaben am Satzanfang ihre Bindestriche behalten
Version 3.229.0
Added
OnBeforeSnapshot-Ereignis für dasTPDFlibViewer-Steuerelement hinzugefügt: es wird ausgelöst, bevor ein Snapshot-Ziehbereich mit dem gezogenen Bereich erfasst wird, wobei das Festlegen von Handled die standardmäßige Zwischenablageerfassung abbricht, sodass Anwendungen den Bereich selbst verarbeiten könnenPrefetchEnabledfreigelegt: Der Hintergrund-Prerender-Worker kann nun zur Laufzeit aus- und eingeschaltet werden (der Worker stoppt sofort und startet auf dem geöffneten Dokument neu)DiskCacheMaxDocumentsfreigelegt: Die Anzahl der Dokumente, die der sitzungsübergreifende Festplatten-Seitencache vor dem Bereinigen aufbewahrt, ist nun anpassbar (Standardwert 10)
Version 3.228.0
Added
- Präzise Navigation für das
TPDFlibViewer-Steuerelement hinzugefügt:GoToPagePointspringt zu einer Seite und scrollt einen bestimmten Seitenpunkt in die obere linke Ecke des Ansichtsbereichs, sodass Linkziele und Suchtreffer exakt im Sichtfeld landen - Programmatische Scrollsteuerung hinzugefügt: Pixelweises Verschieben über
ScrollBy, les- und schreibbare EigenschaftenHScrollPos/VScrollPos(ideal für die Synchronisierung zweier nebeneinander liegender Viewer desselben Dokuments) sowieGetScrollPosForPagezur Meldung des Scroll-Ankers jeder Seite im fortlaufenden Modus - Öffentliche Koordinatenbrücken
ClientPointToPageundPageRectToClientRectzur Konvertierung zwischen Client-Pixeln und dem Seiten-Benutzerraum durch Zoom, Rotation und Scrollen hinzugefügt, wobei das interne Hit-Testing nun die exakte Geometrie des Zeichenpfads teilt und auch auf übergeordneten-losen (headless) Steuerelementen funktioniert
Version 3.227.0
Added
- Ansichtsstatus-Ereignisse für das
TPDFlibViewer-Steuerelement hinzugefügt:OnZoomChangewird bei jeder effektiven Zoombewegung (expliziter Zoom, voreingestellte Stufen, Neuberechnung des Anpassungsmodus bei Größenänderung, Rotation oder DPI-Änderung) ausgelöst, undOnHScroll/OnVScrollfolgen der Scrollposition, sodass Symbolleisten und Statusanzeigen ohne Polling synchron bleiben - Das Ziehen des vertikalen Scrollbalken-Schiebers zeigt nun ein schwebendes „Seite N / M“-Bubble an, das eine Vorschau auf die Seite gibt, auf der die Ansicht landen wird – eine große Hilfe in langen Dokumenten; die Eigenschaft
ScrollHintEnabled(standardmäßig aktiviert) schaltet dies aus
Version 3.226.0
Added
- Befüllungs- und Speicherschleife im
TPDFlibViewer-Steuerelement vervollständigt:SaveToFileundSaveToStreamschreiben das angezeigte Dokument – einschließlich übernommener Formularänderungen – zurück auf die Festplatte oder in einen Stream, wobei jeder geöffnete In-Place-Editor zuerst speichert - Mehrzeilige Textfelder werden nun in einem echten mehrzeiligen Memo bearbeitet: Eingabetaste fügt einen Zeilenumbruch ein, Strg+Eingabetaste speichert, Escape bricht ab; einzeilige Felder behalten das einfache Verhalten bei, dass die Eingabetaste speichert
- Tab und Umschalt+Tab führen den In-Place-Editor durch die bearbeitbaren Text- und Auswahlfelder des Dokuments, wobei der Seite des jeweiligen Felds gefolgt wird, und
FocusNextFormFielddieselbe Navigation programmatisch bereitstellt
Version 3.225.0
Added
- Stufenweises Zooming für das
TPDFlibViewer-Steuerelement hinzugefügt:ZoomInStepundZoomOutSteprasten den Zoom auf die standardmäßige voreingestellte Sequenz (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 Prozent) ein, ausgehend vom aktuell wirksamen Zoom, sodass die Anpassungsmodi natürlich durchlaufen werden; die Zoomaktionen der Symbolleiste nutzen nun dieselbe Stufenleiter - Strg+Mausrad zoomt nun entlang der voreingestellten Stufenleiter, während das einfache Mausrad weiterhin scrollt
- Tastaturkurzbefehle hinzugefügt: Strg+'+' / '-' stufen den Zoom ab, Strg+1 / 2 / 3 wechseln zur Originalgröße, Breite anpassen und Seite anpassen, und Umschalt+Nach-oben / Nach-unten springen zur ersten und letzten Seite
Version 3.224.0
Added
CreateSelfSignedCertificatemit Delphi-, DLL- und ActiveX-Einstiegspunkten hinzugefügt: erzeugt ein selbstsigniertes RSA-Zertifikat (SHA-256-Signatur, konfigurierbarer Betreff, Gültigkeit und Schlüssellänge) und exportiert es mit seinem privaten Schlüssel in eine passwortgeschützte PFX-Datei, bereit fürSignFileund die Signaturprozess-APIs – so können Signatur-Workflows ohne externe Zertifizierungsstelle erstellt und getestet werden- Das Zertifikat wird in einem flüchtigen Schlüsselcontainer erstellt, der nach dem Export gelöscht wird; nur die PFX behält das Schlüsselmaterial, wobei selbstsignierte Zertifikate für Tests und interne Dokumente gedacht sind und von Viewern als nicht vertrauenswürdig eingestuft werden, es sei denn, sie werden explizit installiert
Version 3.223.0
Added
TPDFlibShapeWatermarkzur zusammensetzbaren Wasserzeichen-Ebene hinzugefügt: Rechtecke, Kreise, Ellipsen, Polygone, Bezier-Kurvenketten und gerade Linien werden mit Füll- und Strichfarben, Linienbreite und Deckkraft über denselbenApplyWatermark-Einstiegspunkt wie Text- und Bildwasserzeichen auf einen Seitenbereich gestempelt- Rechteck-, Kreis- und Ellipsenformen bestimmen ihre Größe über Width/Height; Polygon-, Kurven- und Linienformen beziehen ihre Geometrie aus
SetPoints(lokale X,Y-Paare), sodass das Neun-Punkt-Position-Raster und die benutzerdefinierte Platzierung für jede Formart gelten; degenerierte Geometrie (zu wenige Punkte) wird abgewiesen
Version 3.222.0
Added
AddLinkToEmbeddedPDFmit Delphi-, DLL- und ActiveX-Einstiegspunkten hinzugefügt: Ein Seiten-Hotspot, der ein im aktuellen Dokument eingebettetes PDF (unter seinem EmbeddedFiles-Namen) öffnet und dort zu einer ausgewählten Seite springt, unter Verwendung der standardmäßigen eingebetteten GeheZu-Aktion (/GoToE) von ISO 32000-1 §12.6.4.4 mit einer optionalen Anforderung für ein neues Fenster; die Dokumentversion erhöht sich automatisch auf PDF 1.6GetAnnotActionInfound die zugehörigen Outline-/Formularfeld-Geschwister erkennen nun eingebettete GeheZu-Aktionen und melden den neuen TypakGoToEzusammen mit dem Namen des eingebetteten Ziels, der Eltern-/Kind-Zielbeziehung, der optionalen Dateispezifikation und dem /NewWindow-Flag
Version 3.221.0
Added
SetSignProcessAppearanceTextmit Delphi-, DLL- und ActiveX-Einstiegspunkten hinzugefügt: Digitale Signaturen können nun ein automatisch generiertes, sichtbares Text-Erscheinungsbild anzeigen, das sich aus dem Namen des Unterzeichners, dem Grund, dem Ort und dem Signaturdatum zusammensetzt, mit optionalen beschreibenden Beschriftungen ("Signed by:", "Reason:", ...), die über eine Bitmaske ausgewählt werden- Der Textblock wird innerhalb des Signaturfeld-Rechtecks in Helvetica mit einer konfigurierbaren Farbe angeordnet; Schriftgröße 0 passt die Zeilen automatisch an das Feld an. Ein über
SetSignProcessFieldImageFromFilefestgelegtes Feldbild behält den Vorrang, und Dokument-Zeitstempelprozesse ignorieren das Text-Erscheinungsbild
Version 3.220.0
Added
- Interaktives Formularausfüllen zum
TPDFlibViewer-Steuerelement hinzugefügt: Das Klicken auf ein Kontrollkästchen oder ein Optionsfeld schaltet dieses um, und das Klicken auf ein Text- oder Auswahlfeld öffnet einen In-Place-Editor über dem Feld (Enter bestätigt, Escape bricht ab, Verlassen des Editors bestätigt); schreibgeschützte Felder werden nicht verändert und die geänderte Seite wird automatisch neu gerendert - Jeder Schreibvorgang löst das neue Ereignis
OnFormFieldValueChangedaus, undHighlightFormFieldsmitFormHighlightColorzeichnet einen durchscheinenden Hintergrund über jeden ausfüllbaren Bereich, sodass Benutzer Formularfelder erkennen können - Programmatische Gegenstücke
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldundCommitInplaceEditorhinzugefügt, welche dieselbe Engine ohne Mauseingabe steuern
Version 3.219.0
Added
- Anmerkungsinteraktion zum
TPDFlibViewer-Steuerelement hinzugefügt: Das Klicken auf eine Anmerkung, die kein Link ist, löst das neue EreignisOnAnnotClickmit Seite, Anmerkungsindex und Untertyp aus, undAnnotAtPagePointmacht den Treffertest programmatisch verfügbar (Popup-Begleiter werden übersprungen) - Das Bewegen des Mauszeigers über eine Anmerkung zeigt nun deren Contents-Text als Hinweis des Steuerelements an (der standardmäßig aktivierte Schalter
AnnotHintsarbeitet mit der StandardeigenschaftShowHintzusammen) SaveAnnotAttachmentToFilezum Schreiben der eingebetteten Datei einer FileAttachment-Anmerkung auf die Festplatte hinzugefügt, wodurch Click-to-Save-Workflows für Anhänge im Viewer vervollständigt werden
Version 3.218.0
Added
- Sitzungsübergreifenden Festplatten-Seitencache zum
TPDFlibViewer-Steuerelement hinzugefügt: Das Festlegen vonDiskCacheFolderspeichert gerenderte Seiten dauerhaft auf der Festplatte, sodass ein kürzlich angesehenes Dokument ohne erneutes Rendern sofort wieder geöffnet wird - Zwischengespeicherte Seiten werden durch einen Fingerabdruck aus Pfad, Größe und letzter Schreibzeit des Dokuments identifiziert, sodass die Bearbeitung der Datei deren veraltete Seiten automatisch ungültig macht; der Cache behält bis zu zehn Dokumente und entfernt die am längsten nicht verwendeten
- Zähler
DiskCacheHitshinzugefügt, der meldet, wie viele Seitenrenderings durch den Festplattencache eingespart wurden
Version 3.217.0
Added
- Unit
PDFlibViewerActionsmit zwanzig vorgefertigtenTAction-Nachkommen fürTPDFlibViewerhinzugefügt, sodass Symbolleisten und Menüs ohne Glue-Code funktionieren: Seitennavigation (First/Prior/Next/Last), Zoom (In/Out/FitWidth/FitPage/ActualSize), Ansichtsrotation (im/gegen den Uhrzeigersinn), Drucken, Dialoge zum Öffnen und Speichern von Dateien, Kopieren von ausgewähltem Text und die fünf Mauswerkzeug-Modus-Schalter - Jede Aktion zielt über ihre
Viewer-Eigenschaft auf einen Viewer und hält ihren aktivierten Zustand (Dokument geöffnet, Seitenposition, Auswahl vorhanden) sowie ihren ausgewählten Zustand (aktiver Zoom-Fit oder Mauswerkzeug) automatisch aktuell; alle Aktionen registrieren sich in der losLab PDF-Kategorie für den Action List-Editor TPDFlibViewer.EffectiveZoomPercenthinzugefügt, die den tatsächlich wirksamen Zoom (einschließlich berechneter FitWidth-/FitPage-Faktoren) zurückgibt, sodass Zoomstufen darauf aufbauen können
Version 3.216.0
Added
- Suchtreffer-Hervorhebung zum
TPDFlibViewer-Steuerelement hinzugefügt:HighlightSearchHitsdurchsucht das gesamte Dokument und zeichnet einen durchscheinenden Balken über jede Übereinstimmung, der beim Scrollen, Zoomen und Rotieren an seiner Position bleibt, mitClearSearchHighlights,SearchHighlightCountund einer konfigurierbarenSearchHighlightColor TPDFlibSearchPanel.RunSearchzeichnet nun auch die Trefferbalken im angehängten Viewer (die neue, standardmäßig aktivierte EigenschaftHighlightInViewschaltet dies aus), sodass Suchergebnisse auf den Seiten und nicht nur in der Trefferliste sichtbar sind
Version 3.215.0
Added
- Mauswerkzeug-Modi zum
TPDFlibViewer-Steuerelement über die neue EigenschaftViewerModehinzugefügt:vmSelectTextauswahl (Standard),vmHandVerschieben durch Ziehen mit einem Greif-Cursor (ein einfacher Klick folgt weiterhin Links),vmZoomAuswahllisten-Zoom, der den gezogenen Bereich vergrößert, um den Viewport auszufüllen,vmSnapshotBereichserfassung in die Zwischenablage undvmHighlightdauerhafte durchscheinende Bereichshervorhebung CaptureRegionzum Rendern eines beliebigen Client-Bereichs (Seiten plus Hervorhebungen) in eine aufruferseitig verwaltete Bitmap, das EreignisOnSnapshotund den SchalterSnapshotToClipboardfür die Snapshot-Handhabung sowieAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountmit einer konfigurierbarenHighlightColorfür seitenverankerte Hervorhebungen, die Zoom, Rotation und Navigation überdauern, hinzugefügt
Version 3.214.0
Added
- Druckfunktion zum
TPDFlibViewer-Steuerelement hinzugefügt:PrintDoczeigt den Standard-Windows-Druckdialog (Druckerauswahl, Seitenbereich, Kopien, Sortierung) an und übergibt den Auftrag an die Druck-Engine der Bibliothek, währendPrintDoc(False)das gesamte Dokument ohne Benutzeroberfläche auf dem Standarddrucker ausdruckt PrintDocRangefür vollständig programmatisches Viewer-Drucken mit explizitem Druckernamen, Seitenbereich, Kopienanzahl und Sortierungsflag hinzugefügt
Version 3.213.0
Added
- Ansichtsrotation zum
TPDFlibViewer-Steuerelement hinzugefügt:RotateClockwise90undRotateAntiClockwise90drehen die angezeigten Seiten in 90-Grad-Schritten, und die EigenschaftViewRotationliest oder schreibt den Winkel direkt (0, 90, 180 oder 270) - Die Rotation ist ein reines Ansichtsattribut: Das Dokument wird niemals geändert, das Klicken auf Links und die Textauswahl funktionieren in jedem Winkel weiterhin, die Zoommodi "Breite anpassen" und "Seite anpassen" passen sich an die rotierte Seitenform an, und das Öffnen eines neuen Dokuments setzt die Ansicht auf 0 Grad zurück
- Rotierte Seiten-Bitmaps werden pro Winkel zwischengespeichert, sodass das Umschalten zwischen Winkeln vorherige Renderings wiederverwendet, anstatt neu zu rendern
Version 3.212.0
Changed
- Kompatibilität von XFA-Datensätzen mit SOM-Pfaden verbessert:
GetXFAFormFieldValueundSetXFAFormFieldValueakzeptieren nun einfache Prädikatsselektoren im FormCalc-Stil wie$data.Receipt.Detail.[Total_Price > 200].Descriptionund aktualisieren jeden passenden Datenknoten, wenn ein Prädikat eine Teilmenge auswählt
Version 3.211.0
Changed
- Kompatibilität von XFA-Datensätzen mit SOM-Pfaden verbessert:
GetXFAFormFieldValueundSetXFAFormFieldValueakzeptieren nun Data-DOM-Klassenselektoren#dataGroupund#dataValuemit numerischem Vorkommen oder Platzhaltern, was klassenbasierte Pfade wie$data.Receipt.#dataGroup[0].#dataValue[0]ermöglicht
Version 3.210.0
Changed
- Kompatibilität von XFA-Datensätzen mit SOM-Pfaden verbessert:
GetXFAFormFieldValueundSetXFAFormFieldValueakzeptieren nun den Stamm$recordin Paketen ohne Datensatzverarbeitung, sodass Pfade wie$record.Taxund$record/Detail[0]/Total_Priceaus dem äußeren Datensatz-Element aufgelöst werden
Version 3.209.0
Changed
- XFDF-Anmerkungsaustausch verbessert: Anmerkungsexporte schreiben nun standardmäßige Rahmenstil-Attribute
width,styleunddashesaus PDF-Anmerkungswerten/BS, und Anmerkungsimporte stellen diese Attribute bei eingefügten Anmerkungen wieder her
Version 3.208.0
Changed
- XFDF-Anmerkungsaustausch verbessert: Anmerkungsexporte schreiben nun standardmäßige Attribute
creationdateundopacityaus PDF-Anmerkungswerten/CreationDateund/CA, und Anmerkungsimporte stellen diese Attribute bei eingefügten Anmerkungen wieder her
Version 3.207.0
Changed
- XFDF-Anmerkungsaustausch verbessert: Anmerkungsexporte schreiben nun standardmäßige Namen für
flagsaus PDF-Anmerkungswerten/F, und Anmerkungsimporte stellen diese Namen in den Flags der eingefügten Anmerkungen wieder her
Version 3.206.0
Changed
- Kompatibilität von XFA-Datensätzen mit SOM-Pfaden verbessert:
GetXFAFormFieldValueundSetXFAFormFieldValueakzeptieren nun direkte Kind-Platzhalter-Selektoren wie$data.Receipt.*.Total_Pricezum Lesen oder Aktualisieren passender Kind-Zweige, ohne gleichnamige Felder auf dem übergeordneten Knoten auszuwählen
Version 3.205.0
Changed
- Kompatibilität von XFA-Datensätzen mit SOM-Pfaden verbessert:
GetXFAFormFieldValueundSetXFAFormFieldValueakzeptieren nun Nachkommen-Selektoren wie$data..Total_Priceund$data.Receipt..Total_Pricezum Lesen oder Aktualisieren des ersten übereinstimmenden Nachkommen-Datenknotens
Version 3.204.0
Changed
- Kompatibilität von XFA-Datensätzen mit SOM-Pfaden verbessert:
GetXFAFormFieldValueundSetXFAFormFieldValueakzeptieren nun die Eigenschaftparentin Pfaden wie$data.Receipt.Detail[1].parent.Taxzum Lesen oder Aktualisieren der Geschwisterdaten des Vaters eines ausgewählten Knotens
Version 3.203.0
Changed
- SOM-Vorkommensbehandlung für XFA-Datensätze verbessert:
GetXFAFormFieldValueundSetXFAFormFieldValueunterstützen nun[*]-Selektoren wie$data.Receipt.Detail[*].Total_Pricezum Lesen oder Aktualisieren jedes passenden wiederholten Datenknotens
Version 3.202.0
Changed
- XFA SOM-Pfadkompatibilität verbessert: XFA-Datensätze und Template-Feld-APIs behalten nun literale Punkte in durch Schrägstriche getrennten Feldpfaden bei und akzeptieren maskierte Punkte wie
Line\.Itemin durch Punkte getrennten SOM-Pfaden
Version 3.201.0
Changed
- Pfadkompatibilität von XFA-Datensätzen verbessert: APIs für XFA-Feldwerte akzeptieren nun durch Schrägstriche getrennte Pfade nach Standard-Daten-SOM-Stämmen wie
$data/...,xfa.datasets.data/...undxfa.datasets/...
Version 3.200.0
Changed
- SOM-Kompatibilität von XFA-Datensätzen verbessert: APIs für XFA-Feldwerte akzeptieren nun die standardmäßige Kurzform
!data..., einschließlich durch Schrägstriche getrennter!data/...-Pfade
Version 3.199.0
Changed
- XFA-Template-Pfadkompatibilität verbessert: APIs für die Template-Bearbeitung akzeptieren nun durch Schrägstriche getrennte Feldpfade, die von der XFA-Feldnamensaufzählung zurückgegeben werden, einschließlich
$template/...-Pfade
Version 3.198.0
Changed
- Namensraumkompatibilität von XFA-Datensätzen verbessert: APIs für Feldwerte lesen und aktualisieren Datenknoten nun anhand des lokalen XML-Namens, wenn die Geschäftsdaten innerhalb des Datensatzpakets ihr eigenes Namensraumpräfix verwenden, und die Feldnamensaufzählung gibt präfixfreie Pfade zurück
Version 3.197.0
Changed
- XFDF-Anmerkungsaustausch verbessert: Anmerkungsexporte enthalten nun die gemeinsamen Attribute
nameunddateaus PDF/NMund/M, Anmerkungsimporte stellen diese Werte bei eingefügten Anmerkungen wieder her, undSetAnnotStrPropertyakzeptiert nun Tag 104 für das Änderungsdatum von Anmerkungen
Version 3.196.0
Changed
- XFA-Feldnamensaufzählung verbessert: Feldlisten-APIs scannen nun jeden übergeordneten Datensatz im Datensatzpaket und geben Blattdatenfelder zurück, ohne Containergruppen als Felder hinzuzufügen
Version 3.195.0
Changed
- Kompatibilität von XFA-Datensätzen verbessert: APIs für XFA-Feldwerte lesen und aktualisieren nun vollständige XDP-Pakete, deren Datensatzpaket ein präfixfreies
data-Element verwendet
Version 3.194.0
Fixed
- Aktualisierungen von XFA-Template-Feldern verbessert: APIs für XFA-Template-Felder akzeptieren nun Standard-Template-SOM-Stämme wie
$templateundxfa.template, und reine Template-Änderungen in vollständigen XDP-Streams werden korrekt gespeichert
Version 3.193.0
Changed
- XFA-Feldadressierung verbessert: APIs für XFA-Feldwerte akzeptieren nun zusätzlich zu relativen Feldpfaden Standard-Daten-SOM-Stämme wie
$dataundxfa.datasets.data
Version 3.192.0
Changed
- XFA-XML-Paketbehandlung verbessert: XFA-Streams mit UTF-16-Byte-Reihenfolgemarken oder UTF-16-XML-Byte-Mustern werden nun vor dem XML-Parsing decodiert, sodass UTF-16-codierte Formularwerte über APIs für das Lesen/Schreiben von XFA-Feldern verfügbar bleiben
Version 3.191.0
Changed
- Erstellung von XFA-Paketen verbessert:
SetXFAFromStringerstellt nun den erforderlichenAcroForm-Container, wenn ein Dokument noch keine Formulardaten enthält, ersetzt den veralteten geparsten XFA-Zustand, wenn ein vollständiges XFA-Paket gespeichert wird, und hält das gespeicherte Paket über APIs für das Lesen/Schreiben von XFA-Feldern verfügbar
Version 3.190.0
Changed
- XFDF-Anmerkungsaustausch verbessert: Anmerkungsexporte schreiben nun das gemeinsame Attribut
coloraus dem PDF/CRGB-Array, und Anmerkungsimporte stellen nuncolor="#RRGGBB"-Werte im Farb-Array der eingefügten Anmerkung wieder her
Version 3.189.0
Added
- XFDF-Anmerkungsaustausch-APIs hinzugefügt:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFundImportAnnotationsFromXFDFStringlesen und schreiben nun ISO 19444<annots>-Daten für textbasierte Anmerkungskommentare, einschließlich Seiten-, Rechteck-, Titel-, Betreffs- und reinen Inhaltsdaten
Version 3.188.0
Changed
- XFDF-Richtextfeld-Import verbessert: Felder mit
<value-richtext>behalten nun die Richtext-XML im FeldwertRVbei, während sie weiterhin den reinen<value>-Fallback anwenden, sofern vorhanden
Version 3.187.0
Changed
- XFDF-Formulardatenaustausch für Mehrfachauswahlfelder verbessert: Wiederholte
<value>-Elemente werden nun in das Array der ausgewählten Werte importiert, und der Export eines Mehrfachauswahlfelds schreibt nun ein<value>-Element pro ausgewähltem Element, anstatt sie in einen einzigen maskierten Textknoten abzuflachen
Version 3.186.0
Changed
- XFDF-Formulardatenexport für Richtextfelder verbessert: Felder mit einem
RV-Richtextwert enthalten nun ein<value-richtext>-Element, während der reine<value>-Fallback beibehalten wird
Version 3.185.0
Changed
- XFDF-Formulardatenimport für Richtextfelder verbessert: Wenn ein Feld
<value-richtext>ohne einen reinen<value>bereitstellt, extrahiert der Importer nun den XHTML-Textinhalt und wendet ihn auf das entsprechendeAcroForm-Feld an, anstatt das Feld zu überspringen
Version 3.184.0
Changed
- XFDF-Formulardatenaustausch verbessert: Exporte verwenden nun den Standard-XFDF-Namespace mit
xml:space="preserve", geben geschachtelte<field>-Elemente für hierarchischeAcroForm-Namen aus, überspringen nicht-terminale Elternfeldwerte, schreiben Dateiexporte alsUTF-8und importieren leerzeichenflexibles XFDF mit geschachtelten Feldern, in einfachen Anführungszeichen gesetzten Attributen,CDATA,XML-Entitäten und numerischen Zeichenreferenzen
Version 3.183.0
Added
SanitizeDocument(Flags)hinzugefügt, das sensible Inhalte in einem einzigen Aufruf entfernt: löscht jegliches globale JavaScript, entfernt das OpenAction-Verzeichnis im Catalog, entfernt /A-Aktionen aus jeder Anmerkung, leert Author/Subject/Keywords/Creator/Producer-Metadaten (sowohl /Info als auch XMP) und löscht optional alle Anmerkungen. Die Flag-BitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONlassen sich kombinieren;SANITIZE_ALLwendet jede Bereinigung an (schließt das klassische Datenleck, bei dem eine Schwärzung zwar sichtbare Inhalte entfernt, Metadaten oder versteckte Skripte jedoch wiederherstellbar bleiben)TPDFAnnots.RemoveAnnotAction(Index)hinzugefügt, um das /A-Aktionsverzeichnis aus einer einzelnen Anmerkung zu entfernen (wird vonSanitizeDocumentverwendet, ist aber auch eigenständig nützlich)
Version 3.182.0
Added
- Von
EnumPageElementszurückgegebene Bildelemente enthalten nun ihr tatsächliches Platzierungsrechteck (Left/Top/Right/Bottom) anstelle von Nullen. Unterstützt durch eine neue MethodeTPDFContentProgram.EnumImagePlacements, die den Inhaltsstrom durchläuft, die CTM (cm/q/Q) verfolgt und das 1x1-Einheitsquadrat jedesDo-Operators in Seitenkoordinaten abbildet - Vier Showcase-Demos hinzugefügt: DocumentProperties (DocInfo/Seitenbox/Rotation/Übergang/Viewer-Einstellungen/XMP-Roundtrip), FormProperties (Eigenschaftsraster pro Feld: Typ/Wert/Schreibgeschützt/MaxLength/MultiLine/Beschreibung), SignatureValidator (Signaturfelder auflisten + überprüfen + Unterzeichnerzertifikat), Reader (VCL TPDFlibViewer mit Öffnen/Navigieren/Zoomen/Textkopieren)
Version 3.181.0
Added
SetXMPPropertyhinzugefügt, das die vorhandene schema-bewusste XMP-Engine (PDFlibXMP) über die öffentliche Fassade bereitstellt: Setzen Sie jede beliebige Eigenschaft von Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:) oder XMP Media Management (xmpMM:) über Namespace + Schlüssel, ohne RDF-XML manuell schreiben zu müssenImportFormDataFromFDF/ImportFormDataFromFDFStringhinzugefügt, die ein FDF-/Fields-Array (jeweils<< /T (name) /V (value) >>) analysieren und jeden Wert auf das übereinstimmendeAcroForm-Feld nach Titel anwenden, wobei die Escape-Sequenzen von EscapePDFText (Oktal/Klammer) umgekehrt werden (schließt die asymmetrische Lücke des reinen Exports)ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfür den bidirektionalen XFDF-Austausch (XML Forms Data Format - das moderne XML-Gegenstück zu FDF) hinzugefügt- Die sechs Namespace-spezifischen XMP-Setter (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) wurden aufTPDFlibXMPöffentlich gemacht, damit fortgeschrittene Aufrufer die Engine direkt steuern können
Version 3.180.0
Added
SearchAndReplaceTextInContenthinzugefügt, das eine ECHTE Textersetzung im Inhaltsstrom durchführt (durch direktes Überschreiben der Textanzeige-Operatoren Tj/TJ/'/" viaTPDFContentProgram.ReplaceTextRun), im Gegensatz zum bestehenden maskenbasiertenSearchAndReplaceText, das nur ein Rechteck über die ursprünglichen Glyphen legt. Der Originaltext ist aus dem Datenstrom gelöscht und kann nicht wiederhergestellt werden. Findet Übereinstimmungen viaSearchText, ordnet jedes Treffer-Rechteck überFindInstructionsInRectseiner abdeckenden Anweisung zu, schreibt diese um und schreibt die Ebene zurück
Version 3.179.0
Added
- Strukturierten internen Logger (
TPDFlibLogger) in einer neuen UnitLib/PDFlibLogger.pashinzugefügt, mit vier Stufen (Debug/Info/Warn/Error), einem Host-Callback (OnLog), einem optionalen threadsicheren Dateiausgabepfad und einer Fehlercode-zu-Nachrichten-Zuordnung (PDFlibErrorMessage), die den vorhandenen numerischen Codes (1xx/3xx/4xx/5xx) endlich lesbaren Text zuweist. Bereitgestellt aufTPDFlibüber die EigenschaftLogger RenderPagesToFilesParallelhinzugefügt, das einen Seitenbereich in eine Datei pro Seite rendert, unter Verwendung einesTTask-Pools mit einerTPDFlib-Instanz pro Worker (TPDFlib ist nicht threadsicher) undCoInitializepro Thread für die GDI+-Apartment-Sicherheit. Skaliert bei CPU-gebundener Rasterausgabe nahezu linear mit den CPU-Kernen
Version 3.178.0
Added
EnumCertificateshinzugefügt, um jedes Zertifikat in einem Windows-Systemzertifikatspeicher ("MY", "Root", ...) aufzulisten, wobei Betreff, Aussteller, Seriennummer, Gültigkeitszeitraum, HasPrivateKey und Qualified (eIDAS QCStatements-Erweiterung, OID 0.4.0.1862.1.7, erkannt über einen neuen integrierten DER-Decoder in PDFlibASN1) zurückgegeben werden - ersetzt die bisherige Beschränkung vonSetSignProcessCertFromStoreauf ein einzelnes Zertifikat per Common Name (CN)SetSignProcessCertFromStoreByHandlehinzugefügt, um ein Signaturzertifikat über das durch Auflistung erhaltene rohe PCCERT_CONTEXT-Handle auszuwählen, sodass Aufrufer nach beliebigen Kriterien (qualifizierter Filter, Gültigkeit, Fingerabdruck) anstelle von nur Subject CN auswählen könnenRedactRegionhinzugefügt, das Text, Vektorpfade und Bild-XObjects, deren gezeichneter Bereich ein Rechteck schneidet, wirklich entfernt (durch Bearbeitung des Inhaltsstroms, sodass entfernte Inhalte im Gegensatz zuMaskRect, das sie nur abdeckt, nicht wiederhergestellt werden können), mit optionaler schwarzer Füllung und /Redact-Anmerkung. Unterstützt durch einen CTM-verfolgenden Inhaltsstrom-Analysator in PDFlibContentModel (FindInstructionsInRect)- Minimale DER-Decoder-Funktionen (
DERDecodeLength,DERFindExtensionByOID) zu PDFlibASN1 hinzugefügt, um Zertifikatserweiterungen in-process ohne CryptDecodeObjectEx zu untersuchen
Version 3.177.0
Added
- Seiten-Stitching-APIs hinzugefügt, die vorhandene Seiten über Vektor-Form-XObject-Erfassung in neue Layouts zusammensetzen (behält die volle Vektortreue im Gegensatz zur Verkettung von Inhaltsströmen bei):
StitchPageOverlaylegt eine Seite an einer Position mit optionaler Deckkraft über eine andere,StitchPagesSideBySideplatziert zwei Seiten links/rechts auf einer neuen breiteren Seite, undStitchPagesVerticallystapelt einen Seitenbereich auf eine neue hohe Seite im Posterformat - Kombinierbare Wasserzeichen-Vorlagenebene in einer neuen Unit
Lib/PDFlibWatermark.pashinzugefügt:TPDFlibWatermarkBasemit Neun-Punkte-Positionierung (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermarkundTPDFlibCompositeWatermark, die eine Liste von Unterwasserzeichen auf einen gemeinsamen Seitenbereich anwendet TPDFlib.ApplyWatermarkals praktischen Einstiegspunkt hinzugefügt, der an den eigenen Seitenbereich und die Einstellungen einer Wasserzeichenvorlage delegiert
Version 3.176.0
Added
- Benannte Konstanten für das Rendering-Ausgabeformat (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUALusw.) hinzugefügt, die 1:1 auf die vonRenderPageToFile,RenderPageToStream,RenderPagesToFilesundRenderDocumentToFileakzeptierten ganzzahligenOptions-Werte abgebildet werden TPDFlibMetafileFormat-Enum und die praktischen MethodenRenderPageToMetafileStreamsowieRenderPageToMetafileFilehinzugefügt, die eine benannte Metadateivariante (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) anstelle einer reinen Ganzzahl akzeptieren- Ausgabemodus EMF+ Dual (Options-Wert 11 / mfEMFDual) hinzugefügt, der sowohl GDI- als auch GDI+-Befehle in derselben Metadatei aufzeichnet, um die Kompatibilität mit älteren, reinen GDI-Consumern zu gewährleisten
TPDFlibClipboardFormat-Enum undRenderPageToClipboardhinzugefügt, wodurch eine gerenderte Seite als erweiterte Metadatei (CF_ENHMETAFILE), DIB-Bitmap (CF_DIB), Seiten-Unicode-Text (CF_UNICODETEXT) oder alle drei gleichzeitig in die Windows-Zwischenablage kopiert wird- Neue Unit
Lib/PDFlibClipboard.pasmit Low-Level-Win32-Zwischenablage-Hilfsmitteln hinzugefügt, die vonRenderPageToClipboardverwendet werden - Vollständige DPI-Erkennung pro Monitor (Per-Monitor DPI Awareness) für
TPDFlibViewerhinzugefügt: eine neue öffentliche EigenschaftScreenDPI, einCreateWnd-Override, das die DPI des Host-Monitors überGetDpiForWindow(mit einem Fallback aufGetDeviceCaps) automatisch erkennt, und einWM_DPICHANGED-Handler, der das Layout neu aufbaut und den Bitmap-Cache leert, wenn das Fenster zwischen Monitoren verschoben wird TPDFRenderer.SetEMFPlusMetafileTypehinzugefügt, um auf Rendererebene zwischen EMF+-Only- und EMF+-Dual-Aufzeichnung zu wählen
Fixed
- Referenzseite von
RenderPageToFilekorrigiert, auf der die Options-Werteliste fälschlicherweise in der Page-Zeile platziert war und die Options-Zelle leer blieb
Version 3.175.3
Added
- Unit Lib/PDFlibTableExport.pas hinzugefügt, die jedes beliebige
TDataSet(FireDAC, ClientDataSet, Abfrageergebnis) in eine paginierte PDF-Tabelle mit gestaltetem Header, Zebrastreifen, rechtsbündigen numerischen Spalten und automatischem Seitenumbruch rendert, sowie eine Konsolendemo Demo/Delphi/DataSetExport, die das RAD Studio-Beispiel customer.FDS über FireDAC lädt und exportiert
Version 3.175.2
Added
- End-to-End-Projekte unter Demo/ReportBridges hinzugefügt, die einen minimalen Bericht in FastReport, QuickReport und ReportBuilder erstellen und über die passende Addons-Brücke als PDF exportieren, mit einer dedizierten build-ReportBridges.cmd, die die Quellpfade der Engine und Gating-Symbole bereitstellt, sodass der Standard-Demo-Build die Projekte weiterhin als Stubs kompiliert
Version 3.175.1
Added
- Delphi-Demo für eine JBIG2-Optionen-Matrix hinzugefügt, die Kombinationen aus SymbolExtract, SkipBlackDots, BlackDotSize und LossyLevel gegen CCITT G4- und Flate-Baselines vergleicht, mit zeilenweisen PDF-, CSV- und Zusammenfassungs-Ausgaben
- Delphi-Muster-Showcase-Demo hinzugefügt, das axiale und radiale RGB-Shader, einen Coons-Patch-Mesh-Shader und ein benutzerdefiniertes Kachelmuster abdeckt, das als Füllung, Kontur und Textfarbe angewendet wird
- Delphi-CCITT-Fax-Matrix-Demo hinzugefügt, das Group 3 1-D, Group 3 2-D und Group 4-Kompression mit den Optionsbits BlackIs1 und Interpolate vergleicht und jede Ausgabegröße sowie den resultierenden /Filter-Namen meldet
- Export-Brücken für FastReport, QuickReport und ReportBuilder unter Addons hinzugefügt, die einen vorbereiteten Bericht jeweils über die nativen Objekt-, Metadatei- und DrawCommand-Oberflächen der Engine in ein PDFlibPas-PDF rendern
Version 3.175.0
Changed
- Demo WorkflowGallery um eine Anmerkungsvarianten-Matrix erweitert, die Texthervorhebungsfüllungen, Markup-Stile, Notizensymbole, Freitext, Caret- und Stempelanmerkungen in begleitenden CSV- und HTML-Berichten aufzeichnet
Version 3.174.0
Changed
- C++Builder-Demo AdvancedWorkflowMatrix erweitert, um Aktionsnavigation, PDF/A- und AcroForm-Workflows, Schriftartendiagnose, Streaming-Bereitstellung und die neuesten Scan-Komprimierungshilfen in die generierten Matrixberichte einzubinden
Version 3.173.0
Added
- DeliveryWorkflowMatrix Delphi-Demo für gestreamte Web- und CGI PDF-Ausgabe, Seitenvorschaubild-Validierung und Wasserzeichen-Bereitstellungs-Workflows unter Verwendung eines einzigen generierten PDF-Bytepuffers hinzugefügt
Version 3.172.0
Added
- Praktische Gliederungsbaum-APIs für geordnete Geschwister-Einfügung, Kind-Erstellung, Teilbaum-Löschung und Gliederungsaufzählung mit Betreff, Geschwister, Ebene, Zielseite, Gliederungszustand und Titeldetails hinzugefügt
Version 3.171.0
Added
- Konsolendemo FontDiagnosticsMatrix Delphi für CJK- und Unicode-Schriftpfade, TrueType-Subset-Updates, Prüfungen installierter Schriftarten, Dokumentschriftarten-Auflistung und Schriftartendiagnoseberichte hinzugefügt
Version 3.170.0
Added
- Konsolendemo CanvasMigrationMatrix Delphi für Canvas DC-Migration, rohe Inhalts- und Pfadeinstiegspunkte, Delphi-Farbhilfen, musterbasierten Text, Wasserzeichen, Seitenvorschau-Workflows und gerenderte Validierungsvorschauen hinzugefügt
Version 3.169.0
Added
- Spezielle Delphi-Konsolendemos LayerCompositionMatrix, TransparencyMaskMatrix und ComplianceFormWorkflowMatrix für optionale Inhalts-Druck-/Exportrichtlinien, Pattern-/Form-XObject-Komposition, Transparenzmaskenvergleich, PDF/A-1b-Erfolgs- und -Fehlerbeispiele, AcroForm-Aktionsworkflows, Darstellungswiederaufbau und sichtbare Signaturvorlagen hinzugefügt
Version 3.168.0
Added
- Spezielle Delphi-Konsolendemos ImageCompressionMatrix und SecurityPermissionMatrix mit generierten PDF-, CSV- und HTML-Berichten für die Auswahl der Bildkomprimierungsstrategie, Scan-Komprimierung, JPEG-Renderqualität und die Überprüfung verschlüsselter Berechtigungsprofile hinzugefügt
Version 3.167.0
Added
- Benannte Hilfs-APIs für JBIG2-Bitmap-Codierung, EMF-Importoptionen, AcroForm-Ereignisaktionen und verkettete Aktionen hinzugefügt, sodass Aufrufer explizite Optionsschalter anstelle der manuellen Erstellung ganzzahliger Bitmasken verwenden können
Version 3.166.0
Added
- Ausführbare Konsolendemo C++Builder AdvancedWorkflowMatrix mit PDF-, CSV- und HTML-Ausgaben hinzugefügt, die erweiterte Canvas-Migration, EMF-Import, Bildkomprimierung, AcroForm, Signatur, Sicherheit, PDF/A, optionale Inhalte, Muster und Form-XObject-Workflows auf C++Builder-Projekteinstiegspunkte abbildet
Version 3.165.0
Added
- Delphi-Demo für eine Aktions-Navigations-Matrix hinzugefügt, die Dokumentöffnungs-Aktionen, JavaScript auf Dokumentebene, eingebettete Dateilinks, Remote-GoTo-Links, AcroForm-Ereignisaktionen, Submit/Reset/Hide-Linkhilfen und verkettete Next-Aktionen mit PDF-, CSV- und HTML-Ausgaben demonstriert
Fixed
- Hilfsfunktionen für Remote-Dateilinks korrigiert, sodass AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest und Links zum Starten lokaler Dateien eine Anmerkung erstellen und zurückkehren, anstatt unendlich zu schleifen
Version 3.164.0
Hinzugefügt
- Eine Delphi-PDF/A-Prüfmatrix-Demo that checks early rejection or allowed-path decisions for PDF/A mode setup, transparency, blend modes, encryption, JavaScript, multimedia, embedded files, and PDF/A-3 associated-file workflows, with generated PDF, CSV, and HTML reports
Version 3.163.0
Hinzugefügt
- Eine explizite ReportAdapter-Brückenmatrix for FastReport, QuickReport, ReportBuilder, DBGrid, and custom canvas export paths, including generated CSV and HTML mapping output plus a PDF page that shows the reusable adapter strategy
Version 3.162.0
Hinzugefügt
- Eine erweiterte Workflow-Demo-Matrix that generates concrete outputs for canvas migration, EMF import options, image compression comparisons, AcroForm action workflows, visible empty signatures, security permissions, PDF/A-1b checks, optional content, tiling patterns, Form XObjects, DBGrid-style table export, and large-file peak memory reporting
Version 3.161.0
Hinzugefügt
- Delphi-Hilfsfunktionen für kompakte Open-Document-Aktionskonstruktion, form-field visibility event actions, TColor and gray color setters, and direct raw content, path, text, and matrix content stream injection
Version 3.160.0
Hinzugefügt
- Delphi-Hilfsfunktionen für Bitmap-zu-JBIG2-Scanned-Image-Komprimierung, one-call image mask and color-key transparency setup, GoTo action chaining, and readable AcroForm event names for JavaScript or existing action assignment
- Erweitert
ImportEMFFromFileExundImportEMFFromStreamExso theirOptionsflags can force bitmap import, enable EMF color-image JPEG recompression, and request GDI+ processing controls
Version 3.159.1
Geändert
- Verbessert wurde
SaveToStreamund das Speichern über gebundene Ausgabestreams so large PDF stream objects are written in bounded chunks instead of copying each stream object into one intermediate output string
Version 3.159.0
Hinzugefügt
- Bildplatzierungs-Hilfsfunktionen ergänzt that draw or fit a specified image and release its handle immediately afterward, with Delphi, DLL, and ActiveX entry points for lower peak memory in one-use image generation workflows
RenderPageToMonochromeFileExfür 1-Bit-BMP-Rendering mit Schwellwertkonvertierung und Bereinigung isolierter schwarzer Pixel vor Workflows zur Komprimierung gescannter Bilder hinzugefügt
Version 3.158.1
Hinzugefügt
- Delphi-Workflow-Demos für wiederverwendbaren Report-Export, RichEdit-to-EMF rich text import, and combined page-thumbnail, annotation, form XObject, table, compression, JavaScript, and bound-stream output scenarios
Version 3.158.0
Hinzugefügt
- Steuerungs-APIs für die Metadatenverschlüsselung with Delphi, DLL, and ActiveX entry points: SetEncryptMetadata can write Standard-security PDFs with unencrypted XMP metadata streams, while GetEncryptMetadata reports the pending or loaded /EncryptMetadata state
Version 3.157.0
Hinzugefügt
- Direkte APIs zum Zeichnen von Kachelmustern with Delphi, DLL, and ActiveX entry points: BeginTilingPattern creates a temporary pattern cell drawing surface, EndTilingPattern registers it as a reusable pattern, and CancelTilingPattern discards the build without leaving a named pattern behind
Version 3.156.0
Hinzugefügt
- Delphi-Hilfsfunktionen für gebundene Ausgabestreams:
BeginOutputToStream,EndOutputStream,CancelOutputStream, andOutputStreamActivelet streaming, web, and report-export code bind a targetTStream, finish it through the existing chunked writer, or cancel the pending target without taking stream ownership
Version 3.155.0
Hinzugefügt
Abort,AbortedundResetAbortergänzt for Delphi, DLL, and ActiveX callers so applications can mark an instance as cancelled and prevent save or append output operations from starting until the flag is cleared
Version 3.154.0
Hinzugefügt
- Hilfsfunktionen für Seitenminiaturen for image import options and in-memory sources, optional-content group lookup and state setters by group name, and
SetOpenActionNamedDestinationfor document-open jumps through named destinations
Behoben
GetDestNamelöst jetzt explicit destination array handles, including arrays returned from a named document open action
Version 3.153.0
Hinzugefügt
- Komfort-APIs für verkettete Formularaktionen, Hide and ImportData field triggers, initial optional-content group states, optional EMF imports, and color-key transparent image imports
Version 3.152.0
Hinzugefügt
- Automatische Erstellung von URL-Links for text drawing, CCITT Group 3/4 image import helpers, JBIG2 direct-image helpers, EMF extended import wrappers, image mask attachment helpers, visible signature field creation, and form-field event/action helpers for JavaScript, SubmitForm, and ResetForm workflows
Version 3.151.0
Hinzugefügt
DrawPie,DrawChord,DrawEllipticPieundDrawEllipticChordergänzt for explicit closed circular and elliptic arc drawing with outline, fill, or fill-and-outline modes
Version 3.150.0
Hinzugefügt
NewGraphicsStateundSetGraphicsStateergänzt so callers can create reusable ExtGState resources for combined fill transparency, stroke transparency, line width, line cap, line join, and miter-limit settings
Version 3.149.1
Behoben
- Doppelte ActiveX-Dispatch-IDs behoben for the Form XObject and miter-limit methods so late-bound COM callers resolve each method unambiguously
Version 3.149.0
Hinzugefügt
SetMiterLimitergänzt for paths that use miter joinsBeginFormXObject,EndFormXObjectundCancelFormXObjectüber die DLL- und ActiveX-APIs verfügbar gemacht through the DLL and ActiveX APIs
Version 3.148.0
Hinzugefügt
- Wiederverwendbare Form-XObject-Builder-APIs ergänzt:
BeginFormXObject,EndFormXObject, andCancelFormXObjectlet callers draw a reusable template with normal page drawing calls and place it repeatedly through captured-page drawing APIs
Version 3.147.0
Hinzugefügt
SetTextTilingPatternundSetLineTilingPatternergänzt so captured-page tiling patterns can be reused for text, underline, and stroked graphics without duplicating drawing commands
Behoben
- Kontur-Shader- und Kachelmusterfarben schreiben jetzt den Konturmuster-Farboperator, statt den Nichtkontur-Farbzustand zu aktualisieren
Version 3.146.0
Hinzugefügt
BeginOptionalContentundEndOptionalContentergänzt so callers can mark only subsequent drawing commands with an optional content group without rewriting the existing content stream
Behoben
- Bereichsschließende Marked-Content-Operatoren werden jetzt sofort ausgegeben, wenn optionale Inhalte, Tagged-PDF- oder Artefakt-Bereiche am Ende eines Inhaltsstroms geschlossen werden
Version 3.145.0
Hinzugefügt
SetTransparencyExergänzt so callers can set separate fill and stroke transparency values for subsequently drawn text and graphics while keeping the existing PDF 1.4 auto-upgrade behavior
Version 3.144.0
Hinzugefügt
AddLinkToNamedDestinationergänzt so a page hotspot can jump to a same-document named destination without resolving the target page at link creation time
Behoben
- Anmerkungsaktionsleser geben jetzt keine Aktion zurück for pages without annotations instead of dereferencing an empty annotation cache
Version 3.143.0
Hinzugefügt
- Formularfeld-Aktionsverwaltungs-APIs ergänzt so callers can bind an existing action to a field trigger, inspect the typed trigger action, and remove primary or additional field actions
Behoben
FormFieldJavaScriptActionlehnt jetzt PDF/A documents and invalid trigger names instead of writing non-conforming field action dictionaries
Version 3.142.0
Hinzugefügt
- Aktionsverkettungs-APIs ergänzt so callers can append URI, named, and JavaScript next-actions to an existing annotation, outline, or form-field action and inspect chained actions through
GetActionNextCountandGetActionNextInfo
Version 3.141.0
Hinzugefügt
AddLinkToSubmitFormundAddLinkToResetFormhinzugefügt, sodass Seiten-Hotspots AcroForm-Felder über Standard-PDF-Aktionen ohne JavaScript übermitteln oder zurücksetzen können
Version 3.140.0
Hinzugefügt
AppendToStreamhinzugefügt, sodass inkrementelle Aktualisierungsworkflows direkt in einen vom Aufrufer bereitgestellten Stream schreiben können, anstatt die Aktualisierung zuerst alsAnsiStringzu materialisieren
Geändert
SaveToStreamserialisiert nun direkt in den Zielstream, undAppendToString(1)gibt nur noch den inkrementellen Aktualisierungsabschnitt zurück, ohne die ursprünglichen Quellbytes in einen temporären Puffer zu kopieren
Version 3.139.0
Hinzugefügt
GetAnnotReplyToundGetAnnotReplyTypehinzugefügt, sodass strukturierte Anmerkungsantworten über benannte Lesezugriffe anstelle allgemeiner Anmerkungseigenschaft-Tags inspiziert werden können
Version 3.138.0
Hinzugefügt
- Das Delphi-Beispiel
DocumentInspectionWorkbenchhinzugefügt, um PDFs im Batch mit kombinierter Schriftendiagnose, Bild-Sampling, Farbraum-Erkennung, Ladezeitmessung und JSON-, CSV- und HTML-Berichten zu überprüfen
Version 3.137.0
Hinzugefügt
- Das Delphi-Beispiel
ImageDecodeBenchmarkhinzugefügt, um die Bilderkennung auf Seiten, dekodierte Bildbytes und die Farbraum-Erkennung mit CSV- und HTML-Zeitberichten zu messen
Version 3.136.0
Hinzugefügt
GetDocumentFontDiagnosticsundTPDFlibFontDiagnosticshinzugefügt, um die Einbettung von Dokumentenschriften, Subsetting, Standard 14, CID, Type3 und die Anzahl unbekannter Schriften in einem Aufruf zusammenzufassen
Version 3.135.0
Hinzugefügt
TPDFlibSignatureVerifier.VerifySignerCertificateChainerstellt nun die eingebettete Unterzeichnerzertifikatkette mit der Windows CryptoAPI und gibtvsValidnur zurück, wenn die Kette die Windows-Basistrustrichtlinie erfüllt, während selbstsignierte oder anderweitig nicht vertrauenswürdige UnterzeichnerzertifikatevsInvalidzurückgeben, ohne das Ergebnis der Inhaltsintegrität vonVerifySignaturezu ändern
Version 3.134.0
Behoben
TPDFlibSignatureVerifier.VerifySignaturevalidiert nun veralteteadbe.pkcs7.sha1-Signaturen und gibtvsValidzurück, wenn der signierte Digest mit den abgedeckten/ByteRange-Bytes übereinstimmt, undvsInvalidnach Änderungen an den abgedeckten Inhalten
Version 3.133.0
Hinzugefügt
RenderPagesToFilesundDARenderPagesToFileshinzugefügt, um beliebige Seitenbereiche in nummerierte Ausgabedateien zu rendern und dabei die Renderer-Konfiguration für die ausgewählten Seiten wiederzuverwenden
Version 3.132.0
Hinzugefügt
- Komfort-Stempel
AddPageHeaderundAddPageFooterhinzugefügt, die Text an einem festen oberen oder unteren Rand auf jeder Seite eines Bereichs platzieren, mit Links-/Zentriert-/Rechtsausrichtung und Token-Erweiterung (&Paktuelle Seite,&NGesamtseiten,&DDatum,&TDokumenttitel,&&wörtliches Kaufmanns-Und) StampTextundStampImagemitsoUnderlayplatzieren Inhalte nun wirklich unter vorhandenen Seiteninhalten, indem sie eine neue Inhaltsebene voranstellen (zuvor wurde wie beisoOverlaydarüber gezeichnet); unterstützt durch eine neue Seitenbaum-MethodePrependContentLayer
Version 3.131.0
Hinzugefügt
ScalePage(ScaleX, ScaleY, Anchor)hinzugefügt, was den Inhalt der ausgewählten Seite skaliert, indem jede Inhaltsebene in einen Grafikstatusblockq sx 0 0 sy tx ty cm ... Qgehüllt und die MediaBox und CropBox angepasst werden; der Anker behält den Ursprung unten links (0), zentriert den Inhalt (1) oder behält ihn oben links (2)EnumPageElementsum eine neue ElementartekPatherweitert: Jede Seite meldet nun auch ihre Vektorpfade mit einem Begrenzungsrahmen, Punktanzahl, Schließ-Flag und Maloperator, die über das strukturierte Inhaltsmodell aus den Inhaltsströmen gehoben werden
Version 3.130.0
Hinzugefügt
- Drei APIs zur Optimierung der Dateigröße hinzugefügt, die geladene Dokumente beim erneuten Speichern verkleinern:
SubsetEmbeddedFontsreduziert jedes eingebettete TrueType-Schriftprogramm (FontFile2) über den DienstCreateFontPackageder FontSub.dll auf die Unicode-Zeichen, die das Dokument tatsächlich rendert;DownsampleImages(MaxDPI, Quality, Filter)decodiert jedes Bild-XObject oberhalb der Ziel-DPI, führt ein Resampling (Box oder bilinear) durch und codiert es als JPEG oder PNG neu;NormalizeLZWStreamsschreibt jeden Stream, der noch mit LZWDecode gefiltert ist, durch den bestehenden LZW-Decoder und Flate-Encoder in FlateDecode um, wobei Predictor-Parameter erhalten bleiben
Version 3.129.0
Hinzugefügt
- APIs zur Erstellung von Netz-Schattierungen (Mesh Shading) für die vier Schattierungstypen hinzugefügt, die zuvor nur Lese-/Parse-Unterstützung hatten:
NewRGBFreeFormTriangleMesh(ShadingType 4, Freiform-Gouraud-Dreiecke),NewRGBLatticeTriangleMesh(ShadingType 5, gitterförmige Gouraud-Netze),NewRGBCoonsPatchMesh(ShadingType 6, Coons-Patch-Netze) undNewRGBTensorPatchMesh(ShadingType 7, Tensor-Produkt-Patch-Netze) — jedes baut ein benanntes Netz-Schattierungsmuster aus einer flachen Vertex- oder Patchliste mit wählbarer Koordinaten-/Farb-Bittiefe und einem Begrenzungsrahmen, auswählbar mitSetFillShader/SetLineShader/SetTextShaderwie die bestehenden axialen und radialen Shader
Version 3.128.0
Hinzugefügt
- Eine Miniaturbildleiste für den Viewer hinzugefügt:
TPDFlibThumbnailBarzeigt eine Miniaturansicht jeder Seite an, die beim Scrollen der Zeilen in den Sichtbereich verzögert (lazy) gerendert wird, mit der Seitenzahl darunter; ein Klick auf ein Miniaturbild lässt den angehängten Viewer zu dieser Seite springen — dies vervollständigt die Viewer-Steuerelementfamilie (Viewer, Lesezeichen-Panel, Such-Panel, Miniaturbilder)
Version 3.127.0
Hinzugefügt
- Ein Such-Panel für den Viewer hinzugefügt:
TPDFlibSearchPanel.RunSearchdurchsucht das gesamte angehängte Dokument und listet eine Zeile pro Treffer mit der Seitenzahl und dem übereinstimmenden Text auf; ein Klick auf einen Treffer lässt den Viewer zu dieser Seite springen
Version 3.126.0
Hinzugefügt
- Ein Lesezeichen-Panel für den Viewer hinzugefügt:
TPDFlibOutlineViewerlistet den Dokumentengliederungsbaum mit Einrückung auf und lässt den angehängten Viewer (überAttachViewer) bei einem Klick zur Zielseite des Lesezeichens springen; es baut auf einer wiederverwendbaren Panel-Basisklasse auf, die spätere Seiten-Panels gemeinsam nutzen
Version 3.125.0
Hinzugefügt
- Textauswahl zum Viewer-Steuerelement hinzugefügt: Ziehen Sie mit der linken Maustaste zur Auswahl, drücken Sie Strg+C oder rufen Sie
CopySelectedTextauf, um die Auswahl in die Zwischenablage zu kopieren; der erfasste Text ist über die EigenschaftSelectedTextverfügbar, von oben nach unten geordnet mit Zeilenumbrüchen zwischen den Bändern GetTextInRegionhinzugefügt, welches den Text eines rechteckigen Seitenbereichs direkt zurückgibt — derselbe blockbasierte Suchvorgang, den die Mausauswahl verwendet, verfügbar für benutzerdefinierte Auswahloberflächen
Version 3.124.0
Hinzugefügt
- Das Viewer-Steuerelement rendert nun benachbarte Seiten in einem Hintergrund-Thread im Voraus, sodass beim Vor- oder Zurückblättern die nächste Seite sofort angezeigt wird; der Worker verwendet eine eigene Dokumenteninstanz und übergibt fertige Renderings an den Cache, ohne die Benutzeroberfläche zu blockieren
- Link-Interaktivität zum Viewer hinzugefügt: Ein Klick auf eine Link-Anmerkung löst
OnLinkClickmit der Seitenzahl und derselben typisierten Aktionszusammenfassung aus, dieGetAnnotActionInfoliefert (Webadresse, Dokumentenziel, benannte Aktion usw.);LinkActionAtPagePointmacht den zugrunde liegenden Treffertest für die benutzerdefinierte Handhabung zugänglich
Version 3.123.0
Hinzugefügt
- Das Viewer-Steuerelement verfügt nun über kontinuierliches Scrollen:
SetDisplayModeschaltetTPDFlibViewerzwischen Einzelseitenanzeige und kontinuierlichem vertikalen Scrollen durch das gesamte Dokument um, wobei nur die im Sichtbereich sichtbaren Seiten gerendert werden und die aktuelle Seite die Scrollposition verfolgt (wobeiOnPageChangeausgelöst wird, wenn Seiten in den Sichtbereich kommen) - Gerenderte Seiten werden nun in einem Least-Recently-Used-Bitmap-Cache (zuletzt am wenigsten genutzt) gehalten, sodass beim Hin- und Herscrollen kein erneutes Rendern erfolgt; das Speicherbudget beträgt standardmäßig 128 MB und wird mit
SetCacheLimitangepasst, wobei die ältesten Seiten verdrängt werden, wenn das Budget schrumpft oder voll ist - Mausrad-Scrollen und Tastaturnavigation zum Viewer hinzugefügt: Bild-auf/Bild-ab (Seitenschritte im Einzelseitenmodus, Sichtbereich-Schritte im kontinuierlichen Modus), Pfeiltasten, Pos1 und Ende
Version 3.122.0
Hinzugefügt
- Ein interaktives PDF-Viewer-Steuerelement hinzugefügt:
TPDFlibViewerist ein VCL-Scroll-Steuerelement, das ein Dokument aus einer Datei öffnet oder sich an eine bestehendeTPDFlib-Instanz anhängt, Seiten über die ausgewählte Rendering-Engine (GDI+, Cairo oder PDFium) anzeigt und Seitennavigation (GoToPage/NextPage/PrevPagemit einemOnPageChange-Ereignis) sowie Zoom-Steuerung bietet — ein fester Prozentsatz, an Breite anpassen oder an Seite anpassen, automatisch neu berechnet, wenn das Steuerelement die Größe ändert; Seiten, die breiter als der Sichtbereich sind, lassen sich scrollen, schmalere Seiten werden zentriert - Ein Entwurfszeit-Paket (
Package\PDFlibViewerPkg.dpk) hinzugefügt, das das Steuerelement auf der losLab PDF-Palettenseite zur Drag-and-Drop-Verwendung in der IDE registriert
Version 3.121.0
Hinzugefügt
- Automatisches Text-Shaping für komplexe Schriften in
DrawText: Text, der arabische, hebräische, indische oder andere komplexe Schriftzeichen enthält, wird nun automatisch erkannt und geformt — kontextuelle Buchstabenformen, obligatorische Ligaturen und Rechts-nach-Links-Anordnung werden ohne Codeänderungen korrekt ausgegeben; die Standard-14-Namen werden ihren metrikkompatiblen installierten Schriften zugeordnet (Helvetica zu Arial, Times zu Times New Roman, Courier zu Courier New) undGetTextWidthmisst über denselben Shaping-Durchlauf, sodass die Ausrichtung konsistent bleibt; lateinischer, kyrillischer, griechischer und CJK-Text behält seinen bestehenden Zeichnungspfad Byte für Byte bei SetTextShapinghinzugefügt, um das automatische Routing umzuschalten (standardmäßig aktiviert; übergeben Sie 0, um das genaue Verhalten vor dem Shaping wiederherzustellen)
Version 3.120.0
Geändert
- Begleitschriften für geformten Text (Shaped-Text) werden nun beim Speichern auf nur die Glyphen reduziert (Subsetting), die das Dokument anzeigt, was die Ausgabedateien drastisch verkleinert (ein vollständiges Schriftprogramm von über einem Megabyte wird auf die verwendeten Glyphen reduziert); die reduzierte Schriftart behält ihre Glyphennummerierung bei, trägt einen mit Subset-Tag versehenen
BaseFont-Namen und echte seiten- bzw. glyphenspezifische/W-Breiten und erhält eine ToUnicode-Tabelle, die jede geformte Glyphe wieder in ihre Quellzeichen übersetzt — sodass das Kopieren oder Extrahieren der Ausgabe vonDrawShapedTextdie ursprüngliche Zeichenfolge zurückgibt, einschließlich beider Buchstaben hinter einer Lam-Alef-Ligatur
Version 3.119.0
Hinzugefügt
- Textzeichnung für komplexe Schriften hinzugefügt:
DrawShapedTextformt arabische, hebräische und andere komplexe Zeichenfolgen, bevor sie gezeichnet werden — kontextuelle Buchstabenformen, obligatorische Ligaturen wie Lam-Alef und Rechts-nach-Links-Anordnung werden alle korrekt ausgegeben — und schreibt die geformten Glyphen über eine begleitende Type0 (Identity-H) Schriftart, die das gesamte Schriftprogramm einbettet, sodass Formen ohne eigenen Zeichencode exakt gerendert werden; pro Schriftbild wird eine Begleitschrift erstellt und über Aufrufe hinweg wiederverwendet GetShapedTextWidthhinzugefügt, welches Text über denselben Shaping-Durchlauf misst, sodass ligierter Text in seiner tatsächlichen gezeichneten Breite gemessen wird — verwenden Sie dies, um geformte Absätze rechtsbündig oder zentriert auszurichten
Version 3.118.0
Hinzugefügt
- Grundlage für das Text-Shaping komplexer Schriften hinzugefügt: Eine neue Uniscribe-Anbindung (usp10.dll) wandelt arabische, hebräische und andere Zeichenfolgen komplexer Schriften in korrekt geordnete und geformte Glyphendurchläufe um — kontextuelle arabische Formen, obligatorische Ligaturen wie Lam-Alef und die Sortierung von rechts nach links — wobei für jede Glyphe der Schriftart-Glyphenindex, der Vorschub und der Quellzeichen-Cluster gemeldet werden; dies ist die Shaping-Engine, auf der spätere Versionen den Zeichenpfad aufbauen, und sie wird verzögert geladen (lazy loading), sodass Plattformen ohne Uniscribe einfach den bestehenden zeichenweisen Pfad beibehalten
Version 3.117.0
Hinzugefügt
- ICC-Profil-Introspektion hinzugefügt:
GetOutputIntentICCInfoparst das an den OutputIntent des Dokuments angehängte ICC-Profil und meldet dessen Version, Geräteklasse, Datenfarbraum, Profilverbindungsraum, Rendering-Intent und Komponentenanzahl — nützlich zur Überprüfung der Druckbedingung von PDF/A- und PDF/X-Dateien; die Behandlung des ICCBased-Farbraums des Renderers leitet nun auch die Komponentenanzahl aus dem Profil-Header selbst ab, wenn der Farbraum einer Schattierung weder/Alternatenoch/Nenthält
Version 3.116.0
Hinzugefügt
- Einen tabellenbewussten Textextraktionsmodus hinzugefügt:
GetPageText-Option 10 fasst die linken Kanten der Textblöcke der Seite in globale Spaltenpositionen zusammen und gibt tabulatorgetrennte Zeilen aus, sodass tabellarische Layouts als importfertige TSV extrahiert werden, bei denen vertikal ausgerichtete Zellen über Zeilen hinweg ausgerichtet bleiben
Version 3.115.0
Hinzugefügt
- Seitenausschießung (Page Imposition) hinzugefügt:
ImposePagesNUplegt jede Seite des Dokuments auf neuen Bögen in einem n-up-Raster an (2-up, 4-up, 9-up oder jede beliebige Spalten x Zeilen-Anordnung), wobei jede Seite seitenverhältnistreu und zentriert als Live-Vektorinhalt in ihre Zelle eingepasst wird, oder — mit der Booklet-Option — produziert Bögen mit Rückenstichheftung, deren Seitenpaarung beim Duplexdruck und Stapeln zu einer Broschüre gefaltet werden kann
Version 3.114.0
Hinzugefügt
- Die typisierten Aktionsleser
GetAnnotActionInfoundGetOutlineActionInfoauf vier weitere Aktionsarten erweitert — Hide (mit der Anzahl der verborgenen Ziele und dem Hide/Show-Flag), SubmitForm (Sende-URL und Feldanzahl), ResetForm (Feldanzahl) und ImportData (Quelldatei) — und um die Namensnutzlast von Named-Aktionen (z. B.NextPage) offenzulegen; beide Leser teilen sich nun einen Parser, sodass Anmerkungslinks und Lesezeichen identische Informationen melden
Version 3.113.0
Hinzugefügt
- Formatierungshilfen für Formularfelder hinzugefügt:
SetFormFieldNumberFormat(Dezimalstellen, Trennzeichenstil, negativer Stil und Währungsplatzierung),SetFormFieldPercentFormatundSetFormFieldDateFormat(Acrobat-Datumsformat-Strings wiemm/dd/yyyy) schreiben jeweils das Standard-Acrobat-Formatierungs-JavaScript-Paar auf die zusätzlichen Aktionen des Feldes — einen Tastenanschlagfilter plus einen Anzeigeformatierer — sodass konforme Viewer die Eingabe validieren und formatierte Werte ohne handgeschriebenes JavaScript rendern können
Version 3.112.0
Hinzugefügt
- Erstellung von Tonanmerkungen (Sound Annotation) hinzugefügt:
AddSoundAnnotationFromFileliest eine unkomprimierte PCM-WAV-Datei (8 oder 16 Bit, Mono oder Stereo) und bettet ihre Samples hinter einer Lautsprechersymbol-Anmerkung als/Sound-Stream in der vom PDF-Soundmechanismus erwarteten vorzeichenbehafteten Codierung ein, womit der Roundtrip mit den bestehenden LesernGetAnnotSoundToFile/GetAnnotSoundToStringabgeschlossen ist
Version 3.111.0
Hinzugefügt
- Verkettete Anmerkungsantworten (Threaded Annotation Replies) hinzugefügt (ISO 32000-1 §12.5.6.3):
AddAnnotationReplyhängt eine Antwort an eine beliebige vorhandene Anmerkung als versteckte Textanmerkung an, deren/IRTmit der/RT-Antwortbeziehung auf das Ziel verweist, sodass Acrobat und andere Viewer sie im Kommentarbereich unter dem Ziel verkettet anzeigen; kombiniert mitAddAnnotationStateund dem FDF-Kommentaraustausch ermöglicht dies vollständige Roundtrips für kollaborative Überprüfungen
Version 3.110.0
Hinzugefügt
- Netz- (Mesh) und funktionsbasierte Schattierungs-Renderings hinzugefügt, wodurch die Abdeckung aller sieben PDF-Schattierungstypen abgeschlossen ist: Freiform-Gouraud-Dreiecksnetze (Typ 4), gitterförmige Gouraud-Netze (Typ 5), Coons-Patch-Netze (Typ 6) und Tensor-Produkt-Patch-Netze (Typ 7) werden aus ihren bitgepackten Datenströmen decodiert — einschließlich Shared-Edge-Patch-Flags,
/Decode-Wertezuordnung und optionaler Farb-/Function-Verläufe — und über die nativen Netzgradienten der Cairo-Engine gezeichnet; funktionsbasierte Schattierungen (Typ 1) werden angenähert, indem die Schattierungsfunktion über ihren Definitionsbereich in ein feines Patch-Raster abgetastet wird; unterstützte Farbräume umfassen DeviceRGB, DeviceGray, DeviceCMYK und ICCBased-Alternativen (die GDI+-Engine besitzt keine Grundform für Netzgradienten und lässt netzschattierte Bereiche unbemalt)
Version 3.109.0
Hinzugefügt
- Das Framework zur Inhaltsbearbeitung (Phase 4) mit textbasierter Bearbeitung abgeschlossen:
TPDFContentProgram.GetTextRunszählt die textanzeigenden Anweisungen einer Seite auf, mit der bei jeder einzelnen aktiven Schriftressource und -größe (Verfolgung des Schriftstatus durch Save/Restore-Verschachtelung), undReplaceTextRuntauscht den angezeigten Text an Ort und Stelle aus — ein echter Inhaltsstrom-Ersatz, der die ursprüngliche Position, Schriftart und Farbe beibehält, im Gegensatz zu überlagerungsbasierten Ansätzen, die den alten Text maskieren und darüber neu zeichnen
Version 3.108.0
Hinzugefügt
- Ein Objektmodell für die Seitengeometrie zum Framework zur Inhaltsbearbeitung (Phase 3) hinzugefügt:
TPDFContentProgram.LiftPathhebt ein Pfadobjekt (Konstruktionsoperatoren für Move/Line/Curve/Rectangle sowie die es beendenden Clipping- und Painting-Operatoren) in einen bearbeitbarenTPDFPathaus Teilpfaden und Segmenten an;TPDFPath.Transformwendet eine affine Matrix auf jeden Punkt an (verschieben, skalieren, drehen oder neigen von bestehenden Grafiken);LowerPathschreibt die geänderte Geometrie über die ursprünglichen Anweisungen zurück, bereit fürWritePageContentLayer
Version 3.107.0
Hinzugefügt
- Das Framework zur Inhaltsbearbeitung (Phase 2) um Komfortfunktionen auf Anweisungsebene in
TPDFContentProgramerweitert:InsertFromSourceparst einen Inhaltsausschnitt und fügt seine Anweisungen an einer beliebigen Position ein;SetOperandschreibt einen einzelnen Operanden aus der Quellsyntax um (eine Koordinate neu nummerieren, eine Füllung neu färben);OperandTextliest einen Operanden zurück;InstructionGroup,FindNextOpundFindNextGroupnavigieren durch die Anweisungsliste nach Operator oder nach der ISO-32000-1-Operatorkategorie
Version 3.106.0
Hinzugefügt
- Die erste Phase des Frameworks zur strukturierten Inhaltsbearbeitung hinzugefügt:
ParsePageContentLayerdecodiert die Inhaltsebene einer Seite in ein bearbeitbaresTPDFContentProgram— eine Liste von Anweisungen, wobei jede Anweisung ein PDF-Inhaltsoperator (alle 73 Operatoren nach ISO 32000-1 Tabelle 51) mit seinen decodierten Operandenobjekten ist — undWritePageContentLayerserialisiert das Programm zurück in die Seite, sodass Aufrufer Zeichenanweisungen parsen, überprüfen, löschen oder neu ordnen und die Seite umschreiben können;GetPageContentLayerCountmeldet die Anzahl der Inhaltsebenen, die unabhängig voneinander bearbeitet werden; der Emitter bewahrt das Verhalten (ein unmodifizierter Roundtrip wird pixelidentisch gerendert), unbekannte Operatoren bleiben unverändert erhalten und Inline-Bilder werden wortgetreu übernommen
Version 3.105.0
Hinzugefügt
- Einen Lese-Reihenfolge-Textextraktionsmodus hinzugefügt:
GetPageText-Option 9 gibt den Seitentext in visueller Lesereihenfolge mithilfe einer rekursiven Leerraumanalyse (XY-Schnitt) zurück, sodass mehrspaltige Layouts spaltenweise ausgegeben werden — zuerst eine Überschrift in voller Breite, dann die gesamte linke Spalte, dann die rechte Spalte — anstatt die Spalten zeilenweise zu verschachteln, wie es die geometrischen Oben-dann-Links-Reihenfolgen tun
Version 3.104.0
Hinzugefügt
- Introspektion von Unterzeichnerzertifikaten (Signer-Certificate Introspection) zum Signaturüberprüfer hinzugefügt:
GetSignerCertificatedecodiert die PKCS#7-Nutzlast des ersten Signaturfeldes und gibt eine typisierte Zusammenfassung des eingebetteten Unterzeichnerzertifikats zurück — Anzeigenamen von Betreff und Aussteller, die Seriennummer in konventioneller Hex-Form, das UTC-Gültigkeitsfenster (NotBefore/NotAfter) und ein Komfort-Flag, das anzeigt, ob sich das Zertifikat derzeit innerhalb dieses Fensters befindet; der Unterzeichner wird unter den eingebetteten Zertifikaten anhand des Ausstellers und der Seriennummer abgeglichen
Version 3.103.0
Hinzugefügt
NewRGBRadialShaderhinzugefügt, das radiale Gegenstück zuNewRGBAxialShader: Registriert einen benannten radialen Zwei-Kreis-Farbverlauf (ShadingType 3, ISO 32000-1 §8.7.4.5.3), der zwischen zwei RGB-Farben überblendet, mit optionaler Farberweiterung über die Kreise hinaus; auswählbar über die bestehenden FunktionenSetFillShader,SetLineShaderoderSetTextShader, um kreisförmige “Glow”-Füllungen, Striche und Texte zu malen
Version 3.102.0
Hinzugefügt
- Radiales (ShadingType 3) Verlauf-Rendering (ISO 32000-1 §8.7.4.5.4) hinzugefügt: Der Seitenrenderer zeichnet nun zusätzlich zu den bisher unterstützten axialen (ShadingType 2) Verläufen radiale Zwei-Kreis-Schattierungen, die von
sh-Operatoren und Shading-Pattern-Füllungen verwendet werden; unterstützt über die GDI+- und Cairo-Raster-Engines mit mehrstufigen (multi-stop) Farbfunktionen, DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased-Farbräumen und/Extend-Behandlung
Version 3.101.0
Hinzugefügt
- Wolkige Rahmeneffekte hinzugefügt (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectverwandelt den Rahmen einer quadratischen, kreisförmigen, polygonförmigen oder Freitext-Anmerkung in eine “Revisionswolke” verbundener Halbkreise, indem das Randeffekt-Wörterbuch/BEgeschrieben wird, wobei Intensität 1 oder 2 mit den Cloudy-Stilen von Acrobat übereinstimmt und 0 den Effekt wieder entfernt;GetAnnotCloudyEffectliest die Einstellung zurück (0 = keine Wolke, andernfalls die Intensität von 1..2)
Version 3.100.0
Hinzugefügt
- Anmerkungs-Überprüfungsstatus (Annotation Review States) hinzugefügt (ISO 32000-1 §12.5.6.3):
AddAnnotationStatezeichnet eine Statusänderung für eine vorhandene Anmerkung auf, indem eine versteckte Textanmerkung angehängt wird, deren/IRTauf das Ziel zeigt und deren/State+/StateModelden Status übertragen, was dasReview-Modell (None/Accepted/Rejected/Cancelled/Completed) und dasMarked-Modell (Unmarked/Marked) unterstützt, die vom Kommentar-Workflow in Acrobat verwendet werden;GetAnnotStateundGetAnnotStateModellesen die aufgezeichneten Strings aus einer beliebigen Anmerkung zurück (leer, wenn nicht vorhanden)
Fehlerbehebung
- Einen Fehler zur Ladezeit behoben, der das Starten von mit jüngsten Entwicklungsversionen erstellten Anwendungen verhinderte (ein Windows-Zertifikatsnamens-Lookup war an einen nicht existierenden DLL-Einstiegspunkt gebunden), sowie Kompilier-Regressionen im FDF-Kommentar-Import, in der Seitenbereichsdrehung und bei Signatur-Flag-Pfaden repariert
Version 3.99.0
Hinzugefügt
- APIs zum Lesen des Dokumenten-Fingerabdrucks und des Übergangs hinzugefügt:
GetDocumentFileIDgibt den permanenten Dokumentenidentifikator aus dem Trailer-/ID-Array zurück (hex-kodiertes erstes Element), nützlich als stabiler Cache-Schlüssel oder Dokumenten-Fingerabdruck;GetPageTransitionist das leseseitige Gegenstück zuSetPageTransitionund gibt den Übergangsstil als typisiertenTPDFlibPageTransition-Wert plus Anzeigedauer und Übergangsdauer zurück, indem die gespeicherten Einträge/Trans/S,/Dmund/Mrückgemappt werden
Version 3.98.0
Hinzugefügt
- Seitenbereichsrotation und Thumbnail-Introspektion hinzugefügt:
RotatePageRangewendet eine 0/90/180/270-Rotation auf jede Seite in einem Bereich an (umhüllt das bestehende Einzelseiten-RotatePage, sodass Aufrufer keine Schleife pro Seite mehr benötigen);HasPageThumbnailmeldet, ob eine Seite einen/Thumb-Eintrag trägt;GetPageThumbnailInfoliest Breite, Höhe und Bits-per-Component des Thumbnail-Bild-XObjects
Version 3.97.0
Hinzugefügt
- Erweiterte Lese-APIs für Anmerkungseigenschaften hinzugefügt:
GetAnnotColorliest das/C-Farb-Array (0..1 RGB, mit einem HasColor-Flag, das „keine explizite Farbe“ von „explizitem Schwarz“ unterscheidet);GetAnnotBorderWidthliest/BS /W, greift auf das alte/Border-Array zurück;GetAnnotOpacityliest das Strich-Alpha/CA(Standard 1.0);GetAnnotCreationDateliest den/CreationDate-Zeitstempel;GetAnnotFlagsliest das Byte für Sichtbarkeits-/Druck-Flags/F
Version 3.96.0
Hinzugefügt
- Leseseitige Sicherheits-Introspektions-APIs hinzugefügt:
IsEncryptedmeldet, ob das geladene Dokument ein/Encrypt-Wörterbuch trägt;GetEncryptionLevelgibt eine typisierte Stärke zurück (0=keine, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X), die mit den Verschlüsselungsoptionen der Schreibseite übereinstimmt;GetUserPermissionsgibt das rohe/P-Berechtigungswort für direkte Bit-Tests zurück;IsOwnerPasswordmeldet, ob das Dokument mit dem Eigentümer-Passwort geöffnet wurde
Version 3.95.0
Hinzugefügt
- Erweitertes Drucken und Textersetzung hinzugefügt:
PrintDocumentAdvancedsteuert den vollen Drucker-DEVMODE (Duplex, Ausrichtung, Farbe, Druckqualität, Papierformat, Papierschacht) zusätzlich zu Kopien/Sortierung über einen typisiertenTPDFlibPrintSettings-Record und wendet jedes nicht standardmäßige Feld über den bestehenden benutzerdefinierten Druckerprofil-Mechanismus an;SearchAndReplaceTextführt eine Suche über einen Seitenbereich durch und maskiert für jeden Treffer den ursprünglichen Textblock mit einem deckenden weißen Rechteck und zeichnet den Ersatztext am Ursprung des Blocks in der vom Aufrufer gewählten Schriftart neu, was das Overlay-Replace-Verhalten von PDFtoolkit SearchAndReplace widerspiegelt
Version 3.94.0
Hinzugefügt
- Anmerkungs-FDF-Austausch hinzugefügt (Acrobat „Kommentare exportieren/importieren“):
ExportAnnotationsToFDFStringundExportAnnotationsToFDFdurchlaufen die/Annotsjeder Seite und serialisieren jede Anmerkung als/Type /Annot-Eintrag innerhalb eines FDF-/Annots-Arrays, wobei/Subtype,/Contents,/Rect, das Autorenlabel/T,/Subjund der 0-basierte/Page-Index übernommen werden;ImportAnnotationsFromFDFStringundImportAnnotationsFromFDFanalysieren ein solches FDF mit einem kleinen Zustandsautomaten und erstellen jeden Eintrag als neue Anmerkung auf der passenden Seite neu, wobei das vollständige Anmerkungswörterbuch erhalten bleibt, anstatt es auf eine Notiz zu reduzieren
Version 3.93.0
Hinzugefügt
- APIs für Signaturzertifizierung und Formularfeldeigenschaften hinzugefügt:
SetSignProcessDocMDPwandelt die nächste von einem Signaturprozess erzeugte Signatur in eine zertifizierende (Autoren-)Signatur um, indem eine DocMDP-/Reference-Transformation auf Stufe 1/2/3 (keine Änderungen / Formularausfüllen / Anmerkungen) angehängt und das AcroForm-/SigFlags-AppendOnly-Bit gesetzt wird;GetSigFlags/SetSigFlagslesen und schreiben das rohe AcroForm-/SigFlags-Byte direkt;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationundGetFormFieldAllowedValueslegen die/Ff-Stil-Bits pro Feld, das/Q-Text-Quadding und das/Opt-Auswahl-Array als typisierte Werte offen
Version 3.92.0
Hinzugefügt
- Komfort-APIs für Anlagenexport und Formularfelder hinzugefügt:
SaveAllAttachmentsdurchläuft die einheitliche Anlagenliste (/EmbeddedFilesauf Dokumentebene plus/FileAttachment-Anmerkungen pro Seite) und schreibt jeden Stream in ein Verzeichnis unter seinem Dateispezifikationsnamen, wobei Kollisionen mit einem numerischen Suffix unterschieden werden;RemoveFormFieldByNamelöst einen vollständig qualifizierten Feldnamen zu seinem Index auf und löscht ihn;RenameFormFieldbenennt ein Feld direkt nach dem Namen um, ohne separate Indexsuche
Version 3.91.0
Hinzugefügt
- APIs für die dokumentweite Enumeration hinzugefügt:
EnumDocumentFontsdurchläuft jedes Font-Wörterbuch (wobei bei Bedarf zuerstFindFontsaufgerufen wird) und gibt eineTPDFlibDocumentFontpro Schriftart mit deren Objektnummer,/BaseFont-Namen, Typ, Kodierung und Einbettungs-/Teilmenge-Status zurück, wodurch die Notwendigkeit entfällt, jeden Eintrag mitSelectFontauszuwählen und skalare Getter abzufragen;EnumAttachmentsvereinigt den Namensbaum/EmbeddedFilesauf Dokumentebene mit den/FileAttachment-Anmerkungen pro Seite in eine einzigeTPDFlibAttachment-Liste und zeichnet Quelle, 1-basierten Quellindex, Dateinamen, MIME-Subtyp, Beschreibung und Bytegröße jedes Eintrags auf
Version 3.90.0
Hinzugefügt
- Schreibgeschützte Introspektions-APIs für Anmerkungen, Lesezeichen und die Dokumentversion hinzugefügt:
GetPDFVersiongibt die effektive PDF-Versionszeichenfolge zurück (z. B.1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameundGetAnnotRectExlegen die anmerkungsspezifischen Felder als benannte Wrapper (damit Aufrufer keine magischen Property-Tag-Nummern mehr benötigen) über den bestehendenAnalyseAnnot-Cache offen;GetOutlineLevelgibt die Tiefe eines Lesezeichens relativ zur Gliederungswurzel zurück undGetOutlineIsOpenmeldet, ob es in einem Viewer erweitert ist (negativer/Countbedeutet zugeklappt), was den Layout-Status widerspiegelt, den ein Lesezeichen-Bedienfeld rendern würde
Version 3.89.0
Hinzugefügt
- Eine JBIG2-Bild-Codierungseinheit
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray) hinzugefügt, portiert vom Schwesterprodukt HotPDF, mit zwei Backends: Unter Win64 ist der C++jbig2encarithmetische Codierer (ITU-T T.88) statisch überPDFlibJBIG2EncC+HPDFCLibs(228 leptonica/jbig2enc-Objekte unterthirdparty/Win64x/) gelinkt und als Standard-Backend registriert, was dem Produktionspfad von HotPDF entspricht; auf anderen Zielen, oder wennUseExternalEncoderFalse ist, komprimiert ein reines Pascal-MMR-Fallback zweistufige Scanlines (bi-level scanlines) mit dem CCITT G4-Encoder und wickelt sie in JBIG2-Segment-Header (Seiteninfo Typ 48 + unmittelbare generische Region Typ 38) ein - Eine LZW-Codierungseinheit
PDFlibLZWEnc(TPLLZWEncoder.Compress) hinzugefügt, das Codierer-Gegenstück zum bestehendenPDFlibLZW-Decoder: erzeugt einen PDF-spezifizierten/LZWDecode-Stream mit 9..12-Bit Variablenbreitencodes, ClearCode/EOI und PDF-Standard EarlyChange-Semantik, sowie optionalem TIFF Predictor 2 (horizontale Differenzbildung), sodass ein Roundtrip durch den Decoder die Originalbytes reproduziert
Version 3.88.0
Hinzugefügt
- Eine CCITT Group 3 / Group 4 (T.6) Bi-Level-Bildcodierungseinheit
PDFlibCCITTEnc(TPLCCITTEncoder) hinzugefügt, das Codierer-Gegenstück zum bestehendenPDFlibCCITT-Decoder: Es codiert einepf1bit-Bitmap überCompressImage/Executein einen CCITT G3 1D / G3 2D / G4 (T.6)-Bytestream, portiert vom Schwesterprodukt HotPDF (beide teilen sich die losLab-Lizenz); dies liefert den fehlenden Codierer, sodass monochrome Bilddaten für dieCCITTFaxDecode-Ausgabe erzeugt werden können, wobei die vollständige Bild-Pipeline undRenderPageToMonochromeFileG4-Ausgabe-Integration folgen wird
Version 3.87.0
Hinzugefügt
- Implemented cryptographic signature verification for detached PKCS#7 signatures:
TPDFlibSignatureVerifier.VerifySignature(previously a stub returningvsUnknown) now recomputes the document digest over the two/ByteRangesegments and validates it against the signedmessageDigestattribute and the signer's public key via the Windows CryptoAPI (CryptVerifyDetachedMessageSignature), returningvsValid/vsInvalidforadbe.pkcs7.detachedandETSI.CAdES.detachedsubfilters; this is the first verification layer and covers digest+signature integrity only (certificate chain, CRL/OCSP revocation and RFC 3161 timestamp-token validation remain out of scope and will be added in later layers)
Version 3.86.0
Hinzugefügt
- Einen pro-Lesezeichen-Rückruf zur Zusammenführungszeit hinzugefügt: Das
OnMergeOutline-Ereignis wird für jede Quellgliederung der obersten Ebene ausgelöst, währendMergeFileList/MergeFileListFast/MergeFileListStrictden zusammengeführten Gliederungsbaum verknüpft, sodass der Aufrufer ein eingehendes Lesezeichen umbenennen (Title) oder verwerfen (Skip=True) kann, bevor es im Zieldokument landet; der Rückruf empfängt den 0-basierten Quell-Dokumentindex, sodass Aufrufer Richtlinien pro Dokument anwenden können
Version 3.85.0
Hinzugefügt
- Signieren aus dem Windows-Systemzertifikatsspeicher hinzugefügt:
SetSignProcessCertFromStorelöst das Signaturzertifikat aus einem benannten Speicher ("MY"/"Root"/...) anhand des einfachen Anzeigenamens des Betreffs auf (normalerweise der CN, ohne Berücksichtigung der Groß-/Kleinschreibung; ein leerer Name wählt das erste Zertifikat mit einem privaten Schlüssel aus) und verwendet die bestehende PKCS#7-Signaturpipeline wieder, sodass ein Dokument ohne Angabe einer.pfx/.p12-Datei signiert werden kann; kombinieren Sie es mitSetSignProcessKeyset, um zwischenCURRENT_USER(1) undLOCAL_MACHINE(2) zu wählen
Version 3.84.0
Hinzugefügt
- Schriftprogrammeinbettung für bereits geladene Dokumente hinzugefügt:
EmbedMissingFontsdurchläuft jedes Font-Wörterbuch, liest das passende installierte Systemschriftprogramm anhand des BaseFont-Namens und schreibtFontFile2oderFontFile3zurück, wobei die Anzahl der Schriften zurückgegeben wird, die ein Programm erhalten haben;EmbedFontProgrambettet eine einzelne Schriftart nach Namen unter Verwendung der installierten Systemschriftart ein;EmbedFontProgramFromFilebettet eine einzelne Schriftart unter Verwendung einer vom Aufrufer bereitgestellten.ttf- oder.otf-Datei für Schriften ein, die nicht auf dem System installiert sind SetEmbedAllFontshinzugefügt, ein schreibseitiger Schutz, derAddTrueTypeFontEmbed=0zuEmbed=1heraufstuft, sodass neu erstellte Dokumente auch außerhalb des PDF/A-Modus nicht versehentlich auf nicht eingebettete Systemschriften verweisen können
Version 3.83.0
Hinzugefügt
- Neue Rendering-Convenience-APIs hinzugefügt:
RenderPageToMonochromeFilerendert eine Seite als 1-Bit-Monochrom-Bitmap (für Fax/Archivierung/OCR-Szenarien) durch GDI-Halbton-Dithering von 24-Bit, ohne den Rendering-Kern zu verändern;RenderPageRegionToFilerendert nur das angegebene Teilrechteck der Seite (“Left,Top,Width,Height”) als Bitmap und schließt an die zuvor getrennteRenderPageToDCClipClip-Pipeline an
Version 3.82.0
Hinzugefügt
- Export von FDF-Formulardaten hinzugefügt:
ExportFormDataToFDFschreibt alle Formularfeldnamen und -werte des aktuellen Dokuments in eine eigenständige FDF-Datei (eingewickelt in%FDF-1.2und das/Fields-Array),ExportFormDataToFDFStringgibt eine Zeichenfolge mit der gleichen Struktur zurück, was es erleichtert, Formulardaten getrennt vom PDF zu speichern oder später zusammenzuführen; Nicht-ASCII-Bytes werden durch dreistellige oktale ISO 32000-1-Escapesequenzen ersetzt
Version 3.81.0
Hinzugefügt
- Seiten- und Struktur-Convenience-APIs hinzugefügt:
SetPageTransitionschreibt Präsentations-Übergangseffekte für eine bestimmte Seite (17 Standardübergänge von/Trans, einschließlich Split/Blinds/Wipe/Dissolve/Glitter usw.) sowie die Anzeigedauer der Seite;GetPageFontCount,GetPageFontIDenumerieren die von einer bestimmten Seite referenzierten Schriften;SetMeasurementUnitakzeptiert eine typisierte Einheit-Aufzählung (fügt twips und points zu den vorhandenen Pixeln/Millimetern/Zoll hinzu), mit den passenden Einheiten-Umwandlungs-HilfsfunktionenConvertToPoints,ConvertFromPoints;SaveToFileOptionsfasst Komprimierung, Linearisierung und die Beibehaltung von Änderungsdaten in einem Datensatz zusammen
Version 3.80.0
Hinzugefügt
- Sicherheits- und Signatur-Convenience-APIs hinzugefügt:
EncryptFileExakzeptiert ein typisiertes benanntes Berechtigungsset (TPDFlibUserPermissions, unterscheidet 8 benannte Berechtigungsbits wie Drucken mit niedriger Auflösung und Drucken mit hoher Auflösung) anstelle der rohen Berechtigungsbit-Integer;TPDFlibSignatureVerifier.GetSignatureMetadataliest Feldname, Filter, SubFilter, Signierzeit, Grund, Ort, Kontaktinformationen, Unterzeichner und die Validierung der ByteRange-Struktur direkt aus dem Signaturwörterbuch, ohne PKCS#7-Decodierung;PrintDocumentExgibt die Anzahl der Kopien und die Sortierung in einem Aufruf an
Version 3.79.0
Hinzugefügt
- Bearbeitungs-Convenience-APIs hinzugefügt:
MaskRectzeichnet ein undurchsichtiges, gefülltes Rechteck über dem angegebenen Bereich auf der Seite (Maskieren/Schwärzen);SetPageThumbnailFromFilefügt der Seite/Thumbdirekt aus einer Bilddatei hinzu, ohne den Zeichnungsstatus des Inhaltsstroms zu verändern;FlattenFormFieldsOnPageRangeflacht alle Formularfelder innerhalb des Seitenbereichs ab (bäckt das Aussehen als statischen Inhalt ein und entfernt aktive Felder);InsertAnnotationfügt ein bereits erstelltes Anmerkungswörterbuch an der angegebenen Position ein;NewMarkupAnnotationerstellt in einem Schritt Hervorhebungs-/Durchstreich-/Unterstreichungs-/Wellenlinien-Anmerkungen und schreibt Quad-Punkte, Farbe und Transparenz;StampText,StampImagestempeln Wasserzeichen über einen Seitenbereich und unterstützen Transparenz, Drehwinkel und Stapelreihenfolge
Version 3.78.0
Hinzugefügt
- API für Textsuche und Enumeration von Seitenelementen hinzugefügt:
SearchTextsucht nach einem Abfragebegriff im angegebenen Seitenbereich und gibt die Seitenzahl sowie das begrenzende Rechteck für jeden Treffer zurück, unterstützt Optionen für Groß-/Kleinschreibung und ganze Wörter;EnumPageElementsenumeriert alle Textblöcke und eingebetteten Bildelemente der angegebenen Seite und gibt einheitlich den Elementtyp, das Rechteck, den Text, den Schriftnamen und die Bild-ID zurück;GetTextInAreaExist eine Version vonGetTextInAreamit Rechtecken und gibt jeden Textblock und sein begrenzendes Rechteck innerhalb des Bereichs zurück
Version 3.77.0
Hinzugefügt
- Schreibgeschützte Introspektions-APIs hinzugefügt, um die frühere Asymmetrie von "schreiben, aber nicht lesen können" zu beheben:
FindOutlineByTitlesucht nach Lesezeichen nach Titel (unterstützt die drei Tiefen Nur-Geschwister/Nur-Kinder/Gesamter-Teilbaum),GetOutlineActionInfoundGetAnnotActionInfogeben mit einer typisierten Struktur den Aktionstyp (GoTo/GoToR/URI/Launch/Named/JavaScript) und den URI, JavaScript oder die Dateinutzlast eines Lesezeichens oder einer Anmerkung zurück,GetOutlineDestinationInfogibt die Zielseite und den Fit-Typ (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) sowie die Koordinaten zurück,EnumSignatures,GetSignatureFieldCount,GetSignatureFieldInfoenumerieren Signaturfelder und melden, ob sie signiert wurden
Version 3.76.3
Geändert
- Das Factur-X EXTENDED-Profil der E-Invoice-Demo verwendet nun den standardkonformen Conformance-Wert und die standardkonforme Guideline-ID, und die ZUGFeRD-1.0-Rechnung ergänzt die Summenelemente
ChargeTotalAmountundAllowanceTotalAmount; alle 6 Profile erzeugen nun PDF/A-3b- und PDF/A-3u-Ausgaben, die sowohl veraPDF (PDF/A-Konformität) als auch Mustang (Geschäftsregeln für elektronische Rechnungen) bestehen
Version 3.76.2
Behoben
- Die XMP-Metadaten hybrider Factur-X/ZUGFeRD-Rechnungen deklarieren nun das PDF/A-Erweiterungsschema (
pdfaExtension:schemas) zur Beschreibung derfx:-Rechnungseigenschaften; fehlte diese Deklaration zuvor, wurde das erzeugte PDF/A-3 von Prüftools wie veraPDF als nicht konform eingestuft
Geändert
- Die Rechnungs-XML der E-Invoice-Demo enthält nun die elektronischen Adressen von Verkäufer und Käufer sowie die Telefonnummer des Verkäufers, sodass mehr Profile die ZUGFeRD-/Factur-X-Geschäftsregeln bestehen
- Der Profil-Katalog, die XML-Erzeugung und der PDF/A-3-Erzeugungsablauf der E-Invoice-Demo wurden in eine gemeinsame Unit ausgelagert, die sowohl die GUI als auch das neue externe Prüfwerkzeug wiederverwenden
Version 3.76.1
Behoben
- Absturz beim Klick auf Erzeugen in der E-Invoice-Demo behoben: eingebaute Standard-Schriften sind im PDF/A-Modus nicht verfügbar, daher bettet die Demo nun eine TrueType-Schrift ein, um die Rechnungsseite zu rendern
Geändert
- Die E-Invoice-Demo entfernt die Option PDF/A-3a (für elektronische Rechnungen kaum genutzt), und das XRechnung-Profil verwendet standardmäßig nun PDF/A-3u
Version 3.76.0
Geändert
- Die E-Invoice-GUI-Demo ist nun datengesteuert: Rechnungsnummer, Belegdatum, Käufer und Verkäufer, Nettobetrag, Steuersatz und Währung sind editierbar, und die Rechnungs-XML stimmt exakt mit den sichtbaren Seitenbeträgen überein, anstatt feste Platzhalterinhalte zu verwenden
- Die Demo erzeugt pro Profil strukturell korrekte Rechnungs-XML: Factur-X, XRechnung und ZUGFeRD 2.0 verwenden die
CrossIndustryInvoice-Struktur, während ZUGFeRD 1.0 COMFORT seine eigeneCrossIndustryDocument-Struktur mit Positionen, Steuersummen und Zahlungsbedingungen verwendet - Beträge werden mit festem englischen Dezimalpunkt-Format in die XML geschrieben, damit lokalisierte Tausendertrennzeichen oder Kommas das Schema nicht brechen; Benutzereingaben werden vor dem Schreiben maskiert
- Die Demo ergänzt eine Live-XML-Vorschau, profilbezogene Inhalts-Selbstprüfungen, das Auslesen gleichnamiger externer
.validation.json-Prüfberichte und lädt beim Erzeugen explizit den sRGB-ICC-Ausgabe-Intent des Repositorys
Version 3.75.6
Hinzugefügt
SetPDFAModeergänzt Modus7, der PDF/A-3u-Metadaten erlaubt und PDF/A-3-Zuordnungsdateien weiterhin zulässt; die E-Invoice-GUI-Demo bietet ebenfalls eine PDF/A-3u-Option, und das Profil ZUGFeRD 2.0 BASIC verwendet standardmäßig PDF/A-3u
Version 3.75.5
Hinzugefügt
- Ergänzt eine Delphi-E-Invoice-GUI-Demo, die Factur-X-, ZUGFeRD- und XRechnung-Profile auswählen, PDF/A-3-Hybridrechnungen erzeugen, den passenden XML-Dateinamen und guideline ID einbetten, die Containervalidierung in der Oberfläche ausführen und XMP-Rechnungsinformationen, Validierungsprobleme sowie extrahiertes XML anzeigen kann
Version 3.75.4
Hinzugefügt
- Ergänzt Unterstützung für PDF/A-3-Zuordnungsdateien und E-Invoice-XML:
AddPDFA3AssociatedFileFromStringkann Catalog/AF-Zuordnungsdateien direkt aus Speicherbytes erstellen,AddFacturXAssociatedFileFromStringkann Factur-X-, ZUGFeRD- und XRechnung-XML schreiben, XMP-Metadaten synchronisieren und die Kombination aus Dateiname, Profil, XMP-Namespace und XML-guideline ID validieren, während die Leseseite APIs für Erkennung, Validierung, Problemlisten und XML-Extraktion erhält
Version 3.75.3
Behoben
- PDF-Zusammenführungsfunktion: Die lokalen Variablen
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumundStructRootGlobalGenNumwurden nur innerhalb bedingter Blöcke zugewiesen, was auf Delphi-Win64-Compilern 26 und 29 (RAD Studio 12 und 16) W1036-Warnungen “variable might not be initialized” auslöste; am Funktionsanfang wurde eine Nullinitialisierung ergänzt
Version 3.75.2
Behoben
- Kompatibilität zwischen mehreren Build-Versionen: Die
for-Schleife im Hex-String-Parser (PDFlibStruct) verwendete eineInt64-Steuervariable, die Delphi XE3/XE5 (Compiler 26/27) als nicht ordinal ablehnen; in eineWhile-Schleife umgeschrieben, um die Kompatibilität mit RAD Studio 12 und 14 wiederherzustellen - Prüfung des Reference XObject (
PDFlibPDFUA): Der Dictionary-ZeigerDwurde im Nicht-Stream-/Nicht-Dictionary-Zweig nicht initialisiert, was auf allen Zielen einen Compiler-Hinweis auslöste; der Zweig wurde so umgebaut, dassDimmer vor derAssigned-Prüfung zugewiesen wird CreateFontPackage-Wrapper (PDFlibFont): Den spuriösen W1035-Hinweis “return value might be undefined” auf Delphi ≤ XE8 unterdrückt, während der dazugehörige H2077-Hinweis auf tote Zuweisungen in neueren Compilern vermieden wurde, mittels{$IF CompilerVersion}-Schutz- BMP-DPI-Writer und inkrementeller PDF-Speicherpfad: Veraltete
TStream.Seek(Longint, Word)-Aufrufe durchPosition :=-Zuweisungen ersetzt (PDFlibPDFium,PDFlibDocument)
Version 3.75.1
Behoben
- TIFF-Multipage-Parser: Die Schleifenabbruchsicherung gegen übermäßig große Seitenzahlen wirkte nicht, weil
FPageCountalsWorddeklariert war (Maximum 65 535), wodurch der> 65535-Vergleich immer falsch war; inIntegergeändert, damit die Sicherung bei pathologischen Dateien nun korrekt auslöst - CFF/Type-2-Zeichensatzparser (Format 1 und Format 2): Tote
Done := True-Zuweisungen entfernt, die unmittelbar vor einemBreakstanden und daher nie gelesen wurden, wodurch Compiler-Hinweise eliminiert wurden
Version 3.75.0
Sicherheit
- Das Parsen nicht vertrauenswürdiger eingebetteter Schriften (TrueType, Type 1, CFF und CMap) gegen Schreibzugriffe außerhalb des Puffers, unbeschränkte Charstring-Rekursion und übergroße Speicherallokationen aus fehlerhaften Schriftdaten gehärtet
- Die Bilddecoder (PNG, GIF, TIFF, JBIG2 und CCITT Group 3 und 4) gegen Lese- und Schreibzugriffe außerhalb des Puffers, Integer-Überläufe bei Breiten- und Höhenberechnungen sowie Dereferenzierungen leerer Paletten aus schädlichen Bildern gehärtet
- Die Stream-Filter (LZW, ASCII85 und Flate-Prädiktoren) gegen Puffer-Überlesungen, Division durch Null und nicht terminierende Schleifen bei konstruierten Stream-Daten gehärtet
- Cross-Reference-, Dokumentwiederherstellungs- und Name-Tree-Parsing gegen Zugriffe außerhalb des Puffers und Endlosschleifen gehärtet, die durch fehlerhafte oder zirkuläre Cross-Reference-Daten verursacht werden
- Die AES-CBC-Entschlüsselung validiert jetzt die Ausrichtung der Ciphertext-Blöcke und initialisiert ihren Ausgabepuffer mit Nullen, wodurch verhindert wird, dass nicht initialisierter Heap-Speicher in entschlüsselte Zeichenfolgen und Streams gelangt
Behoben
- SHA-256-, SHA-384- und SHA-512-Digestwerte für getrennte Signaturen werden jetzt mit dem korrekten kryptografischen Provider erzeugt; zuvor lieferten sie einen leeren Digest und ungültige Signaturen
- ASCII85- und RC4-Decodierung geben bei abgeschnittenen Eingaben oder einem leeren Schlüssel keine nicht initialisierten Daten mehr zurück und lösen keine Ausnahme mehr aus
- Die GIF-Hintergrundfarbe wird jetzt mit dem korrekten blauen Kanal gelesen statt den grünen Kanal zu duplizieren
Version 3.74.1
Behoben
- Fehler beim Kompilieren mit inkompatiblen Typen E2010 in der PAdES-Signaturvalidierungsdaten-Unterstützung (VRI) behoben, der das Kompilieren der Bibliothek verhindert hat
- Die letzte Compiler-Warnung und die Hinweise auf unbenutzte Variablen entfernt; alle Win32- und Win64-Trial- und Release-Bibliotheksbuilds kompilieren jetzt sauber
Version 3.74.0
Hinzugefügt
- Die direkten Dateipfade von
EncryptFileundDecryptFilelesen jetzt PDFs, deren Cross-Reference-Daten in Cross-Reference-Streams liegen, einschließlich inkrementell aktualisierter Ketten und Hybrid-Reference-Dateien mit einem/XRefStm-Seitenabschnitt, statt auf den langsameren vollständigen Reader auszuweichen: Die AES-256-Schutzausführung eines 1.25 GB Benchmark-Dokuments sank von etwa 4.4 auf 2.5 Sekunden, die Entschlüsselung von etwa 1.7 auf 1.3 Sekunden - Umgeschriebene Dateien, die Objekte aus komprimierten Objekt-Streams enthalten, geben jetzt einen Cross-Reference-Stream-Trailer aus, sodass diese Objekte in der verschlüsselten oder entschlüsselten Ausgabe adressierbar bleiben
Behoben
- Eine Revision ohne Dokument-
/IDin einer inkrementell aktualisierten Datei löscht beim direkten Umschreiben nicht mehr die aus einer früheren Revision geerbte Kennung
Version 3.73.2
Geändert
DASaveAsFilebündelt seine Ausgabe-Schreibvorgänge jetzt und ermittelt das schließende Schlüsselwort jedes Objekts ohne String-Allokationen pro Schritt, wodurch das Umschreiben eines 2 GB Benchmark-Dokuments mit über einer Million Objekten von etwa 57 auf 11 Sekunden verkürzt wird
Version 3.73.1
Geändert
- Die direkten Dateipfade von
EncryptFileundDecryptFilelesen die Quelle jetzt durch ein Sliding Window und bündeln Ausgabeschreibvorgänge, sodass die AES-256-Sicherung sehr großer PDFs mit Millionen von Objekten mehrere Male schneller läuft: Bei einem 2 GB Benchmark-Dokument sank die Verschlüsselung von etwa 123 auf 32 Sekunden und die Entschlüsselung von etwa 127 auf 23 Sekunden - Objektinhalte, die in das Lesefenster passen, werden bei einer direkten AES-256-Umschreibung nicht mehr zweimal von der Platte geholt
Behoben
- Direkte AES-256-Umschreibungen von Hybrid-Reference-PDFs (Dateien mit einem
/XRefStm-Trailer-Eintrag) fallen jetzt auf den vollständigen Reader zurück, statt das Risiko zu laufen, komprimierte Objekte zu verlieren - Die Cross-Reference-Analyse im direkten Dateipfad liest nicht mehr alles vom Cross-Reference-Bereich bis zum Dateiende auf einmal, was bei Multi-Gigabyte-Dateien mit einer
/Prev-Kette nahe dem Dateianfang den Speicher hätte erschöpfen können, und eine defekte/Prev-Kette fällt jetzt auf den vollständigen Reader zurück, statt ein unvollständiges Dokument zu erzeugen
Version 3.73.0
Hinzugefügt
- Die SigningWorkbench-Demo führt jetzt über die Windows CryptoAPI eine vollständige kryptografische Digest-Überprüfung von getrennten CMS-Signaturen (
adbe.pkcs7.detachedundETSI.CAdES.detached) durch: Die signierten Byte-Bereiche werden erneut gehasht und gegen die CMS-Signatur geprüft, ein verändertes Dokument wird mit dem neuen Fehlercode SG203 gemeldet, und jede Signatur trägt in den JSON-, CSV- und HTML-Berichten ein dreistufiges FelddigestValid - Neue Automatisierungs-Schalter für SigningWorkbench:
--quietgibt nur die Batch-Zusammenfassung und die Berichtspfade aus,--fail-faststoppt den Batch beim ersten fehlerhaften Dokument, und der JSON-Bericht protokolliert jetzt die Bibliotheksversion
Version 3.72.0
Hinzugefügt
- Die ComplianceWorkbench-Demo erhält professionelle Batch-Workflows:
--policy-filelädt die Audit-Richtlinie aus einer JSON-Datei, sodass Teams ihre Dokumentregeln versionieren und gemeinsam nutzen können,--baselinevergleicht den Lauf mit einer früheren compliance-report.json und listet neue Fehler, behobene Dateien und weiterhin fehlschlagende Dateien auf, und--preflight-detailsbettet Preflight-Problemzeilen in die JSON- und HTML-Berichte ein - Neue Automatisierungs-Schalter für ComplianceWorkbench:
--quietgibt nur die Batch-Zusammenfassung und die Berichtspfade aus,--fail-faststoppt den Batch beim ersten fehlerhaften Dokument, und der JSON-Bericht protokolliert jetzt die Bibliotheksversion
Version 3.71.2
Behoben
AppendToFilehängt wieder inkrementelle Aktualisierungen an dieselbe PDF-Datei an, die mitLoadFromFilegeladen wurde; der Streaming-Loader hält die Quelldatei jetzt lesbar, ohne den für die Aktualisierung benötigten Schreibgriff zu blockieren
Version 3.71.1
Hinzugefügt
- Berichte von ComplianceWorkbench und SigningWorkbench enthalten jetzt Kennzeichnungen für den Schweregrad von Findings, Felder für den jeweils höchsten Schweregrad pro Datei, Zusammenfassungen der Schweregrad-Häufigkeit für den Batch sowie passende JSON-, CSV-, HTML- und Konsolenausgaben für eine schnellere Richtlinien-Triage
Version 3.71.0
Hinzugefügt
- Die Inspektion der SigningWorkbench-Demo meldet jetzt die Revisionsreihenfolge und den DocMDP-Zertifizierungsgrad jeder Signatur, markiert schwache MD5-/SHA-1-Zertifikatssignatur-Algorithmen und den veralteten adbe.pkcs7.sha1-SubFilter mit
--forbid-weak-digest(SG303/SG405), selbstsignierte Zertifikate mit--forbid-self-signed(SG406), Dokumente ohne Zertifizierungssignatur mit--require-certified(SG304) und prüft immer, ob die Signierzeit innerhalb des Gültigkeitszeitraums des Zertifikats liegt (SG407) - Der Signiermodus von SigningWorkbench verwendet jetzt die Sign-Process-API mit den neuen Schaltern
--subfilter(sha1, detached oder cades für PAdES-Baseline-Signaturen) und--digest(auto bis sha512), und das moderneadbe.pkcs7.detachedmit SHA-256 ist die neue Standard-Signatur - Der neue Lesezugriff
TPDFlibSignDoc.GetSignatureDocMDPLevelByNamegibt den DocMDP-Zertifizierungsgrad eines Signaturfelds gemäß ISO 32000-1 §12.8.2.2 zurück
Version 3.70.0
Hinzugefügt
- Die ComplianceWorkbench-Demo erzwingt jetzt auch Berechtigungs-, Metadaten- und Größenrichtlinien:
--require-print-allowedund--require-copy-allowedprüfen die Dokumentberechtigungsbits (PC205/PC206),--require-authorund--require-creation-dateprüfen die Vollständigkeit der Metadaten (PC306/PC307), und--max-pagesund--max-file-sizebegrenzen den Dokumentumfang (PC308/PC309) - Das Archivprofil verlangt jetzt ebenfalls einen Autor und ein Erstellungsdatum, und das Barrierefreiheitsprofil verlangt die Kopierberechtigung, auf die assistive Technologie angewiesen ist
- Berichte von ComplianceWorkbench aggregieren jetzt eine Häufigkeitszusammenfassung der Fehlercodes über den gesamten Batch, und die Metriken pro Datei enthalten Autor, Erstellungsdatum, Dateigröße sowie den Status der Druck- und Kopierberechtigung
Version 3.69.1
Behoben
DecryptFileentfernt wieder die Verschlüsselung von AES-128- und RC4-geschützten Dokumenten, einschließlich Dokumenten, die nur ein Besitzerkennwort tragen; seit v3.67.4 meldete der schnelle Pfad für große Dateien diese Dokumente fälschlich als mit falschem Kennwort versehen (Fehler 404), statt sie an den regulären Entschlüsselungspfad zu übergeben, während AES-256-Dokumente nicht betroffen waren
Version 3.69.0
Hinzugefügt
- Neue SigningWorkbench-Delphi-Demo: ein Konsolenwerkzeug für Signatur- und Zertifikats-Workflows, das die Signaturfelder einer einzelnen PDF oder eines ganzen Verzeichnisses prüft (SubFilter, Signierzeit, ByteRange-Abdeckung und das Signaturzertifikat mit Ablaufprüfungen), PDFs mit einem PKCS #12-Zertifikat stapelweise signiert und PFX-Dateien prüft; jeder Verstoß wird einem stabilen Policy-Fehlercode (SG101–SG501) zugeordnet, und die Ergebnisse werden als JSON-, CSV- und HTML-Berichte mit lokalisierten Demo-Anleitungen für alle 18 Dokumentationssprachen ausgegeben
- Neue Lesezugriffs-Accessor für Signaturen auf
TPDFlibSignDoc:GetSignatureFieldNameslistet die Signaturfelder eines Dokuments auf,GetSignatureTextValueByNameliefert die /M-Signierzeit, /Name, /Reason, /Location, /ContactInfo- und /Type-Einträge zurück (mit Entschlüsselung bei verschlüsselten Dokumenten), undGetSignatureValueByNameliefert /Filter, /SubFilter, /Contents und die ByteRange-Einträge nach Feldname zurück - Der
CertCloseStore-Import aus der Windows CryptoAPI wurde behoben, der ohne seinen Flags-Parameter deklariert war und beim Schließen eines Zertifikatsspeichers den Aufrufer-Stack unter Win32 beschädigen konnte
Behoben
Version 3.68.0
Hinzugefügt
- Neue ComplianceWorkbench-Delphi-Demo: ein Batch-Richtlinienprüfwerkzeug für die Konsole, das eine PDF oder ein ganzes Verzeichnis gegen eine konfigurierbare Compliance-Richtlinie prüft, die PDF/A- und PDF/UA-Preflight, Verschlüsselungsregeln, den PDF-Versionsbereich, Tagged PDF, Linearization und den Dokumenttitel abdeckt, jeden Verstoß als stabilen Policy-Fehlercode (PC101–PC501) meldet und JSON-, CSV- und HTML-Berichte mit automatisierungsfreundlichen Exitcodes schreibt
- Die neuen Demo-Profile bündeln gängige Anforderungssätze—archive, accessible, secure und web—mit expliziten Kommandozeilen-Schaltern, die Profilwerte überschreiben, und enthalten lokalisierte Demo-Anleitungen für alle 18 Dokumentationssprachen
Version 3.67.4
Geändert
EncryptFileundDecryptFileverwenden jetzt einen direkten AES-256-Umschreibpfad für große klassische xref-PDFs und streamen verschlüsselte Daten zwischen Dateien, statt jedes Objekt neu zu laden und zu serialisieren; eine 2 GB Benchmark-Datei schließt die Datei-zu-Datei-AES-256-Verschlüsselung und -Entschlüsselung über die Direct File API jetzt mit Rückgabecode 1 undLastErrorCode0 ab
Behoben
- Die direkte AES-256-Zeichenfolgen-Token-Behandlung wurde korrigiert, sodass Dictionary-Begrenzer nicht mit Hex-Strings verwechselt werden und verschlüsselte leere Zeichenfolgen korrekt entschlüsselt werden
Version 3.67.3
Änderungen
- Die Delphi- und C++Builder-Demos für DrawShapes, CreateWithImage, CreateTable, EditFormField und EmbeddedFonts wurden erweitert, sodass die erzeugten PDFs jetzt praxisnahe Abläufe für Zeichnen, Bildplatzierung, Tabellenlayout, Formularfeldgestaltung und Vergleiche zur Schrifteinbettung zeigen, statt nur minimale Einzelschritt-Ausgaben zu erzeugen
Korrekturen
- Die CreateTable-Demo setzt jetzt vor dem Rendern der Tabelle eine explizite A4-Seitengröße, wodurch die zuvor nicht initialisierte Seitengrößenvariable im Delphi-Beispiel vermieden wird
Version 3.67.2
Behoben
- Eine Regression der in v3.67.0 eingeführten verzögerten Erkennung auf Loader-Seite wurde behoben: Die Erkennung von Inhaltsmerkmalen konnte beim Speichern laufen und eine ausdrücklich angeforderte Speicherversion (SetInformation 0) oder eine gesperrte Version (LockSaveVersion) überschreiben, sodass ein strenges Speichern in eine niedrigere Version Inhalte mit höherer Version nicht mehr zurückwies und eine gesperrte Version nach oben wandern konnte; die Erkennung läuft nun vor jeder ausdrücklich gesetzten Version und nie für Dokumente, die neu erstellt statt geladen wurden, wodurch das Versionssteuerungsverhalten vor v3.67.0 wiederhergestellt wird, während die Einsparungen durch die verzögerte Ladeerkennung erhalten bleiben
Version 3.67.1
Geändert
- Die Merkmalserkennung liest Stream-Objekte nun mit einer flachen Analyse, die nur das Objektwörterbuch prüft und den Stream-Body überspringt, da der Scan Stream-Inhalte nie untersucht; bei Dokumenten mit großen Bildstreams vermeidet dies das Lesen der Body-Bytes während der Erkennung und senkt die Objektlesezeit eines Erkennungslaufs um rund 40% (etwa 13 s statt 20 s bei einer 2-GB-Datei mit 1,6 Millionen Objekten), während die erkannte Merkmalliste und die effektive PDF-Version identisch bleiben
Version 3.67.0
Geändert
- Die inhaltsbasierte Feature-Erkennung auf Laderseite erfolgt jetzt verzögert (lazy) – statt beim Laden das gesamte Dokument zu durchsuchen, läuft sie erst bei der ersten Nutzung, wenn die effektive PDF-Version oder die Liste der erkannten Features abgefragt wird oder wenn das Dokument gespeichert wird; rein lesende Vorgänge wie Seitenanzahl, Text- oder Bildextraktion und Rendering, die die Version nie abfragen und nicht erneut speichern, überspringen den Scan vollständig, was die Ladezeit sehr großer Dokumente um rund 80% verkürzt (etwa 10 s statt 56 s bei einer 2 GB großen Datei mit 1,6 Millionen Objekten), während der erkannte Feature-Satz und die effektive PDF-Version nach dem Lauf der Erkennung identisch bleiben
Version 3.66.1
Geändert
- Das Laden sehr großer mehrseitiger Dokumente ist jetzt erheblich schneller: Die ladeseitige Inhaltsmerkmal-Erkennung überspringt Regelprüfungen, die das Ergebnis nicht ändern können – sowohl bereits zutreffende Regeln als auch Regeln, die auf ein bestimmtes Objekt nicht anwendbar sind – und halbiert so nahezu die Ladezeit bei riesigen Dateien, während die erkannten Merkmale und die effektive PDF-Version identisch bleiben
Version 3.66.0
Geändert
- Das Laden sehr großer mehrseitiger Dokumente benötigt jetzt deutlich weniger Speicher auf dem Höchststand. Die laderseitige Inhaltsfeatureerkennung materialisiert nicht mehr das gesamte Objektmodell auf einmal – sie streamt stattdessen ein Objekt nach dem anderen durch den Direktzugriffs-Reader – was den Spitzenspeicherbedarf bei großen Dateien um rund 90 % senkt und dabei erkannte Features sowie die effektive PDF-Version unverändert lässt.
Version 3.65.0
Hinzugefügt
- Dokumente, die größer als 2 GB sind, können jetzt geöffnet werden. Der bisherige In-Memory-Puffer, der die Dokumentgröße auf etwa 2 GB begrenzte, wurde entfernt.
Geändert
- Beim Laden einer PDF aus einer Datei werden die Objektdaten jetzt bei Bedarf aus der Quelle gelesen, anstatt das gesamte Dokument im Speicher zu puffern, was den Spitzenspeicherbedarf bei großen Dateien deutlich reduziert.
- Ein aus einer Datei geladenes Dokument hält diese Datei mit gemeinsamem Lesezugriff geöffnet, bis das Dokument geschlossen oder geleert wird.
Behoben
- Verbesserte Robustheit beim Laden von Dokumenten mit führenden Bytes vor dem %PDF- Header sowie bei der Verarbeitung fehlerhafter cross-reference-Daten.
Version 3.64.0
Geändert
- Direct-API-Operationen für sehr große oder objektreiche PDFs – EncryptFile, DecryptFile und DASaveAsFile – sind jetzt drastisch schneller und bleiben nicht mehr hängen. Ein 2 GB großes Dokument mit etwa 1,6 Millionen Objekten, das zuvor nicht fertiggestellt werden konnte, wird jetzt in etwa einer Minute verschlüsselt, und die Verarbeitungszeit skaliert annähernd linear mit dem Dokument, anstatt bei wachsender Objektanzahl einzubrechen.
- Das Verschlüsseln großer Dokumente ist erheblich schneller – ein Vorgang, der zuvor viele Minuten dauerte, wird jetzt in Sekunden bis etwa einer Minute abgeschlossen – ohne Änderung an Verschlüsselungsstärke, Chiffretext-Kompatibilität oder Ausgabe.
Version 3.63.0
Behoben
- Absturz beim Laden großer PDF-Dateien behoben, deren interne Byte-Offsets die 32-Bit-Grenze (etwa 2 GB) überschreiten; der Loader verwendet jetzt durchgängig 64-Bit-Offsets, sodass Dateien nahe 2 GB zuverlässig geladen werden und Dateien ab 2 GB einen Ladefehler ordnungsgemäß melden, anstatt abzustürzen.
Version 3.62.0
Geändert
- Die AES-256-CBC-Verschlüsselung und -Entschlüsselung nutzen den hardwarebeschleunigten AES-NI-Pfad jetzt auch unter 32-Bit-Windows, nicht nur unter 64-Bit, weiterhin mit automatischem Rückgriff auf die portable C-Implementierung auf Prozessoren ohne AES-NI. Der Geheimtext bleibt auf jeder Plattform unverändert.
Version 3.61.0
Geändert
- Die AES-256-CBC-Verschlüsselung und -Entschlüsselung verwenden jetzt ein hardwarebeschleunigtes AES-NI-Backend unter 64-Bit-Windows, mit automatischem Rückgriff auf die portable Software-Implementierung auf Prozessoren ohne AES-NI. Der Geheimtext ist auf jeder Plattform identisch; nur die Geschwindigkeit der passwortbasierten AES-256-PDF-Verschlüsselung ändert sich.
Version 3.60.0
Hinzugefügt
MergeFileListführt die logischen Strukturbäume (Tagged PDF) der Eingabedokumente jetzt zu einem einzigen, erreichbaren Strukturbaum zusammen, statt nur den Baum des ersten Dokuments zu erhalten und die übrigen als unerreichbare Objekte zu belassen. Strukturelemente der obersten Ebene, der parent tree (mit neu zugeordneten Seiten-/StructParents- und Anmerkungs-/StructParent-Schlüsseln),/RoleMap,/ClassMapund/IDTreewerden zusammengeführt, und der zusammengeführte Katalog wird als Tagged markiert (/MarkInfo /Marked true).
Geändert
- Beim Zusammenführen von Dokumenten mit widersprüchlichen
/RoleMap-,/ClassMap- oder/IDTree-Schlüsseln wird das erste Vorkommen beibehalten. Der schnelle Pfad (MergeFileListFast) verwirft Strukturinformationen weiterhin.
Version 3.59.0
Geändert
MergeFileListführt Dokumente jetzt in einem einzigen Durchgang zusammen (O(N) statt O(N²)), was das Zusammenführen vieler Dateien deutlich beschleunigt; außerdem erhält es das Zusammenführen von Lesezeichen über mehrere Dokumente, das dem schnellen Pfad hinzugefügt wurde.- Standardmäßig überspringt
MergeFileListjetzt unlesbare oder verschlüsselte Eingabedateien und führt die übrigen weiter zusammen, anstatt den gesamten Vorgang bei der ersten fehlerhaften Datei abzubrechen. Verwenden Sie das neueMergeFileListStrict, um das frühere Verhalten (Abbruch beim ersten Fehler) wiederherzustellen. - Logische Struktur (Tagged PDF)-Objekte aus den Eingaben bleiben jetzt von
MergeFileListerhalten (der schnelle Pfad verwirft sie weiterhin).
Hinzugefügt
MergeFileListStrictführt eine Dateiliste zusammen, hält jedoch bei der ersten unlesbaren oder verschlüsselten Datei an und behält die strikte Abbruchsemantik früherer Versionen bei.
Version 3.58.0
Hinzugefügt
MergeFileListFastführt jetzt die Dokument-Lesezeichen (Outlines) aus allen Eingabedateien zusammen, sodass der schnelle Zusammenführungspfad zusätzlich zu den AcroForm-Formularfeldern auch die Lesezeichen erhält.- Zusammengeführte Lesezeichen behalten ihre Hierarchie und Seitenziele; die Anzahl der Lesezeichen der obersten Ebene in der zusammengeführten Ausgabe entspricht der Summe der Eingaben.
Version 3.57.1
Geändert
- Das Speichern über die Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) ist bei sehr großen Dokumenten jetzt deutlich schneller: Unveränderte Objekte werden direkt aus den Quellbytes kopiert, statt sie neu zu parsen und zu serialisieren. Das erneute Speichern eines 60.000-seitigen / 883 MB-Dokuments sank von etwa 33 Sekunden auf rund 23 Sekunden.
Version 3.57.0
Geändert
- Die Leistung von
TPDFlib.MergeFileListFastbei der Zusammenführung mehrerer Dokumente wurde weiter optimiert: Unveränderte Nicht-Stream-Objekte in den angehängten Dokumenten werden nun direkt aus ihren ursprünglichen Quellbytes wiederverwendet und durch eine byteweise Verschiebung indirekter Referenzen angepasst, wodurch der Parse-und-Reserialize-Roundtrip entfällt und der Durchsatz bei mehrseitigen Dokumenten verbessert wird. Die Merge-Ausgabe bleibt unverändert, mit identischen Seitenzahlen. - Objekte, die Streams enthalten oder zum Strukturbaum gehören, verwenden weiterhin den bestehenden Decode-Pfad, sodass der schnellere Bytepfad nur dort angewendet wird, wo er nachweislich sicher ist.
Version 3.56.44
Geändert
TPDFlib.MergeFileListFastwurde optimiert, indem Merge-Metadaten vorab reserviert und unveränderte Objekte des ersten Dokuments aus ihren ursprünglichen Quelldaten geschrieben werden. Dadurch sinken Speicherbewegungen und vermeidbare Objekt-Decodierungs-/Ausgabearbeit bei schnellen Mehrdatei-Merges.- Die Delphi-GUI
MergePDFbündelt nun die Ergebnisprotokollierung im schnellen Modus und vermeidet wiederholte Scans des gesamten Memo-Texts, sodass große Eingabelisten nach Abschluss eines Merges reaktionsfähiger bleiben.
Version 3.56.43
Geändert
- Der reguläre Zusammenführungspfad von
TPDFlib.MergeFileListwurde optimiert, indem seine temporären Zwischendateien abwechselnd genutzt werden, statt das wachsende zusammengeführte PDF vor jeder weiteren Eingabedatei zu kopieren. Dadurch sinkt die Datenträger-E/A bei Workflows mit mehreren Dateien, während der bestehende Vertrag für den Rückgabewert erhalten bleibt.
Version 3.56.42
Hinzugefügt
- Neue AES-Regressionsabdeckung prüft Eingabepuffer-/Rückgabeziel-Aliasfälle beim Rücksetzen verschlüsselter Streams während des Speicherns, einschließlich großer 504-KB-Nutzdaten, die den Fehler zuvor sichtbar machten.
Geändert
- Der normale API-Ablauf
LoadFromFile,Encrypt,SaveToFile, erneutes Laden,DecryptundSaveToFilewird bei großen geladenen PDFs wieder abgeschlossen, während die AES-CBC-Entschlüsselungsoptimierung mit reduzierter Kopie erhalten bleibt.
Behoben
- Der in v3.56.41 eingeführte pufferbasierte AES-256-Entschlüsselungspfad wurde korrigiert, sodass Aufrufer das Entschlüsselungsergebnis wieder derselben
AnsiString-Variable zuweisen können, die den Ciphertext-Puffer bereitgestellt hat, ohne Zugriffsverletzungen auszulösen.
Version 3.56.41
Hinzugefügt
TPDFlib.DACopyFilewurde für Direct Access Workflows ergänzt, die eine Seitenzahl und eine unveränderte Dateikopie benötigen, ohne den vollständigen normalen Objektgraphen aufzubauen.- Die Delphi
HugeFileBenchmarkDemo enthält jetzt einedirect-copyZeile sowie--opsund--skipFilter für gezielte Großdatei-Läufe.
Geändert
- Die AES-256-Entschlüsselung wurde durch pufferbasierte AES-CBC-Entschlüsselungspfade optimiert, die beim Entschlüsseln geladener Zeichenfolgen und Streams verwendet werden und zusätzliche Ciphertext-Kopien bei großen verschlüsselten Streams reduzieren.
Version 3.56.40
Geändert
- Die Delphi- und C++Builder-Demos
HelloWorlderstellen jetzt ein umfangreicheres Start-PDF mit Dokumentinformationen, Ausgabe in einer ausgewählten Standardschrift, einem gestalteten Titelblock, einfacher Vektorzeichnung und Hinweisen zu den nächsten Schritten, während der gleiche Build-and-Run-Ablauf erhalten bleibt. - Alle Demo-Notizen für Delphi und C++Builder wurden durch browserfreundliche
Readme.html-Seiten ersetzt, einschließlich ergänzender Hinweise zu Kennwörtern, eingeschränkten Dateien und Signaturergebnissen; die Demo-Indizes führen Benutzer jetzt zu den HTML-Notizen.
Version 3.56.39
Geändert
- Die Speicherpfade der direkten Datei-API bauen Cross-Reference-Nachschlagetabellen jetzt linear auf, wodurch
DASaveAsFileund verwandte direkte Speicherpfade bei PDFs mit sehr vielen Objekten oder dichten Seitenbäumen deutlich schneller werden. - Der optimierte Writer erhält die gleiche Semantik der Free-Object-Kette und vermeidet wiederholte Objektnummer-Scans während der vollständigen xref-Erzeugung, wodurch große Direct-Save-Workflows ohne Änderung der öffentlichen API oder des Ausgabe-Vertrags beschleunigt werden.
Version 3.56.38
Geändert
- Der normale API-Workflow
LoadFromFile,Encrypt,SaveToFile, erneutes Laden,DecryptundSaveToFilebewahrt den verschlüsselten Zustand nun bis zum explizitenDecryptund entspricht damit dem Verhalten der direkten Datei-API bei großen Legacy-PDFs.
Behoben
- Die normale API-Verschlüsselungsausgabe wurde korrigiert, sodass
Encryptdie Trailer-ID/IDerstellt oder erhält, bevor AES-256-Sicherheitsdaten geschrieben werden. Dadurch bleiben verschlüsselte PDFs beim erneuten Laden überEncryptionStatuserkennbar.
Version 3.56.37
Hinzugefügt
TPDFlib.ComparePreflightReportswurde hinzugefuegt: ein zeilenweiser Vergleich fuer Nur-Text-Preflight-Berichte, der volatileGenerated:-Zeitstempelzeilen ignoriert und eine leere Zeichenfolge zurueckgibt, wenn der stabile Berichtsinhalt uebereinstimmt.- Die Delphi-Demo
PreflightReportunterstuetzt jetzt--compare <file>im Einzeldateimodus, schreibt einen UTF-8-.diff.txt-Bericht und gibt Exitcode 2 zurueck, wenn sich der erzeugte Textbericht von der Baseline unterscheidet.
Version 3.56.36
Hinzugefügt
- Die Delphi-Demo
PreflightReportunterstuetzt jetzt Verzeichnis-Batchlaeufe mit--input-dir,--output-dirund--recursiveund schreibt pro PDF einen Bericht als<basename>.preflight.<ext>.
Geändert
- Der Batchmodus schreibt eine UTF-8-Datei
preflight-summary.csv, die jedes Quell-PDF, den Pass/Fail-Status, die Problemanzahl und den erzeugten Berichtspfad erfasst, waehrend der bestehende Exit-Code-Vertrag fuer Automatisierung erhalten bleibt.
Version 3.56.35
Hinzugefügt
ReportFormat = 3fuegt CSV-Ausgabe zuTPDFlib.CreatePreflightReportExundTPDFlib.SavePreflightReportExhinzu und erzeugt UTF-8-Zeilen fuer Berichtmetadaten, jede ausgewaehlte Compliance-Pruefung, einzelne Problemcodes und Meldungen sowie die abschliessende Zusammenfassung.- Die Delphi-Demo
PreflightReportunterstuetzt jetzt--format csvund--csv, sodass Preflight-Laeufe ueber die Befehlszeile Tabellenkalkulationen oder einfache CI-Parser speisen koennen, ohne JSON nachzubearbeiten oder Text auszulesen.
Version 3.56.34
Hinzugefügt
- Formatbewusste APIs
TPDFlib.CreatePreflightReportExundTPDFlib.SavePreflightReportExhinzugefügt, um PDF/A- und PDF/UA-1-Preflight-Berichte als Klartext, JSON oder eigenständiges HTML zu erzeugen, während die vorhandenen reinen Text-APIs erhalten bleiben. - Das Delphi-Demo
PreflightReportunterstützt jetzt--format text|json|htmlsowie die Kurzformen--jsonund--html, sodass derselbe Kommandozeilen-Workflow lesbare Berichte oder maschinenlesbare CI-Artefakte erzeugen kann.
Version 3.56.33
Hinzugefügt
TPDFlib.CreatePreflightReportundTPDFlib.SavePreflightReportwurden hinzugefügt, damit Anwendungen wiederverwendbare Klartextberichte aus den integrierten PDF/A- und PDF/UA-1-Konformitätsprüfungen erstellen können, ohne String-List-Handles manuell zu durchlaufen.
Geändert
- Das Delphi-Demo
PreflightReportruft jetzt direkt die Report-APIs der Bibliothek auf, sodass das Beispiel auf Kommandozeilen-Workflow, ausgewählte Prüfungen, First-Issue-Modus und automatisierungsfreundliche Exit-Codes fokussiert bleibt.
Version 3.56.32
Hinzugefügt
- Ein neues Delphi-Konsolenbeispiel
PreflightReportwurde hinzugefügt. Es führt PDF/A- und PDF/UA-1-Prüfungen mitCheckFileComplianceaus, listet die Befunde mitGetStringListCountundGetStringListItemauf und schreibt einen Preflight-Bericht als Textdatei.
Geändert
- Das Beispiel unterstützt die Optionen
--input,--output,--pdfa,--pdfua,--bothund--first-issuesowie Exit-Codes für automatisierungsfreundliche Ergebnisse: bestanden, Probleme gefunden und Laufzeitfehler.
Version 3.56.31
Geändert
GetCustomKeys(2)verbirgt jetzt konsistent systemweite Einträge, die von der Bibliothek verwaltet werden, einschließlich/OutputIntents,/Extensions,/Requirements,/Collectionund/NeedsRendering.
Behoben
- Die von
SetPDFAModeerstellten PDF/A-Ausgabe-Intents erscheinen nicht mehr als benutzerdefinierte Katalogschlüssel, wodurch die Anwendungsmetadaten von den PDF-Konformitätsstrukturen getrennt bleiben.
Version 3.56.25
Geändert
- Die GetPDFUADiagnostics-Funktion auf der Schreibseite behebt das entsprechende
MULTIPLE-H-CHILDREN:N-Problem, wodurch die Funktionalität mit dem10044-Modus ab v3.56.24 übereinstimmt. ISO 14289-1 §7.4.4 verbietet mehr als ein direktes H-Kind pro Knoten im Tag-Baum – die Schreibseitprüfung wird immer dann ausgelöst, wenn der im Speicher befindliche FStructElems-Baum eine solche Verletzung enthält. - Ein neuer, verschachtelter CountMultipleHChildren-Helfer durchläuft den Baum in der Tiefe und zählt die H-Kinder auf jeder Ebene. Die Prüfung läuft parallel zu den vorhandenen LIST-STRUCT / LIST-NO-NUMBERING-Durchläufen und verwendet das gleiche FStructElems-Traversalmuster.
Version 3.56.24
Geändert
- Die PDF/UA-1-Prüfung erhält eine zusätzliche ISO 14289-1 §7.4.4-Prüfung auf Eindeutigkeit von H-Tags.
10044meldet jeden Strukturknoten, der mehr als ein direktes H-Kind enthält. — verbietet dies in der Spezifikation für stark strukturierte Dokumente, und dieselbe Einschränkung gilt für jeden Knoten im Tag-Baum, unabhängig vom Gesamtstrukturmodus. Die andere §7.4.4 SHALL (ein Dokument muss entweder stark oder schwach strukturiert sein, nicht beides) erfordert dokumentumfassende Heuristiken und wurde absichtlich aus dieser Prüfung ausgelassen. - Ein neuer, vorrangiger Strukturbaum-Durchlauf (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) zählt die direkten H-Kinder pro Knoten und durchläuft den Baum in der Tiefe. Verwendet den gleichen K-Form-Decoder wie die vorhandenen Überschrift-/Listen-/Notiz-Durchläufe.
Version 3.56.23
Hinzugefügt
- Das neue
Lib/PDFlibPDFUAFontInspect.pasimplementiert einen toleranten SFNT-Tabellenverzeichnis-Walker und einen cmap-Untertabelle-Verzeichnis-Parser. Die 4281-Name-Adobe-Glyph-List-Tabelle, die im vorherigen Infrastruktur-Commit als Gerüst hinzugefügt wurde, ist jetzt über die Differences-Prüfung integriert. Programme, die nicht als SFNT (Type 1 PFB / PFA, OpenType-Sammlung, beliebiger Müll) geparst werden, werden stillschweigend übersprungen. Falsch-Negative werden auf der Prüfebene gegenüber Falsch-Positiven bevorzugt.
Geändert
- Die PDF/UA-1-Prüfung erhält zwei ISO 14289-1 §7.21.6-Fontprogramm-Prüfungen, die die Dictionary-Layer-Prüfungen von v3.56.10 bis zu einer TrueType-Parser-Verfügbarkeit verzögert haben.
10034meldet nicht-symbolische TrueType-Programme, deren eingebettete SFNT-cmap-Tabelle nur den symbolischen Eintrag (platformID=3, encodingID=0) enthält. — §7.21.6 im ersten Absatz erfordert mindestens eine nicht-symbolische cmap-Untertabelle, damit das Programm die durch seine /Encoding. deklarierten Codepunkte rendern kann.10035meldet nicht-symbolische TrueType-Arrays, deren Glyphennamen keine Mitglieder der Adobe Glyph List sind (.notdefausgenommen). — §7.21.6 im dritten Absatz erfordert, dass jeder Differences-Eintrag in AGL landet.
Version 3.56.22
Geändert
- Die PDF/UA-1-Prüfung erhält Prüfungen für Mediendaten.
10042meldet Mediendaten-Dictionaries (identifiziert durch/S /MCD, optional/Type /MediaClip), denen der erforderliche/CT-Content-Type-Eintrag fehlt.10043meldet dieselben Dictionaries, denen das erforderliche/Alt-Array fehlt. ISO 32000-1 Tabelle 274 listet beide Schlüssel als optional auf, aber ISO 14289-1 §7.18.6 macht sie zu erforderlichen, damit Bildschirmlesegeräte eine aussagekräftige Beschreibung für eingebettete Multimedia-Inhalte ausgeben können. - Dies ist Phase 6 des PDF/UA-Deep-Audit-Plans (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Es läuft ohne Abhängigkeit von einem Fontprogramm- oder Content-Stream-Parser und ist daher die erste Folgeunterklasse nach der v3.56.0..v3.56.13-Serie.
Version 3.56.21
Hinzugefügt
- Das neue
SetSignProcessCommitmentTypegibt das signierte Attribut CAdEScommitment-type-indicationinnerhalb des PAdES-B-B SignerInfo aus. Es akzeptiert Integer-Codes von 1 bis 6, die den bekannten ETSI-Commitment-Wertenid-cti-ets-proofOfOriginbisid-cti-ets-proofOfCreationentsprechen; geben Sie 0 an, um es zu löschen. Werte außerhalb des zulässigen Bereichs werden abgelehnt. - Das neue
SetSignProcessSignaturePolicygibt das CAdES signierte Attributsignature-policy-identifieraus (OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Es benötigt die Policy im Format mit Punkten (dotted-decimal), den Hash des Policy-Dokuments als Hexadezimalstring in Großbuchstaben und einen Digest-Algorithmus-Code (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=automatisch /SHA-256). Das Attribut enthält denSignaturePolicyId-Wert zusammen mitsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE).
Geändert
- Beide Attribute sind nur wirksam, wenn der SubFilter-Wert
ETSI.CAdES.detachedist (der PAdES-B-B-Pfad); sie erweitern das bestehendergAuthAttr-Array zusammen mitcontent-typeundsigning-certificate-v2. PAdES Tabelle 1, Zeile d), verbietet die Kombination voncommitment-type-indicationmit dem PDF-Signaturen-Dictionary-Eintrag/Reason; der Aufrufer ist dafür verantwortlich, dass beide nicht gleichzeitig gesetzt werden.
Version 3.56.20
Hinzugefügt
- Das neue
AddPAdESDSSVRIfügt einen Signature VRI Unterdictionary-Eintrag zum DSS hinzu, der zusammengebaut wird, wodurch der Abschnitt 5.4.2.3 der ETSI EN 319 142-1 v1.2.1-Struktur "Validierungsbezogene Informationen" vervollständigt wird. Der Eintrag wird durch den Großbuchstaben-Hex-Wert SHA-1 der Signaturen ' Bytes indiziert; seineCert/CRL/OCSPUnterarrays werden durch Referenzierung der entsprechenden übergeordneten DSS Streams über 0-basierte Indizes befüllt, die als kommagetrennte Listen angegeben werden (z. B."0,2,5").
Geändert
- Das zugrunde liegende
TSmartPDFDocument.AddPAdESDSSWithVRIverfolgt die Stream-Objektnummern, die für jedes Zertifikat / CRL / OCSP ausgegeben werden, und verwendet diese, um die VRI Unterarrays als indirekte Referenzen in dieselben Streams zu schreiben, auf die die übergeordneten DSS Arrays bereits verweisen, wodurch die Anforderung der Spezifikation erfüllt wird, dass VRI Einträge Speicherplatz mit dem übergeordneten DSS Dictionary teilen. Der ursprünglicheAddPAdESDSSEinstiegspunkt funktioniert weiterhin unverändert für Aufrufer, die keine VRI benötigen. - Jedes pro-Signatur VRI Unterdictionary enthält den optionalen
/Type /VRIMarker, sodass Tools, die den Katalog anhand vonTypeTags durchlaufen, die Struktur erkennen können, ohne den übergeordneten Pfad erneut auflösen zu müssen.
Version 3.56.19
Hinzugefügt
- Neuer PAdES-B-T-Workflow zum Anfügen eines RFC 3161 / RFC 5816-Signatur-Zeitstempels (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) an eine bestehende PAdES-B-B-Signatur.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringöffnet eine signierte PDF,SetPAdESSignatureTimeStampFieldbenennt das Feld,GetPAdESSignatureValueHashHexgibt den SHA-256 (oder 384 / 512) Hash des Signierers'ssignatureValuezur Übermittlung an eine TSA zurück,GetPAdESSignatureCMSByteslegt die bestehende CMS-Payload frei,SetPAdESSignatureCMSBytesakzeptiert die augmentierten CMS-Bytes, die der Aufrufer über seine CMS-Bibliothek zusammensetzt, undEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringfügt den neuen CMS in den ursprünglichen/Contents-Platzhalter ein. - Der neue
SetSignProcessReserveContentsByteserweitert den/Contents-Platzhalter zum Zeitpunkt der ersten Signatur, sodass das nachträglich augmentierte CMS ohne Überlauf in die ursprüngliche Reservierung passt. Typische von TSA ausgestellte TimeStampTokens fügen 2-6 KB zum SignerInfo hinzu; geben Sie hier 1024-8192 ein, um Spielraum zu lassen. Wenn nicht genügend Reservierung vorhanden ist, gibt der Augmentierungsaufruf13(Ausgabepufferüberlauf) zurück.
Geändert
BuildPAdESSignatureTimeStampAttributeist ein zustandsloser Helfer, der ein von TSA ausgestelltes TimeStampToken in das CMS-Attribut einbettet, dasSignerInfo.unsignedAttrserwartet, sodass Aufrufer, die bereits eine CMS-Bibliothek zur Verfügung haben, die OID + SET-Infrastruktur überspringen können.- Die Bibliothek enthält keinen TSA-Client für HTTP; der Aufrufer ruft die TimeStampToken ab (typischerweise 30-50 Zeilen TSP-Anfrage + HTTP-Kontext für z. B. FreeTSA oder DigiCert). Unter Windows würde
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRim Prinzip die CMS-Injektion in der Bibliothek automatisieren, gibt aberCRYPT_E_INVALID_INDEX(0x80091008) für die vom Aufrufer bereitgestellte CMS-Byte-Pfad-Form PAdES aus, sodass der vom Aufrufer bereitgestellte CMS-Byte-Pfad verwendet wird.
Version 3.56.18
Hinzugefügt
- Neue ASN.1-Helfer
DER_IntegerFromLittleEndian(behandelt die Win32-CRYPT_INTEGER_BLOB-Byte-Reihenfolge) undDER_ContextTagExplicit(verpackt eine Payload in einem kontextspezifischen, konstruierten Tag) runden denPDFlibASN1-Mikro-Encoder ab. NeueCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXT-Deklarationen inPDFlibCryptoAPIgeben dem Signaturpfad Zugriff auf die geparsten Zertifikatsfelder.
Geändert
- Das PAdES-Attribut
signing-certificate-v2enthält jetzt das optionaleIssuerSerial-Feld, das von RFC 5035 (ESSCertIDv2) definiert wird. Der ausgegebene Distinguished Name des Signaturzertifikats' ist in einemGeneralName [4] EXPLICIT directoryName-CHOICE innerhalbGeneralNamesenthalten, gefolgt von der Zertifikats-Seriennummer als einem ASN.1-INTEGER. Die Seriennummern-Bytes kommen von Windows CryptoAPI (CRYPT_INTEGER_BLOB) im Little-Endian-Format und werden in Big-Endian umgekehrt, wobei ein positives-Integer-Padding-Byte hinzugefügt wird, wenn das höchste Bit gesetzt ist, was der Art und Weise entspricht, wie OpenSSL und BouncyCastle dasselbe Feld ausgeben. - Verifizierer, die den ausgegebenen Namen + Seriennummern-Paar mit ihrem Kandidaten-Set für den Pfadaufbau abgleichen (insbesondere EU DSS im strengen Modus), finden jetzt beide Identifikatoren im Signaturzertifikat-v2-Attribut; die vorherige v3.56.17-Ausgabe lieferte nur die
certHash-Referenz.
Version 3.56.17
Hinzugefügt
- Die neue
PDFlibASN1-Unit stellt einen fokussierten DER (X.690)-Mikro-Encoder bereit — Längenpräfix, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER — der zum Aufbau desSigningCertificateV2-Attributwerts verwendet wird. Der Encoder folgt den Standardregeln für base-128-OID-Arcs und lässt das optionalehashAlgorithm-Feld weg, wenn es lediglich den SHA-256-Standard wiederholen würde, passend zu dem, was OpenSSL und BouncyCastle ausgeben.
Geändert
- Der eingebaute
ETSI.CAdES.detached-Signaturpfad erzeugt nun strukturkonforme PAdES-B-B-Signaturen. Die Bibliothek baut die CMS-authentisierten Attribute selbst auf —content-type(id-data) undsigning-certificate-v2aus RFC 5035 / RFC 5816 mit einem SHA-256-Hash des Signaturzertifikats — und übergibt sie überrgAuthAttranCryptSignMessage. Sobald dieses Feld nicht NULL ist, hört die Windows CryptoAPI auf, das von PAdES (ETSI EN 319 142-1 v1.2.1 Tabelle 1) verbotenesigning-time-Attribut automatisch zu injizieren, sodass das resultierendeSignerInfonur noch die geforderten Attribute trägt. ApplySignatureleitetETSI.CAdES.detachednun über den Raw-Byte-Pfad (denselben, denadbe.pkcs7.detachedverwendet) statt einen vorberechneten Digest zu übergeben. Die CryptoAPI berechnet dasmessageDigest-authentisierte Attribut nun über die tatsächlich signierten Inhalte, was Verifier erwarten.- SHA-384 und SHA-512 werden beim Aufbau des signing-certificate-v2-Attributs ebenfalls berücksichtigt: Das
hashAlgorithm-Feld wird mit dem passendenAlgorithmIdentifierausgegeben, statt sich auf den Standard zu verlassen. SHA-1 wird in diesem Kontext stillschweigend auf SHA-256 hochgestuft, weil PAdES-B-B SHA-1 nicht autorisiert (clause 6.2.1).
Version 3.56.16
Hinzugefügt
- Neu:
SetSignProcessDigestAlgorithmwählt den Message-Digest-Algorithmus für die Signatur:1= SHA-1 (deprecated),2= SHA-256 (moderner Standard),3= SHA-384,4= SHA-512,0= auto (SHA-256 für jeden SubFilter außer dem Legacy-Pfadadbe.pkcs7.sha1, der für byte-stabile Rückwärtskompatibilität bei SHA-1 bleibt). ETSI EN 319 142-1 v1.2.1 §6.2.1 verbietet MD5 und verweist für empfohlene Krypto-Suites auf ETSI TS 119 312, sodass PAdES-Signierer SHA-256 oder stärker wählen sollten. - Hinzugefügt:
SHA256StreamRange,SHA384StreamRangeundSHA512StreamRangeals Hash-Helfer neben dem bestehendenSHA1StreamRange; der Signaturpfad nutzt sie, um den PDF ByteRange unter dem gewählten Algorithmus zu hashen. Die PKCS#7-SignerInfo.digestAlgorithm-OID und die tatsächlich geschriebenen Hash-Bytes stimmen nun garantiert überein (der bisherige Code übergab unabhängig vom ausgehandelten Algorithmus stets den SHA-1-Digest).
Geändert
TPDFlibPFXFile.SignDatanimmt nun einenDigestAlgorithm-Parameter entgegen und wählt für jedes (SubFilter, Algorithmus)-Paar die korrekte OID:2.16.840.1.101.3.4.2.1/.2/.3für SHA-256/384/512 bei detached- und Custom-SubFiltern (RFC 5754) und die passenden OIDs dersha256WithRSAEncryption-Familie für den Legacy-Pfadadbe.pkcs7.sha1.
Version 3.56.15
Hinzugefügt
- Neue
SetSignProcessDocTimeStampschaltet einen Signaturprozess in den PAdES-Document-Time-stamp-Modus gemäß ETSI EN 319 142-1 v1.2.1 §5.4.3. Das resultierende Signatur-Wörterbuch trägt/Type /DocTimeStampund/SubFilter /ETSI.RFC3161, lässt die unzulässigen Schlüssel/M,/Reason,/Location,/ContactInfound/Nameweg und reserviert einen 8192-Byte-Hex-Platzhalter (oder eine vom Aufrufer dimensionierte Größe) in/Contentsfür ein extern abgerufenes RFC 3161 TimeStampToken.
Geändert
- Passthrough wird automatisch aktiviert, wenn der DocTimeStamp-Modus gewählt ist, weil das TimeStampToken von einer externen TSA stammt.
SetSignProcessInfo-Aufrufe nach dem Wechsel in den DocTimeStamp-Modus werden stillschweigend ignoriert, um das Signatur-Wörterbuch spezifikationskonform zu halten. - Die in v3.56.8 hinzugefügte automatische PAdES-
/Extensions /ESIC-Injektion deckt DocTimeStamp bereits ab, weil sein SubFilter mitETSI.beginnt, sodass ein Document-Time-stamp-PDF die erforderliche Catalog-Erweiterung ohne zusätzliche Verdrahtung deklariert.
Version 3.56.14
Hinzugefügt
- Neue PAdES-Document-Security-Store-(DSS)-Erweiterungs-API.
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringöffnen eine zuvor signierte PDF,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPbereiten DER-codiertes Validierungsmaterial vor, undEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringschreiben ein inkrementelles Update mit einem/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>-Wörterbuch gemäß ETSI EN 319 142-1 v1.2.1 §5.4.2.2. Dies ist der Baustein zur Promotion einer PAdES-B-B / B-T-Signatur zur PAdES-B-LT-Langzeitvalidierung.
Geändert
- Der DSS-Prozess hebt den Catalog-
/Extensions /ESIC-Eintrag beim Hinzufügen von Validierungsmaterial automatisch auf mindestensExtensionLevel 1an, entsprechend der Anforderung in §5.6, und führt bei wiederholten Aufrufen neue Zertifikate, CRLs und OCSP-Antworten mit den bestehenden/Certs//CRLs//OCSPs-Arrays zusammen, sodass Revisionen sich akkumulieren statt zu überschreiben. GetPAdESDSSProcessResult/ReleasePAdESDSSProcessvervollständigen den Lebenszyklus und spiegeln die bestehendeSignProcess-API-Oberfläche.
Version 3.56.8
Geändert
- PAdES-Baseline-Konformität: Wenn eine Signatur mit einem PAdES-SubFilter erstellt wird (
ETSI.CAdES.detachedoderETSI.RFC3161), erhält das Dokument-Katalog nun automatisch den Eintrag/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>, der von ETSI EN 319 142-1 v1.2.1 §5.6 verlangt wird. Der Eintrag wird durch dasselbe inkrementelle Update hinzugefügt, das die Signatur trägt, stuft niemals einen bestehenden höheren/ExtensionLevelherab und folgt indirekten/Extensions- oder/ESIC-Referenzen, wenn die Quell-PDF sie bereits als separate Objekte speichert. - Der von SetSignProcessCustomSubFilter für über
TPDFliberstellte PDFs geschriebene Adobe-äquivalente Erweiterungsmarker ist nun/ADBE /BaseVersion /1.7 /ExtensionLevel 8(warExtensionLevel 5), passend zur alternativen Deklaration, die PAdES-Baseline-Signaturen verwenden dürfen; Level 5 deckte nur ISO 32000-2-Formulare / 3D / RichMedia-Features ab und identifizierte tatsächlich nicht die PAdES-Erweiterungen.
Version 3.56.13
Geändert
- Wenn SetPDFUAMode aktiv ist und das Dokument gespeichert wird, erhält jedes L-(Listen-)Strukturelement, dem ein explizites
ListNumbering-Attribut fehlt, nun automatisch/O = List /ListNumbering = None. ISO 14289-1 §7.6 verlangt, dass jedes L-Tag seinen Nummerierungsstil deklariert; die neueApplyPDFUAListNumbering-Korrektur zur Speicherzeit reiht sich in die bestehende FamilieApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNetein. - Autoren, denen ein bestimmter Listenstil wichtig ist, sollten weiterhin SetStructElemListNumbering vor EndTag aufrufen; die automatische Korrektur greift nur, wenn zur Speicherzeit kein ListNumbering-Attribut vorhanden ist, sodass explizite Werte erhalten bleiben.
- Die schreiberseitige
LIST-NO-NUMBERING:N-Diagnosemeldung weist nun darauf hin, dass die automatische Korrektur das Problem zur Speicherzeit maskieren wird, sodass Benutzer sowohl das fehlende Attribut als auch das automatische Reparaturverhalten verstehen.
Version 3.56.12
Geändert
- Das PDF/UA-1-Audit erhält drei neue ISO 14289-1-Prüfungen.
10031meldet Link-Annotationen, deren URI-Aktions-Wörterbuch/IsMap = trueträgt (verboten durch §7.18.5, sofern nicht an anderer Stelle im Inhalt äquivalente Funktionalität bereitgestellt wird; Autoren mit einem legitimen IsMap-Anwendungsfall können die Diagnose selbst unterdrücken).10032meldetNote-Strukturelemente ohne/ID-Eintrag — §7.9 verlangt, dass jedes Note-Tag eine eindeutige ID deklariert.10033meldet doppelte Paarzählungen, wenn zwei oder mehr Note-Tags denselben/ID-Wert teilen. - Die Erkennung von Note-ID-Kollisionen erfolgt durch Sammeln der IDs in einer sortierten TStringList und Durchgehen benachbarter Paare, sodass eine Gruppe von drei Notes mit derselben ID als zwei doppelte Paare zählt.
- Die URI-Aktions-Prüfung geht das
/Annots-Array jeder Seite durch, filtert nach/Subtype /Linkund inspiziert dann/A /S /URIund den/IsMap-Boolean. Indirekte Referenzen werden in jedem Schritt dereferenziert, sodass herausgelöste Aktions-Dicts sich genauso verhalten wie Inline-Versionen.
Version 3.56.11
Geändert
- ISO 14289-1 §7.6 verlangt, dass jedes L-(Listen-)Strukturelement ein explizites
ListNumbering-Attribut trägt.10030(reader-seitig) undLIST-NO-NUMBERING:N(writer-seitig) melden L-Tags, die es weglassen. Der reader-seitige Walker decodiert beide/A-Formen (einzelnes Attribut-Wörterbuch oder ein Array von Wörterbüchern gemischt mit Revisions-Integern) und sucht den/ListNumbering-Schlüssel unabhängig vom Owner. Die writer-seitige Prüfung inspiziertTPDFStructElem.Attributesnach demselben Namen sowohl in der finalisierten Strukturliste als auch im noch offenen Tag-Stack. - Gültige
ListNumbering-Werte gemäß ISO 32000-1 Tabelle 347 sindNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. Das Audit prüft nur das Vorhandensein des Schlüssels, nicht welcher Wert gewählt wurde — jedes L-Tag braucht einen davon.
Version 3.56.10
Geändert
- Das PDF/UA-1-Audit erhält die TrueType-Encoding-Regeln aus ISO 14289-1 §7.21.6.
10028meldet nicht-symbolische TrueType-Schriften, deren/Encoding(oder/BaseEncodinginnerhalb eines Encoding-Wörterbuchs) wederMacRomanEncodingnochWinAnsiEncodingist.10029meldet symbolische TrueType-Schriften, die überhaupt einen/Encoding-Eintrag tragen (verboten durch §7.21.6 vierter Absatz). - Symbolisch vs. nicht-symbolisch wird aus FontDescriptor
/FlagsBit 3 (Maske4) entschieden, durch Wiederverwendung der bestehendenUAFontDescriptorSymbolic-Hilfsfunktion aus Unterklasse 4. Der vollständige erste Absatz von §7.21.6 (das eingebettete TrueType-Programm muss passende cmap-Einträge enthalten) erfordert das Parsen des TrueType-Schriftprogramms und ist noch ausstehend; die obigen Wörterbuch-Ebenen-Regeln sind die praktische Ebene, die dieses Audit ohne TrueType-Parser verifizieren kann. - Differences-Array-Regeln in §7.21.6 (nur AGL-Glyph-Namen, Microsoft-Unicode-cmap-Präsenz) bleiben aus demselben Grund außerhalb des Geltungsbereichs — sie erfordern Inspektion des Schriftprogramms.
Version 3.56.9
Geändert
- Das PDF/UA-1-Audit erhält eine vollständige ISO 14289-1 §7.18.4-Prüfung.
10027meldet Widget-Annotationen, deren/StructParentüber den/ParentTreedes Strukturbaums aufgelöst wird, aber nicht auf einem Strukturelement mit/S = Formlandet. Die frühere Teilprüfung aus v3.56.7 (10026) erfasste nur Widgets, denen/StructParentgänzlich fehlt; die neue Prüfung vervollständigt die Regel, indem sie dem Zahlbaum-Zeiger folgt und das Ziel-Tag verifiziert. - Eine neue
NumberTreeLookup-Hilfsfunktion implementiert die Zahlbaum-Form aus ISO 32000-1 §7.9.7 (flache/Nums-Wurzel, intermediäre/Kids, bereichsbegrenzt durch/Limits). Zukünftige Audits, die/StructParents-Seiteneinträge oder/PageLabels-Labels auflösen müssen, können sie wiederverwenden. - Die Widget-Annotations-Form-Tag-Verifikation verwendet ein zweistufiges Modell: Ein Widget ohne
/StructParentwird als10026gemeldet; ein Widget, dessen/StructParentexistiert, aber nicht zu/S = Formauflöst, wird als spezifischeres10027gemeldet. Dies vermeidet doppelte Zählung derselben Verletzung unter beiden Codes.
Version 3.56.7
Geändert
- Wenn SetPDFUAMode aktiv ist und das Dokument gespeichert wird, werden nun alle
TrapNet-Annotationseinträge automatisch aus dem/Annots-Array jeder Seite entfernt. ISO 14289-1 §7.18.2 verbietetTrapNet-Annotationen; die neueApplyPDFUAStripTrapNet-Korrektur zur Speicherzeit reiht sich in die bestehende FamilieApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationshipein, sodass PDF/UA-Modus-Dokumente nicht mehr stillschweigendTrapNet-Nachzügler ausgeben. - Das PDF/UA-1-Audit erhält eine partielle §7.18.4-Prüfung.
10026meldet Widget-Annotationen, denen/StructParentfehlt — ein Widget ohne/StructParentkann nicht vom Strukturbaum erreicht werden und kann daher nicht in einemForm-Strukturtag verschachtelt sein. Vollständige strukturelle Verifikation (Auflösung von/StructParentüber denParentTreeund Bestätigung, dass das übergeordnete/SFormist) bleibt einer Folgeversion vorbehalten. - Schreiberseitiges GetPDFUADiagnostics erhält das passende
WIDGET-NO-STRUCTPARENT:N-Problem. Die bestehende TRAPNET-ANNOT-Nachricht weist nun auch darauf hin, dass SetPDFUAMode diese zur Speicherzeit automatisch entfernt.
Version 3.56.6
Geändert
- Das PDF/UA-1-Audit erhält zwei Prüfungen der Überschriftenhierarchie aus ISO 14289-1 §7.4.2.
10024meldet, wenn das erste Überschriftenelement in Dokumentreihenfolge nicht H1 (oder H) ist.10025meldet die Anzahl der Überschriften-Level-Sprünge in einer absteigenden Sequenz (z. B. H1 gefolgt von H3 ohne H2). Beide Prüfungen teilen einen einzigen Präordnungs-Durchlauf des Strukturbaums, der die verschachtelten/K-Formen decodiert (einzelnes StructElem, Array von StructElems / IndRefs / MCRs). - Schreiberseitiges GetPDFUADiagnostics erhält das passende
FIRST-HEADING-NOT-H1-Problem, paritätisch zum reader-seitigen10024. Die zuvor bestehende schreiberseitige HEADING-LEVEL-SKIP-Prüfung hat nun einen Begleiter, der auch "erste Überschrift war H2"-artige Probleme erfasst.
Version 3.56.5
Geändert
- Wenn SetPDFUAMode aktiv ist und das Dokument später verschlüsselt wird, hat der Verschlüsselungs-Berechtigungsschlüssel (
/Pim Verschlüsselungs-Wörterbuch) nun automatisch Bit 10 (Maske$200, "Text und Grafik zur Unterstützung der Barrierefreiheit extrahieren") gesetzt, selbst wenn der AufruferppCanCopyAccessnicht inTPDFExtraPermissionseinbezogen hat, das an Encrypt übergeben wurde. ISO 14289-1 §7.16 verlangt, dass jede verschlüsselte konforme Datei Barrierefreiheits-Extraktion erlaubt, und das Bit ist ansonsten leicht zu übersehen. Das Bit ist immer sicher zu setzen — es gewährt nur Hilfstechnologie zusätzlichen Zugriff, nicht anderen Extraktionspfaden. - Schreiberseitiges GetPDFUADiagnostics erhält ein neues
ENCRYPT-NO-ACCESS-Problem, das ausgelöst wird, wenn PDFUAMode an ist und Bit 10 von/Pim Verschlüsselungs-Wörterbuch gelöscht ist. Dies erfasst den Aufrufreihenfolge-Grenzfall, in dem der Benutzer zuerstEncrypt()aufgerufen hat und SetPDFUAMode erst danach — die Diagnose weist den Benutzer an,Encrypt()erneut aufzurufen, sodass das Verschlüsselungs-Dict mit dem korrigierten/Perneut ausgegeben wird.
Version 3.56.4
Geändert
- Schreiberseitiges GetPDFUADiagnostics erhält fünf neue ISO 14289-1-Prüfungen, sodass das In-Memory-Dokument-Audit dieselben Verletzungen erfasst wie das leser-seitige CheckFileCompliance-Audit mit ComplianceTest=2.
SUSPECTS-TRUEmarkiert MarkInfo/Suspects=true (§7.1: PDF/UA-konforme Dateien erfordern Suspects=false).ROLEMAP-STANDARD-REMAP:Nmarkiert AddRoleMap-Aufrufe, die ein Standard-Struktur-Tag umbenennen würden — §7.1 verbietet die Umbenennung von Standard-Tags.DC-TITLE-MISSINGmarkiert einen leeren XMP dc:title (getrennt von DOCINFO-TITLE-MISSING, das /Info /Title prüft).TRAPNET-ANNOT:Nmarkiert TrapNet-Annotationen (§7.18.2 verbietet sie).ANNOT-PAGE-NO-TABS-S:Nmarkiert Seiten mit Annotationen, deren Seiten-Wörterbuch /Tabs nicht /S ist (§7.18.3 verlangt Strukturbaum-Tab-Reihenfolge auf diesen Seiten). - Schreiber-seitige und leser-seitige PDF/UA-1-Audits sind nun ungefähr gleichwertig: Jedes Problem, das das leser-seitige Audit auf einer gespeicherten Datei aufdeckt, ist auch von der In-Memory-Diagnose erreichbar, mit den Formatkonventionen jeder Funktion (newline-getrennter Text vs. NNNNN-Code-String-Liste).
Version 3.56.3
Geändert
- Das PDF/UA-1-Audit erhält seine §7.21-Schriftprüfungen.
10020meldet jede Nicht-Standard-14-Schrift, deren FontDescriptorFontFile/FontFile2/FontFile3fehlt (§7.21.4.1: jede gerenderte Schrift muss ihr Programm einbetten).10021meldet CIDFontType2-Nachkommen ohne/CIDToGIDMap-Eintrag (§7.21.3.2).10022ruft Standard-14-Schriften auf (Helvetica, Times, Courier, Symbol, ZapfDingbats und fette / kursive Varianten), die ohne ein eingebettetes Programm referenziert werden — §7.21.4 NOTE 5 macht klar, dass es für diese Schriften keine Befreiung vom Einbetten gibt.10023meldet Schriften, denen eine/ToUnicode-CMap fehlt und die nicht mit der Befreiungsliste aus §7.21.7 übereinstimmen (vordefinierte MacRoman / MacExpert / WinAnsi-Encodings, Type 0 mit Adobe-GB1 / CNS1 / Japan1 / Korea1-Zeichensammlungen, nicht-symbolisches TrueType). - Komposite Type-0-Schriften werden auf beiden Ebenen inspiziert:
/ToUnicodeauf dem Type-0-übergeordneten Wörterbuch selbst, und Einbettung //CIDToGIDMapauf dem ersten Nachkommen-CIDFont. Type-3-Schriften überspringen die Einbettungs-Prüfung (ihre Glyphen sind Inline-CharProcs), nehmen aber weiterhin an der/ToUnicode-Prüfung teil. - Die PDFlibPDFA-Hilfsfunktionen für ähnliche Schriftarbeit wurden absichtlich nicht geteilt — ein halbes Dutzend kurzer Routinen (Subset-Präfix-Entfernung, Standard-14-Namenstabelle, FontFile-Präsenz, Symbolic-Flag) sind lokal als
UA*-Helfer dupliziert, sodass sich das PDF/A-Audit weiterentwickeln kann, ohne PDF/UA zu brechen, und umgekehrt.
Version 3.56.2
Geändert
- Das PDF/UA-1-Audit erhält fünf weitere ISO 14289-1-Prüfungen, die Annotationen, eingebettete Dateien und optionalen Inhalt abdecken.
10015meldet Link-Annotationen, denen eine nicht-leere/Contents-alternative Beschreibung fehlt (§7.18.5), sodass Screenreader Linkziele ankündigen können.10016und10017markieren eingebettete-Datei-FileSpec-Wörterbücher, denen die erforderlichen/F- oder/UF-Dateinamenschlüssel fehlen (§7.11).10018markiert optionale-Inhalt-Konfigurations-Wörterbücher, die einen nicht-leeren/Name-Textstring weglassen (§7.10).10019markiert optionale-Inhalt-Konfigurations-Wörterbücher, die den verbotenen/AS-Schlüssel enthalten (§7.10). - Der pro-Seite-Annotationsdurchlauf, der bereits die TrapNet- und
/Tabs /S-Prüfungen antrieb, sammelt nun auch Link- //Contents-Daten im selben Durchgang, sodass das Audit O(N) auf die Objektanzahl bleibt.
Version 3.56.1
Geändert
- Das PDF/UA-1-Audit erhält fünf neue ISO 14289-1-Prüfungen.
10010verifiziert die Barrierefreiheits-Extraktionsberechtigung (Bit 10 des Verschlüsselungs-/P-Schlüssels) auf verschlüsselten Dateien (§7.16).10011erkennt dynamische XFA-Formulare über das Element<dynamicRender>required</dynamicRender>innerhalb des XFA-XDP-Pakets (§7.15).10012markiert Form-XObjects, die einen/Ref-Eintrag tragen — Referenz-XObjects sind verboten (§7.20).10013markiertTrapNet-Annotationen (§7.18.2).10014geht jede Seite durch und meldet jede Seite mit Annotationen, deren Seiten-Wörterbuch nicht/Tabs /Ssetzt (§7.18.3), sodass die Tab-Reihenfolge dem Strukturbaum folgt. - Alle fünf neuen Codes fließen durch dasselbe CheckFileCompliance + GetStringListItem-Handle-Paar, das die vorherige Version hinzugefügt hat — es gibt keine neue öffentliche API-Oberfläche.
Version 3.56.0
Hinzugefügt
- Neues leser-seitiges Audit
CheckCompliancePDFUAvalidiert eine externe PDF gegen ISO 14289-1 (PDF/UA-1). Es ergänzt die bestehende schreiberseitige Prüfung GetPDFUADiagnostics, indem es jede Input-PDF akzeptiert (eigene Ausgabe, Scanner-Ausgabe, Drittanbieter-Inhalt) und PDF/UA-1-Verletzungen auf dieselbe Weise auflistet, wie CheckFileCompliance bereits PDF/A-Probleme meldet.
Geändert
- CheckFileCompliance akzeptiert nun
ComplianceTest = 2, um das neue PDF/UA-1-Audit auszuführen. Der PDF/A-Test unterComplianceTest = 1ist unverändert, und die Issue-Liste fließt weiterhin durch das bestehende GetStringListCount / GetStringListItem-Handle-Paar zurück. - Der erste Wurf deckt die grundlegenden PDF/UA-1-Konformitäts-Gates aus §5 (XMP
pdfuaid:part-Identifikation) und §7.1 (Katalog-/Metadata-Stream, Tagged-PDF-Marker, Strukturbaum, Viewer-Titel-Präferenz, Dokumentsprache, XMPdc:title,/Suspects-Wert und das Verbot der Umbenennung von Standard-Struktur-Tags) ab. Acht Diagnose-Codes werden ausgegeben —10001bis10009— die den numerischen Bereich visuell von den PDF/A-00xxx-Codes trennen. - Tiefere PDF/UA-1-Klauseln (Sicherheit, Annotationen, XObjects, Schrift-Subsetting) werden für Folge-Patch-Releases auf demselben Audit-Framework verfolgt.
Version 3.55.6
Geändert
- Jedes frisch generierte XMP-Paket trägt nun eine xmpMM:InstanceID-Eigenschaft im Format uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Der Bezeichner wird über Win32 CoCreateGuid generiert und gibt jedem erstellten Dokument einen eindeutigen, versionsunabhängigen Fingerabdruck, wie von ISO 19005-1 §6.7.2 (Cor2) und PDF/A-Best-Practice-Guides empfohlen. Die Nicht-Windows-Builds (wo das XMP-Paket leer bleibt) sind unberührt.
- Der xmpMM-Namespace (http://ns.adobe.com/xap/1.0/mm/) ist nun Teil der SelectionNamespaces des XMP-Pakets; neue SetXMPMM- und GenerateInstanceID-Hilfsfunktionen unterstützen die InstanceID-Ausgabe und bieten die Grundlage für zukünftige xmpMM:History / xmpMM:DerivedFrom-Unterstützung.
- Das PDF/A-Extension-Schema-Beschreibungsschema (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) wird in dieser Version nicht hinzugefügt. Die Erstellung eines benutzerdefinierten Erweiterungsschemas erfordert eine mehrstufige bag / seq / strukturierte-Eigenschafts-Konstruktion jenseits der aktuellen SetDublinCore / SetXMPBasic-Form; die Arbeit wird für eine zukünftige Version verfolgt. Dokumente, die benutzerdefinierte XMP-Eigenschaften deklarieren müssen, fallen weiterhin auf den LoadFromString-Pfad zurück.
Version 3.55.5
Geändert
- PDF/A-Dokumente haben nun ihre Annotations-/F-Flags zur Speicherzeit normalisiert. ISO 19005-1 §6.5.3 verlangt, dass das Print-Bit auf 1 und die Hidden- / Invisible- / NoView-Bits auf 0 auf jeder Annotation gesetzt sind; der Writer wendet diese Maske nun zur Speicherzeit an, sodass Aufrufer sich nicht das Bit-Layout merken müssen. Der /Subtype /Popup-Fall ist ausgenommen — Popups sind Kinder anderer Annotationen und werden traditionell nicht gedruckt.
- Das AcroForm-/NeedAppearances-Flag wird nun zur Speicherzeit auf false zwangsgesetzt, wenn das Dokument in einem beliebigen PDF/A-Modus ist. ISO 19005-1 §6.9 verlangt, dass das Flag fehlt oder false ist; zuvor ließ der Writer den Wert, den der Aufrufer gesetzt hatte, was Dokumente produzierte, die den Viewer baten, Erscheinungen zur Öffnungszeit neu zu generieren, und die Spezifikation stillschweigend verletzten, wenn der Aufrufer ihn auf true gesetzt hatte. Der Fix läuft auch für Dokumente, denen das Flag zuvor fehlte — der Writer gibt ein explizites /NeedAppearances false aus, um dem Validator keine Mehrdeutigkeit zu lassen.
Version 3.55.4
Geändert
- AddStandardFont weist nun Aufrufe im PDF/A-Modus zurück. ISO 19005-1 §6.3.4 widerruft die "Standard 14 darf uneingebettet sein"-Befreiung aus der PDF-Referenz: Jedes Schriftprogramm in einer konformen Datei muss eingebettet sein, und die Bibliothek bündelt die Standard-14-Umrisse nicht. Die Fassade gibt stillschweigend 0 zurück; Aufrufer sollten zu AddTrueTypeFont oder AddType1Font mit einer echten Schriftdatei wechseln.
- AddTrueTypeFont befördert nun Embed=0 (keine Einbettung) stillschweigend zu Embed=1 (vollständige Schrift einbetten), wenn der PDF/A-Modus aktiv ist. Der nicht-eingebettete Referenzpfad produzierte PDFs, die vom Schrift-Fallback des Viewers auf eine System-Arial- / Times- / Courier-Installation abhängig waren, was gegen ISO 19005-1 §6.3.4 verstößt. Bestehende Aufrufer, die um Einbettung baten (Embed=1 oder 2), sind unberührt.
- Die nicht-symbolische TrueType-/Encoding-Konformitätsprüfung (ISO 19005-1 §6.3.7 Cor2 verlangt WinAnsi oder MacRoman als Encoding-Namen oder BaseEncoding, ohne /Differences) wird in dieser Version nicht hinzugefügt, weil die Bibliothek bereits /WinAnsiEncoding für nicht-symbolische TrueType-Subsets ausgibt, und die tiefere Durchsetzung erforderte das Verfolgen des symbolisch-vs-nicht-symbolisch-Dispatchs durch den Subset-Pfad. CheckCompliancePDFA 00034 / 00035 (hinzugefügt v3.51.0) markiert jede nicht-konforme Ausgabe zur Validierungszeit.
Version 3.55.3
Geändert
- TrueType-gestützte CIDFontType2-Schrift-Wörterbücher tragen nun /CIDToGIDMap /Identity explizit. ISO 19005-1 §6.3.3.2 (Cor2) verlangt, dass der Eintrag für jeden eingebetteten Type-2-CIDFont vorhanden ist; die PDF-Referenz erlaubt den impliziten Identity-Standard, aber PDF/A verlangt einen expliziten Wert. Der Writer ließ den Schlüssel zuvor völlig weg, was veraPDF (und CheckCompliancePDFA 00033 hinzugefügt in v3.51.0) dazu brachte, die Datei zu markieren. Der /Identity-Name entspricht dem GID-as-CID-Layout, das der Writer bereits implizit produzierte, sodass bestehende Dokumente identisch rendern.
- FontDescriptor /CharSet (für Type-1-Subsets) und /CIDSet (für CIDFont-Subsets) bleiben TODO; der Writer müsste verfolgen, welche Glyph-Namen / CIDs im Subset landeten, um sie genau zu füllen. CheckCompliancePDFA 00031 und 00032 (ebenfalls hinzugefügt in v3.51.0) markieren das Fehlen, sodass Benutzer das Problem zur Validierungszeit sehen.
Version 3.55.2
Geändert
- AddImageDirectFromString weist nun PDF/A-inkompatible Filter am Eintrittspunkt zurück. Die Übergabe von Filter = 'LZWDecode' wird für jeden PDF/A-Teil zurückgewiesen (ISO 19005-1 §6.1.10 plus die äquivalenten ISO 19005-2 / -3-Regeln). Die Übergabe von Filter = 'JBIG2Decode' oder 'JPXDecode' wird für PDF/A-1 (Modi 1 und 2) zurückgewiesen. PDF/A-2 und PDF/A-3 erlauben JPXDecode gemäß ISO 19005-2 §6.2.8.3 mit Sub-Spezifikations-Bedingungen (Farbkanal-Anzahl, Bit-Tiefen-Einheitlichkeit, METH/APPROX-Anforderungen), die das schreiber-seitige Gate nicht erzwingt — Aufrufer in diesen Modi müssen weiterhin sicherstellen, dass der JPEG-2000-Stream konform ist. Die Fassade gibt stillschweigend 0 zurück, wenn ein verbotener Filter angefordert wird.
- TIFF-, PNG-, JPEG- und JPEG-2000-Eingaben, die durch AddImageFromFile / AddImageFromStream geladen werden, sind unberührt: Der Importer dekomprimiert die Quell-Bytes und re-encodiert mit FlateDecode (oder DCTDecode für JPEG-Nutzdaten), sodass LZW-Eingabe nie zur Output-Filter-Kette propagiert. Der in v3.50.0 (00004) und v3.52.0 (00022, 00023) hinzugefügte CheckCompliancePDFA-Validator bietet eine zweite Verteidigungslinie zur Validierungszeit für jeden indirekten Pfad, der noch einen verbotenen Filter in die Ausgabe schlüpfen lässt.
Version 3.55.1
Geändert
- AddLinkToHideField weist nun Aufrufe im PDF/A-Modus zurück. Die frühere Version hinterließ einen Kommentar, der behauptete, die Aktion sei PDF/A-kompatibel, aber ISO 19005-1 Cor2 fügte /Hide zur Liste der verbotenen Aktionen hinzu (§6.6.1), und ISO 19005-2 / -3 erben die Beschränkung. Die Fassade gibt stillschweigend 0 zurück, wenn sie im PDF/A-Modus aufgerufen wird, passend zu AddLinkToJavaScript und AddLinkToImportData.
- AddSWFAnnotationFromFile weist nun Aufrufe im PDF/A-Modus zurück. SWF- / RichMedia-Annotationen umschließen Flash-Medien, was von ISO 19005-1 §6.5.2 (keine Movie- / Sound-Subtypes) verboten und durch ISO 19005-2 §6.3.1 (kein 3D / Sound / Screen / Movie) verstärkt wird. Die Fassade gibt stillschweigend 0 zurück.
- AddEmbeddedFile und AddLinkToEmbeddedFile weisen nun Aufrufe in PDF/A-1- und PDF/A-2-Modi zurück. ISO 19005-1 §6.1.11 verbietet /EF, und ISO 19005-2 §6.8 erlaubt nur eingebettete PDF/A-Dateien; statt die rekursive PDF/A-Konformität der angehängten Nutzdaten zu verifizieren, verweigert der Writer einfach den Aufruf in diesen Modi. PDF/A-3 (SetPDFAMode 5 oder 6) bleibt zulässig — siehe v3.55.0 für die automatische /AFRelationship-Injektion.
- SetOpenActionMenu weist nun MenuItem-Werte außerhalb der Whitelist {NextPage, PrevPage, FirstPage, LastPage} zurück, wenn das Dokument im PDF/A-Modus ist. ISO 19005-1 §6.6.1 schränkt benannte Aktionen auf diesen Satz ein, sodass die API zuvor stillschweigend nicht-konforme Find- / Print- / FullScreen-Open-Action-Wörterbücher produzierte, die veraPDF zurückweisen würde.
- NewOptionalContentGroup weist nun Aufrufe in PDF/A-1-Modi (SetPDFAMode 1 oder 2) zurück. ISO 19005-1 §6.1.13 verbietet den Katalog-/OCProperties-Schlüssel. PDF/A-2 (Modi 3/4) und PDF/A-3 (Modi 5/6) erlauben optionalen Inhalt mit den Bedingungen in ihren jeweiligen §6.9, sodass das Gate nur für PDF/A-1 auslöst.
Version 3.55.0
Geändert
- PDF/A-3-Dokumente erhalten nun automatisch einen /AFRelationship-Eintrag auf jeder eingebetteten Datei. Zuvor konnte eine mit der Bibliothek erstellte PDF/A-3-Datei die Validierung nicht bestehen, weil ISO 19005-3 Anhang E, Tabelle E.1 AFRelationship auf jeder eingebetteten Dateispezifikation verlangt. Der Writer injiziert nun den konfigurierten Standardwert (out of the box 'Unspecified') auf jedem FileSpec-Wörterbuch, dem zur Speicherzeit der Eintrag fehlt, und spiegelt die früher eingeführte PDF/UA-AFRelationship-Automatik wider. Nur PDF/A-3-Modi (SetPDFAMode 5 = PDF/A-3b oder 6 = PDF/A-3a) lösen die automatische Injektion aus; PDF/A-1 und PDF/A-2 weisen eingebettete Dateien gemäß ISO 19005-1 §6.1.11 und ISO 19005-2 §6.8 weiterhin grundsätzlich zurück.
- SetPDFA3DefaultAFRelationship ist eine neue API, die den vom Writer geschriebenen Standardwert überschreibt, wenn einer eingebetteten Datei ein /AFRelationship-Eintrag fehlt. Akzeptiert die Werte aus ISO 19005-3 Tabelle E.1 'Source' (die eingebettete Datei ist das Quellmaterial, das den PDF-Inhalt produzierte), 'Data' (die Datei sind die strukturierten Daten hinter einer visuellen Tabelle oder Grafik), 'Alternative' (eine alternative Darstellung wie eine Audio-Version), 'Supplement' (eine ergänzende Darstellung wie eine MathML-Form einer Gleichung), 'Unspecified' (Beziehung kann nicht durch die obigen charakterisiert werden) oder jeden registrierten Second-Class-Namen. Leere Zeichenkette setzt auf 'Unspecified' zurück. Pro-Datei-Überschreibungen bleiben über SetEmbeddedFileAFRelationship verfügbar.
- Die neuen APIs werden auf der Delphi-Fassade als TPDFlib.SetPDFA3DefaultAFRelationship und über die DLL als DLSetPDFA3DefaultAFRelationship (PWideChar) und DLSetPDFA3DefaultAFRelationshipA (PAnsiChar) verfügbar gemacht.
Version 3.54.0
Geändert
- LoadOutputIntentProfile ist eine neue API, die das mitgelieferte sRGB-OutputIntent-Profil durch ein externes, von der Festplatte geladenes ICC-Profil ersetzt. Erforderlich beim Produzieren von PDF/A-Dokumenten in DeviceCMYK- oder DeviceGray-Farbräumen, da die Bibliothek nur ein sRGB-Profil liefert. Typische Verwendung ist, zuerst SetPDFAMode aufzurufen (das die OutputIntent-Skeleton initialisiert), dann LoadOutputIntentProfile('C:\\path\\to\\FOGRA39.icc', 'DeviceCMYK'), um die Profilbytes auszutauschen und das Dokument mit dem neuen Farbraum zu kennzeichnen. Gibt 1 bei Erfolg zurück, 0 bei Datei-nicht-gefunden oder unbekanntem Farbraum. Auf der Delphi-Fassade als TPDFlib.LoadOutputIntentProfile und über die DLL als DLLoadOutputIntentProfile (PWideChar-Form) und DLLoadOutputIntentProfileA (PAnsiChar-Form) verfügbar. ISO 19005-1 §6.2.2 erlaubt jedes registrierte ICC-Profil im DestOutputProfile-Stream.
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep und SetTextColorSep gelingen nun im PDF/A-Modus, wenn das OutputIntent-Profil des Dokuments DeviceCMYK ist. Zuvor wiesen diese APIs jeden Aufruf im PDF/A-Modus unabhängig vom OutputIntent zurück, was die Erstellung konformer CMYK-Dokumente verhinderte. Das Gate ist nun PDFAMode = 0 ODER OutputIntentColorSpace = 'DeviceCMYK', passend zur Regel aus ISO 19005-1 §6.2.3.3, dass DeviceCMYK erlaubt ist, wenn das OutputIntent ein CMYK-Profil verwendet, und ISO 19005-1 §6.2.3.4, das Separation-Alternativen erlaubt, deren Basisfarbraum ebenfalls konform ist.
- SetTextShader gelingt nun im PDF/A-Modus, wenn das OutputIntent-Profil entweder DeviceRGB oder DeviceCMYK ist. Shader selbst sind nicht durch PDF/A verboten; der Validator (Leseseite) verifiziert, dass der interne Farbraum des Shaders mit dem OutputIntent übereinstimmt. Das frühere strikte Zurückweisungsverhalten verweigerte die konforme Shader-Verwendung.
- Das CMYK- / Separation- / Shader-Entsperren hängt vom OutputIntentColorSpace-Tag ab, das von AddOutputIntent und LoadOutputIntentProfile (eingeführt in v3.53.0) gesetzt wird. Der Aufruf von SetPDFAMode ohne LoadOutputIntentProfile hält den Farbraum als DeviceRGB (das mitgelieferte sRGB-Profil), sodass CMYK-Aufrufe standardmäßig weiterhin zurückweisen — das neue Verhalten ist Opt-in über LoadOutputIntentProfile.
Version 3.53.0
Geändert
- Das OutputIntent-Wörterbuch trägt nun die vollständigen PDF/A-Skeleton-Felder, die von ISO 19005-1 §6.2.2 und Adobe Acrobat Preflight empfohlen werden: /OutputCondition (menschenlesbare Farbbedingungsbeschreibung), /Info (Langform-Identifikationstext) und /RegistryName (Registry-URL, Standard http://www.color.org). Die Werte sind standardmäßig "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" für die Legacy-Einzelargument-Aufrufstellen; die neue AddOutputIntent-Überladung nimmt die vier benutzerdefinierten Felder direkt entgegen, sodass Aufrufer sie für ihre eigenen Farbbedingungen füllen können.
- AddOutputIntent erhält eine neue Fünf-Argument-Überladung: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). Die Legacy-Einzelargument-Form funktioniert unverändert weiter; sie delegiert nun an die neue Überladung mit den sRGB-Standardwerten. Das ColorSpace-Argument wählt auch die /N-Komponentenanzahl, die in das Wörterbuch des eingebetteten ICC-Profils geschrieben wird (3 für DeviceRGB, 4 für DeviceCMYK, 1 für DeviceGray); das eingebettete Profil selbst bleibt der mitgelieferte sRGB-Stream, bis die kommende LoadOutputIntentProfile-API in v3.54.0 ausgeliefert wird.
- TPDFDocument stellt OutputIntentColorSpace als Lese-/Schreib-Eigenschaft bereit, die den Farbraum des letzten AddOutputIntent-Aufrufs verfolgt. Dies wird die Gate-Bedingung für die schreiber-seitigen CMYK- / Separation- / Shader-Beschränkungen in v3.54.0, wo Farb-APIs, die heute jeden Aufruf im PDF/A-Modus zurückweisen, nur dann zurückweisen, wenn der Farbraum nicht mit dem OutputIntent übereinstimmt.
Version 3.52.0
Geändert
- CheckCompliancePDFA auditiert nun Annotationen, Grafikzustand, Aktionen und Form-XObjects und vervollständigt damit die Abdeckung des PDF/A-Leseseite-Validators für ISO 19005-1 Kapitel 6.2-6.6 und die äquivalenten PDF/A-2/-3-Differentialregeln. Der Validator meldet 14 neue Issue-Klassen (00050-00067): verbotene Annotations-Subtypen (00050; ISO 19005-1 §6.5.2 verbietet FileAttachment / Sound / Movie für PDF/A-1, und ISO 19005-2 §6.3.1 verbietet 3D / Sound / Screen / Movie für PDF/A-2 und PDF/A-3), Annotations-/CA anders als 1.0 (00051; §6.5.3), Annotations-/F fehlend oder mit Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052; §6.5.3, mit /Subtype /Popup ausgenommen), Annotations-/AA (00054; §6.6.2), Annotations-Erscheinungs-Dict mit anderen Schlüsseln als /N oder nicht-konformem /N-Wert (00055; §6.5.3 Cor2), Widget-Annotation mit /A (00056; §6.9), ExtGState /TR (00058; §6.2.8), ExtGState /TR2 anders als /Default (00059; §6.2.8) und nur in PDF/A-1: ExtGState /SMask anders als /None (00061; §6.4), /BM anders als Normal oder Compatible (00062; §6.4), /CA oder /ca anders als 1.0 (00063; §6.4).
- Action-anywhere-Audit (00064, 00065) ersetzt die nur OpenAction-Prüfung aus v3.50.0 durch einen vollständigen Sweep, der verbotene /S-Aktionswerte (Launch, Sound, Movie, ResetForm, ImportData, JavaScript, Hide, SetState, NOP, Trans, GoTo3DView, Rendition, SetOCGState) und benannte Aktionen, deren /N außerhalb von {NextPage, PrevPage, FirstPage, LastPage} liegt, unabhängig davon, wo die Aktion lebt (Annotation /A, Widget /A, Outline /A, Catalog /OpenAction usw.), markiert. ISO 19005-1 §6.6.1.
- XObject-Audit (00066, 00067) meldet PostScript- und Reference-XObjects sowie verbotene Schlüssel auf Form-XObjects (/OPI, /PS, /Subtype2 = /PS) und Image-XObjects (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
Version 3.51.0
Geändert
- CheckCompliancePDFA auditiert nun zusätzlich zu den in v3.50.0 hinzugefügten strukturellen Prüfungen Schrift- und Farbraum-Konformität. Der Validator meldet neun neue Issue-Klassen: mindestens ein Schriftprogramm ist nicht eingebettet (00030; ISO 19005-1 §6.3.4 verlangt, dass jedes Schriftprogramm, einschließlich der Standard-14-Ersetzungen, eingebettet ist), Type-1-Subset ohne /CharSet in seinem FontDescriptor (00031; §6.3.5), CIDFont-Subset ohne /CIDSet (00032; §6.3.5), CIDFontType2 ohne /CIDToGIDMap (00033; §6.3.3.2 Cor2), nicht-symbolisches TrueType mit nicht-konformem /Encoding (00034; §6.3.7 Cor2 verlangt WinAnsi/MacRoman direkt oder als BaseEncoding, ohne /Differences), symbolisches TrueType, das noch /Encoding trägt (00035; §6.3.7 Cor2), mindestens eine Schrift ohne /ToUnicode in PDF/A-Na- oder PDF/A-Nu-Dokumenten (00036; §6.3.8 Vier-Klassen-Befreiung angewendet), ICCBased-Farbraum, der seinen Profil-Stream nicht einbettet (00037; §6.2.3.2), und eine Datei, die sowohl DeviceRGB als auch DeviceCMYK verwendet (00038; §6.2.3.3 verbietet die Mischung).
- Die /ToUnicode-Prüfung (00036) ist auf Konformitätsstufen A und U beschränkt, weil nur diese Stufen Unicode-Mapping gemäß ISO 19005-1 §6.3.8 und ISO 19005-2 §6.2.11.7 verlangen. Level-B-Dateien (PDF/A-1b, PDF/A-2b, PDF/A-3b) werden nicht markiert. Die Vier-Klassen-Befreiung erkennt vordefinierte Encodings (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), Standard-14-Type-1-BaseFonts als Proxy für Adobe-Standard-Latin- / Symbol-Glyph-Namen-Schriften und Type-0-Schriften, deren Nachkomme-CIDFont Adobe-GB1, Adobe-CNS1, Adobe-Japan1 oder Adobe-Korea1-Registries verwendet, an.
- Das Schrift-Audit geht jedes Font-Wörterbuch durch, klassifiziert es nach Subtype (Type1, MMType1, TrueType, Type3, Type0 mit seinem Nachkommen CIDFontType0 oder CIDFontType2) und dispatcht dann die relevanten Prüfungen. Type-0-Komposit-Schriften delegieren Einbettungs- und Subset-Prüfungen an ihren Nachkommen-CIDFont, während /ToUnicode auf dem Type-0-Wrapper bleibt. Subset-Erkennung verwendet die Standard-Konvention mit sechs Großbuchstaben-Präfix.
Version 3.50.0
Geändert
- CheckCompliancePDFA meldet nun 15 zusätzliche PDF/A-Nicht-Konformitätsprobleme, die der Validator zuvor übersah: fehlendes Trailer-/ID-Array (00013), fehlender Dokument-Katalog-/Metadata-Stream (00014), /Filter auf den /Metadata-Stream angewendet (00015), Stream-Wörterbücher, die über /F, /FFilter oder /FDecodeParms auf externe Dateien verweisen (00016), eingebettete Dateien, die über /EF in einem beliebigen Dateispezifikations-Wörterbuch oder über den Name-Tree-/EmbeddedFiles-Eintrag in PDF/A-1-Dokumenten deklariert sind (00017, 00018), /OpenAction, das auf einen verbotenen Aktionstyp zeigt (00019), /AA-zusätzliche-Aktionen-Wörterbücher im Dokument-Katalog oder einer beliebigen Seite (00020, 00021), JBIG2Decode- oder JPXDecode-Filter in PDF/A-1-Dokumenten (00022, 00023), Crypt-Filter, deren /Name nicht /Identity ist (00024), /Requirements im Dokument-Katalog (00025), /Perms mit anderen Schlüsseln als /UR3 und /DocMDP (00026) und /AcroForm /NeedAppearances auf true gesetzt (00027). Der Validator markiert nun verbotene Katalog-/OpenAction-Aktionstypen (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) und benannte-Aktions-/N-Werte außerhalb der {NextPage, PrevPage, FirstPage, LastPage}-Allowlist gemäß ISO 19005-1 §6.6.1.
- Filter-spezifische Prüfungen (JBIG2Decode, JPXDecode) und eingebettete-Datei-Prüfungen (/EF, /EmbeddedFiles) bleiben auf PDF/A-1 beschränkt, weil ISO 19005-2 §6.2.8.3 und §6.8 diese Beschränkungen für PDF/A-2 und PDF/A-3 explizit lockern. Dokumentstruktur-Prüfungen (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) gelten für jeden PDF/A-Teil.
Behoben
- Der PDFAID-Parser akzeptiert das U-Konformitätssuffix (PDF/A-2U, PDF/A-3U) neben den bestehenden A- und B-Varianten, sodass CheckCompliancePDFA keine störende "00005 PDFA Mark NOT Found or invalid"-Warnung mehr auslöst, wenn eine von einem anderen Tool produzierte PDF/A-2U- oder PDF/A-3U-Datei gescannt wird. Die in ISO 19005-2:2011 hinzugefügten Unicode-Mapping-Konformitätsstufen werden nun vom Validator erkannt.
Version 3.49.0
Geändert
- AddLinkToImportData erstellt eine Link-Annotation, deren Aktion eine PDF-Import-Data-Aktion (/S /ImportData) ist, die die AcroForm-Felder des Dokuments aus einer externen FDF-Datei füllt, wenn der Benutzer auf den Link klickt (ISO 32000-1 §12.6.4.8, Tabelle 198). Der Parameter FileName wird als Filespec-Wörterbuch referenziert und folgt denselben Pfadnormalisierungsregeln wie AddLinkToFile / AddLinkToFileEx (Backslashes werden gemäß ISO 32000-1 §7.11.2.1 in Forward-Slashes umgewandelt). Bit 0 von Options schaltet den sichtbaren Rahmen um, und Bits 1–3 wählen den Link-Highlight-Modus (Invert, Outline, Push), passend zu den vorhandenen AddLinkTo*-Konventionen. PDF 1.4 oder höher. In PDF/A NICHT erlaubt, da die Aktion eine externe Ressource referenziert; die Fassade gibt im PDF/A-Modus stillschweigend 0 zurück. Verfügbar in der Delphi-Bibliothek und in der DLL-Schnittstelle als DLAddLinkToImportData / DLAddLinkToImportDataA (PWideChar- und PAnsiChar-Form).
Version 3.48.0
Geändert
- AddLinkToHideField erstellt eine Link-Annotation, deren Aktion eine PDF-Hide-Aktion (/S /Hide) ist, die die Sichtbarkeit eines oder mehrerer AcroForm-Felder umschaltet, wenn der Benutzer auf den Link klickt (ISO 32000-1 §12.6.4.10, Tabelle 196). FieldNames akzeptiert einen oder mehrere vollständig qualifizierte Feldnamen, getrennt durch Kommas, Semikolons oder Zeilenumbrüche; ein einzelner Name wird als Textzeichenfolge in /T geschrieben, zwei oder mehr Namen als Array, beide Formen sind durch die Spezifikation zugelassen. HideFlag wählt die Sichtbarkeitsrichtung: Ein Wert ungleich Null blendet die aufgeführten Felder aus (/H true), Null zeigt sie an (/H false). Bit 0 von Options schaltet den sichtbaren Rahmen um, und Bits 1–3 wählen den Link-Highlight-Modus (Invert, Outline, Push), passend zu AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 oder höher. PDF/A-kompatibel, da keine externe Ressource referenziert wird. Verfügbar in der Delphi-Bibliothek und in der DLL-Schnittstelle als DLAddLinkToHideField / DLAddLinkToHideFieldA (PWideChar- und PAnsiChar-Form).
Version 3.47.0
Geändert
- AddLinkToNamedAction erstellt eine Link-Annotation, deren Aktion eine PDF-Named-Action (/S /Named) ist, die einen der vier standardisierten Viewer-Navigationsbefehle auslöst, die in ISO 32000-1 §12.6.4.11, Tabelle 194 definiert sind: NextPage, PrevPage, FirstPage und LastPage. Der Parameter NamedActionType wählt den Befehl (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); Werte außerhalb dieses Bereichs fallen auf NextPage zurück, sodass der Writer immer einen spezifikationskonformen /N-Namen ausgibt. Bit 0 von Options schaltet den sichtbaren Rahmen um, und Bits 1–3 wählen den Link-Highlight-Modus (Invert, Outline, Push), passend zu den vorhandenen AddLinkToWeb / AddLinkToPage-Konventionen. Die Annotation erfordert PDF 1.1 oder höher und ist mit PDF/A kompatibel, da keine externe Ressource referenziert wird. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
Version 3.46.1
Geändert
- AddCaretAnnotation erstellt eine Caret-Markup-Annotation (PDF /Subtype /Caret) am angegebenen Rechteck und markiert eine Position auf der Seite, an der Text oder Inhalt eingefügt, weggelassen oder anderweitig auf Reviewer-Aufmerksamkeit erfordert. Unterstützt zwei Symboltypen (None und Paragraph) über SymbolType (0 / 1), konfigurierbare Farbe, Deckkraft, Titel, Inhalt und Erstellungs-/Änderungszeitstempel. Definiert in ISO 32000-1 §12.5.6.11. PDF 1.5 oder höher. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
- Dieser Eintrag schließt die Geometrie-Annotations-Ergänzung ab, die mit v3.44.0 Square+Circle begann. PDFlibPas erstellt nun Text-, Stamp-, FreeText-, TextMarkup- (Highlight/Underline/Squiggly/StrikeOut), Square-, Circle-, Line-, Polygon-, PolyLine-, Ink- und Caret-Annotationen, zusätzlich zur bestehenden Unterstützung für Link, FileAttachment, SVG, U3D und SWF.
Version 3.46.0
Geändert
- AddInkAnnotation erstellt eine Ink-Markup-Annotation (PDF /Subtype /Ink), die handgeschriebene Striche oder freihand gezeichnete Markierungen auf der Seite repräsentiert. Striche werden als einzelne Zeichenkette geliefert, in der mehrere Striche durch '|' oder Zeilenumbruch getrennt sind und innerhalb jedes Strichs die Koordinatenpaare demselben Leerzeichen-/Komma-/Semikolon-/Tab-Format folgen, das AddPolygonAnnotation verwendet. Zum Beispiel beschreibt "100 100 110 105 120 110 | 200 200 210 205" zwei getrennte Striche. Unterstützt konfigurierbare Rahmenbreite, Tintenfarbe, Deckkraft, Titel, Inhalt und Zeitstempel. Definiert in ISO 32000-1 §12.5.6.13. PDF 1.3 oder höher. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
- Jeder Strich muss eine gerade Anzahl von Werten enthalten (mindestens vier), andernfalls gibt der Aufruf 0 zurück und es wird keine Annotation geschrieben. Das /Rect wird automatisch aus dem kombinierten Bereich aller Striche plus einem kleinen Padding berechnet, sodass die Striche innerhalb der Annotations-Begrenzungsbox bleiben.
Version 3.45.0
Geändert
- AddPolygonAnnotation erstellt eine geschlossene Polygon-Markup-Annotation (PDF /Subtype /Polygon) mit Eckpunkten, die als Zeichenkette aus durch Leerzeichen, Kommas, Semikolons oder Tabulatoren getrennten Koordinatenpaaren geliefert werden (z. B. "100 100 200 100 200 200 100 200"). Unterstützt konfigurierbare Rahmenbreite, Rahmenfarbe, optionale Innenfüllfarbe, Deckkraft, Titel, Inhalt und Zeitstempel. Definiert in ISO 32000-1 §12.5.6.9. PDF 1.5 oder höher. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
- AddPolyLineAnnotation erstellt eine offene Polylinien-Markup-Annotation (PDF /Subtype /PolyLine) mit demselben Eckpunkt-Zeichenkettenformat und konfigurierbaren End-Linien-Stilen an beiden Enden (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Definiert in ISO 32000-1 §12.5.6.9. PDF 1.5 oder höher. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
- Beide Annotationen erfordern mindestens zwei Eckpunkte (vier Zahlen) und eine gerade Gesamtanzahl von Zahlen; der Aufruf gibt 0 zurück, wenn die Eckpunktzeichenkette nicht in eine gültige Paarliste geparst werden kann. Das /Rect wird aus dem Eckpunktbereich plus einem zur Rahmenbreite proportionalen Padding berechnet, sodass die Endverzierungen sichtbar bleiben.
- Beide Annotationen heben die Dokumentversion auf PDF 1.5 an, wenn sie unter einer niedrigeren Mindestversion-Sperre ausgegeben werden.
Version 3.44.1
Geändert
- AddLineAnnotation erstellt eine Linien-Markup-Annotation (PDF /Subtype /Line) zwischen zwei Endpunkten, mit konfigurierbarer Rahmenbreite, Linienfarbe, optionaler Innenfüllfarbe, End-Linien-Stilen für beide Enden (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), Deckkraft, Titel, Inhalt und Erstellungs-/Änderungszeitstempeln. Definiert in ISO 32000-1 §12.5.6.7. PDF 1.3 oder höher. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
- Das /Rect der Annotation wird aus den zwei Endpunkten plus einem zur Rahmenbreite proportionalen Padding berechnet, sodass die Endverzierungen innerhalb der Annotations-Begrenzungsbox bleiben.
Version 3.44.0
Geändert
- AddSquareAnnotation erstellt eine Rechteck-Markup-Annotation (PDF /Subtype /Square) am angegebenen Rechteck, mit konfigurierbarer Rahmenbreite, Rahmenfarbe, optionaler Innenfüllfarbe, Deckkraft, Titel, Inhalt und Erstellungs-/Änderungszeitstempeln. Definiert in ISO 32000-1 §12.5.6.8. PDF 1.3 oder höher. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
- AddCircleAnnotation erstellt eine Ellipsen-Markup-Annotation (PDF /Subtype /Circle), die im angegebenen Rechteck eingeschrieben ist, mit denselben konfigurierbaren Rahmen, Füllung, Deckkraft, Titel, Inhalt und Zeitstempeln wie AddSquareAnnotation. Definiert in ISO 32000-1 §12.5.6.8. PDF 1.3 oder höher. Verfügbar in der Delphi-Bibliothek und den DLL-Schnittstellen.
- Beide neuen Annotationen heben die Dokumentversion automatisch auf PDF 1.3 an, wenn sie unter einer niedrigeren Mindestversion-Sperre ausgegeben werden, und geben einen Standard-Markup-Annotations-Feldsatz aus (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P), sodass bestehende Review-Workflows in Acrobat, Foxit und Edge sie nach der Erstellung weiterhin bearbeiten können.
Version 3.43.0
Geändert
- SetStructElemSpaceBefore und SetStructElemSpaceAfter setzen die Attribute /SpaceBefore und /SpaceAfter (Layout-Owner) auf dem aktuell offenen Strukturelement und drücken den Abstand vor und nach Block-Elementen in Punkten aus. Definiert in ISO 32000-1 §14.8.5.4.2 Tabelle 340. Verfügbar in der Delphi-Bibliothek, ActiveX (Dispids 73008051/73008052) und DLL-Schnittstellen.
- SetStructElemStartIndent und SetStructElemEndIndent setzen die Attribute /StartIndent und /EndIndent (Layout-Owner) und drücken den Einzug von den schreibrichtungsbewussten Start- und End-Kanten des Inhaltsrechtecks in Punkten aus. Definiert in ISO 32000-1 §14.8.5.4.2 Tabelle 340. Verfügbar in der Delphi-Bibliothek, ActiveX (Dispids 73008053/73008054) und DLL-Schnittstellen.
- SetStructElemColor setzt das Attribut /Color (Layout-Owner) als RGB-Tripel (jede Komponente 0.0-1.0) und beschreibt die Vordergrundfarbe des Elements für Reflow-Engines und nachgelagerte Farbkontrast-Prüfer. Definiert in ISO 32000-1 §14.8.5.4.2 Tabelle 340. Verfügbar in der Delphi-Bibliothek, ActiveX (Dispid 73008055) und DLL-Schnittstellen.
Behoben
- Ein Serialisierungsfehler in BuildStructElemDictRef wurde behoben: Einzeltoken-numerische Attributwerte (wie SpaceBefore, SpaceAfter, StartIndent, EndIndent) wurden als PDF-Namen statt als PDF-Zahlen geschrieben. Die Korrektur gilt sowohl für Single-Owner- als auch für Multi-Owner-Attribut-Zweige.
Version 3.42.0
Geändert
- Drei neue Compliance-Prüfungen hinzugefügt: Code 00006 markiert verschlüsselte Dokumente (Verschlüsselung ist in allen PDF/A-Versionen verboten); Code 00007 markiert Dokumente, denen ein OutputIntents-Eintrag im Katalog fehlt (erforderlich für alle PDF/A-Versionen); Codes 00011 und 00012 markieren Dokumente, denen MarkInfo oder StructTreeRoot fehlt, wenn die Konformitätsstufe -a (Barrierefreiheit) ist.
Behoben
- CheckCompliancePDFA validiert nun korrekt alle sechs PDF/A-Modi (1a, 1b, 2a, 2b, 3a, 3b). Die PDFAID-Prüfung (Code 00005) akzeptiert jeden der sechs gültigen XMP-Marker statt nur '1B'. Die Versionsobergrenze-Prüfung (00002) wendet 1.4 für PDF/A-1 und 1.7 für PDF/A-2 und PDF/A-3 an.
- Die OCProperties-Prüfung (Code 00003) ist nun bedingt: Sie gilt nur für PDF/A-1-Dokumente, wo optionaler Inhalt (Ebenen) verboten ist. PDF/A-2 und PDF/A-3 erlauben Ebenen und werden nicht mehr markiert.
Version 3.41.0
Geändert
- Der PDF/A-Modus erzwingt nun verbotene Operationen auf API-Ebene. Wenn ein PDF/A-Modus (einer von 1-6) aktiv ist, geben Aufrufe von SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK oder einer anderen CMYK/Separation/Shader-API 0 zurück und haben keine Wirkung, entsprechend der PDF/A-Anforderung eines einzigen sRGB-Output-Intents.
- Transparenz ist in PDF/A-1 (Modi 1 und 2) verboten: SetTransparency, SetBlendMode und SetPageTransparencyGroup geben 0 zurück und sind no-ops, wenn der aktive Modus 1 oder 2 ist. PDF/A-2 und PDF/A-3 (Modi 3-6) erlauben begrenzte Transparenz und sind nicht eingeschränkt.
- JavaScript-Aktionen sind in allen PDF/A-Modi (1-6) verboten: SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript und AddLinkToJavaScript geben alle 0 zurück und sind no-ops, wenn ein PDF/A-Modus aktiv ist. ISO 19005-1 §6.6.1 verbietet JavaScript ausdrücklich in PDF/A-Dokumenten.
- Datei-Anhang-APIs (EmbedFile, AddFileAttachment) sind in den PDF/A-1- und PDF/A-2-Modi (1-4) blockiert. Sie bleiben in PDF/A-3 (Modi 5 und 6) funktionsfähig, das ausdrücklich beliebige eingebettete Dateien erlaubt.
Version 3.40.0
Hinzugefügt
- SetPDFAMode unterstützt nun die Konformitätsstufen PDF/A-2 und PDF/A-3. NewMode=3 für PDF/A-2b, 4 für PDF/A-2a, 5 für PDF/A-3b oder 6 für PDF/A-3a. PDF/A-2 zielt auf PDF 1.7 und erlaubt Ebenen, interaktive Formulare, JPEG2000-Bilder und begrenzte Transparenz. PDF/A-3 erweitert PDF/A-2, indem es beliebige eingebettete Dateien (jeden MIME-Typ) erlaubt. Alle -a-Varianten schreiben automatisch /MarkInfo und die markierten PDF-Strukturmarker, die für die Barrierefreiheitsstufe erforderlich sind.
Geändert
- GetInformation(201) gibt '1' bis '6' zurück, passend zum aktiven PDF/A-Modus, in Übereinstimmung mit der neuen Modusnummerierung.
Behoben
- Behoben: SetPDFAMode(1) (PDF/A-1a) war zuvor aufgrund eines internen Routing-Fehlers, der in v3.20.0 eingeführt wurde, ein no-op. Es schreibt nun korrekt /MarkInfo und /OutputIntents und setzt XMP pdfaid:part=1/conformance=A.
Version 3.39.0
Geändert
- SetStructElemWritingMode setzt das Attribut /WritingMode (Layout-Owner) auf dem aktuell offenen Strukturelement. Gültige Werte sind LrTb (von links nach rechts, Standard für lateinische Schriften), RlTb (von rechts nach links, für Arabisch und Hebräisch) und TbRl (von oben nach unten, von rechts nach links, für traditionellen vertikalen CJK-Text). Definiert in ISO 32000-1 §14.8.5.4.2 Tabelle 340. Verfügbar in der Delphi-Bibliothek, ActiveX (Dispid 73008049) und DLL-Schnittstellen.
- SetStructElemListNumbering setzt das Attribut /ListNumbering (List-Owner) auf dem aktuell offenen Strukturelement. Unterstützte Werte sind None, Disc, Circle, Square (ungeordnete Marker) und Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (geordnete Nummerierung). Das Attribut wird auf das L-Element (List) gesetzt und ermöglicht es Hilfstechnologie, den Listentyp korrekt anzusagen. Definiert in ISO 32000-1 §14.8.5.3.2 Tabelle 336. Verfügbar in der Delphi-Bibliothek, ActiveX (Dispid 73008050) und DLL-Schnittstellen.
Version 3.38.0
Geändert
- SetStructElemColSpan setzt das Attribut /ColSpan (Table-Owner) auf dem aktuell offenen Strukturelement und zeigt an, über wie viele Spalten die Zelle reicht. Definiert in ISO 32000-1 §14.8.5.7.2 Tabelle 337. Verfügbar in der Delphi-Bibliothek, ActiveX (Dispid 73008047) und DLL-Schnittstellen.
- SetStructElemRowSpan setzt das Attribut /RowSpan (Table-Owner) auf dem aktuell offenen Strukturelement und zeigt an, über wie viele Zeilen die Zelle reicht. Definiert in ISO 32000-1 §14.8.5.7.2 Tabelle 337. Verfügbar in der Delphi-Bibliothek, ActiveX (Dispid 73008048) und DLL-Schnittstellen.
- Beide Funktionen sind Komfort-Wrapper, äquivalent zum Aufruf von AddTagAttribute mit Owner='Table' und dem entsprechenden Attributnamen. Sie ergänzen SetStructElemScope für vollständig beschriebene Tabellenzellen in komplexen oder überspannenden Header-Tabellen.
Version 3.37.2
Geändert
- GetPDFUADiagnostics meldet nun FORM-NO-TOOLTIP:N, wenn N interaktiven Formularfeldern (Widget-Annotationen) ein TU-Eintrag (Tooltip / barrierefreier Name) fehlt. ISO 14289-1 §7.18.4 verlangt, dass alle interaktiven Formularfelder einen TU-Eintrag tragen, damit Hilfstechnologie den Zweck des Felds dem Benutzer ansagen kann, wenn das Feld den Fokus erhält. /TU ist der barrierefreie Name, den Screenreader vorlesen; er unterscheidet sich von /T, das der partielle Feldname ist, der für programmatischen Zugriff und Formularübermittlung verwendet wird.
Version 3.37.1
Geändert
- GetPDFUADiagnostics meldet nun LIST-STRUCT:N, wenn N LI- oder LBody-Strukturelemente außerhalb ihres erforderlichen Elternelements erscheinen. ISO 32000-1 §14.8.4.4 verlangt, dass LI ein direktes Kind von L (Liste) ist und LBody ein direktes Kind von LI (Listenelement). Eine fehlerhafte Listenverschachtelung verhindert, dass Hilfstechnologie Listeninhalt korrekt durchläuft und ansagt, und kann zu Validierungsfehlern der Dokumentstruktur in PDF/UA-1-Validatoren führen.
Version 3.37.0
Geändert
- BeginTagEx2 ist eine neue API, die ein Strukturelement öffnet und alle Haupteigenschaften des Elements in einem einzigen Aufruf setzt. Zusätzlich zu den Parametern TagType, AltText, ActualText und Lang von BeginTagEx akzeptiert BeginTagEx2 Title (/T, für das Tags-Navigationspanel), ElemID (/ID, eindeutige Elementkennung) und Expansion (/E, vollständiger Text einer Abkürzung oder eines Akronyms). Ein leerer String für einen dieser drei zusätzlichen Parameter entspricht dem Weglassen des entsprechenden Setters. BeginTagEx2 reduziert den Boilerplate-Code für gut beschriebene Elemente — anstatt BeginTagEx gefolgt von SetStructElemTitle, SetStructElemID und SetStructElemExpansion separat aufzurufen, können alle sieben Eigenschaften in einem Aufruf gesetzt werden. Die Funktion ist in der Delphi-Bibliothek, ActiveX (Dispid 73008046) und DLL-Schnittstellen verfügbar.
Version 3.36.1
Geändert
- GetPDFUADiagnostics meldet nun TABLE-TH-NO-SCOPE:N, wenn N TH-Strukturelementen (Tabellenkopfzellen) ein Scope-Attribut fehlt. ISO 32000-1 §14.8.4.3.4 Tabelle 337 definiert Scope (Row, Column oder Both) als das Attribut, das beschreibt, auf welche Datenzellen eine Kopfzelle zutrifft. Ohne es können Screenreader und andere Hilfstechnologien Kopfzellen nicht zuverlässig mit Datenzellen in komplexen oder Multi-Header-Tabellen verknüpfen, was von ISO 14289-1 §7.5 verlangt wird. Rufen Sie SetStructElemAttr('Table','Scope', 'Column') (oder 'Row' / 'Both') unmittelbar nach dem Tagging jedes TH-Elements auf.
Version 3.36.0
Geändert
- SetStructElemExpansion ist eine neue API, die den /E-Eintrag (Erweiterungstext) auf dem aktuell offenen Strukturelement setzt (ISO 32000-1 §14.9.5). Der Erweiterungstext ist die vollständig ausgeschriebene Form einer Abkürzung oder eines Akronyms im Element — z. B. "World Wide Web" für ein Span, dessen Text "WWW" ist. Screenreader sprechen die Erweiterung aus, statt zu versuchen, die abgekürzten Zeichen auszusprechen, was für die Barrierefreiheit technischer und wissenschaftlicher Inhalte entscheidend ist. PDF/UA-1 (ISO 14289-1 §7.2) verlangt, dass die natürliche Sprache eindeutig bestimmbar ist; /E ist der Standardmechanismus für Abkürzungen und Akronyme. Die Funktion ist in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen verfügbar.
Version 3.35.1
Geändert
- GetPDFUADiagnostics meldet nun DOCINFO-TITLE-MISSING, wenn der /Title-Eintrag des Dokumentinformations-Wörterbuchs fehlt oder leer ist. PDF/UA-1 (ISO 14289-1) verlangt einen Dokumenttitel, damit Screenreader ihn ansagen können, wenn das Dokument geöffnet wird. Die bestehende DISPLAYDOCTITLE-FALSE-Prüfung bestätigt, dass der Titel in der Viewer-Titelleiste angezeigt wird; DOCINFO-TITLE-MISSING ist komplementär — sie bestätigt, dass der Titelwert selbst gesetzt ist. Rufen Sie SetDocumentInfo('Title', ...) auf, um den Wert bereitzustellen.
Version 3.35.0
Geändert
- SetStructElemTitle ist eine neue API, die den /T-Eintrag (Titel) auf dem aktuell offenen Strukturelement setzt (ISO 32000-1 §14.7.2 Tabelle 324). Der Titel ist eine für Menschen lesbare Bezeichnung, die die spezifische Elementinstanz identifiziert — zum Beispiel "Chapter 1", "Summary Table" oder "Figure 3: Quarterly Sales" — und wird im Tags-Navigationspanel von PDF-Viewern angezeigt und von Barrierefreiheits-Remediation-Tools verwendet. /T unterscheidet sich von /Alt (Alternativtext für Benutzer mit Renderbeeinträchtigungen) und /ActualText (Glyphen-Ebenen-Textkorrektur); es ist am nützlichsten bei nicht textuellen Container-Elementen wie Table, Figure, Form, Sect und Div. Übergeben Sie einen leeren String, um einen zuvor gesetzten Wert zu löschen. Die Funktion ist in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen verfügbar.
Version 3.34.0
Geändert
- SetStructElemAltText ist eine neue API, die den /Alt-Eintrag auf dem aktuell offenen Strukturelement setzt (ISO 32000-1 §14.9.3). Sie ist äquivalent zur Übergabe von AltText an BeginTag, erlaubt aber, die Alternativtextbeschreibung zu setzen oder zu aktualisieren, nachdem das Element geöffnet wurde — nützlich, wenn die Beschreibung getrennt vom Elementtyp berechnet wird. PDF/UA-1 (ISO 14289-1 §7.5) verlangt Alt-Text auf Figure- und Formula-Elementen; GetPDFUADiagnostics meldet bereits FIGURE-NO-ALT:N für fehlende Werte. Die Funktion ist in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen verfügbar.
Version 3.33.1
Hinzugefügt
- GetPDFUADiagnostics enthält nun eine ROLEMAP-UNMAPPED:N-Prüfung, die benutzerdefinierte Strukturelementtyp-Namen erkennt, die im Dokument verwendet werden und keinen Eintrag im /RoleMap-Wörterbuch haben. ISO 14289-1 §7.1 und ISO 32000-1 §14.7.3 verlangen, dass jeder nicht standardmäßige Strukturtyp einem standardmäßigen PDF-Typ (wie P, Span oder Figure) zugeordnet wird, damit Hilfstechnologie bestimmen kann, wie das Element zu behandeln ist. Wenn N nicht zugeordnete Typen gefunden werden, enthält die Issue-Beschreibung die Liste der Typnamen, sodass Aufrufer wissen, welche AddRoleMap-Einträge benötigt werden. Alle 49 standardmäßigen Strukturtypen, die in ISO 32000-1 Tabelle 333 (PDF 1.7) definiert sind, werden erkannt und vom Bericht ausgeschlossen.
Version 3.33.0
Geändert
- SetStructElemLang ist eine neue API, die den /Lang-Eintrag auf dem aktuell offenen Strukturelement setzt (ISO 32000-1 §14.9.2). Das Sprach-Tag überschreibt die dokumentebene Sprache, die von SetDocumentLanguage oder SetPDFUAMode deklariert wurde, für das Element und alle seine Nachkommen, was es mehrsprachigen Dokumenten ermöglicht, jede Spanne mit ihrem korrekten BCP 47-Sprach-Tag (z. B. 'en-US', 'fr', 'zh-Hant-TW') zu markieren. Screenreader verwenden das elementebene /Lang, um die geeignete Text-to-Speech-Engine oder Stimme zu wählen, wenn das Dokument vorgelesen wird. Die Funktion ist in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen verfügbar.
Version 3.32.0
Geändert
- SetStructElemActualText ist eine neue API, die den /ActualText-Eintrag auf dem aktuell offenen Strukturelement setzt (ISO 32000-1 §14.9.4). Verwenden Sie sie, um den genauen Unicode-Text anzugeben, den eine Glyphensequenz repräsentiert, wenn die Inhaltsstrom-Extraktion zu falschen Ergebnissen führen würde — die häufigsten Fälle sind OpenType-Ligaturglyphen (U+FB00 ff, U+FB01 fi, U+FB02 fl) und Abkürzungen mit nicht offensichtlichen Erweiterungen. ActualText ergänzt den gerenderten Inhalt, ersetzt ihn aber nicht; es überschreibt, was Hilfstechnologie und Textextrahierer für dieses Element vorlesen, ohne das visuelle Rendering zu unterdrücken. Die Funktion ist in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen verfügbar.
Version 3.31.1
Geändert
- GetPDFUADiagnostics prüft nun zusätzlich zu Figure-Elementen auch Formula-Strukturelemente, wenn fehlender Alt-Text gemeldet wird (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 verlangt alternative Beschreibungen für sowohl grafische Figuren als auch mathematische Formeln; zuvor wurden nur Figure-Elemente gescannt.
- GetPDFUADiagnostics meldet nun PDF-VERSION-LOW, wenn die PDF-Version des Dokuments unter 1.7 liegt. PDF/UA-1 (ISO 14289-1) ist gegen PDF 1.7 (ISO 32000-1:2008) definiert; Dokumente auf PDF 1.5 oder 1.6 erfüllen die Grundanforderungen der Spezifikation nicht. Rufen Sie SetPDFUAMode auf, um die Version automatisch auf 1.7 anzuheben.
Version 3.31.0
Behoben
- Strukturelement-IDs und Tabellenkopf-Verknüpfungen werden nun unterstützt. SetStructElemID weist dem aktuell offenen Strukturelement eine eindeutige String-Kennung (/ID) zu; IDs werden beim Speichern des Dokuments in einen /IDTree-Namensbaum auf der Strukturbaumwurzel gesammelt, was Barrierefreiheits-Tools und Querverweise ermöglicht, Elemente per ID zu finden (ISO 32000-1 §14.7.4). SetStructElemHeaders verknüpft die aktuelle Tabellenzelle (TD oder TH) mit einer oder mehreren Kopfzellen über eine kommagetrennte Liste zuvor zugewiesener IDs und schreibt das /Headers-Array im Table-Attribut-Owner-Wörterbuch (ISO 32000-1 §14.8.5.7.2). Zusammen unterstützen diese beiden Funktionen komplexe Tabellenmarkierung für PDF/UA-1 (ISO 14289-1 §7.10) und WCAG 2.x SC 1.3.1. Beide Funktionen sind in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen verfügbar. AddTagAttribute behandelt nun auch das /Headers-Attribut mit kommagetrennten Werten, die als PDF-Textzeichenketten-Arrays geschrieben werden, korrekt.
Version 3.30.1
Hinzugefügt
- GetPDFUADiagnostics enthält nun eine HEADING-LEVEL-SKIP:N-Prüfung, die Überschriftenebenen-Sprünge in Dokumentreihenfolge erkennt (z. B. ein H1 unmittelbar gefolgt von einem H3 ohne H2 dazwischen). Die Prüfung führt eine Vorordnungs-Traversierung des gesamten Strukturelementbaums durch und zählt jedes Vorkommen, bei dem die nächste Überschriftenebene die vorherige um mehr als eins überschreitet. Generische H-Elemente werden als H1 behandelt. Zurück zu einer höheren Überschriftenebene zu gehen (H3 → H1) wird nicht als Sprung gezählt. WCAG 2.x Erfolgskriterium 1.3.1 und ISO 14289-1 §7.1 verlangen, dass Überschriften ohne Lücken verschachtelt sind.
Version 3.30.0
Geändert
- Strukturelement-Attribute werden nun für markierte PDF- und PDF/UA-Dokumente unterstützt. Drei neue API-Funktionen erlauben das Anhängen von Attributen an das Strukturelement, das gerade auf dem Tag-Stack erstellt wird: AddTagAttribute (allgemein, beliebige Owner/Name/Wert), SetStructElemScope (Komfort-Wrapper, der das /Scope-Attribut unter dem Table-Owner setzt, für TH-Kopfzellen — ISO 32000-1 §14.8.5.7.2) und SetStructElemBBox (Komfort-Wrapper, der das /BBox-Attribut unter dem Layout-Owner setzt, für Figuren und andere visuell positionierte Elemente — ISO 32000-1 §14.8.5.4). Beim Speichern des Dokuments werden Attribute als /A-Attribut-Wörterbücher in jedem Strukturelement geschrieben; mehrere Attribute desselben Owners werden in einem Wörterbuch gruppiert, und Attribute verschiedener Owner werden als Array von Wörterbüchern geschrieben. Alle drei Funktionen sind in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen verfügbar.
Version 3.29.1
Hinzugefügt
- GetPDFUADiagnostics enthält nun zwei zusätzliche Prüfungen: ob Figure-Strukturelemente im Dokument einen Alt-Textwert vermissen (gemeldet als FIGURE-NO-ALT:N, gemäß ISO 14289-1 §7.5 und ISO 32000-1 §14.9.3) und ob Strukturelemente noch offen sind, weil EndTag nicht aufgerufen wurde (gemeldet als STRUCT-UNCLOSED:N). Die Figur-Prüfung führt einen vollständigen rekursiven Durchlauf des Strukturelementbaums durch und deckt Elemente in allen Verschachtelungstiefen ab.
Version 3.29.0
Geändert
- GetPDFUADiagnostics ist eine neue Diagnose-API, die ein Dokument auf potenzielle PDF/UA-1 (ISO 14289-1)-Konformitätsprobleme prüft und eine durch Zeilenumbruch getrennte Liste von Ergebnissen zurückgibt. Sechs Prüfungen werden durchgeführt: ob MarkInfo/Marked gesetzt ist (markierte PDF), ob der Dokumentkatalog einen /Lang-Eintrag hat, ob ViewerPreferences/DisplayDocTitle true ist, ob die XMP-Metadaten einen pdfuaid:part-Bezeichner enthalten, die Anzahl der nicht ausgenommenen Annotationen, denen ein Contents-Eintrag fehlt, und die Anzahl der eingebetteten Dateien, denen ein AFRelationship-Eintrag fehlt. Jedes Ergebnis wird durch einen kurzen Code (z. B. LANG-MISSING, ANNOT-NO-CONTENTS:3) gefolgt von einer für Menschen lesbaren Beschreibung identifiziert. Gibt einen leeren String zurück, wenn keine Probleme gefunden werden. Verfügbar in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen.
Version 3.28.5
Geändert
- PDF/UA-1-Annotations-Barrierefreiheitsverbesserung: Wenn eine FileAttachment-Annotation keinen Contents-Eintrag und kein /T-Feld hat, wird nun der Dateiname aus der eingebetteten Dateispezifikation der Annotation (/FS /UF oder /F) als Fallback-Barrierefreiheitsbeschreibung verwendet. Dies vervollständigt die Annotations-Contents-Fallback-Kette: /T → Link-URI → Stamp-Name → FileAttachment-Dateiname. Screenreader erhalten den Namen der angehängten Datei statt Stille, was ISO 14289-1 §7.18.1 für die häufigsten Annotationstypen erfüllt.
Version 3.28.4
Geändert
- PDF/UA-1-Annotations-Barrierefreiheitsverbesserung: Wenn eine Stamp-Annotation keinen Contents-Eintrag (oder einen leeren) und kein /T-Feld hat, wird nun der Stempeltypname aus dem /Name-Eintrag der Annotation als Fallback-Barrierefreiheitsbeschreibung verwendet (z. B. "Approved", "Draft", "Confidential", "Final"). Dies erweitert die in v3.28.3 eingeführte Annotations-Contents-Fallback-Kette, um Stempel-Annotationen abzudecken, die in Workflows mit geprüften oder genehmigten Dokumenten häufig sind und häufig keinen expliziten Contents-Wert haben.
Version 3.28.3
Geändert
- PDF/UA-1-Annotations-Barrierefreiheitsverbesserung: Wenn eine Link-Annotation keinen Contents-Eintrag (oder einen leeren) und kein /T-Feld hat, wird nun die URI aus der URI-Aktion der Annotation als Fallback-Barrierefreiheitsbeschreibung verwendet. Dies gilt nur während der SetPDFUAMode-Verarbeitung und nur für Link-Annotationen, die eine /URI-Aktion tragen. Screenreader erhalten die URL als letzte Notfall-Bezeichnung, was ISO 14289-1 §7.18.1 in dem häufigen Fall erfüllt, in dem Autoren Hyperlinks ohne eine für Menschen lesbare Beschreibung erstellen.
Version 3.28.2
Geändert
- SetEmbeddedFileAFRelationship ist eine neue API zum expliziten Setzen des AFRelationship-Werts im Dateispezifikations-Wörterbuch einer eingebetteten Datei. Erforderlich von ISO 14289-1 (PDF/UA-1) §7.11, erlaubt dies Aufrufern, die semantische Beziehung einer eingebetteten Datei zum Dokumentinhalt anzugeben, indem sie aus den fünf gültigen Werten wählen: Source, Data, Alternative, Supplement oder Unspecified. Wenn SetPDFUAMode aktiv ist, wird jeder eingebetteten Datei ohne AFRelationship-Schlüssel automatisch Unspecified zugewiesen; verwenden Sie diese Funktion, um diesen Standardwert vor dem Speichern zu überschreiben. Verfügbar in der Delphi-Bibliothek, ActiveX und DLL-Schnittstellen.
Version 3.28.1
Geändert
- Wenn SetPDFUAMode auf einem Dokument aufgerufen wird, dessen XMP-Metadaten den generischen Bibliotheks-Standardtitel statt eines dokumentspezifischen tragen, wird der Titel nun automatisch durch den Wert aus dem /Info Title-Eintrag des Dokuments ersetzt (falls vorhanden). Dies stellt sicher, dass das pdfuaid:part-1-XMP-Paket den tatsächlichen Dokumenttitel statt eines Platzhalters widerspiegelt, was die Erwartungen von PDF/UA-1-Verifizierern erfüllt.
- Der XMP-Parser (LoadFromString) liest nun den dc:title-Wert aus vorhandenen XMP-Metadaten, wenn ein Dokument geladen wird, sodass das Round-Tripping einer PDF, die bereits dc:title hat, diesen Titel korrekt beibehält, statt zum Standard-Platzhalter zurückzukehren.
Version 3.28.0
Geändert
- BeginArtifactEx(ArtifactType, ArtifactSubtype) ist eine neue Tagged-PDF-API, die BeginArtifact erweitert, um sowohl den Artifact-/Type als auch den Pagination-/Subtype in einem einzigen Aufruf auszudrücken. Wenn beide Parameter nicht leer sind, lautet der geschriebene Operator /Artifact << /Type /T /Subtype /S >> BMC und ermöglicht vollständig spezifizierte Pagination-Artifacts wie Kopf- und Fußzeilen gemäß ISO 32000-1 §14.8.2.2.1. Wenn nur ein Parameter nicht leer ist, wird die entsprechende Einzelschlüsselform verwendet. DLL-Einstiegspunkte DLBeginArtifactEx und DLBeginArtifactExA werden ebenfalls exportiert.
Version 3.27.2
Behoben
- BeginArtifact unterscheidet nun korrekt zwischen Artifact-Typen und Pagination-Subtypen. Wenn das Argument Pagination, Layout oder Page ist (Artifact-Typen gemäß ISO 32000-1 §14.8.2.2.1 Tabelle 330), schreibt der Marked-Content-Operator /Type statt /Subtype. Andere Werte wie Header, Footer und Watermark werden weiterhin als /Subtype geschrieben. Dies korrigiert die zuvor falsche Ausgabe, die /Subtype /Pagination schrieb, wenn der Aufrufer beabsichtigte, ein Pagination-Artifact zu markieren.
Version 3.27.1
Geändert
- Wenn der PDF/UA-Modus aktiv ist und das Dokument eingebettete Dateien enthält, erhält jedes Dateispezifikations-Wörterbuch, dem ein AFRelationship-Eintrag fehlt, diesen nun automatisch beim Speichern. Der geschriebene Wert ist /Unspecified, was die ISO 14289-1 §7.11-Anforderung erfüllt, dass jede eingebettete Datei einen AFRelationship-Schlüssel trägt. Dies gilt sowohl für über EmbedFile hinzugefügte Dateien als auch für eingebettete Dateien, die bereits in einem geladenen Dokument vorhanden sind.
Version 3.27.0
Geändert
- AddRoleMap(CustomType, StandardType) ist eine neue Tagged-PDF-API, die eine Zuordnung von einem benutzerdefinierten (nicht standardmäßigen) Strukturelementtyp-Namen zu einem standardmäßigen PDF-Strukturtyp registriert. Beim Speichern werden die Zuordnungen in das RoleMap-Wörterbuch in der Strukturbaumwurzel geschrieben, was die Anforderung von ISO 14289-1 §7.1 für Dokumente erfüllt, die anwendungsspezifische Tag-Namen verwenden. Mehrere Zuordnungen können registriert werden; doppelte Schlüssel werden vom letzten Aufruf überschrieben. DLL-Einstiegspunkte DLAddRoleMap und DLAddRoleMapA werden ebenfalls exportiert.
Version 3.26.0
Geändert
- BeginTagEx(TagType, AltText, ActualText, Lang) ist eine neue Tagged-PDF-API, die BeginTag um ein explizites Attribut für die natürliche Sprache erweitert. Wenn Lang nicht leer ist, wird es in das /Lang-Attribut des Strukturelements geschrieben, was die elementweise Sprachannotation ermöglicht, die von ISO 14289-1 §7.2 für mehrsprachige Dokumente verlangt wird. Ein leerer Lang-String führt zum gleichen Verhalten wie BeginTag. DLL-Einstiegspunkte DLBeginTagEx und DLBeginTagExA werden ebenfalls exportiert.
Version 3.25.1
Geändert
- Nicht-subset TrueType-Schriften, die mit der Standard-Windows-Codepage (WinAnsiEncoding) geladen wurden, erhalten nun einen ToUnicode-CMap-Stream, was zuverlässige Unicode-Textextraktion und Kopieren/Einfügen für diese Schriften ermöglicht. Zuvor wurde ein ToUnicode-Stream nur geschrieben, wenn eine explizite Codepage-Überschreibung oder ein Differences-Array vorhanden war; der häufige Standardcodierungspfad hatte ihn vermisst.
- Die gleiche Korrektur gilt für TrueType-Schriften, die mit einer expliziten nicht-standardmäßigen Codepage, aber ohne Differences-Array geladen wurden, und für Schriften, die über das verpackte Schriftformat geladen wurden.
Version 3.25.0
Geändert
- Wenn der PDF/UA-Modus aktiv ist, erhalten nicht ausgenommene Annotationen (alle Typen außer Widget, PrinterMark und TrapNet), denen ein nicht leerer Contents-Eintrag fehlt, diesen nun automatisch beim Speichern. Der /T (Titel / Autor)-Wert der Annotation wird als Fallback verwendet, was ISO 14289-1 §7.18.1 für Annotationen erfüllt, die einen Titel, aber keine explizite Barrierefreiheitsbeschreibung tragen.
Version 3.24.0
Geändert
- Wenn der PDF/UA-Modus aktiv ist, erhalten interaktive Formularfelder, denen ein TU (Tooltip / Alternativbeschreibung)-Eintrag fehlt, diesen nun automatisch beim Speichern. Der partielle Name (/T-Eintrag) des Felds wird als Fallback-Wert verwendet, was sicherstellt, dass Screenreader jedes Feld identifizieren können. Druckknöpfe werden gemäß ISO 14289-1 §7.18.4 korrekt von dieser Anforderung ausgeschlossen.
Version 3.23.1
Geändert
- GetInformation(200) gibt '1' zurück, wenn der PDF/UA-1-Modus auf dem ausgewählten Dokument aktiv ist, sodass Aufrufer den Konformitätsmodusstatus zur Laufzeit abfragen können.
- GetInformation(201) gibt '1' für PDF/A-1a, '2' für PDF/A-1b oder einen leeren String zurück, wenn der PDF/A-Modus aus ist.
- GetInformation(313) gibt den PDF-Versionsstring zurück, auf den das Speicherziel derzeit gesperrt ist, oder einen leeren String für frei versionierte Dokumente.
Behoben
- GetInformation(311) und GetInformation(312) geben nun den Versionsanforderungsstring und Funktionsnamen aus dem jüngsten Versionssperr-Konflikt korrekt zurück (zuvor im v3.20.3-Eintrag angekündigt, aber noch nicht implementiert).
Version 3.23.0
Geändert
- SetMarkInfo(Marked) ist nun eine öffentliche API, die es erlaubt, das MarkInfo.Marked-Flag unabhängig von der vollständigen PDF/UA-1-Einrichtung zu setzen, die von SetPDFUAMode durchgeführt wird. Wenn Marked 1 ist, wird MarkInfo.Suspects gemäß ISO 14289-1 §7.18.6 ebenfalls auf false gesetzt.
- Wenn der PDF/UA-Modus aktiv ist, erhalten alle Seiten automatisch einen /Tabs /S-Eintrag beim Speichern, was die strukturbasierte Tab-Reihenfolge-Anforderung von ISO 14289-1 §7.18.4 erfüllt.
- HTML-Referenzdokumentation für SetPDFUAMode, SetDocumentLanguage, SetMarkInfo, BeginTag, EndTag, BeginArtifact und EndArtifact hinzugefügt, mit vollständigen Syntaxtabellen und Verwendungsbeispielen.
Version 3.22.0
Geändert
- BeginTag(TagType, AltText, ActualText) öffnet ein markiertes PDF-Strukturelement im aktuellen Inhaltsstrom, schreibt einen BDC-Operator mit automatisch zugewiesener MCID und registriert das Element im Dokumentstrukturbaum. TagType ist ein beliebiger PDF-Standard-Strukturtyp (P, H1, Figure, Table usw.). AltText und ActualText sind optionale Barrierefreiheitsstrings, die als PDF-Textstrings (UTF-16BE) codiert sind.
- EndTag schließt das zuletzt geöffnete Strukturelement und schreibt den passenden EMC-Operator in den Inhaltsstrom.
- BeginArtifact(SubType) markiert eine Inhaltsregion als PDF-Artifact (Pagination-Artefakt, Hintergrund usw.) und schreibt einen BMC-Operator. SubType ist optional; wenn angegeben, wird er als /Artifact << /Subtype /SubType >> geschrieben.
- EndArtifact schließt die Artifact-Region mit einem EMC-Operator.
- Beim Speichern, wenn markierte Strukturelemente registriert wurden, baut die Bibliothek automatisch den vollständigen StructTreeRoot auf, weist betroffenen Seiten StructParents-Schlüssel zu und schreibt den ParentTree-Zahlenbaum, was die Anforderungen von ISO 32000-1 §14.7 für markiertes PDF erfüllt.
- Standard-Type-1-Schriften (Helvetica, Times, Courier-Familie, Symbol) und eingebettete Type-1-Schriften mit WinAnsi-Codierung erhalten nun einen ToUnicode-CMap-Stream, was zuverlässige Unicode-Textextraktion und Kopieren/Einfügen für diese Schrifttypen ermöglicht.
Version 3.21.0
Geändert
- SetPDFUAMode(Language) aktiviert den PDF/UA-1 (ISO 14289-1)-Konformitätsmodus: hebt das Dokument automatisch auf PDF 1.7 an, schreibt MarkInfo.Marked und MarkInfo.Suspects, aktiviert DisplayDocTitle in ViewerPreferences, setzt Catalog.Lang, wenn Language nicht leer ist, und schreibt den von ISO 14289-1 Abschnitt 6.7.11 geforderten pdfuaid:part = 1 XMP-Namespace-Eintrag.
- SetDocumentLanguage(Language) schreibt direkt den Catalog /Lang-Eintrag und ermöglicht es, die Dokumentsprache unabhängig vom PDF/UA-Modus zu deklarieren.
- MarkInfo.Suspects wird nun auf false gesetzt, wann immer MarkInfo.Marked auf true gesetzt ist, was die markierte PDF-Strukturanforderung von ISO 14289-1 (Abschnitt 7.18.6) erfüllt.
- Encrypt erzwingt nun das CanCopyAccess (Inhaltskopieren für Barrierefreiheit)-Berechtigungsflag, wenn das Dokument im PDF/UA-Modus ist, wie von ISO 14289-1 Abschnitt 7.17 verlangt.
Behoben
- Choice (Dropdown)-Formularfelder tragen keinen bedeutungslosen hartcodierten Tooltip-Wert mehr; TU bleibt ungesetzt, sodass der Aufrufer über die Formularfeld-Eigenschafts-API eine sinnvolle Bezeichnung zuweisen kann.
Version 3.20.3
Geändert
- Encrypt und AddSWFAnnotationFromFile geben nun sofort 0 mit LastErrorCode 602 zurück, wenn die Speicherversion unter dem von der ausgewählten Verschlüsselungsstärke oder dem Annotationstyp geforderten Minimum gesperrt ist, statt stillschweigend fortzufahren und erst beim Speichern zu scheitern.
- GetInformation(311) und GetInformation(312) spiegeln nun die widersprüchliche Versionsanforderung zum Schreibzeitpunkt wider, wenn eine gesperrte Version Funktionen auf Erweiterungsebene wie AES-256 oder RichMedia-Annotationen blockiert.
Version 3.20.2
Geändert
- AddU3DAnnotationFromFile hebt die Dokumentversion nun automatisch auf PDF 1.6 an, wenn eine 3D-Annotation einem Dokument mit niedrigerer Version hinzugefügt wird, konsistent mit dem Version-Auto-Bump-Verhalten aller anderen PDF 1.6+ API-Einstiegspunkte.
Version 3.20.1
Geändert
- PDF 1.2-Speicherziele werden nun als strenge PDF 1.2-Verträge durchgesetzt. Das Speichern von PDF 1.3+-Objekten wie Page TrimBox-Daten unter einem PDF 1.2-Ziel scheitert vor dem Schreiben der Ausgabe, statt eine gemischtversionierte Datei auszugeben.
- Die PDF 1.7 Adobe-Erweiterungsebenen-Konformität ist nun Teil der Speicher-Prüfung. AESV3, AES-256, RichMedia, Projection, geospatial-Wörterbücher und ETSI-Signatur-Subfilter werden gegen den geforderten ExtensionLevel geprüft.
- AES-256-Verschlüsselung, RichMedia-Annotationen, geospatial-Wörterbücher und ETSI-Signatur-Subfilter deklarieren nun den passenden Adobe Extensions-Eintrag, wenn PDFlib ein Dokument automatisch auf PDF 1.7-Erweiterungsinhalt anhebt.
- Append-Speichern verwenden nun dasselbe Versionskonformitäts-Gate wie vollständige Speichern.
- Mitgelieferte optionale PDFium-Laufzeit-DLLs wurden für Win32 und Win64 aktualisiert. GDI+ bleibt der Standard-Renderer; PDFium bleibt opt-in über SetPDFiumFileName und SelectRenderer(3).
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 207/207, und C++Builder Win64x GoogleTest bestand 61 Tests mit 2 vorhandenen sample-abhängigen Tests übersprungen.
Version 3.20.0
Geändert
- Acht weitere PDFlib-Writer-Einstiegspunkte werden nun durch Phase 3 EnsureMinVersion geleitet, sodass die Dokumentversion automatisch auf das von der emittierten Funktion geforderte Minimum angehoben wird: SetDocumentMetadata (PDF 1.4 - /Metadata XMP-Stream), SetPDFAMode(1 oder 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).
- In Kombination mit dem v3.15.0-Set (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) und dem v3.17.0-Set (acht JavaScript- / Datei-Anhang- / XFA- / SWF-Einträge) hebt PDFlib FVersion nun automatisch über einundzwanzig Writer-Einstiegspunkte hinweg an.
- NewOptionalContentGroup hob FVersion zuvor direkt an; es geht nun durch EnsureMinVersion, sodass LockSaveVersion berücksichtigt wird und der Bump in AutoBumpedFeatures aufgezeichnet wird.
Version 3.19.0
Geändert
- Die Speicher- und Ladezeit-PDF-Versionskonformität erkennt nun auch vier zuvor zurückgestellte Funktionen: Btn /Ff Bit 15 NoToggleToOff (nur Radio-Button) -> PDF 1.4, DeviceN /Subtype /NChannel (Farbraum-Verfeinerung) -> PDF 1.6, FontFile3 /Subtype /OpenType (Schriftprogrammtyp) -> PDF 1.6, Sig /SubFilter ETSI.CAdES.detached oder ETSI.RFC3161 -> PDF 1.7.
- Die NChannel-Regel stimmt mit der DeviceN-Farbraum-Array-Form [/DeviceN names alternateSpace tintTransform attributes] überein, wenn das attributes-Wörterbuch an Index 4 /Subtype /NChannel trägt.
- Die FontFile3 OpenType-Regel wird nur ausgelöst, wenn der Stream über einen Eltern-Schlüssel namens 'FontFile3' erreicht wird, sodass nicht verwandte Streams, die zufällig /Subtype /OpenType tragen, nicht markiert werden.
- Die PDFFeatureRules-Tabelle enthält nun 103 Regeln (99 + 4 neu).
Version 3.18.6
Geändert
- Die Speicher- und Ladezeit-PDF-Versionskonformität erkennt nun /AA (zusätzliche Aktionen) mit Container-Typ-Bewusstsein: Catalog /AA (Trigger auf Dokumentebene) -> PDF 1.4, Annot /AA (Annotations-Trigger) -> PDF 1.4, Page /AA (Seiten-Trigger) -> PDF 1.5.
- Formularfeld-/AA (PDF 1.2) bleibt vom bestehenden PDF 1.3-Speichervertrag abgedeckt; keine Regel nötig.
- Die PDFFeatureRules-Tabelle enthält nun 99 Regeln (96 + 3 neu).
Version 3.18.5
Hinzugefügt
- Neue Regel: AcroForm /NeedAppearances wird gemäß PDF 1.5 Tabelle 218 als PDF 1.5-Funktion erkannt.
Geändert
- Die PDFFeatureRules-Tabelle enthält nun 96 Regeln (95 + 1 neu).
Behoben
- Die Speicher- und Ladezeit-PDF-Versionskonformität klassifiziert Page /Tabs nun korrekt als PDF 1.5-Funktion; zuvor war es als PDF 1.4 fehlklassifiziert. Das PDF 1.4-Spezifikations-Änderungsdokument (Adobe TN #5409) listet /Tabs nicht auf, und PDF 1.5 Tabelle 8.10 führt "Tabs (Optional; PDF 1.5)" ein.
Version 3.18.4
Hinzugefügt
- Die zlib-ng-Regressionsabdeckung umfasst nun grenzgröße Nutzlasten, PNG-ähnliche Scanline-Daten, gespeicherte Multi-Block-Streams und bekannte zlib-Streams über Delphi- und C++Builder-Test-Runner.
Geändert
- PDFlibZLib verwendet nun immer das mitgelieferte statische zlib-ng-Objekt-Backend bei normalen Bibliotheks-Builds und entfernt den verbleibenden System.ZLib-Fallback-Pfad.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 194/194, und C++Builder Win64x GoogleTest bestand 58 Tests mit 2 vorhandenen sample-abhängigen Tests übersprungen.
Version 3.18.3
Geändert
- Delphi- und C++Builder-Demos, die PDF- oder Textausgabe generieren, öffnen das generierte Dokument nun automatisch nach erfolgreichem Speichern.
- Die Installer-Paketierung hält Build-Artefakte nun von Demo-Ordnern fern und macht C++Builder-Beispiele plus DLL- und ActiveX/OCX-Module zu opt-in-Komponenten; ihre passenden Dateien werden nur installiert, wenn die Komponente ausgewählt ist.
Version 3.18.2
Geändert
- Die Delphi- und C++Builder EditFormField-Demos löschen nun /NeedAppearances vor dem Aktualisieren der Feldwerte, sodass jedes bearbeitete Textfeld einen aktualisierten normalen Erscheinungs-Stream in der gespeicherten PDF erhält.
- Dies hält den gespeicherten /AP-Stream mit dem gespeicherten /V-Wert synchron und vermeidet viewerabhängige Unterschiede, bei denen das Fokussieren des Felds Text enthüllt, der im statischen Felderscheinungsbild fehlte.
Version 3.18.1
Geändert
- Die Speicher- und Ladezeit-PDF-Versionskonformität erkennt nun auch bitweise Formularfeld-/Ff-Flags und das AcroForm /SigFlags AppendOnly-Bit: /Ff Bit 21 (FileSelect, Maske 1048576) -> PDF 1.4, /Ff Bit 22 (MultiSelect, Maske 2097152) -> PDF 1.4, /Ff Bit 23 (DoNotSpellCheck, Maske 4194304) -> PDF 1.4, /Ff Bit 24 (DoNotScroll, Maske 8388608) -> PDF 1.4, /Ff Bit 25 (Comb, Maske 16777216) -> PDF 1.5, /Ff Bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5, /Ff Bit 27 (CommitOnSelChange, Maske 67108864) -> PDF 1.5, /SigFlags Bit 2 (AppendOnly, Maske 2) -> PDF 1.5.
- Die /Parent-Vererbung wird nicht verfolgt: nur Wörterbücher, die explizit /Ff oder /SigFlags tragen, lösen die Regeln aus.
- Die PDFFeatureRules-Tabelle enthält nun 95 Regeln (87 + 8 neue bitweise).
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 191/191, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.18.0
Geändert
- Die Speicher- und Ladezeit-PDF-Versionskonformität erkennt nun neun weitere Unterschlüssel- und bitweise Funktionen: bitweise Annotationsflags (/F-Maske): Locked (128) -> PDF 1.4, ToggleNoView (256) -> PDF 1.5, LockedContents (512) -> PDF 1.7. Unterscheidbare Katalog- und Seiten-Unterschlüssel: /BoxColorInfo (Seite) -> PDF 1.4, /Permissions, /Legal, /PresSteps -> PDF 1.5, /VP (Seiten-Geospatial-Viewport) -> PDF 1.6, /Collection (Katalog Portable Collection) -> PDF 1.7.
- Die PDFFeatureRules-Tabelle enthält nun 87 Regeln (78 auf Kapitelebene + 9 Unterschlüssel / bitweise).
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 189/189, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.17.0
Geändert
- Acht weitere PDFlib-Writer-Einstiegspunkte werden nun durch Phase 3 EnsureMinVersion geleitet, sodass die Dokumentversion automatisch auf das von der emittierten Funktion geforderte Minimum angehoben wird: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - JavaScript-Aktionen), AddEmbeddedFile, AddFileAttachment (PDF 1.3 - Datei-Anhänge), SetXFAFromString (PDF 1.5 - XFA-Formulare), AddSWFAnnotationFromFile (PDF 1.7 - RichMedia-Annotation).
- In Kombination mit dem v3.15.0-Set (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) deckt PDFlib nun 13 hochversionierte Writer-Einstiegspunkte durchgängig ab.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 187/187, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.16.3
Hinzugefügt
- Neue PDFlib-API: LockSaveVersion(Version) heftet das Dokument an Version und verhindert, dass Phase 3 writerseitig EnsureMinVersion automatisch darüber hinaus anhebt. UnlockSaveVersion löscht die Sperre.
Geändert
- Das Speicherzeit-Gate ist unverändert: Writer-emittierte Funktionen über der gesperrten Version erzeugen weiterhin LastErrorCode 602 beim Speichern, statt den Header stillschweigend anzuheben.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 184/184, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.16.2
Geändert
- Geladene PDFs zeigen nun eine Beitragsleisten-Ansicht der Ladezeit-Funktions-Erkennung über GetInformation(103) ("ContributorFeatures"). Die Liste enthält nur Funktionen, deren minimal erforderliche Version strikt größer als HeaderVersion (Schlüssel 100) ist, sodass sie direkt die Frage beantwortet: "Warum ist die effektive Version höher als der Datei-Header?".
- GetInformation(101) ("DetectedFeatures") ist unverändert und listet weiterhin jede passende Funktion auf, unabhängig vom Beitrag.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 181/181, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.16.1
Hinzugefügt
- Erweiterte ladeseitige Erkennungstestabdeckung mit sechs zusätzlichen synthetischen Fixtures: seiteninterner Transparenz-ExtGState (kein Versions-Bump), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), /OCProperties + OCG-Inhalt (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), eine Multi-Feature-Kombinations-Fixture und eine Snapshot-Stabilitätsprüfung.
Geändert
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 179/179, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.16.0
Hinzugefügt
- Neue GetInformation-Schlüssel: 100 gibt HeaderVersion (literal %PDF-X.Y) zurück, 101 gibt DetectedFeatures (durch CRLF getrennte beim Laden gefundene Funktionen) zurück, 102 gibt AutoBumpedFeatures (durch CRLF getrennte Funktionen, die writerseitig EnsureMinVersion ausgelöst haben) zurück.
Geändert
- Geladene PDF-Dokumente durchlaufen nun einen inhaltsgesteuerten Versionserkennungsdurchgang: Jedes indirekte Objekt wird durch die Feature-zu-Minimum-Version-Tabelle gegangen, die vom Speicherzeit-Gate verwendet wird, und FVersion wird über den literalen %PDF-X.Y-Header-Wert hinaus angehoben, wenn der Inhalt tatsächlich eine höhere Version erfordert. Zum Beispiel hebt ein /UserUnit-Seiteneintrag die effektive Version auf PDF 1.6 an, auch wenn der Datei-Header PDF 1.4 sagt.
- Das Speicherzeit-Gate ist nicht betroffen: Dokumente, deren effektive Version beim Laden angehoben wurde und dann explizit mit SetInformation(0, ...) heruntergestuft wurde, erzeugen beim Speichern immer noch LastErrorCode 602.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 173/173, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.15.0
Geändert
- Writer-Einstiegspunkte, die Funktionen produzieren, die eine bestimmte minimale PDF-Version erfordern, heben die PDF-Version des Dokuments nun automatisch an. SetTransparency auf einem als PDF 1.3 markierten Dokument aufzurufen, hebt den Header nun auf PDF 1.4 statt das Speichern mit LastErrorCode 602 zu scheitern.
- Der gleiche Auto-Bump wurde in SetPageUserUnit (>=1.6), Encrypt mit Strength 1/2/3/4 (jeweils >=1.4/1.6/1.7/1.7) und die Zwei-Seiten-Varianten von SetPageLayout (>=1.5) eingebaut.
- Verhaltenänderung gegenüber 3.14.x: Anwendungen, die zuvor auf das v3.12.6 "Speicherziel lehnt writer-emittierte Funktionen ab"-Gate setzten, gelingen nun bei der angehobenen Version. Geladene PDFs, die bereits Funktionen höherer Versionen enthalten, durchlaufen immer noch das bestehende Speicherzeit-Gate, sodass das Laden eines markierten PDF und das Auswählen von PDF 1.3 immer noch mit LastErrorCode 602 scheitert.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 170/170, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.14.3
Geändert
- Die Speicherzeit-PDF-Versionskonformität erkennt nun auch die verbleibenden PDF 1.6 3D-Wörterbuchtypen (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) und die PDF 1.7 Redact-, RichMedia- und Projection-Annotations-Subtypen plus die /Type /Requirement- und /ReqHandler-Begleit-Wörterbücher.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 168/168, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.14.2
Geändert
- Die Speicherzeit-PDF-Versionskonformität erkennt nun auch PDF 1.5-Funktionen: /XFA-Formulare, /AlternatePresentations, /Renditions-Namensbaum, die Multimedia-Wörterbücher /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers und den Screen-Annotations-Subtyp.
- Das Speichern als PDF 1.4 lehnt nun Dokumente ab, die diese Funktionen tragen, mit LastErrorCode 602.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 166/166, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.14.1
Geändert
- Die Speicherzeit-PDF-Versionskonformität erkennt nun auch PDF 1.4-Funktionen: markierte PDF /StructTreeRoot /MarkInfo und StructElem-Wörterbücher, die Dokument /Lang- und Seiten /Tabs-Einträge, /OutputIntents und /OutputIntent-Wörterbücher, die /UR3-Nutzungsrechte-Signatur und die PDF 1.4-Annotations-Subtypen Polygon, PolyLine, Caret, Ink, Popup und Watermark.
- Das Speichern als PDF 1.3 lehnt nun Dokumente ab, die diese Funktionen tragen, mit LastErrorCode 602.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 165/165, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.14.0
Geändert
- Die Speicherzeit-PDF-Versionskonformität erkennt nun auch PDF 1.3-Funktionen wie weiche Schattierungen, Funktionsobjekte, ICCBased- und DeviceN-Farbräume, /TrimBox /BleedBox /ArtBox-Seiteneinträge, /ToUnicode-CMaps, Datei-Anhang- und /Sound- und /Movie-Annotationen, /Type /Filespec- und /Type /EmbeddedFile-Wörterbücher, die /Group /EF /Alternates /Mask-Schlüssel und JavaScript-Aktionen.
- PDF 1.2-Aufrufer speichern nun unter dem PDF 1.3-Vertrag: Der literale %PDF-1.2-Header bleibt erhalten, aber das Gate akzeptiert PDF 1.3-Funktionen. PDF 1.4- und spätere Funktionen werden weiterhin mit LastErrorCode 602 abgelehnt.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 162/162, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.13.0
Geändert
- Das PDF-Versionskonformitäts-Gate, das spätversionierte Funktionen beim Speichern ablehnt, wurde in ein dediziertes Modul umgestaltet, sodass der Regelsatz wachsen kann, ohne den Dokumentkern zu beeinflussen.
- Keine für Benutzer sichtbare Verhaltenänderung gegenüber v3.12.7: dieselben Out-of-Version-Funktionen werden weiterhin mit LastErrorCode 602 abgelehnt.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 155/155, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.12.7
Hinzugefügt
- Erweiterte automatisierte Testabdeckung für den PdfToImage-Direktzugriffs-Rendering-Workflow in den Delphi DUnitX- und C++Builder GoogleTest-Suites.
Geändert
- Der Delphi VCL GUI-Test-Runner registriert nun die Syntax- und XRef-Fixtures, passend zur Abdeckung des Konsolen-Runners.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 147/147, und C++Builder Win64x GoogleTest bestand 57/57.
Version 3.12.6
Geändert
- Das Speichern als PDF 1.3, 1.4, 1.5, 1.6 oder 1.7 erzwingt nun die ausgewählte Version als vollständigen Speicher-Ausgabe-Vertrag.
- Vollständige Speichern entfernen Katalog-/Version-Überschreibungen, entfernen nicht unterstützte Katalog-Erweiterungs- und Metadaten-Einträge für niedrigere Ziele und unterdrücken PDF 1.4 XMP-Metadatenstreams beim Speichern als PDF 1.3.
- SaveToFile, SaveToString und SaveToStream scheitern nun mit LastErrorCode 602, wenn die ausgewählte PDF-Zielversion niedriger ist als Funktionen, die noch im Dokument vorhanden sind, wie Transparenz, optionaler Inhalt, JPX, UserUnit, 3D oder AES-Crypt-Filter-Funktionen.
Version 3.12.5
Hinzugefügt
- Regressionsabdeckung für unbekannte Literalzeichenketten-Escapes und gemischte oktal/nicht-oktale Escape-Sequenzen hinzugefügt.
Geändert
- Verbesserte PDF 1.7-Literalzeichenketten-Analyse, sodass unbekannte Escape-Sequenzen den Backslash gemäß Standardanforderung ignorieren.
- Oktale Escapes für Literalzeichenketten verbrauchen nun nur oktale Ziffern und behalten eine folgende nicht-oktale Ziffer als reguläre Zeichenkettendaten bei.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 141/141.
Version 3.12.4
Hinzugefügt
- Regressionsabdeckung für rechte Klammer-Namens-Trennzeichen und spärliche komprimierte Objekt-xref-Stream-Einträge hinzugefügt.
Geändert
- Verbesserte PDF 1.7-Lexikalanalyse, sodass Namensobjekte nun korrekt am rechten Klammertrennzeichen anhalten.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 139/139.
Behoben
- SmartAccess-Laden von xref-Stream komprimierter Objekteinträge, deren Objektstromnummer größer als die PDF-Bytelänge ist, behoben.
Version 3.12.3
Hinzugefügt
- Neue AES-verschlüsselte PDFs schreiben nun Crypt-Filter Length-Werte als Bitlängen, passend zum PDF 1.7-Crypt-Filter-Wörterbuch-Vertrag.
Geändert
- Verbesserte PDF 1.7-Kompatibilität für verschlüsselte Dokumente für Standard-Sicherheits-Handler-Dateien, die StrF, StmF, EFF, Identity, None oder benannte StdCF-Style-Crypt-Filter verwenden.
- Metadatenstreams respektieren nun EncryptMetadata=false während Entschlüsselungs-, Verschlüsselungs- und Kopier/Speicher-Workflows, statt wie gewöhnliche Streams verarbeitet zu werden.
- Eingebettete Dateistreams tragen nun /Type /EmbeddedFile und verwenden den Entscheidungspfad des Crypt-Filters für eingebettete Dateien, wenn verschlüsselte Dokumente geladen oder gespeichert werden.
- Externe eingebettete Dateistreams befördern nun FDecodeParms zu DecodeParms, wenn FFilter zu Filter befördert wird, und behalten Stream-Decode-Parameter bei.
- XRef-Stream Prev/XRefStm-Werte und große numerische Offsets behalten nun 64-Bit-Präzision durch Parser- und SmartAccess-Pfade.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 137/137.
Version 3.12.2
Geändert
- Verbesserte PDF 1.7-Stream-Decodier-Kompatibilität. Die generische Stream-Decodierung respektiert nun /DP als DecodeParms-Alias, löst indirekte Decode-Parameter-Array-Einträge auf und akzeptiert die Standard-Filter-Abkürzungen /AHx und /LZW.
- Großdatei-PDF-Ausgabe schreibt nun xref-, startxref-, Linearisierungs- und Digital-Signatur-ByteRange-Offsets durch 64-Bit-Formatierungspfade, statt diese Werte durch 32-Bit-Integer-Helfer einzuengen.
- Geladene Dokumente behandeln einen Katalog-/Version-Eintrag nun als effektive PDF-Version, wenn er neuer als die Datei-Header-Version ist.
- Validierung: Delphi Win32 und Win64 DUnitX-Suites bestanden jeweils 134/134.
Behoben
- Umgeschriebene xref-Stream-Trailer behalten keine Nur-Stream-DecodeParms-Schlüssel mehr bei, wenn PDFlibPas sie als klassische Trailer-Wörterbücher speichert.
Version 3.12.1
Geändert
- Generierte PDFs öffnen sich nun mit der ersten Seite, die an die verfügbare Höhe des Viewer-Fensters angepasst ist, sodass die gesamte erste Seite von oben nach unten bei der größten Zoomstufe sichtbar ist, die in das Fenster passt. Konfigurieren Sie eine benutzerdefinierte OpenAction (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) im Dokument, um diese Voreinstellung zu überschreiben.
Version 3.12.0
Hinzugefügt
- 32-Byte-ausgerichtete malloc/calloc/realloc/free-CRT-Stubs für die statischen C-Bibliotheken hinzugefügt und TPDFJPEGImage.Compress repariert, sodass jpeg_mem_dest-Puffer durch denselben C free-Pfad freigegeben werden, der sie zugewiesen hat.
- Erweiterte die öffentlichen Validierungshinweise, um die strenge automatisierte Abdeckung hinter diesem Release hervorzuheben: Bibliotheks-Builds, Komprimierungs-Round-Trips, HelloWorld /FlateDecode-Ausgabe, JPEG-Rendering, Bild-Workflows, Schriften, Formulare, Sicherheit, Signierung, Drucken und C++Builder demo-abgeleitete Workflows.
Geändert
- Die Windows-Statik-Backends enthalten nun libjpeg-turbo NASM SIMD-Objekte für Win32 und Win64 sowie zlib-ng x86 SIMD-Dispatch-Objekte für das Win64x zlib-ng-Set.
- Überarbeitete zlib-ng-Rebuild-Skripte, sodass Win64x bcc64x und diagnostische MSVC-Builds die generischen, SSE2-, SSSE3-, SSE4.1/SSE4.2-, PCLMULQDQ- und AVX2-Quelldateien mit pro Datei eingestellten Feature-Flags kompilieren, statt sich auf einen globalen Compiler-Schalter zu verlassen.
Version 3.11.0
Hinzugefügt
- Ein kleines zlib-ng-Brückenobjekt für Win64-Builds hinzugefügt, sodass der Pascal-Code stabile zlib-kompatible Einstiegspunkte behält, während Delphi und C++Builder ihre eigenen Linker-kompatiblen Objekt-Sets verbrauchen.
Geändert
- Windows Flate-Komprimierung und -Dekomprimierung auf zlib-ng im zlib-kompatiblen Modus umgestellt. Win32, Delphi Win64 und C++Builder Win64x verknüpfen nun ABI-passende zlib-ng-Statik-Objekt-Sets aus Lib\thirdparty\Win32, Lib\thirdparty\Win64 und Lib\thirdparty\Win64x.
- Alle C++Builder-Demo-Projekte aktualisiert, um PDFLIB_CPPBUILDER zu definieren, passend zum GoogleTest-Runner und verhindert, dass Win64x-Demos die Delphi Win64 zlib-ng-Objekte verknüpfen.
Behoben
- Der Win64-Pfad geht nicht mehr durch Delphis System.ZLib-Einheit, sodass PDF-Stream-Komprimierung/-Dekomprimierung wie der 32-Bit-Build vom zlib-ng-Backend profitieren kann.
Version 3.10.3
Hinzugefügt
- Die C++Builder GoogleTest-Suite erweitert, um jede Demo unter Demo\C++Builder abzudecken. Das 7-Fixture phase-1-Layout wuchs auf 15 Fixtures / 52 GoogleTest-Fälle, alle auf Win64x bestanden. Neu abgedeckte Demos: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (Renderer-Wechsel), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging.
Version 3.10.2
Hinzugefügt
- C++Builder GoogleTest-Runner unter Tests\C++Builder hinzugefügt, der Lib\PDFlibrary.pas durch dieselben {$JPHNE}-emittierten HPP-Header laufen lässt, die die C++Builder-Demos verwenden. Die erste Phase spiegelt sieben Kern-Delphi-Szenarios (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, PdfToImage-Rendering) als 17 GoogleTest-Fälle, alle auf Win64x bestanden.
- Die Delphi DUnitX-Suite mit Tests.Print erweitert, das die PrintPDF- und ShowPrinterBins-Demos abdeckt (Standarddrucker-Aufzählung, Benutzerdrucker-Einrichtung, Druckoptionen, Druckauftrag zur Datei umleiten), und einen Renderer-Wechsel-Test in Tests.Render, der die GDI+- / PDFium- / Cairo-Engine-Auswahl der MultiFunction-Demo auf derselben Quell-PDF ausführt.
Version 3.10.1
Hinzugefügt
- 57 benannte Seitengrößen zu SetPageSize hinzugefügt, sodass dieselben kanonischen Seitengrößennamen auch hier funktionieren: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, plus the Chinese / Taiwanese octavo and sextodecimo sheet formats LARGE/STANDARD/CROWN/ROC 8K and the matching 16K halves.
Version 3.10.0
Hinzugefügt
- Native C++Builder-Versionen für jedes Delphi-Beispiel unter Demo hinzugefügt. Die Demos für PDF-Erstellung, Seitenmanipulation, Schriften, Bilder, Sicherheit, Signierung, Rendering und Drucken können nun aus C++Builder gebaut und ausgeführt werden, ohne irgendeinen Delphi-seitigen Wrapper.
- Eine kurze englische Readme.txt zu jedem Delphi-Demo-Ordner hinzugefügt, die beschreibt, was die Demo zeigt, auf welche API sie sich konzentriert und wie sie auszuführen ist; eine HTML-Übersicht unter Demo\Delphi\index.html verlinkt zu allen Demos, nach Themen gruppiert.
Geändert
- Jede neue Demo liegt in Demo\C++Builder\<Name>\ als Konsolenprojekt, das Lib\PDFlibrary.pas direkt verbraucht und die zur Ausführung benötigten Eingabedateien mitliefert.
- Die gleiche Readme.txt für jede C++Builder-Demo gespiegelt, mit einem Run-Abschnitt, der für den Konsolen-Workflow umgeschrieben wurde (argv-Argumente statt Open/SaveDialogs); ein passendes Demo\C++Builder\index.html listet jede C++Builder-Demo mit denselben Themengruppen auf.
Behoben
- Einen Speicherleck in der ImportEMF-Demo behoben (die TPDFlib-Instanz wurde erstellt, aber nie freigegeben).
Version 3.9.14
Geändert
- Die umgebrochenen Text- und HTML-Pagination-Demos aufgeräumt, sodass sich jede Demo auf ihre eigene API konzentriert und von einem einzigen Button aus läuft.
- Zwei Demo-Projekte (EmbeddedFonts und PdfPermission) umbenannt, sodass die kompilierten ausführbaren Dateien zu den Ordnernamen passen statt zu älteren Prototyp-Namen.
Behoben
- Die Seitenbereich-Kopier-Demo behoben, sodass sie tatsächlich Seiten kopiert, statt immer einen Fehler zu melden.
Version 3.9.13
Hinzugefügt
- Eine automatisierte DUnitX-Test-Suite eingeführt (Konsolen- und VCL GUI-Runner), die Utility-Einheiten — Puffer, AES, ZLib, Unicode und Digest-Hashing — und Bibliotheksebene-Workflows einschließlich Dokumenterstellung, Speichern in Datei und Speichern in Stream, Lade-Round-Trips und AES-128/AES-256-Verschlüsselung abdeckt.
Behoben
- Einen Stream-Positions-Fehler im internen Puffer-Reader behoben: Zwei-Byte-Wort-Lesungen verschoben den Lesecursor um vier Bytes statt um zwei. In Puffern, die länger als zwei Bytes sind, landeten nachfolgende Lesungen am falschen Offset und gaben stillschweigend falsche Daten zurück. Der Effekt war am sichtbarsten beim Analysieren binärer Datenstrukturen, die Byte- und Wort-Lesungen verschachteln.
Version 3.9.12
Geändert
- Das GDI+-Bildrendering verwendet nun standardmäßig glatte, hochwertige bikubische Interpolation, wenn Rasterbilder auf Bildschirm- oder Export-Auflösung skaliert werden. Zuvor war die Voreinstellung der Nearest-Neighbour-Modus, der bei kleinen Bildern (Logos, Vorschaubilder), die für Bildschirmvorschau oder High-DPI-Export vergrößert wurden, sichtbare Treppenstufenartefakte erzeugte. Aufrufer, die den schärferen Nearest-Neighbour-Modus bevorzugen, können das alte Verhalten über SetGDIPlusOptions wiederherstellen.
Version 3.9.11
Behoben
- Cairo-Rendering von PDF-Bildern, die Farbschlüssel-Transparenz (ein /Mask-Farbbereichs-Array im Bildwörterbuch) verwenden, behoben. Zuvor ließ der Cairo-Renderer, wenn eine Seite ein Bild mit dieser Form von Transparenz enthielt, das Bild vollständig weg, anstatt es mit dem Seitenhintergrund zu komponieren. Die Korrektur leitet einen pixelweisen Alphakanal aus den deklarierten Farbschlüssel-Bereichen ab und rendert das Ergebnis als transparentes Bild, was visuell mit dem GDI+-Renderer konsistente Ausgabe erzeugt.
Version 3.9.10
Behoben
- Eine Cairo-Rendering-Regression behoben, bei der alle Seiteninhalte, die einer geclippten Bildsequenz folgten, fälschlicherweise auf das Clipping-Rechteck des Bildes beschränkt waren. PDF-Seiten, die den Grafikstatus speichern, einen Clipping-Pfad anwenden, ein Bild malen und dann den Status wiederherstellen — eine gängige Layout-Technik für gerahmte oder umrandete Bilder — würden allen nachfolgenden Text, Formen und Grafiken nur innerhalb des geclippten Bereichs rendern. Cairo-Statussichern und -Wiederherstellen werden nun korrekt auf die PDF q/Q-Operatoren abgebildet, sodass die Clipping-Region nach dem Zeichnen des Bildes verworfen wird.
Version 3.9.9
Hinzugefügt
- Eine Cairo-basierte PDF-Rendering-Engine als dritte Rendering-Option neben GDI+ und PDFium hinzugefügt. Rufen Sie SelectRenderer(2) vor dem Rendering auf, um sie zu aktivieren; die Engine erfordert cairo.dll aus dem mitgelieferten DLL\Cairo-Ordner. Das Cairo-Rendering unterstützt dieselben Ausgabemodi wie GDI+: Bitmap-Datei und Stream-Export (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), Gerätekontext-Rendering und direkte Druckerausgabe.
Geändert
- Die MultiFunction View/Print-Demo bietet nun einen Drei-Wege-Renderer-Selektor, sodass Benutzer GDI+, PDFium und Cairo-Ausgabe ohne Codeänderungen Seite an Seite auf demselben Dokument vergleichen können.
Version 3.9.8
Behoben
- Zwei spürliche Compiler-Diagnosen im Win32 C-Runtime-Shim unterdrückt, die in RAD Studio 13.1 und später erschienen. Eine Veraltungswarnung (W1000) wurde ausgelöst, weil ein Compiler-Versions-Schutz nicht an Compiler propagiert wurde, die neuer als Delphi 2009 sind, was sie dazu brachte, gegen eine veraltete Speicherverwalter-API zu kompilieren. Ein unbenutzter Variablen-Hinweis (H2164) wurde für eine interne Kompatibilitätsvariable ausgelöst, die nur für Delphi 7-Builds benötigt wird; sie ist nun auf den Bedingungsblock dieser Version beschränkt. Beide Probleme waren nur diagnostisch ohne Laufzeitwirkung.
Version 3.9.7
Hinzugefügt
- Optionales PDFium-basiertes Seitenrendering auf Windows hinzugefügt, einschließlich BMP-Stream-Rendering, Gerätekontext-Rendering, Speicher-Rendering und Druckerausgabe.
Geändert
- Die Delphi MultiFunction View/Print-Demo mit einem Renderer-Selektor aktualisiert, sodass Benutzer zwischen dem bestehenden GDI+-Renderer und PDFium wechseln können.
Version 3.9.6
Hinzugefügt
- Separate Inno Setup-Skripte für das vollständige PDFlibPas-Paket und das Trial-Paket hinzugefügt, mit release-fokussierten Ausschlüssen für Versionskontroll-Metadaten, Build-Ausgaben, IDE-Caches, lokale Agent-Dateien und mitgelieferte Drittanbieter-Quellbäume, die nicht Teil des ausgelieferten Pakets sind.
Geändert
- Der Trial-Installer baut und paketiert nun Trial-Binärbibliotheken für RAD Studio 11.3, 12.3 und 13.1 sowie die Trial Delphi-Demos, bevor die Setup-Ausführungsdatei generiert wird.
Version 3.9.5
Behoben
- Win32-Bibliotheks-Builds unter RAD Studio 9.0 / Delphi XE2 behoben. Das Build-Skript übergab ein DCU-Ausgabeverzeichnis-Flag, das nur ab Delphi 2010 existiert; der Compiler von XE2 interpretierte das Flag anders, was zu einem verstellten Ausgabepfad und einem fatalen Fehler führte, bevor irgendeine Quelldatei verarbeitet wurde. Das Skript wählt nun automatisch das passende Flag basierend auf der Ziel-Compiler-Version aus.
- Einen verwandten Compiler-Versions-Schutz im Bibliothekscode korrigiert, der eine namensqualifizierte, in XE4 eingeführte Runtime-Funktion unter einer XE2+-Bedingung aufrief. Builds, die XE2 und XE3 als Ziel haben, lösen nun stattdessen den korrekten Kompatibilitätsimport auf.
Version 3.9.4
Behoben
- Drucker-Einrichtung für Netzwerk- und Server-freigegebene Drucker behoben, indem Papierschacht-, Medien-, Duplex-, Qualitäts- und andere Druckeinstellungen über das Drucker-DEVMODE-Handle statt über das Drucker-Gerätekontext-Handle angewendet werden.
Version 3.9.3
Geändert
- Das mitgelieferte AES-Backend auf Brian Gladmans 2018 AES-Quellen sowohl auf Win32 als auch auf Win64 aufgefrischt. Reproduzierbare Build-Skripte erlauben nun, die statischen AES-Objekte jederzeit aus der Quelle neu zu bauen. Ein ABI-Defekt in den Pascal-Bindungen wurde im Prozess entdeckt und behoben: Den AES-CBC-Verschlüsselungs- und Entschlüsselungsfunktionen fehlte ihre C-Aufrufkonventions-Deklaration, sodass Win32-Builds Argumente stillschweigend in der falschen Registerreihenfolge übergaben und potenziell falsche verschlüsselte Ausgabe erzeugten. Win64-Builds waren nicht betroffen, weil die Plattform eine einheitliche Aufrufkonvention erzwingt.
Sicherheit
- Die Drittanbieter-Rebuild-Skripte gehärtet, sodass die MSVC-basierten zlib-, JPEG- und CRT-Stub-Skripte sowohl vom Repository-Stamm als auch vom thirdparty-Verzeichnis aus gestartet werden können; zuvor mussten sie das Arbeitsverzeichnis auf den thirdparty-Ordner gesetzt haben.
Version 3.9.2
Behoben
- Das JPEG 2000-Backend auf Win32 und Win64 vom alten OpenJPEG 1.5 auf OpenJPEG 2.5.4 aktualisiert. Beide Plattformen verwenden nun statisches Objekt-Linken, sodass JPEG 2000-Codierung und -Decodierung ohne eine zusätzliche Runtime-DLL funktionieren. Der moderne Codec bringt aktuelle JP2/J2K-Header-Behandlung, eine callback-gesteuerte Stream-API und akkumulierte Fehler- und Sicherheitskorrekturen vom Upstream-Projekt. Die öffentliche TJpeg2000Bitmap-API ist unverändert.
Version 3.9.1
Behoben
- JPEG-Seitenrendering und Bildexport nach dem libjpeg-turbo-Upgrade behoben, wodurch die PdfToImage JPG-Konvertierung und die TPDFJPEGImage.SaveToStream-Ausgabe auf Win32 und Win64 wiederhergestellt werden.
- Win32 libjpeg-turbo ABI-Bindungen korrigiert, sodass Callbacks, Strukturausrichtung, boolesche Felder und speicherbasierte JPEG-Ziele mit libjpeg-turbo 3.1.90 übereinstimmen.
- Win32 FlateDecode-Stream-Dekomprimierung mit dem mitgelieferten zlib 1.3.2-Backend behoben, wodurch das Laden von PDF xref-Streams für Dateien wie das PdfToImage-Beispieldokument wiederhergestellt wird.
Version 3.9.0
Geändert
- Das mitgelieferte JPEG 2000-Backend vom alten OpenJPEG 1.5 auf OpenJPEG 2.5.4 aktualisiert. JPEG 2000-Laden und -Speichern verwenden nun den modernen Codec, die callback-gesteuerte Stream-API und aktuelle JP2/J2K-Header-Behandlung, während die öffentliche TJpeg2000Bitmap-API erhalten bleibt.
Behoben
- Die JPEG 2000-Ausgabe wählt nun automatisch eine gültige OpenJPEG-Auflösungsanzahl für kleine Bilder, und das Win32-Statik-Backend hängt nicht mehr von fehlenden MSVCRT-Helper-Exporten ab.
Version 3.8.1
Behoben
- Alle 16 kosmetischen Linker W1028 "Bad global symbol definition"-Warnungen auf Win32 und Win64 beseitigt. Quellebene-Umbenennungen entfernen die redundanten Pascal-seitigen Duplikate (jpeg_std_error und die jmemnobs-Allokator-Stubs werden nun ausschließlich aus der obj-Schicht aufgelöst); die drei verbleibenden bcc32 / vc64 obj-Symbole (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table), die gegen Pascal-seitige Daten link-aufgelöst bleiben müssen, werden nun in einem ObjConv-Nachverarbeitungsdurchgang während thirdparty\build-jpeg-vc64.bat von ihren COFF-Symbolnamen befreit. Keine Änderung an der öffentlichen API; saubere Linker-Ausgabe für Delphi Win32- und Win64-Builds.
Version 3.8.0
Sicherheit
- Win64 JPEG-Codec von IJG-Style libjpeg auf libjpeg-turbo 3.1.90 aktualisiert, was die JPEG-Migration abschließt, die in v3.7.0 (Win32) begann. Sowohl Win32- als auch Win64-Pfade teilen sich nun denselben modernen JPEG-Codec, mit denselben SIMD-optimierten inneren Schleifen und 30+ akkumulierten CVE- / Fuzz-Fixes vom Upstream. Die öffentliche PDFlibPas-API ist unverändert.
Version 3.7.0
Sicherheit
- Win32 JPEG-Codec von IJG libjpeg-6b auf libjpeg-turbo 3.1.90 aktualisiert. Deutlich schnellere JPEG-Codierung/-Decodierung durch SIMD-optimierte innere Schleifen, plus die 30+ CVE- / Fuzz-Fixes, die in libjpeg-turbo upstream akkumuliert wurden. Die öffentliche PDFlibPas-API (TPDFJPEGImage-Klasse, DumpJPEG-Funktionen) ist unverändert; existierende PDF/JPEG-Codepfade laufen schneller ohne erforderliche Quelländerungen.
Version 3.6.0
Geändert
- Der Win64 zlib-Pfad ist in dieser Version unverändert — er verwendet weiterhin die Delphi-mitgelieferte System.ZLib-Einheit.
- Den Win64 Link-Zeit-CRT-Shim PDFlibCLibs.pas (in v3.5.0 eingeführt) für den Win32 zlib-Pfad aktiviert und memcpy- / memset- / malloc- / free-Symbole bereitgestellt, auf die die neuen zlib 1.3.2-obj-Dateien verweisen.
Sicherheit
- Win32 zlib von 1.2.x auf 1.3.2 aktualisiert. Beinhaltet die standardmäßigen 25+ CVE- / Fuzz-Fixes, die seit 1.2.8 upstream akkumuliert wurden, sowie die neuen inflateBack9- / inflateTree9-Einstiegspunkte, die von 64-Bit-Fenster-Streams verwendet werden. Die öffentliche PDFlibPas-API (DeflateStr / InflateStr / InflateStrParms) ist unverändert.
Version 3.5.0
Hinzugefügt
- Build-Infrastruktur für OpenJPEG 2.5.4 hinzugefügt. Der OpenJPEG-Quellbaum selbst wird vom Benutzer unabhängig geholt (git clone uclouvain/openjpeg in Lib/thirdparty/OpenJPEG/), sodass er aktualisiert werden kann, ohne die Build-Konfiguration von PDFlibPas anzufassen.
- Lib/PDFlibCLibs.pas wurde hinzugefügt, ein Win64-Linkzeit-CRT-Shim, der vom Win64-Backend verwendet wird. Er überbrückt die Lücke zwischen den mit MSVC kompilierten C-obj-Dateien und Delphis Win64-Linkern (dcc64 / Win64x ld.lld / BCB ilink64), die msvcrt.dll nicht automatisch einbinden.
Geändert
- Frische Build-Infrastruktur für die mitgelieferten C-Bild- / Komprimierungsbibliotheken vendoriert: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Build-Skripte für sowohl Embarcadero bcc32 (Win32) als auch MSVC cl.exe (Win64) liegen in Lib/thirdparty/ neben den Quellbäumen, sodass jeder mit RAD Studio + VS2022 die statischen obj-Dateien aus sauberer Quelle neu bauen kann.
Version 3.4.0
Sicherheit
- Verschlüsselungsschlüssel-, AES-Initialisierungsvektor- und Perms-Berechtigungsblock-Generierung gegen vorhersagbare Zufallszahlenquellen gehärtet. Verschlüsselte PDFs, die auf Systemen mit ähnlicher Wanduhrzeit produziert wurden, sind nicht mehr trivial korrelierbar; AES-256-Dokumente behalten nun ihre volle Schlüsselstärke.
- Bildwörterbuch-Analyse gegen fehlerhafte oder feindliche PDFs gehärtet, die unverstandig große Width-, Height-, BitsPerComponent- oder DeviceN-Komponentenzählungen deklarieren. Werte außerhalb des Bereichs werden vor jeder Pixelpuffer-Arithmetik gekappt, um Abstürze beim Öffnen solcher Dateien zu verhindern.
- Querverweis- und Seitenbaumtraversierung gegen Dokumente gehärtet, deren /Prev xref-Ketten oder /Parent-Seitenlinks einen Zyklus bilden oder übermäßig tief sind. Der Reader weist fehlerhafte Strukturen nun sauber zurück, statt zu rekursieren, bis ihm der Stack ausgeht.
Version 3.3.1
Hinzugefügt
- Inline-Begründungs-Kommentare um die PDFlibRenderer.pas-Render-Korrekturen hinzugefügt, die bereits in der anfänglichen Git-Basis vorhanden waren. Die Kommentare dokumentieren, warum SetPen Strichbreiten durch die aktive Canvas-Transformation skaliert und warum Type 3 Font CharProc d0/d1-Operatoren ihre Operanden verbrauchen müssen. Keine Laufzeitverhaltenänderung.
Behoben
- Die komponentenweisen Windows-Build-Skripte rationalisiert. Die DLL/-, OCX/- und Dylib/-Ordner tragen keine separaten build12-* / build13-*-Varianten mehr: jede Plattform hat nun ein einziges build-Win32 / build-Win64-Skript, das auf das neueste RAD Studio fixiert ist und ein optionales "debug"-Argument akzeptiert.
Version 3.3.0
Behoben
- Transformiertes Strich-Rendering in PDFlibRenderer.pas behoben. SetPen wendet nun die aktuelle Canvas-Transformations-Skala auf PDF-Linienbreiten an, bevor Picasso aufgerufen wird, was übergroße oder untergroße Striche auf Pfaden verhindert, deren Koordinaten bereits transformiert wurden. Dies behebt Type 3 Glyph-Umrisse, die als dicke, unregelmäßige Blöcke rendern könnten.
- Type 3 Font CharProc d0/d1-Behandlung im Inhaltsstrom-Parser behoben. d0 verbraucht nun seine zwei Breite-Operanden, und d1 verbraucht seine sechs Breite/Bounding-Box-Operanden, bevor spätere Zeichenbefehle ausgeführt werden, was verhindert, dass veraltete Operanden Glyph- oder Pfad-Geometrie korrumpieren.