Versionshinweise zur PDFium-Komponente für Delphi
Versionshistorie für benutzerrelevante PDFium Delphi Component-Funktionen, Korrekturen, Viewer-Verbesserungen, Dokumenterzeugung, PDF/A-Ausgabe, Rendering und Dokumentationsaktualisierungen
Letztes Release
- Aktuelle Version: 3.137.1; Veröffentlichungsdatum:
Version 3.137.1
Behoben (Fixed)
- OpenSSL-Online-Widerrufsprüfungen erhalten vorherigen CRL-Status, Grund, nativen Fehler und betroffenes Zertifikat, wenn OCSP-Nachweise oder Responder fehlen; genaue Diagnosen abgelaufener CRLs bleiben erhalten
Version 3.137.0
Hinzugefügt (Added)
- Native Free-Pascal/LCL-Builds unterstützen Linux Qt6 und macOS Cocoa mit Plattformschriftauflösung, privatem temporärem Speicher, Dokumentladen, Bearbeitung, Formularen, Speichern und Rendering
- macOS-Keychain-Signatur unterstützt einen anfragelokalen Keychainpfad und begrenzten Offline-Kettenexport mit nativen Free-Pascal-/Delphi-Signatur- und Zeitstempeltransporten
- Paralleles Rendering meldet tatsächlichen Modulpfad, Initialisierungsadresse und Entladeergebnis je Worker und lehnt native Loader ab, die vorhandene PDFium-Images wiederverwenden
Behoben (Fixed)
- Unix-PDFium-Bindungen erhalten LP64-unsigned-long-Callback- und Pufferbreiten, einschließlich eigener Streamlesevorgänge jenseits 4 GiB
- Natives LCL-Rendering beachtet Bitmapbytefolge und Kanallayout und erhält Farben in Cocoa-Ausgabe und Gerätekontextrendering
- Bitmap-, Kachel- und progressives Rendering erhalten transparentes Hintergrundalpha für clNone und clDefault unabhängig von der nativen Seitentransparenzabfrage
- Signatur erkennt Zertifikatsschlüsselalgorithmen korrekt, einschließlich EC; macOS-CMS-Prüfung erhält unabhängige äußere Signatur-/Zeitstempelergebnisse und meldet RSA-PSS-Prüfung explizit als nicht unterstützt
- PAdES-Zeitstempelprüfung verlangt kritische exklusive id-kp-timeStamping-EKU; OpenSSL prüft grundlegende TSA-Ketten ohne fälschlichen S/MIME-Zertifikatszweck
- Atomare Unix-Dateicommits behalten die neue inkrementelle Basis bei Verzeichnissynchronisierungsfehler nach Ersetzung und melden die Ausnahme bereits übernommener Ausgabe sowie unvollständige Dauerhaftigkeit
Geändert (Changed)
- Delphi-POSIX-Futures akzeptieren Standardthreadpriorität und lehnen nicht unterstützte Prioritäten vor Workerstart ab
Version 3.136.0
Hinzugefügt (Added)
- Optionale LittleCMS-ICC-Transformationen und Dokumentfarbkonvertierung nutzen originale Text-, Vektor- und 8-Bit-/16-Bit-Bildkomponenten, erhalten gewählte Sonderfarben und melden nicht unterstützte Inhalte explizit
- Komplexe Schwärzung erhält unterstützten Inhalt in verschachtelten Form XObjects, gefüllten Kurvenpfaden und gedrehten, gespiegelten oder gescherten Bildern mit endlichen Geometriebudgets und detaillierten Entfernungsberichten
- Aktivobjektlesen stellt unabhängige Körper- und komprimierte Objektstreambudgets vor Materialisierung und Decodierung bereit
Sicherheit (Security)
- Schwärzung lehnt Tagged-Ersatztext, XFA, optionale Inhaltsebenen, Textclips und nicht prüfbare Malzustände ab, einschließlich über Inhaltsstreams geteilter Operatoren, damit nicht unterstützte sensible Semantik nicht exportiert wird
Version 3.135.0
Hinzugefügt (Added)
- Annotations-/AcroForm-Widgetvergleich meldet Eigenschaftsänderungen unabhängig von Seitenpixeln, mit stabilen Namen, expliziten Seitenzuordnungen, Mehrdeutigkeitsberichten und Vorher-/Nachher-Overlaygrenzen
- Tabellenzellen unterstützen gemischte Textstile, Bilder mit Alternativtext, optionale seitenübergreifende Spannzellen, Zwischensummen und Fortsetzungslabels unter Erhalt der Tagged-PDF-Beziehungen
Behoben (Fixed)
- Getaggte Layoutgenerierung initialisiert die native Bibliothek vor Fähigkeitsprüfung und kann erste Operation eines neuen Dokumentcontrols sein
- Mehrere Ersetzungen eines Textobjekts werden einmal gegen Originalgrenzen angepasst; die globale horizontale Mindestskalierung wird eingehalten, unnötige Zwischenbearbeitung vermieden
Version 3.134.0
Hinzugefügt (Added)
- Navigationszusammenführung erhält benannte Ziele und interne Links über ausgewählte, umsortierte und wiederholte Seiten mit expliziten Kollisionsregeln und transaktionaler Prüfung
- Textersatz mit Stilerhalt ergänzt geprüfte Quellpläne, unabhängige Vorschauen, native Schriftwiederverwendung, expliziten Fallback, begrenzte horizontale Anpassung und Rollback bei Fehler oder Abbruch
- OpenSSL-Signatur akzeptiert explizit konfigurierte private Schlüssel und Ketten für RSA-PSS, RSA PKCS#1 v1.5 und ECDSA, einschließlich Standardresolver außerhalb Windows
- OpenSSL-Prüfung ergänzt authentifizierte Offline- und begrenzte Online-OCSP-Nachweise, Identitäten fehlgeschlagener Zertifikate und optionale Diagnosen je CMS-Signierer
- Der FPC-macOS-Security.framework-Verifikator meldet Kryptografie, Kettenvertrauen und Widerruf unabhängig mit expliziten Ankern und bereitgestellten OCSP-Nachweisen
Behoben (Fixed)
- URI-Extraktion aus Linkannotationen liefert vollständige native Puffer einschließlich Terminator, damit gültige Ziele korrekt zurückgegeben werden
Version 3.133.0
Hinzugefügt (Added)
- Transaktionale AcroForm-Zusammenführung unterstützt Seitenauswahl, Feldablehnung, Umbenennung, Namespaces und kompatible gemeinsame Text-/Auswahlfelder mit isolierten Ressourcen, Darstellungen und Berechnungsreihenfolge
- Der optionale Barcode-Provider erzeugt Code128, QR, DataMatrix und PDF417 und erkennt Graustufenbilder mit expliziten nativen Abhängigkeiten und endlichen Verarbeitungsbudgets
Behoben (Fixed)
- FormField liest geerbte Elternwerte und übernimmt Textänderungen konsistent zwischen geteilten Widgets, mit persistenten Werten nach Speichern/Wiederöffnen und Schreibschutzprüfung
- Darstellungsregeneration geerbter Textwidgets stellt Elternwerte ohne Schattenwert im Widget wieder her; erfolgreiche Feldzuweisung invalidiert geteilte Seitencaches
Version 3.132.0
Hinzugefügt (Added)
- Optionale Seitenausrichtung erkennt eingefügte, gelöschte und verschobene Seiten mit begrenzten Unicode-Änderungen, verbundenen visuellen Regionen und exportierbaren Vergleichsoverlays
- Transaktionale Navigationszusammenführung erhält Lesezeichenhierarchie, Stile, URI-Aktionen und neu zugeordnete Ziele bei ausgewählten, wiederholten und umsortierten Importen
- Optionales Tesseract-OCR unterstützt explizite Abhängigkeitsdiagnosen, Unicode-Wortgeometrie, Abbruch und Erkennungsbudgets sowie Speicher-/Wiederöffnungsprüfung der Suchtextebene
Sicherheit (Security)
- RSA-PSS-Politik prüft vollständige Signatur- und eingeschränkte Schlüsselparameter und lehnt fehlerhaftes DER sowie inkompatible Hash-, Masken-, Salz- oder Trailerbedingungen ab
Behoben (Fixed)
- Lesezeichenspeicherprüfung lehnt Blätter nicht mehr wegen eines nur für Zweige relevanten Aufklappzustands ab
Version 3.131.0
Hinzugefügt (Added)
- WatermarkStamp akzeptiert Ziel- und Stempel-PDFs, einen Zielseitenbereich und reine Seitennummernausgabe mit proportionaler Platzierung bei gemischten Seitengrößen
- MergePDF zeigt ausgewählte Seiten und Zielintervalle jeder Eingabe vorab und unterstützt einzelne Eingaben zur Seitenextraktion
Behoben (Fixed)
- MergePDF prüft jede Quelle vor Import und stoppt bei unlesbaren Eingaben, ungültigen Bereichen, Importfehlern oder Abbruch, statt unvollständige Zusammenführungen zu speichern
- WatermarkStamp erhält Quell- und Vorlagendateien und speichert Seitennummern zuverlässig auch bei beiden deaktivierten Stempeloverlays
Geändert (Changed)
- Jedes native Demoverzeichnis konzentriert sich auf 22 vollständige Workflows; SecurityAudit und XfdfLab liegen nun in Miscellaneous mit korrigierten Projektpfaden und Navigation
Entfernt (Removed)
- Der feste AnnotationsLab-Durchlauf entfällt; Annotationserstellung, Prüfung und Austausch bleiben durch XFDF-/Inhaltsextraktionsbeispiele und API-Tests abgedeckt
Version 3.130.0
Geändert (Changed)
- Jedes native Demo-Verzeichnis ist jetzt um 24 vollständige Workflows herum organisiert, mit neun fokussierten API-Themen unter Miscellaneous und einer separaten Orientierungshilfe für die Wahl der ersten Demo
- Fokussierte Beispiele für Annotationen, Barrierefreiheit, Schriften, Navigation, Text-Export, Seitenbild-Rendering, Druckvoreinstellungen, Interaktion und XFA bleiben mit eigenem Quellcode und mitgelieferten Eingaben verfügbar
Entfernt (Removed)
- Die minimalen Projekte CJKTextLab und RTLTextLab wurden entfernt; Unicode-Autoring bleibt in CreatePDF verfügbar, und die APIs für geformten Text sind nach wie vor in der API-Referenz dokumentiert
Behoben (Fixed)
- Der Barrierefreiheit-API-Walkthrough in C++Builder scheitert beim Exportieren seines Sprach-Skripts nicht mehr
- Das C++Builder-Annotationsbeispiel verwendet keine falschen Array-Offsets für Highlight-Koordinaten mehr
Version 3.129.0
Geändert (Changed)
- Jedes native Demo ist jetzt in sich geschlossen: Die Sample-Logik ist in die Projekte gewandert, die sie verwenden, die Showcase-PDFs liegen den passenden Ansichts- und Extraktionsprojekten bei, und das Verzeichnis Demo/Shared wurde entfernt
- Offline-Feature-Touren, Live-Vorschauen, editierbare Formulare, gefüllte Berichte, Anhänge, Navigation, Druckvoreinstellungen und die statische XFA-Inspektion bleiben auch dann verfügbar, wenn Projekte einzeln kopiert werden
- FontProperties öffnet jetzt mit bereits angezeigten echten Schrift- und Zeichenmetriken und analysiert auch nach dem Öffnen eines anderen Dokuments sofort das erste Textobjekt
Behoben (Fixed)
- Position und Hintergrund der PDFViewer-Experience-Leiste sind über die nativen Varianten hinweg angeglichen, und FontProperties gibt seine Viewer-Zuordnung vor dem Herunterfahren frei
Version 3.128.0
Hinzugefügt (Added)
- Neu ist ein sechsseitiges Offline-Demo-Showcase mit durchsuchbarem Text, Vektor-Diagrammen, eingebetteten Bildern, einer Tabelle, AcroForm-Feldern, Lesezeichen, Links, Annotationen und Anhängen
- Alle nativen PDFViewer-Varianten bieten jetzt mit einem Klick erreichbare Ansichten für Textsuche, Doppelseiten-Layouts, Nachtlesemodus, Dokument-Inspektion und die Erkundung von Formularen
Geändert (Changed)
- CreatePDF öffnet vor dem Speichern jetzt eine Live-Vorschau mit zwei Seiten, editierbaren Metadaten und Inhaltsoptionen, echten Bild- und Annotationsobjekten sowie einer optionalen Unicode-Seite
- Die fokussierten Beispiele für Ansicht, Suche, Extraktion, Formulare und Navigation öffnen jetzt vorbefüllte Workflows; die Samples für Anhänge, Druckeinstellungen und statisches XFA enthalten echte funktionsbezogene Daten
Behoben (Fixed)
- Viewer-Lifecycle und Fokus-Behandlung laufen jetzt korrekt beim Start, beim Ersetzen des Dokuments, beim Neuaufbau der Vorschau und beim Herunterfahren
- Der Werteditor im Lazarus-FormFill bleibt nicht mehr deaktiviert, nachdem beim Start das erste Feld ausgewählt wurde
- SearchAndSelect bindet sein Dokument jetzt korrekt, und Extraktionsberichte lassen Formularfelder auf späteren Seiten nicht mehr aus und fragen für generierte In-Memory-Samples keine nicht verfügbaren Datei-Header mehr ab
Version 3.127.0
Geändert (Changed)
- Die MultiPageViewer-Demos nutzen jetzt die integrierten Textauswahl- und Zwischenablage-APIs des Viewers, halten die Auswahl damit über alle Seitenlayouts hinweg konsistent und lassen den separaten Doppelklick-Auswahlmodus weg
- Die Beispiel-Übersicht ordnet alle 35 Demo-Themen ihren jeweiligen Workflows zu, und die Delphi- und Lazarus-Konsolenbeispiele für Barrierefreiheit, Intake und Preflight teilen sich ihre Pascal-Implementierungen
Hinzugefügt (Added)
- XfdfLab kann das PDF nach dem Import von XFDF speichern: Die Delphi-GUI bietet Save PDF, und die Konsolenvarianten akzeptieren einen expliziten zweiten Ausgabepfad
Behoben (Fixed)
- Die C++Builder- und Lazarus-MultiPageViewer-Demos öffnen ohne nicht unterstützte Formulareigenschaften, und alle MultiPageViewer-Demos trennen die Verbindung zu ihrem Dokument, bevor sie geschlossen werden
- Die Lazarus-Workbench für Barrierefreiheit erzeugt JPEG-Miniaturansichten der Seiten für ihren HTML-Review-Bericht
- Die ExtractImages-Demos erzeugen ein zweiseitiges Sample mit echten eingebetteten Bildobjekten, sodass der Standard-Extraktions-Workflow vier Bilder liefert
- Das XFDF-Round-Trip-Konsolenbeispiel bewahrt Annotationsinhalte und Autorendaten und lehnt kollidierende oder bereits vorhandene PDF-Ausgabepfade ab, bevor die Ausgabe geschrieben wird
Version 3.126.2
Behoben (Fixed)
- Die vollständige XFA-Ansicht funktioniert mit den Standardeinstellungen für die Textauswahl, ersetzt markierten Text bei Tastatureingaben, respektiert schreibgeschützte Felder und deaktivierte Formular-Events und aktualisiert angezeigte Seiten-Handles nach dynamischen Layoutänderungen
- Die Windows-V8-Bibliotheken weisen fehlerhafte XDP-Attribute, doppelte Attribute, ungültige Namespace-Verwendung und nicht zueinander passende XML-Deklarationen zurück, bevor der gespeicherte XFA-Stream verändert wird
Sicherheit (Security)
- Die Signatur-Revisionsanalyse wahrt die Eigentumsrechte an Seiteninhalten, wenn Widgets und Appearance-Objekte denselben Objektgraphen referenzieren; spätere Seitenbearbeitungen werden so nicht mehr als erlaubte Formular- oder Annotationsänderungen unter DocMDP durchgewinkt
- FieldMDP-Sperren bleiben wirksam, wenn ein gesperrtes Feld und eine Annotation sich ein indirektes Wertobjekt teilen
Version 3.126.1
Behoben (Fixed)
- Die dynamische XFA-Neupaginierung aktualisiert
TPdf.PageCountundOnXfaPageCountChangedjetzt nach dem Hinzufügen oder Entfernen von Seiten mit der tatsächlichen Gesamtseitenzahl und hält die Navigation der Host-Anwendung synchron mit dem Formular-Layout - Die aktualisierten Windows-V8-Bibliotheken frischen die Geometrie von Eingabe-Widgets nach dynamischen XFA-Layoutänderungen auf und halten Text und Eingabe-Trefferbereiche ausgerichtet, wenn Felder auf eine andere Seite wandern
Version 3.126.0
Hinzugefügt (Added)
- Die aktualisierten Win32- und Win64-V8-Bibliotheken bewahren beim Speichern unterstützter Single-Stream-XFA-Dokumente XML-Kommentare und Processing Instructions außerhalb der Live-Datasets und Formular-Pakete, einschließlich UTF-8- und UTF-16-Eingaben
Behoben (Fixed)
- Das Speichern von Single-Stream-XFA weist ungültige UTF-8- oder UTF-16-Kodierung, unvollständige Tags, ungültige Entity-Referenzen und fehlerhafte Processing Instructions zurück, statt diese Eingaben still umzuschreiben; nicht unterstützte Konstrukte in Live-Datenpaketen, DTD-Deklarationen und XMLDSig bleiben explizite Speicherfehler
- Kopieren, Ausschneiden und Formular-Einfügen im Viewer versuchen es kurz erneut, wenn ein anderer Thread oder eine andere Anwendung die Windows-Zwischenablage belegt, sodass flüchtige Konflikte abklingen können; ein fehlgeschlagenes Ausschneiden bewahrt weiterhin den ursprünglichen Feldtext
Version 3.125.3
Behoben (Fixed)
- Die aktualisierten gewöhnlichen Win32- und Win64-
pdfium.dll-Bibliotheken melden jetzt einen Fehler, wenn der letzte gepufferte PDF-Schreibvorgang fehlschlägt, passend zur Korrektur, die zuvor in den V8-Bibliotheken ausgeliefert wurde
Version 3.125.2
Behoben (Fixed)
- Die aktualisierten Windows-V8-Bibliotheken bewahren bearbeiteten XFA-Text über das Speichern und erneute Öffnen hinweg, einschließlich leerer Werte, des ursprünglichen Whitespace, von Zeilenumbrüchen und ergänzenden Unicode-Zeichen, für Paket-Arrays und unterstützte Single-Stream-XDP-Dokumente
- XFA-Paket-Exportfehler und das Scheitern des letzten gepufferten Schreibvorgangs melden in den aktualisierten V8-Bibliotheken jetzt einen Speicherfehler, ohne den Änderungszustand des Dokuments zu löschen; Single-Stream-Dokumente mit nicht unterstützten XML-Konstrukten oder XML-Signaturen werden abgelehnt
- Die aktualisierten V8-Bibliotheken bewahren eine von der Host-Anwendung explizit übergebene V8-Plattform und einen explizit übergebenen Isolate über PDFium-Initialisierung und -Zerstörung hinweg
- Ein expliziter Pfad in
LibraryNamewählt jetzt in beiden Engine-Modi genau diese Laufzeit aus, einschließlichEnableV8Engine=True; fehlt der explizite Pfad, schlägt das Laden fehl, statt eine andere mitgelieferte Bibliothek zu laden
Version 3.125.1
Behoben (Fixed)
ValidatePdfFilesParallelbeschädigt die gemeinsam genutzte PDFium-Engine nicht mehr: Worker-Threads haben Dokumente früher parallel geöffnet und geprüft, wodurch manche Dokumente mit Ladefehlern oder Access Violations scheiterten und der Prozess abstürzen oder nachfolgende PDF-Operationen fehlschlagen konnten; der PDFium-Teil jedes Dokuments wird jetzt einzeln nacheinander verarbeitet, während die Regelauswertung weiterhin parallel läuft- Ein Dokument, das sich während der Batch-Validierung nicht öffnen lässt, meldet jetzt den tatsächlichen Ladefehler statt der nachfolgenden Meldung „kein aktives PDF-Dokument“
Version 3.125.0
Hinzugefügt (Added)
PdfLibraryConfigurationSupportErrormeldet, ob sich eineTPdfLibraryConfigurationmit einem PDFium-Build mit den angegebenen Skia- und Fontations-Fähigkeiten verwenden lässt
Behoben (Fixed)
- Wer
prpSkiaauf einem PDFium-Build ohne Skia anfordert oderpfbpFontationsauf einem Build ohne Fontations, bekommt beim Laden der Bibliothek jetzt eineEPdfError, statt gegen einen nativen Check zu laufen, der den Prozess stoppte oder PDFium halb initialisiert zurückließ; die Konfiguration bleibt unversiegelt, sodass die Anwendung andere Einstellungen wählen und erneut laden kann
Version 3.124.0
Geändert (Changed)
- Die PAdES-Validierung wendet jetzt die Signatur-Suites aus ETSI TS 119 312 auf RSA-Signaturen an, statt jeden RSA-Algorithmus zu akzeptieren:
AlgorithmPolicyStatusistpcsInvalidfür MD2-, MD4- und MD5-Digests undpcsIndeterminatefür SHA-1 und 112-Bit-Digests wie SHA-224, die für die aktuelle Validierung nicht mehr als vereinbart gelten; SHA-1-Signaturen behalten ihr Gesamt-Ergebnis zur Integrität und werden zur Prüfung markiert, statt abgelehnt zu werden - Eine RSA-Signatur, deren
digestAlgorithmvom Digest abweicht, den ihr Signaturalgorithmus festlegt (zum Beispiel sha256WithRSAEncryption über einen SHA-1-Digest), wird jetzt alsppeiSignatureAlgorithmMismatchgemeldet und scheitert an der Integrität, ebenso RSA-Signaturalgorithmen auf einem Nicht-RSA-Signer-Schlüssel - RSA-Signaturen, deren Signer-Zertifikat nicht gefunden wird, melden jetzt
pcsIndeterminate, passend zum bestehenden ECDSA-Verhalten; unbekannte Digests und nicht signierende RSA-OIDs meldenpcsUnsupported - RSA-PKCS-#1-v1.5-Signaturen mit SHA3-Digests und der alte OIW-Bezeichner sha1WithRSASignature werden jetzt als RSA erkannt
Version 3.123.0
Hinzugefügt (Added)
PdfNativeRendererTypemeldet, welchen Renderer eineTPdfRendererPreferencefür einen bestimmten PDFium-Build auswählt, wobeiprpDefaultfür Skia-aktivierte Laufzeiten zu Skia auflöst und andernfalls zu AGG
Behoben (Fixed)
- Das Aktivieren von
BrotliEnabledoderIsolatePerDocumentinConfigurePdfLibraryschaltet das Rendering nicht mehr von Skia auf AGG um, wenn die Renderer-Präferenz aufprpDefaultsteht; die mitgelieferten Skia-aktivierten Laufzeiten behalten jetzt ihren Standard-Renderer, sodass die Seitenausgabe sich mit diesen unabhängigen Optionen nicht mehr ändert
Version 3.122.2
Behoben (Fixed)
- Free-Pascal- und Lazarus-Builds übergeben Dateinamen und Passwörter jetzt in jedem Ladepfad (Datei, Speicher, eigener Stream und progressives Laden) als UTF-8 an PDFium, sodass Dokumente in Ordnern mit chinesischen, japanischen oder anderen Nicht-ASCII-Namen und verschlüsselte Dokumente mit Nicht-ASCII-Passwörtern geöffnet werden, auch wenn das Programm den Lazarus-UTF-8-Stringmodus nicht verwendet
Version 3.122.1
Behoben (Fixed)
LastLoadReportwird jetzt bei jedem fehlgeschlagenen Laden ersetzt: ein fehlgeschlagenesActive:= True, das die Komponente ohne Ausnahme inaktiv lässt, und fehlgeschlagene einfacheLoadDocument- oderLoadCustomDocument-Aufrufe meldenplsFailedmit dem Fehlertext, sodass Batch-Code, der einTPdfwiederverwendet, nicht mehr die vorherige Datei als geladen angezeigt bekommt- Die Hilfeseite zu
Activebeschreibt jetzt das tatsächliche Verhalten im Fehlerfall (keine Ausnahme, Komponente bleibt inaktiv, Details inLastLoadReport) und dassFileNamenur geändert werden kann, während die Komponente inaktiv ist
Version 3.122.0
Hinzugefügt (Added)
EPdfAssocFilesErrorinFPdfAssocFilesmeldet, warumInjectAssociateFilesnicht injizieren konnte: kein lesbarer Trailer oder Katalog in der Quelle oder eineTargetPage, die negativ ist oder eine nicht existierende Seite benennt; der Zielstream bleibt unverändert
Geändert (Changed)
SaveAsWithAssociateFilesundSaveAsWithAssociateFilesToStreamlösen jetzt eineEPdfErroraus, wennTAssocFilesOptions.TargetPageaußerhalb von0..PageCountliegt; solche Werte wurden zuvor an den Dokumentkatalog angehängt, entgegen dem dokumentierten Verhalten
Behoben (Fixed)
SaveAsWithAssociateFilesundSaveAsWithAssociateFilesToStreamgeben jetztFalsezurück, wenn sich das gespeicherte Dokument für die Injektion nicht parsen lässt, statt es unverändert zu schreiben und ohne die angeforderten DateienTruezurückzugebenSaveAsWithAssociateFileskürzt eine vorhandene Zieldatei nicht mehr, bevor die Ausgabe erzeugt wurde; ein abgelehntes oder fehlgeschlagenes Speichern lässt die Datei unangetastet
Version 3.121.4
Behoben (Fixed)
- Associated Files auf Seitenebene (
TAssocFilesOptions.TargetPage) hängen jetzt an der Seite, die diese Position in der Seitenreihenfolge des Dokuments einnimmt; Dateien konnten zuvor auf einer anderen Seite landen, wenn Seitenobjekte in der Datei in einer anderen Reihenfolge gespeichert waren, als sie angezeigt werden, etwa nachdem Seiten neu sortiert oder eingefügt wurden
Version 3.121.3
Behoben (Fixed)
- Mit
SaveAsWithAssociateFilesgespeicherte Associated Files bewahren chinesische, japanische und andere Nicht-ASCII-Dateinamen und -Beschreibungen jetzt intakt:/UFund/Descwerden als Unicode-PDF-Textstrings geschrieben, statt über die ANSI-Systemcodepage konvertiert (Delphi) oder als rohe UTF-8-Bytes ausgegeben zu werden (Free Pascal) - Der alte
/F-Dateiname ist jetzt immer portables druckbares ASCII, mit Nicht-ASCII-Zeichen ersetzt durch_, sodass Reader, die/Fmit ihrer eigenen Codepage dekodieren, keinen Mojibake mehr anzeigen
Version 3.121.2
Behoben (Fixed)
- Associated Files kodieren MIME-Typen jetzt als gültige PDF-Namen, sodass Werte wie
text/plainkeine fehlerhaften Embedded-File-Dictionarys mehr erzeugen oder die PDF/A-3-Validierung verhindern
Version 3.121.1
Behoben (Fixed)
- Das Lesen einer Annotation samt Zurückschreiben von Änderungen legt keine leeren Rollover- und Down-Appearance-Streams mehr an, wenn diese Streams fehlen; die PDF/A-Anforderungen an das Erscheinungsbild von Annotationen bleiben so gewahrt
Version 3.121.0
Hinzugefügt (Added)
- Die OpenSSL-CMS-Verifikation kann bei aktiviertem
OnlineRetrievalAIA-Zwischenzertifikate und CRLs über HTTP(S) nachladen, mit gemeinsam genutzten Grenzen für Timeout, Anfragen und Antwortgröße; heruntergeladene Zertifikate bleiben nicht vertrauenswürdig, bis die konfigurierte Trust Chain sie validiert - Der Online-Abruf nutzt unter Windows WinHTTP und unter FPC Unix ein vorhandenes libcurl, bewahrt die HTTPS-Zertifikatsvalidierung und macht nicht unterstützte Transportkonfigurationen über die bestehenden Capability-Diagnosen sichtbar
Behoben (Fixed)
- Der klassische Cross-Reference-Rebuild allokiert seine Ausgabetabelle einmal und füllt die Objekt-Slots direkt, vermeidet bei großen lückenhaften Objektnummern quadratischen Aufwand und behält dabei die Parser-Ressourcengrenzen und die neuesten Objektgenerationen bei
- Die PDF/X-1a-Ausgabe verlangt ein strukturell gültiges ICC-v2-Druckerprofil mit CMYK, statt stillschweigend das RGB-Standardprofil einzubetten; ungültige Profile scheitern, bevor eine vorhandene Zieldatei zum Ersetzen geöffnet wird
- Die PDF/X-1a-Validierung prüft das eingebettete Profil und seine Deklaration mit vier Farbkomponenten, und Preflight-Berichte erkennen ungültige Output-Profile; Standard-Output-Condition-Labels folgen dem gelieferten Profil, während explizite Labels des Aufrufers erhalten bleiben
Version 3.120.4
Behoben (Fixed)
- Der Batch-Modus der Tabellenerkennung-Demos verarbeitet wieder jedes PDF im Ordner: Die gemeinsam genutzte Dokumentinstanz blieb über die Dateien hinweg aktiv, daher lösten die zweite und alle folgenden Dateien einen Zuweisungsfehler aus und wurden als fehlgeschlagen gemeldet; jedes Dokument bekommt jetzt seine eigene Instanz in den Delphi-, Lazarus- und C++Builder-Editionen
- Das Beispieldokument des Watermark-Demos behält seine Seiten in Erstellungsreihenfolge (1, 2, 3, 4), statt die erste Seite per Insert-at-Index-Aufruf ans Ende zu rotieren
- Die XFA- und XFDF-Demos melden ein fehlgeschlagenes Dokument-Öffnen als Meldung statt als unbehandelte Exception, das Attachments-Demo kann ein neues Dokument starten, während bereits eines geladen ist, und der Lazarus-Viewer gibt die Bitmap frei, die er speichert
- Das Delphi-Print-Demo wendet jetzt die Regler für Ausrichtung, Duplex, Graustufen, Qualität und DPI auf den Druckauftrag an, respektiert die im Druckdialog gewählte Kopienanzahl, überspringt Seiten, deren Rendering fehlschlägt, und stellt die Vorschau nach dem Drucken wieder her
- Interaktive Demos, deren Loader Öffnungsfehler schluckt, zeigen keinen irreführenden Geladen-Zustand mehr, Extraktions-Ausgabedateien tragen ein UTF-8-BOM, die CJK- und RTL-Konsolen-Demos schalten die Konsole vor dem Ausgeben von extrahiertem Text auf UTF-8 um, und die Confidence-Eingabe parst Dezimalwerte unabhängig vom System-Locale
- Der PAdES-Zeitstempel-Test stellt jetzt tatsächlich sicher, dass der Validator nach der Signaturzeitstempel-Injektion Level B-T erreicht, mit einem in sich konsistenten ByteRange-Testdokument
- API-Coverage- und PDF/A-Tests werten einen Ladefehler nicht mehr als Environment-Skip, wenn pdfium.dll geladen ist, und ein neuer Regressionstest deckt das Entschlüsseln von Dokumenten ab, deren String-Werte von Third-Party-Writern als Literal Strings serialisiert werden
Version 3.120.3
Behoben (Fixed)
EncryptDocumentBytesverwirft bei inkrementell gespeicherten Quell-PDFs nicht mehr jedes Objekt der Basisrevision: Die klassische Cross-Reference-Kette wird jetzt über/Prevvom neuesten zum ältesten Stand durchwandert, neuere Einträge gewinnen, eine bereits verschlüsselte Quelle wird zurückgewiesen, einstream-Schlüsselwort muss ein Dictionary abschließen, bevor es als Stream-Daten behandelt wird, und die Ausdehnung des letzten Objekts wird über die Quell-xref begrenzt statt über das ersteendobjin seinen Bytes- Verschlüsselte Dokumente, deren String-Werte als Literal Strings serialisiert sind und die von Third-Party-Writern stammen, lassen sich jetzt entschlüsseln, statt mit einem Authentifizierungsfehler zu scheitern
- Die PDF/E-Marker-Injektion vergibt für das synthetisierte Info-Dictionary nicht mehr dieselbe Objektnummer wie für den eingebetteten ICC-Profil-Stream, wenn der Quell-Trailer kein
/Infohat; der inkrementelle xref verwies/DestOutputProfilesonst aufs falsche Objekt - Die PDF/X-Validierung vergleicht den XMP-Wert
pdfxid:GTS_PDFXVersionohne umgebenden Whitespace, sodass zulässigerweise gepolstertes XMP in Elementform keinen falschen Info-Mismatch mehr meldet - Die PDF/UA-Validierung erkennt
pdfuaid:partals XMP in Attributform, dekomprimiert Object Streams vor ihren Byte-Scans wie die übrigen Standards-Validierer, prüft das Verschlüsselungsbit/Pjetzt auch bei Cross-Reference-Stream-Dokumenten und verlangt einen nicht leerendc:title-Wert; die Marker-Injektion schreibt keinen leeren Title-Eintrag mehr - Die PDF/VT-Marker-Injektion sammelt und schreibt jedes Seitenobjekt nicht mehr doppelt, wenn die Quelle eine kaputte DPart-Hierarchie mitbringt, die die Validierung scheitern ließ, nachdem die Seitenliste bereits gefüllt war
- Signieren auf PAdES-Level B-T oder höher ohne
TsaUrllöst jetzt eine Exception aus, statt stillschweigend eine B-B-Signatur zu erzeugen, und der B-LTA-Dokumentzeitstempel leitet seine eigene Nonce ab, statt die des Aufrufers erneut zu senden - Die CMS-Signaturzeitstempel-Injektion weist Multi-Signer-Eingaben zurück, statt jeden SignerInfo nach dem ersten stillschweigend fallen zu lassen; die SignedData-Version wird mit einer subjectKeyIdentifier-sid zu 3,
certReq FALSEentfällt gemäß DER aus den Zeitstempel-Anfragen, und ein WinHTTP-Transportfehler mitten im Body wird als Transportfehler gemeldet statt als abgeschnittener DER-Body - Das Einbetten von Systemfonts löst für die angeforderte Familie den tatsächlichen TrueType-Collection-Face auf und extrahiert ihn als eigenständigen Font; der nicht erste Face einer
.ttc(etwa NSimSun) wird also nicht mehr als Face 0 eingebettet und gerendert BuildToUnicodeCMappaart Glyphs korrekt mit Surrogate-Pair-Zeichen und gibt Supplement-Mappings als bfchar-Einträge aus, statt jeden Eintrag hinter dem ersten Astral-Zeichen zu verschieben- Shaped-Text-, CID-Text- und OCR-Einfügung prüfen das Seiten-Einfügebnis, bevor das Objekt für den Rollback registriert wird; eine fehlgeschlagene Einfügung kann daher kein dangling Handle mehr hinterlassen, das doppelt zerstört würde
- Die Stream-Schlüsselwort-Erkennung im Kompressor und in der ToUnicode-Reparatur akzeptiert das alleinstehende CR-Zeilenende, das ISO 32000-1 in 7.3.8.1 erlaubt
Geändert (Changed)
- Der Trial-Win64x-C++Builder-Paketbuild entfernt eine veraltete COFF-
PDFiumPas.libaus einem früheren Full-Build, damit die beiden Import-Library-Varianten nicht zusammen ausgeliefert werden können; der FULL-Installer schließt rein lokale Entwicklungsdateien (packagefiles.xml, Statusdokumente) aus seinem Catch-all aus, und die Demo-Builds nach der Installation pinnen das IDE-Root über die VariablePDFiumPas_BDS_ROOT, die die Build-Skripte tatsächlich lesen
Version 3.120.2
Behoben (Fixed)
- Mit
AddText,SetText, Layout-Generierung und der OCR-Suchschicht platzierter Text extrahiert jetzt mit exakt seinen Code Points, aus dem live Dokument ebenso wie nach dem Speichern: Unter dem aktuellen PDFium-Build kommen Leerzeichen nicht mehr als U+00A0 zurück und Bindestriche nicht mehr als U+00AD - Systemfonts werden als CID-Fonts eingebettet, die über den Code Point schlüsseln, mit einer CID je Unicode-Zeichen und einer expliziten
CIDToGIDMap; ein Glyph, den mehrere Zeichen teilen (Leerzeichen und geschütztes Leerzeichen, Bindestrich und weicher Bindestrich, Omega und Ohm-Zeichen), läuft dadurch in jedem Viewer treu für jedes davon durch. Fonts ohne Unicode-cmap-Subtable bleiben auf dem bisherigen Einbettungspfad
Version 3.120.1
Behoben (Fixed)
- Mit Subset-Fonts gespeicherte Dokumente verfälschen ihren extrahierten Text beim erneuten Laden nicht mehr: Die ToUnicode-CMap, die pdfium serialisiert, konnte eine CID auf zwei verschiedene Code Points mappen (Leerzeichen als U+00A0, Bindestriche als U+00AD); jeder vollständige Speichervorgang repariert diese widersprüchlichen Mappings jetzt in place und lässt die CMap-Struktur byte-identisch, sodass PDFium-Reader, MuPDF und qpdf allesamt die Originalzeichen extrahieren
- Inkrementelle Speicherungen, Sparse Updates und Cross-Reference-Stream-Dokumente schreibt die Reparatur nie um, sie gehen unverändert durch; Dateien ohne widersprüchliches Mapping werden Byte für Byte kopiert
- Die eingecheckte Test-Fixture
sample.pdfwurde über den reparierten Speicherpfad neu erzeugt, und die Load-Policy-Tests finden xref-Einträge jetzt dynamisch, statt Fixture-Offsets hart zu kodieren
Version 3.120.0
Hinzugefügt (Added)
- Lesezeichen melden ihren Outline-Textstyle:
TBookmark.Styleträgt die Kursiv- und Fett-Flags, gelesen über die neueFPDFBookmark_GetStyle-Binding, undBookmarkStyleFeaturesAvailableverrät, ob die geladene pdfium.dll sie exportiert - Anhänge legen ihre Associated-File-Relationship nach PDF 2.0 offen:
AttachmentRelationship[], das FeldRelationshipvonTPdfAttachmentMetadataund vonTPdfAnnotationAttachmentlesen den/AFRelationship-Namen über die neueFPDFAttachment_GetAFRelationship-Binding, abgesichert durchAttachmentRelationshipFeaturesAvailable GetObjectRenderedStrokePatternrastert das Tiling-Pattern, mit dem ein Pfadobjekt seine Kontur streicht, über die neueFPDFPageObj_GetRenderedStrokePattern-Binding in eine Bitmap im Eigentum des Aufrufers;StrokePatternRenderingFeaturesAvailablemeldet den ExportTPdfLibraryConfiguration.IsolatePerDocumentmappt auf das Flagm_IsolatePerDocumentderFPDF_LIBRARY_CONFIGversion 7, damit V8-Builds jedem Dokument sein eigenes Isolate geben können;ConfigurePdfLibraryweist das Flag zusammen mit einem explizitenV8Isolatezurück
Geändert (Changed)
- Alle 476 öffentlichen Exporte der aktuellen PDFium-Header sind gebunden; die drei neuen Einstiegspunkte werden tolerant geladen, sodass ältere pdfium.dll-Installationen weiterarbeiten und die entsprechenden Features leere oder
nil-Ergebnisse liefern
Version 3.119.1
Behoben (Fixed)
- Die Windows-Offline-Trust-Validierung beschränkt auch den Sperrabruf auf gecachte Daten und verhindert implizite CRL- oder OCSP-Netzwerkanfragen, wenn der Online-Abruf deaktiviert ist
- Windows-Sperrfehler bewahren den unabhängigen Chain-Trust-Fehler und legen Sperrgründe und native Diagnosen in PAdES-Ergebnissen und Evidence-Reports offen
Version 3.119.0
Hinzugefügt (Added)
- PAdES-Trust-Validierung und Evidence-Reports legen getrennte Sperrgründe und native Fehler für Dokumentsignaturen und Zeitstempel offen, inklusive JSON-Feldern und angehängten CSV-Spalten
Version 3.118.0
Hinzugefügt (Added)
- CMS-Verifizierungsergebnisse legen
RevocationReasonundRevocationErroroffen, mit OpenSSL-Diagnosen für abgelaufene, nicht verfügbare und ungültige lokale CRLs
Behoben (Fixed)
- OpenSSL meldet explizit gesperrte Zertifikate als ungültig, wenn die Kettenvertrauensprüfung erfolgreich ist und die lokale CRL-Verifikation die Sperrung bestätigt, und bewahrt dabei getrennte Signatur- und Trust-Ergebnisse
Version 3.117.1
Behoben (Fixed)
- Speicherungen mit expliziter Version akzeptieren gültige Mehrseiten-Formulare mit predictor-komprimierten Cross-Reference-Streams, statt fälschlich einen fehlerhaften Cross-Reference-Abschnitt zu melden
Version 3.117.0
Hinzugefügt (Added)
- Die Tabellenerkennung liest nun Rahmen und Schattierungen, die als gefüllte Rechtecke gezeichnet sind: ein gefülltes Rechteck, das nicht dicker als der neue
MaxRulingThickness-Wert ist, wird als Ruling (Tabellenlinie) gewertet, und ein größeres gefülltes Rechteck steuert seine Kanten bei. Tabellen, die aus Word, Google Docs oder Browsern exportiert werden, werden dadurch nun als Liniengitter mit verbundenen Beschriftungszeilen erkannt statt als Bruchstücke aus Leerraum.DetectFilledRulingsschaltet dieses Verhalten ab - Ruling-Koordinaten werden vor dem Zusammensetzen der Gitter innerhalb von
RulingSnapToleranceauf eine gemeinsame Position gerastet, wodurch Rahmenstücke einzelner Zellen, Doppelrahmen und schattierte Zellen mit kleinem Zwischenraum zu einer Tabelle zusammenwachsen - Rulings innerhalb von Form-XObjects nehmen über die kombinierten Objektmatrixen an der Erkennung teil, gesteuert über
IncludeFormXObjects ExtractDocumentTablesverknüpft Fortsetzungsfragmente, die dort enden, wo der Seiteninhalt endet, und dort weiterlaufen, wo der Inhalt der nächsten Seite beginnt — nicht nur Fragmente, die die Seitenränder berühren — und behält eine einzelne überlaufende Zeile als Teil ihrer Kette- TableExtractionLab legt
DetectFilledRulingsin seinem Optionen-Panel in den Delphi-, Lazarus- und C++Builder-Varianten offen
Geändert (Changed)
- Die Leerraum-Erkennung ignoriert Wörter, die bereits zu einem Liniengitter gehören, und verlangt für jede Spaltengrenze einen textfreien Korridor über allen Zeilen, die sie trennt, sodass Blocksatz-Absätze und Aufzählungslisten nicht mehr als Tabellen gemeldet werden
- Ein Fortsetzungskandidat, dessen erste Zeile aus einer einzigen Zelle über die gesamte Breite besteht, wird als neue Tabelle mit eigener Beschriftung behandelt und nicht als Rest der vorherigen
MinRowsakzeptiert bei Liniengittern den Wert 1; die Leerraum-Erkennung behält ihre Untergrenze von zwei Zeilen, und das Standard-Budget fürMaxRulingSegmentssteigt auf 16384, weil Rahmenkästen pro Zelle in weit größerer Zahl ankommen als gezogene Gitterlinien- Zelltext wird zeilenweise aus überlappenden Wortboxen zusammengesetzt, sodass Wörter, deren Glyphboxen unterschiedliche Höhen haben, ihre Reihenfolge von links nach rechts behalten
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Versionsmetadaten melden nun durchgängig Version 3.117.0
Version 3.116.4
Hinzugefügt (Added)
- TableExtractionLab erhält eine Batch-Verarbeitung über Ordner:
Batch folderführtExtractDocumentTablesüber jedes PDF in einem ausgewählten Ordner aus, listet die Tabellenanzahl je Dokument auf, markiert Dokumente ohne Textebene für OCR und sorgt dafür, dass beschädigte oder gesperrte Dateien den Lauf nicht abbrechen Export all CSVschreibt jede erkannte Tabelle als<document>-<n>-page<p>-t<i>.csv— bei Batch-Läufen unter einemtables-Unterordner, bei einer einzelnen Datei neben dem geladenen Dokument- Eine Preset-Auswahl für die Erkennung legt abgestimmte
TPdfTableExtractionOptionsoffen: Default, Compact columns (MinColumnGap4 mitAlignmentTolerance5 für enge Textverarbeitungs-Exporte) und Compact + wide rows (MaxRowGapFactor6 für 1.5-2x Zeilenabstand) - Dokumente, die unter dem Default-Preset keine Tabelle liefern, werden bei der Einzel- wie der Batch-Extraktion einmal mit Compact columns erneut versucht, und Batch-Zeilen geben an, welches Preset das Ergebnis erzeugt hat
Behoben (Fixed)
- Die Batch-Extraktion öffnet jedes Dokument in einer eigenen
TPdf-Instanz, statt eine gemeinsam genutzte Komponente neu zu laden; damit verschwinden stille Ladefehler, die mitten im Ordnerlauf als Fehler inaktiver Komponenten auftauchten
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Versionsmetadaten melden nun durchgängig Version 3.116.4
Version 3.116.3
Geändert (Changed)
- Das TableExtractionLab-Beispiel schreibt sein erzeugtes Beispieldokument in allen drei Toolchains nun als
TableExtractionSample.pdfneben die Demo-Executable, statt es nur im Speicher zu halten; ist der Ordner nicht beschreibbar, fällt das Lab auf das bisherige In-Memory-Verhalten zurück und meldet das in der Statuszeile TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun durchgängig Version 3.116.3
Version 3.116.2
Behoben (Fixed)
- Die Bibliothek ließ sich auf älteren Delphi-Versionen nicht mehr kompilieren. Der 64-Bit-Tick-Helper und die Vertrauenslisten- und Produktions-XML-Codecs holten
GetTickCount64undCP_UTF8aus RTL-Units, die nur neuere Compiler mitbringen, der Reflow-HTML-Writer bettete ein CSS-Stringliteral jenseits der 255-Elemente-Grenze ein, die diese Compiler für ein einzelnes Literal ziehen, und das XFA-Datasets-Merge wies zwischenTBytesund einem schlichten dynamischen Array-Feld zu, was Compiler vor XE7 zurückweisen. Ältere Compiler bindenGetTickCount64nun aus kernel32 und deklarierenCP_UTF8lokal, wenn die RTL es nicht mitbringt, das Stylesheet kommt als aneinandergereihte kurze Literale daher, und die Packet-Nutzdaten werden elementweise kopiert
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun durchgängig Version 3.116.2
Version 3.116.1
Hinzugefügt (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabundDemo\Lazarus\TableExtractionLabmachen die Tabellenerkennung zu einem einzigen Workflow. Das Lab baut ein Beispieldokument mit einer liniierten Tabelle mit verbundenen Kopfzellen, einer anhand von Leerraum ausgerichteten Tabelle ohne Linien und einer langen Tabelle, die über eine Seitengrenze hinweg umbricht, führt dannExtractTablesoderExtractDocumentTablesaus und listet Zeilen, Spalten, Spans, Kopfzeilen-Flags, Erkennungsmodus, Konfidenz und Fortsetzungsgruppen auf- Das Lab exportiert die ausgewählte Tabelle über
TPdfTable.ToCsvundTPdfTable.ToJson, stelltDetectRuledTables,DetectWhitespaceTables,DetectContinuationsundMinConfidenceüber das Optionen-Panel ein und kopiert den vollständigen Bericht in die Zwischenablage TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Versionsmetadaten melden nun durchgängig Version 3.116.1
Version 3.114.21
Behoben (Fixed)
- Die PDF/A-Validierung meldete bei jedem Dokument mit Annotation eine externe Dateireferenz. ISO 19005-1 §6.1.7 verbietet
/F,/FFilterund/FDecodeParmsim Stream-Objekt-Wörterbuch, aber die Prüfung durchsuchte die gesamte Datei nach diesen Namen, und/Fist zugleich der Annotations-Flags-Schlüssel, den §6.5.3 für jede Annotation verlangt. Die Prüfung schaut nun nur noch in Stream-Objekt-Wörterbücher
Version 3.114.20
Behoben (Fixed)
- RSASSA-PSS-Signaturen trugen auf allen drei Signatur-Backends fehlerhafte Algorithmusparameter. RFC 4055 versieht alle vier Felder von RSASSA-PSS-params mit Tags; die Salt-Länge wurde als nackter Integer geschrieben, den ein Parser als Beginn eines anderen Felds liest, und das Trailer-Feld wurde mit ausgegeben, obwohl sein Wert dem Default entspricht, den DER gemäß Vorschrift wegzulassen hat. Ein Verifizierer konnte die Parameter entweder nicht parsen oder fiel auf den 20-Byte-Default-Salt zurück, während die Signatur 32 verwendete — PSS-Signaturen wurden also abgelehnt. PKCS#1 v1.5- und ECDSA-Signaturen waren nicht betroffen
Version 3.114.19
Behoben (Fixed)
- Eine Zeitstempel-Anfrage mit einem anderen Digest als SHA-256 baute einen Request, der diesen Algorithmus deklarierte, aber einen SHA-256-Digest mitbrachte — eine TSA lehnt so etwas ab oder, schlimmer noch, akzeptiert den Zeitstempel genau so, wie er daher kommt. Berechnet wird nur SHA-256, also wird jeder andere Bezeichner jetzt rundweg abgelehnt; ein leerer Bezeichner wählt weiterhin den SHA-256-Default. Das PDF-Viewer-Beispiel für Lazarus und C++Builder band zudem einen Handler zum Aufklappen von Lesezeichen, den seine Form-Datei nennt, sein Code aber nicht definierte — das schlägt fehl, sobald die Form geladen wird; der Handler wurde aus dem Delphi-Beispiel übernommen
Version 3.114.18
Behoben (Fixed)
- Die XFA-Lab- und XFDF-Lab-Beispiele für Delphi sowie das XFA-Lab-Beispiel für Lazarus schlugen beim Start fehl. Jedes baut seine Steuerelemente im Create-Handler seiner Form auf, aber die Form-Ressource war weder vorhanden noch gelinkt, sodass das Erzeugen des Hauptformulars einen Resource-not-found-Fehler warf und der Handler nie lief. Alle drei führen nun die Form-Datei mit, samt der Direktive, die sie einbettet
Version 3.114.17
Behoben (Fixed)
- Zwei native Ressourcen wurden falsch behandelt, wenn eine Operation auf halbem Weg scheiterte. Ein fehlgeschlagener Thumbnail-Render gab die Ziel-Bitmap frei, bevor er den nativen Render schloss, und wenn der Render direkt in die Pixel genau dieser Bitmap zeichnete, las das Teardown danach Speicher, der längst freigegeben war. Eine fehlgeschlagene Bitmap-Allokation in
AddBitmapließ das soeben erzeugte Bildobjekt ohne Besitzer zurück — ohne jeden Weg, es je wieder zu erreichen
Version 3.114.16
Behoben (Fixed)
- Das Lesen von FDF-Text lieferte oberhalb von
0x7Edie falschen Zeichen. Die PDFDocEncoding-Tabelle in ISO 32000-1 Anhang D.2 beginnt bei0x80mit dem Bullet, aber das Mapping setzte sie bei0x7Fan, wodurch der ganze Block bis0x9Fum eine Stelle verschoben war: ein Dagger wurde als Bullet gelesen, ein Gedankenstrich als Auslassungszeichen und so weiter bis hinab zu zcaron, das komplett vom Ende fiel. Der Euro bei0xA0fehlte ebenfalls und kam als geschütztes Leerzeichen zurück. Feldnamen und Feldwerte in importiertem FDF dekodieren jetzt korrekt
Version 3.114.15
Behoben (Fixed)
- Die Vertrauensprüfung eines Dokuments, dessen Trailer oder Catalog sich nicht lesen lässt, schrieb hinter das Ende eines Arrays. Der Compliance-Durchlauf gibt in dem Fall auf, ohne irgendwelche Signaturen zu vermerken, während der anschließend laufende Collector direkt auf dem Bytestream arbeitet und weiterhin Signaturwörterbücher findet — pro gefundenes Wörterbuch landete so ein Eintrag in einem Array, das keinen hielt. Die Anzahl wird jetzt auf das geklemmt, was der Compliance-Durchlauf geliefert hat
Version 3.114.14
Behoben (Fixed)
- Beim Ausführen eines PDF/A-Reparaturplans wurden Schritte angewendet, die der Planer blockiert hatte. Ein Schritt ist blockiert, wenn das Dokument Signaturen trägt, der Schritt sie ungültig machen würde und der Aufrufer das nicht erlaubt hat; der Executor prüfte nur die Sicherheitsstufe des Schritts, die diese Bedingung nicht ausdrückt, sodass einem signierten Dokument durch eine automatische Reparatur die Signaturen verlorengehen konnten, die der Plan bereits verweigert hatte. Blockierte Schritte werden jetzt übersprungen und als übersprungen gezählt
Version 3.114.13
Behoben (Fixed)
- Das Hinzufügen eines Signaturzeitstempels zu einem CMS-Wert, dessen Zertifikatsmenge größer als 127 Bytes war — also jedes echte Zertifikat —, verdarb das Ergebnis. Der Helper, der den Anfang einer verschachtelten Struktur sucht, lief rückwärts über die Längen-Oktette und hielt den letzten für den ersten, sodass der Schnitt weit vor der angeforderten Struktur begann. Die Headerlänge wird jetzt aus der Contentlänge abgeleitet, was DER eindeutig vorschreibt. Die Selbsttests griffen daneben, weil ihre Fixture-Zertifikate klein genug für die Kurzform waren
Version 3.114.12
Behoben (Fixed)
- Signierte Attribute wurden in der Reihenfolge ausgegeben, in der sie gebaut wurden, statt nach ihren Encodings sortiert zu sein, was X.690 §11.6 von einem DER SET OF verlangt. Ein Verifizierer, der die Attributmenge vor dem Verdauen neu encodiert — OpenSSL wie BouncyCastle tun das —, berechnete dadurch einen anderen Digest und meldete eine korrekte PAdES-Signatur als ungültig. Signaturen dieser Bibliothek verifizieren jetzt in diesen Stacks; die Validierung über die Windows-Schicht war nicht betroffen, weil sie die Bytes so verdaut, wie sie ankommen
Version 3.114.11
Behoben (Fixed)
- Ein negativer DER INTEGER, der breiter als zwei Content-Bytes war, wurde mit falschem Wert encodiert. Der Writer emuliert eine arithmetische Verschiebung, indem er nach einer logischen Verschiebung das Vorzeichen wieder einblendet, aber die verwendete Maske setzte jedes Bit über dem Low-Byte statt nur das Byte, das die Verschiebung freigegeben hatte, wodurch der in den verbleibenden Bytes noch gehaltene Betrag überschrieben wurde. Der Wert -100000 wurde so etwa als -34464 encodiert. Noncen von Zeitstempel-Requests und jeder andere vorzeichenbehaftete Integer dieser Größe encodieren jetzt korrekt
Version 3.114.10
Behoben (Fixed)
- Die PDF/A-Validierung meldete den konstanten Alpha-Anteil der Transparenzregel aus ISO 19005-1 §6.4 nie. Der Helper baut seinen Suchschlüssel, indem er einen Solidus voranstellt, und der Aufrufer übergab ebenfalls einen — gesucht wurde also nach
//CAund gefunden wurde nichts. Beide Alpha-Prüfungen akzeptierten außerdem nur die exakten Texte1und1.0, wodurch ein voll deckendes/CA 1.00als Verstoß markiert wurde; ein Wert von eins wird jetzt erkannt, egal wie er geschrieben ist
Version 3.114.9
Behoben (Fixed)
- Die URI-Aktion auf Seitenebene lieferte verstümmelten Text. Der Pfad kommt aus der nativen Schicht als UTF-8-Bytes zurück und wurde direkt in einen Wide-String geschrieben, der die Bytes zu 16-Bit-Codeeinheiten paart und den Rest des Puffers mit dem füllt, was zufällig im Speicher stand.
GetPageActionURIdekodiert die Bytes jetzt so, wie es der Pfad der Aktion auf Dokumentebene bereits tat
Version 3.114.8
Sicherheit (Security)
- Auf Zielen außer Windows stammten die Zufallsbytes hinter jedem Verschlüsselungsschlüssel, Salt und Initialisierungsvektor aus dem Runtime-PRNG, dessen Seed eine Konstante ist, sofern das Programm nicht
Randomizeaufruft. Jeder Prozess erzeugte daher denselben Datei-Verschlüsselungsschlüssel, dieselben/UE- und/OE-Salts, dieselben/Perms-Bytes und dieselben AES-GCM-Noncen — verschlüsselte Ausgabe eines Free-Pascal-Builds unter Linux oder macOS ließ sich damit trivial wiederherstellen, und ein GCM-Nonce wiederholte sich unter festem Schlüssel. Die Bytes kommen jetzt aus/dev/urandom, und ein nicht verfügbarer Kernel-Pool wirft eine Ausnahme, statt zurückzufallen — genau so, wie ein nicht verfügbaresCryptGenRandomes unter Windows bereits tat
Version 3.114.7
Behoben (Fixed)
- Ein fehlerhafter Objektstream konnte die Kompressions- und Reparatur-Einsprungpunkte dazu bringen, hinter das Ende des dekodierten Puffers zu lesen. Die von einem Stream deklarierten Member-Offsets werden jetzt direkt beim Parsen des Headers auf Bereich und aufsteigende Reihenfolge geprüft, eine deklarierte Member-Anzahl, die größer ist als der Header halten kann, wird abgelehnt, bevor überhaupt Speicher reserviert wird, und die Byterange jedes Members wird validiert, bevor sein nachlaufender Whitespace beschnitten wird — nicht erst danach
Version 3.114.6
Behoben (Fixed)
- Das Auslagern von Inline-Bildern erzeugte ein unbrauchbares Bild-XObject. Das Wörterbuch wurde mit einem überzähligen Solidus vor seinem ersten Schlüssel geschrieben, was einen leeren Namen aufmachte und jeden Schlüssel auf den Wert des vorherigen verschob, und die Inline-Abkürzungstabelle mappete Decode auf
Gstatt aufD, wodurch ein/D-Array verworfen und die DeviceGray-Wert-Abkürzung für einen Schlüssel gehalten wurde. Aus einem Content-Stream herausgezogene Bilder tragen jetzt ein wohlgeformtes Wörterbuch und behalten ihr Decode-Array
Version 3.114.5
Behoben (Fixed)
- Der HarfBuzz-Shaper wies Cluster-Längen in Right-to-Left-Runs den falschen Glyphen zu und gab Glyphen, die sich einen Cluster teilen — etwa Diakritika und Ligaturbestandteile —, eine Länge von eins. Die
ClusterLengthjedes Glyphs spannt jetzt vom Beginn seines Clusters bis zum nächsten Cluster in logischer Reihenfolge, in beide Richtungen, sodass das Zeichen-zu-Glyph-Mapping für arabischen und hebräischen Text dem entspricht, was das Uniscribe-Backend meldet
Version 3.114.4
Behoben (Fixed)
- Der libcurl-Zeitstempel-Transport übergab seine numerischen Optionen und las den HTTP-Statuscode als 32-Bit-Werte, während libcurl ein C-
longnimmt und zurückgibt, das unter Linux und macOS 64 Bit breit ist. Die Statusabfrage konnte die vier Bytes neben ihrem Ziel auf dem Stack überschreiben, und Optionswerte hingen davon ab, was zufällig in der oberen Registerhälfte stand. Beide verwenden jetzt dielong-Breite der Plattform, sodassFPdfTsaFpcauf LP64-Zielen sauber funktioniert
Version 3.114.3
Behoben (Fixed)
- Das PKCS#11-Backend kopierte die rohen Bytes eines Token-Objekt-Labels direkt in einen String, was unter Delphi UTF-8-Bytes auf UTF-16-Codeeinheiten landen lässt. Ein über
TPdfPkcs11Options.CertificateLabelausgewähltes Zertifikat konnte daher nie matchen, undEnumerateCertificatesmeldete Zeichensalat fürLabelText. Labels werden jetzt als das UTF-8 dekodiert, das der Standard definiert, und die anC_Loginübergebene PIN wird als UTF-8 encodiert statt über die Host-Codepage verengt, sodass eine Nicht-ASCII-PIN intakt am Token ankommt
Version 3.114.2
Behoben (Fixed)
- Der macOS-Keychain-Signer fragte
SecKeyIsAlgorithmSupportednach der falschen Operation, wenn er entscheiden sollte, ob ein Schlüssel RSASSA-PSS akzeptiert: Die Abfrage nannte die Decrypt- statt der Sign-Operation, die Antwort war also immer Nein, und jede RSA-Signatur fiel stillschweigend auf PKCS#1 v1.5 zurück. Ein Schlüssel, der PSS unterstützt, signiert jetzt mit PSS, wie esTPadesSignerOptions.PaddingSchemeverlangt, und das Operationsargument wird in der Breite übergeben, die das Framework deklariert
Version 3.114.1
Behoben (Fixed)
- Verschachtelte Klammerpaare in Right-to-Left-Text lösten in die falsche Richtung auf. Die UAX #9-Regel BD16 bearbeitet Paare in der Reihenfolge, in der ihre öffnenden Klammern erscheinen, und ein durch N0 aufgelöstes Paar wird zum vorausgehenden starken Kontext für ein Paar, das sich danach öffnet; bearbeitet wurden die Paare stattdessen in der Reihenfolge, in der ihre schließenden Klammern sie abschlossen, sodass ein inneres Paar dem Buchstaben folgen konnte, den es einschließt, statt dem Kontext, den das äußere Paar gesetzt hatte. Text wie ein arabischer oder hebräischer Satz mit einem Klammerausdruck samt verschachtelter Klammer wird jetzt so gesetzt, wie ein Leser es erwartet
Version 3.114.0
Hinzugefügt (Added)
FPdfCryptoSslverifiziert PDF-Signaturen und Zeitstempel-Token über OpenSSL und schließt damit die letzte Plattformlücke in der Signaturvalidierung: Linux hatte überhaupt kein CMS-Verifikations-Backend.ConfigureSslCmsVerifierinstalliert es, libcrypto wird zur Laufzeit per Name aufgelöst, sodass nichts dagegen gelinkt wird, und sowohl die 1.1er- als auch die 3.x-Serie binden- Signatur und Zertifikatskette werden in getrennten Durchläufen bewertet, sodass eine korrekte Signatur unter einer Kette, die keinen Trust-Anker erreicht, als gültige Signatur mit ungültigem Vertrauen gemeldet wird und nicht als kaputte Signatur
ConfigureSslTrustAnchorsfügt dem System-Store DER-Trust-Anker hinzu, undConfigureSslCrlsliefert die CRLs, die eine Sperrprüfung konsultieren darf. Sperrung gilt nur dann als geprüft, wenn tatsächlich eine CRL vorliegt, weil OpenSSL von sich aus keine holt; ohne gelieferte CRLs sagt das Ergebnis unsupported, statt eine ungeprüfte Kette durchzuwinkenSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersionundSslAbiLayoutmelden, was gebunden hat und was nicht, undConfigureSslLibraryPathzeigt dem Backend eine konkrete Bibliothek, wenn die Plattform-Defaults keine finden
Version 3.113.0
Hinzugefügt (Added)
TPdfKeychainCmsVerifierverifiziert PDF-Signaturen und Zeitstempel-Token unter macOS überCMSDecoderund SecTrust, sodass die Signaturvalidierung nicht mehr auf Windows beschränkt ist.ConfigureKeychainCmsVerifierinstalliert ihn, und dieselbe Unit deckt damit beide Hälften der macOS-Unterstützung ab, so wieFPdfCryptoWines für Windows tut- Sperrprüfung wird berücksichtigt: auf Anforderung kommt eine Sperrrichtlinie zur grundlegenden X.509-Richtlinie hinzu, und abgeschalteter Online-Abruf beschränkt die Bewertung auf gecachte Antworten. Fortschritts-Checkpoints feuern für die Phasen Signatur, Kette, Online-Abruf und Sperrprüfung genau so, wie das Windows-Backend sie meldet
KeychainVerificationAvailablemeldet Verifikationsunterstützung getrennt vom Signieren, da beides unterschiedliche Framework-Symbole braucht und das eine vorhanden sein kann, ohne das andere
Version 3.112.0
Hinzugefügt (Added)
FPdfCryptoMacsigniert PAdES mit einer macOS-Keychain-Identität, dem Gegenstück zum Windows-Zertifikatsspeicher: Zertifikat und privater Schlüssel kommen aus der Keychain, die Signatur erzeugtSecKeyCreateSignature— der Schlüssel verlässt den System-Keystore nie.ConfigureKeychainSignerProviderinstalliert ihn, und es muss kein Modul neben der Anwendung ausgerollt werden, wie es ein PKCS#11-Token-Backend bräuchte- Der Signer folgt dem Zertifikat: ein EC-Schlüssel signiert ECDSA, ein RSA-Schlüssel signiert RSASSA-PSS, und wo PSS nicht verfügbar ist - ein älteres macOS oder ein Schlüssel, der es nicht akzeptiert - fällt das Padding auf PKCS#1 v1.5 zurück, und der ausgegebene AlgorithmIdentifier sagt das auch, statt PSS zu behaupten
KeychainMissingSymbolslistet jedes Framework-Symbol auf, das sich nicht auflösen ließ, sodass ein Deployment, das das Backend als unavailable meldet, ein fehlendes Framework von einem Namen unterscheiden kann, den dieses Binding falsch übernommen hat
Version 3.111.0
Hinzugefügt (Added)
ConfigurePadesCmsVerifierinstalliert das CMS-Verifikations-Backend, das der PAdES-Validator verwendet, sodass die Verifikation von Signaturen und Zeitstempeln nicht mehr an Windows gebunden ist.IPdfCmsVerifierdeklariert die beiden Operationen, die ein Backend beantwortet - detached für eine PDF-Signatur, attached für ein Zeitstempel-Token - undPadesCmsVerificationAvailablemeldet, ob überhaupt ein Backend vorhanden ist
Geändert (Changed)
- Die Ergebnis- und Options-Records der Verifikation sind als
TPdfCmsVerify*nachFPdfCryptoumgezogen. DieTWinCmsVerify*-Namen bleiben als Aliase bestehen, bestehender Code läuft also weiter, und ein eingestecktes Backend spricht dieselben Typen wie das Windows-Backend - Das Windows-Verhalten ist unverändert: ohne installierten Verifizierer nutzt es weiterhin CryptoAPI, und die Fortschritts-Checkpoints, Sperr-Optionen und nativen Fehlercodes sind dieselben. Wo kein Backend antwortet, meldet jedes Urteil unsupported, statt ungeprüft durchzugehen
Version 3.110.0
Hinzugefügt (Added)
FPdfPkcs11signiert PAdES mit einem Schlüssel, der im PKCS#11-Token bleibt.ConfigurePkcs11SignerProviderinstalliert ihn als Signatur-Backend, das Modul wird zur Laufzeit per Pfad geladen, sodass nichts gelinkt wird, und derselbe Code bedient Windows, Linux und macOS. Die Token-Aufzählung, die das InterfaceIPdfPkcs11SignerProviderdeklariert, ist gleich mitimplementiert: Slots, Tokens und die Zertifikate, die jedes davon hält- Signieren abseits von Windows braucht für den Normalfall keinen vom Host gelieferten Provider mehr: ein Token-Modul plus
TPdfPkcs11Optionsgenügt. RSA PKCS#1 v1.5, RSASSA-PSS und ECDSA entstehen alle durch das Token FPdfSha1bringt SHA-1 für genau einen Zweck mit: das Auffinden eines Zertifikats über den Thumbprint, denTPadesSignerOptionsträgt. Windows hat das innerhalb des Zertifikatsspeichers aufgelöst; ein Token gibt Zertifikatsbytes zurück und lässt das Matchen beim Aufrufer. Es ist kein Signatur-Digest, und der PAdES-Stack signiert durchgängig weiter mit SHA-256
Geändert (Changed)
- Die Zertifikats-DER-Helper, die eine Public-Key-Algorithmus-OID lesen, Issuer und Seriennummer extrahieren und eine rohe ECDSA-Signatur neu verpacken, sind vom Windows-Backend in
FPdfCmsumgezogen, wo jedes Signatur-Backend sie erreicht
Version 3.109.0
Geändert (Changed)
- Der native Bibliotheks-Loader ist nicht mehr auf Windows beschränkt.
LibraryNamehat je nach Zielpdfium.dll,libpdfium.sooderlibpdfium.dylibals Default, der V8-Build wird unter dem passenden Namen gesucht, und Laden und Symbol-Binding laufen unter Free Pascal über den portablen Loader. Das Windows-Verhalten ist unverändert, inklusive des Win32- und Win64-Deployment-Layouts und der Architektur-Mismatch-Diagnose - Deployment-Verzeichnisse auf anderen Zielen folgen der
<cpu>-<os>-Schreibweise, die die kompilierten Units bereits verwenden, sodassDLLs/x86_64-linux/libpdfium.sonebenLib/FPC/x86_64-linuxliegt. Der Systemverzeichnis-Fallback bleibt Windows-only; anderswo deckt der Suchpfad des Loaders das ab
Version 3.108.0
Hinzugefügt (Added)
TPdfHarfBuzzTextShapersetzt bidirektionalen Text und komplexe Schriften auf Free-Pascal-Zielen, die kein Uniscribe haben. Er löst die Embedding-Levels mitFPdfBidi, segmentiert Runs nach Skript, formt jeden Run mit libharfbuzz und ordnet die Runs in visueller Reihenfolge an. Installiert wird er überConfigureTextShaper; libharfbuzz wird zur Laufzeit aufgelöst, undHarfBuzzAvailablemeldet ehrlich, wenn es fehlt- Der Shaper enumeriert keine Schriften. Uniscribe liest die Schrift-Binary aus einem Device Context, wofür es kein portables Äquivalent gibt; der Host übergibt daher einen
TPdfFontDataResolver, der einen Schriftnamen auf die Bytes der Schriftdatei mappt, und lässt diese Policy dort, wo sie hingehört
Version 3.107.0
Hinzugefügt (Added)
FPdfBidiimplementiert den Unicode-Bidirektional-Algorithmus (UAX #9) in reinem Pascal:PdfResolveBidiLevelsliefert ein Embedding-Level pro UTF-16-Codeeinheit,PdfBidiVisualOrderwendet die L2-Neuordnung an, undPdfBidiClassOflegt die Bidi_Class eines Codepunkts offen. Die Regeln P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 und L1-L2 sind abgedeckt, inklusive Isolate-Initiatoren und BD16-Klammerpaaren- Die Unit ist compiler- und plattformneutral — genau das erlaubt es, bidirektionalen Text dort zu setzen, wo Uniscribe nicht verfügbar ist. Eine Shaping-Engine löst die Glyphen für einen Run auf, dessen Richtung bereits bekannt ist; dieses Bauteil hier ist also das, was zuerst über die Richtung entscheiden muss
Version 3.106.0
Hinzugefügt (Added)
ConfigureTextShaperinstalliert das Text-Shaping-Backend, durch das die gesamte Bibliothek ihre Textarbeit leitet, samtActiveTextShaper,ActiveTextShaperNameundClearTextShaper. SowohlShapePdfTextals auchTPdf.AddShapedTextverwenden nun den installierten Shaper, statt direkt einen Uniscribe-Shaper zu erzeugen — so kann ein Host seine eigene Engine liefern und ein Test eine deterministische
Geändert (Changed)
FPdfTextShapingkompiliert auf Zielen außer Windows: Das Uniscribe-Backend ist nun die Plattform-Standard-Implementierung statt der einzigen und bleibt auf den Windows-Build beschränkt. Wo kein Backend verfügbar ist, melden die Shaping-Einsprungpunkte das, statt die Kompilierung scheitern zu lassen
Version 3.105.1
Sicherheit (Security)
- Eine Zeitstempelantwort wird nun auf beiden Transportwegen auf 4 MB begrenzt. Zuvor konnte eine TSA, die einfach weitersendete, den Empfangspuffer unbegrenzt wachsen lassen und einen Signaturaufruf in unbegrenztes Speicherwachstum umwandeln
Version 3.105.0
Hinzugefügt (Added)
- Die RFC-3161-Zeitstempelung funktioniert auf Free-Pascal-Zielen außer Windows: das neue libcurl-Backend sendet die TimeStampReq und liest die TimeStampResp, sodass
PadesTsaAvailableTrue meldet und PAdES B-T, B-LT und B-LTA dort Token abrufen können. libcurl wird zur Laufzeit aufgelöst und ist keine Abhängigkeit zur Build-Zeit; fehlt es, meldet das Backend die Nichtverfügbarkeit genauso wie das WinHttp-Backend. Windows nutzt weiterhin WinHttp und ist nicht betroffen - Das Signieren auf diesen Zielen benötigt weiterhin Schlüsselmaterial, das die Bibliothek nicht besitzt: Stellen Sie es über
ConfigurePadesSignerProvidermit einemIPadesSignerProviderbereit (oderIPdfPkcs11SignerProviderfür tokenbasierte Schlüssel), daFPdfCryptoWinnur unter Windows verfügbar ist
Version 3.104.1
Hinzugefügt (Added)
- Das XFA-Inspection-Lab-Beispiel ist nun auch für Lazarus verfügbar, sodass die XFA-Fähigkeitstests, die Paketauflistung, der Paketexport und der
OnXfaRuntimeMissing-Fallback auch über den LCL-Build ausgeübt werden können
Version 3.104.0
Geändert (Changed)
- Die Bibliothek kompiliert auf Free Pascal 3.2 frei von vermeidbaren Diagnosen: das interne Timing liest den Millisekunden-Tick über
GetTickCount64statt über den veralteten 32-Bit-Aufruf, die veralteten SSE-Control-Word-Accessoren wurden durchGetMXCSRundSetMXCSRersetzt, die Offset-Basis des Inhalts-Fingerprints ist nun explizit typisiert und löst daher keine Bereichsprüfung zur Kompilierzeit mehr aus, und Scanline-Adressen werden beim Prüfen einer Bitmap auf Top-down-Layout als vorzeichenlose Zeiger verglichen
Version 3.103.1
Behoben (Fixed)
- Dokumentmetadaten, die in XMP übernommen werden, behalten ihre Nicht-ASCII-Zeichen unter Free Pascal bei: Titel, Autoren, Themen, Stichwörter und Erstellernamen, die an
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRundSaveAsPdfVTübergeben werden, werden nun über die String-Codepage konvertiert statt byteweise kopiert, sodass das Metadaten-Paket wie von ISO 19005-1 6.7.2 gefordert gültiges UTF-8 bleibt, selbst wenn das Wirtsprogramm nicht auf einer UTF-8-Codepage läuft - Der XFDF-Export, Produktionsmetadaten-Roundtrips und das XML-Parsing von Vertrauenslisten verwenden dieselbe codepage-korrekte Konvertierung, sodass Text, der zwischen
TBytesundstringwechselt, nicht mehr von der Codepage des Wirtsprogramms abhängt
Version 3.103.0
Hinzugefügt (Added)
TPdfEuropeanTrustedListanalysiert authentifizierte europäische Vertrauenslisten, lädt per Prüfsumme gesicherte Caches über denselben Authentifikator neu, akzeptiert vom Aufrufer bereitgestellte Update-Quellen, legt die aktuellen Trust-Anker offen und bewertet qualifizierte Signaturdienste zu einem angeforderten ValidierungszeitpunktTPadesTrustValidationOptions.QualifiedTrustEvaluatorwendet eine Offline-Richtlinie für qualifiziertes Vertrauen auf jeden validierten Unterzeichner an, ohne dem PAdES-Validator Netzwerkzugriff hinzuzufügen
Version 3.102.0
Hinzugefügt (Added)
BeginIncrementalSaveundCommitIncrementalSavehängen nun auch an AES-256-verschlüsselten Dokumenten authentifizierte Revisionen an und bewahren dabei die ursprüngliche/Encrypt-Referenz, Sicherheitsparameter, exakte Objektgenerationen und vorherige Bytes
Geändert (Changed)
- Die Datei-Commit-Überladung schreibt nun dauerhaft zurück, öffnet eine Seitendatei im selben Verzeichnis strikt neu, prüft ihre Revisionsgrenze und ersetzt das Ziel atomar, wobei die Sitzung nach jedem Fehlschlag zurückgerollt wird
Version 3.101.0
Geändert (Changed)
SaveAsRedactedbewahrt nun sichere Anteile teilweise schneidender Texte, rechteckiger Pfade und achsenparalleler Bilder und entfernt anschließend Ressourcennamen, die von Seite, Form-XObject, Pattern, Appearance und verschachtelten Ressourcenbereichen nicht mehr referenziert werden
Version 3.100.0
Geändert (Changed)
OptimizeImageswählt nun Box-, bilineare, bikubische, Lanczos- oder Bilevel-Resampling-Verfahren anhand von Skalierung, Inhaltsklasse, gemessenem Detailreichtum und vom Aufrufer vorgegebener Qualität, mit alpha-bewusster Filterung und striktem Arbeitsspeicher-Budget
Version 3.99.0
Hinzugefügt (Added)
GraftPdfAcroFormimportiert hierarchische AcroForm-Felder, Widgets, Appearances, Berechnungsreihenfolgen, Standardressourcen, Aktionen und Werte über explizite Seitenzuordnungen und KollisionsrichtlinienTPdfCrossDocumentGraftMapverwendet importierte indirekte Objekte anhand der Quellidentität wieder und bewahrt dabei Zyklen, gemeinsame Referenzen, exakte Quellgenerationen und transaktionale Fehlersemantik
Version 3.98.0
Hinzugefügt (Added)
TPdfOutlineEditorerzeugt, verschiebt, löscht, formatiert, expandiert und zielt Lesezeichen-Elemente neu aus, ordnet explizite Ziele über Seitenplan-Ergebnisse um und hängt eine unabhängig verifizierte inkrementelle Revision an
Version 3.97.0
Hinzugefügt (Added)
TPdfTreeEditorliest, validiert, aktualisiert, balanciert, teilt, zusammenführt, serialisiert und speichert beliebige PDF-NameTree- und NumberTree-Strukturen inkrementell und bewahrt dabei wiederverwendbare indirekte Referenzen und rohe Eintragswerte
Version 3.96.0
Hinzugefügt (Added)
TPdfParserResourceBudgetstellt eine threadsichere Prozessrichtlinie für Rekursion, Tokens, Objekte, dekodierte Bytes, Erweiterungsquote, Allokation und Deadlines über eigene PDF-Parser hinweg bereit, mit unveränderlichen Snapshots pro Operation und konfigurierbaren Standards
Version 3.95.0
Geändert (Changed)
ValidatePdfXprüft nun aktive PDF/X-Wörterbücher, Metadaten, OutputIntents, Schriften, verbotene Funktionen, Transparenz, Farbräume und Seitenboxen über begrenzte Sparse-Lesevorgänge in unverschlüsselten Dokumenten mit gültigem Xref
Version 3.94.0
Geändert (Changed)
ValidatePdfRprüft nun aktive PDF/R-Wörterbücher, Seiten, Bildfilter, Metadaten und Footer-Marker über begrenzte Sparse- und Fenstervorgänge in unverschlüsselten Dokumenten mit gültigem Xref
Version 3.93.0
Geändert (Changed)
ValidatePdfEprüft nun aktive PDF/E-Wörterbücher, Metadaten, OutputIntents, Formulare und verbotene Funktionen über begrenzte Sparse-Lesevorgänge in Dokumenten mit gültigem Xref
Version 3.92.0
Geändert (Changed)
ValidatePdfVTführt nun erweiterte Analysen von Recurring-XObject-Gültigkeitsbereich, Sichtbarkeit, Kapselung und verschachtelter Form-Verwendung über begrenzte Sparse-Lesevorgänge in Dokumenten mit gültigem Xref durch
Version 3.91.0
Hinzugefügt (Added)
TPdfSparseDictionaryReaderkann die aktive Generation eines Objekts auflösen und einen direkten Stream unter einer vom Aufrufer vorgegebenen Bytegrenze dekodieren
Geändert (Changed)
ValidatePdfVTverwendet nun begrenzte Sparse-Lesevorgänge für PDF/VT-Prüfungen von Metadaten, DPart, OutputIntent, Info, Seiten und gewöhnlichen Wörterbüchern auf dem normalen Pfad mit gültigem Xref
Version 3.90.0
Hinzugefügt (Added)
TPdfSparseDictionaryReaderhält einen Sparse-Xref- und Objektstream-Index für wiederholte begrenzte Lesevorgänge indirekter Objektwörterbücher offen
Geändert (Changed)
InjectPdfVTMarkersvalidiert und bewahrt nun eine vorhandene PDF/VT-DPart-Hierarchie mit begrenzten Quelllesevorgängen, während fehlerhafte Hierarchien weiter über den Wiederaufbau-Fallback laufen
Version 3.89.0
Hinzugefügt (Added)
ReadPdfSparsePageDictionariesliefert Seitenobjekt-Identitäten und begrenzte Wörterbuch-Bytes in Seitenbaum-Reihenfolge über den Sparse-Objektindex
Geändert (Changed)
InjectPdfVTMarkerssynthetisiert nun die PDF/VT-DPart-Hierarchie und hängt Marker-Objekte mit begrenzten Quelllesevorgängen an, wenn das gespeicherte PDF noch keine DPart-Hierarchie enthält
Version 3.88.0
Hinzugefügt (Added)
ReadPdfSparseCatalogSubDictliest ein direktes oder indirektes Katalog-Unterwörterbuch über den Sparse-Objektindex und wird von der PDF/UA-Marker-Injektion fürMarkInfoundViewerPreferencesverwendet
Geändert (Changed)
InjectPdfUaMarkerslöstMarkInfoundViewerPreferencesdes Katalogs nun über Sparse-Nachschlagevorgänge auf und hängt die PDF/UA-Revision mit begrenzten Quelllesevorgängen auf dem normalen Xref-Pfad an
Version 3.87.0
Hinzugefügt (Added)
AppendPdfSparseUpdatestreamt eine Sparse-Revision in ein gespeichertes PDF: Quellbytes unverändert, vom Aufrufer bereitgestellte Objektkörper an aufgezeichneten Offsets und einen einzelnen inkrementellen Xref-/Trailer-Block, verkettet über/PrevNormalizePageViewRectnormalisiert zwei abgebildete Seitenraum-Ecken in das seitenseitig begrenzte sichtbare Rechteck oder meldet, dass nichts der Seite sichtbar ist- Die PDF/E-Marker-Injektion erzeugt ein frisches Info-Objekt mit
/ISO_PDFEVersion, wenn das Quelldokument kein Info-Wörterbuch besitzt
Geändert (Changed)
- Die PDF/E-, PDF/X- und PDF/R-Marker-Injektion löst Katalog, Info und Trailer nun über Sparse-Nachschlagevorgänge auf und hängt Revisionen über
AppendPdfSparseUpdatemit begrenzten Quelllesevorgängen auf dem normalen Xref-Pfad an - Der Formularausfüllungs-Callback
FFI_GetPageViewRectmeldet nun den im zugeordnetenTPdfViewtatsächlich sichtbaren Teil der Seite statt stets der ganzen Seitenbox und fällt bei kopflosen Dokumenten auf die Seitenabmessungen zurück TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun durchgängig Version 3.87.0
Behoben (Fixed)
- Kontrollpunkte von Pfadsegmenten, die seit der
FPDFPath_GetBezierControlPoints-Bindung offengelegt wurden, wurden nie befüllt: Der native Export antwortet nur für den Endpunkt-Index jedes kubischen Segments mit drei Einträgen, daher erfolgt die Abfrage nun einmal pro Kurve und alle drei Einträge tragen die Kontrollpunkte der Kurve
Version 3.86.0
Hinzugefügt (Added)
ReadPdfSparseRevisionInfolegt begrenzte Fakten zu neuester Revision, Katalog, Verschlüsselung, Dokument-ID und Tagged-Struktur für Stream-Postprozessoren offenComposePdfSparseUpdateIdbewahrt Dokument-Identifikatoren für inkrementelle Updates oder leitet sie her, ohne das vollständige Quell-PDF zu materialisieren
Geändert (Changed)
InjectPdfAMarkerslöst Katalog und Trailer nun über Sparse-Nachschlagevorgänge auf, kopiert große Eingaben in begrenzten Blöcken und hängt die PDF/A-Revision an, ohne auf dem normalen Xref-Pfad ein Byte-Array in Quellgröße zu allokieren- Die PDF/A-Marker-Injektion bewahrt den klassischen oder Xref-Stream-Ausgabestil, Katalog- und Info-Generationen, Trailer-Identifikatoren, das Verschlüsselungsablehnungsverhalten und die Level-A-Degrading-Regeln
Version 3.85.0
Hinzugefügt (Added)
SanitiseActiveContentPdfStreamakzeptiert einen Arbeitsbereich im Besitz des Aufrufers für eigene begrenzte oder festplattenbasierte Speicherung
Geändert (Changed)
- Die Bereinigung aktiver Inhalte aktualisiert Katalog und Trailer nun über Sparse-Nachschlagevorgänge, begrenzte Parser-Fenster und Kopieren fester Größenbereiche, statt das vollständige PDF auf dem normalen Xref-Pfad in ein einziges Byte-Array zu lesen
TPdf.SaveAsSanitisedwendetSaveMemoryLimitundSaveTemporaryDirectoryauf seinen Bereinigungs-Arbeitsbereich an und meldet seine Auslagerungsdiagnosen
Behoben (Fixed)
StripMetadata=Trueentfernt nun eine Trailer-/Info-Referenz, selbst wenn der Katalog keinen/Metadata-Eintrag besitzt
Version 3.84.0
Geändert (Changed)
TPdf.PdfVersionverwendet nun den PDFium-Parser-Zustand überFPDF_GetFileVersionwieder, statt das vollständige Quell-PDF neu zu parsen- Versionsabfragen lesen höchstens den acht Byte großen PDF-Header, um zu verhindern, dass eine fehlerhafte Katalogdeklaration die effektive Version herabstuft
Version 3.83.0
Geändert (Changed)
PageLabelledPdfStreamlöst den Katalog nun über begrenzte Stream-Fenster und den Sparse-Lazy-Objektindex auf und aktualisiert ihn- Die Seitenbeschriftungs-Ausgabe kopiert große Quell-PDFs in Bereichen fester Größe, statt auf dem normalen Xref-Pfad ein vollständiges Dokument-Byte-Array zu allokieren
Version 3.82.0
Geändert (Changed)
ApplyDefaultOpenActionliest klassische, Xref-Stream-, Hybrid- und Objektstream-Revisionen nun über einen Sparse-Lazy-Objektindex, einschließlich Dokumenten mit sehr hohen Objektnummern- Die Verarbeitung der Standard-OpenAction verwendet Fenster fester Größe und begrenztes Bereichskopieren, statt das vollständige PDF in ein einziges Byte-Array zu laden
Version 3.81.0
Hinzugefügt (Added)
PostProcessSavedPdfakzeptiert drei positionierbare Arbeitsbereiche im Besitz des Aufrufers für eigene Speicherobergrenzen und festplattenbasierte Verarbeitung
Geändert (Changed)
TPdf.SaveAswendetSaveMemoryLimitundSaveTemporaryDirectoryauf jeden Post-Verarbeitungs-Arbeitsbereich gespeicherter PDFs an und schließt deren Auslagerungen in Diagnosen ein- Die native inkrementelle Xref-Stream-Reparatur verwendet Fenster fester Größe für Dateiende und Wörterbuch mit begrenztem Bereichskopieren, statt ganzer Datei-Byte-Arrays und wiederholter Neuallokationen der vollständigen Datei
Version 3.80.0
Hinzugefügt (Added)
ReadAttachmentMetadataerfasst Anhangsnamen, Beschreibungen, MIME-Subtypen, dekodierte Größen und Lesbarkeit in einer begrenzten nativen AufzählungExtractAttachmentsToStreamsschreibt einen Stapel in Streams im Besitz des Aufrufers mit Bytegrenzen pro Datei und insgesamt, konfigurierbaren Schreibblöcken, Abbruch und Ergebnissen pro Element
Geändert (Changed)
- Die Stapel-Extraktion hält höchstens einen dekodierten Anhang im Speicher von PDFium Delphi Component, statt jede Nutzlast des Stapels zu materialisieren
Version 3.79.0
Hinzugefügt (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, nutzungsartenspezifische Abfragen und Telemetrie koordinieren den vorgehaltenen Cache-Speicher über ein threadsicheres globales LRU-Byte-BudgetTPdfTileCacheund der prozessweite Systemschrift-Cache können einem vom Aufrufer gewählten Governor mit exakter Bitmap- und Schriftbyte-Bilanzierung beitreten
Geändert (Changed)
- Geparste Seitenszenen, Vorschaubilder, Strukturdaten, Text-Snapshots und Seitenobjekt-Snapshots konkurrieren nun unter einem Standard-Budget von 256 MiB pro
TPdfund behalten dabei ihre bestehenden Eintragsanzahlgrenzen - Aktive Seitenszenen bleiben bis zum Abschluss des Renderings reserviert, und opake native Seitenszenen verwenden eine explizite geschätzte Belastung, da PDFium keine konfigurierbare Gesamt-Cache-Byte-API bereitstellt
Version 3.78.0
Hinzugefügt (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlanundTPdf.GeneratePagedLayoutstreamen Layout-Befehle in vom Aufrufer gewählten positionierbaren Speicher und materialisieren jeweils eine Seite
Geändert (Changed)
- Große erzeugte Layouts können Befehle in einen temporären Speicher auslagern, einen konfigurierbaren LRU-Seitencache vorhalten, nicht zusammenhängende Kopf- und Fußsegmente wiederherstellen und umgebrochenen Text nach jedem Flusselement freigeben
Version 3.77.0
Hinzugefügt (Added)
TPdfLayoutTable, Zeilen, Zellen und Tabellenoptionen ergänzen seitenübergreifende Tabellen mit aufgelösten Rasterspuren, Beschriftungen, wiederholten Kopfzeilen, teilbaren Körperzeilen, Links und konfigurierbaren Rahmen
Geändert (Changed)
- Erzeugte Tagged-Tabellen bewahren eine durchgängige Table-/TR-/TH-/TD-Struktur über Seiten hinweg, halten zeilenübergreifende Gruppen atomar und ordnen Datenzellen automatisch Kopf-IDs zu
Version 3.76.0
Hinzugefügt (Added)
TPdfLayoutConstraintsundSetLastItemConstraintsergänzen in erzeugten Layouts Zusammenhalt, Zusammenhalt mit dem nächsten Element, physischen Seitenumbruch davor/danach und konfigurierbare Steuerung von Witwen-/Waisenzeilen
Geändert (Changed)
BuildPlanverwendet jedes Umbruch-Textergebnis für Seitenumbruchvorhersage und Befehlsausgabe wieder, sodass Keep-with-next keine Textmessung wiederholt
Version 3.75.0
Hinzugefügt (Added)
TPdf.InspectPdfUaUnicodeCoveragemeldet begrenzte Nachweise auf Objektebene für direkte Unicode-Zuordnungen,ActualText-Ersetzungen, Zuordnungsfehler, fehlende Unicode-Werte und unaufgelöste Quellobjekte
Geändert (Changed)
TPdf.ValidatePdfUaverwendet nun eine einzelne objektbezogene Zeichenscan-Prüfung wieder, die Artifact- und generierte Zeichen ausnimmt und verhindert, dass dasActualTexteines Textobjekts benachbarte Inhalte verdeckt
Version 3.74.0
Geändert (Changed)
ValidatePdfUaPageContentTaggingundTPdf.ValidatePdfUamelden nunpvuaiArtifactInStructureTree, wenn ein Artifact-Seitenobjekt von einer Strukturbaum-MCID beansprucht wird, einschließlich pfadbasierter Seitenumbruch-Artefakte- Das PDF/UA-Scannen von Seiteninhalten bricht nun erst ab, wenn sowohl ungetaggte echte Inhalte als auch ungültige Artifact-Aufnahme erkannt wurden, und bewahrt so seitenübergreifende Abdeckung ohne Wiederholung abgeschlossener Prüfungen
Version 3.73.0
Hinzugefügt (Added)
TPdf.InspectPdfUaLanguageCoveragemeldet begrenzte Nachweise für Seitenobjekte und Strukturzeichenketten zu natürlichsprachigen Bereichen, einschließlich effektiver Sprache, Deklarationsquelle, MCID, Strukturindex und TextauszügenResolvePdfUaEffectiveLanguagelöst Marked-Content-, Strukturvorfahrten- und Katalog-Sprachdeklarationen mit expliziten Gültigkeitsnachweisen auf
Geändert (Changed)
TPdf.ValidatePdfUameldet nunpvuaiNaturalLanguageUncovered, wenn Nicht-Arifact-Texte oder Barrierefreiheits-Zeichenketten keine gültige effektive/Lang-Deklaration besitzen
Version 3.72.0
Hinzugefügt (Added)
TPdf.InspectPdfAMetadatameldet typisierte Äquivalenznachweise pro Feld für alle acht ISO-19005-1-Zuordnungen von Info zu XMP, einschließlich expliziter Leerwerte und DatumsparsfehlernTPdf.NormalizePdfAMetadatarepariert nur abweichende zugeordnete XMP-Eigenschaften und bewahrt dabei nicht betroffene Namensräume sowie nicht standardmäßige Sprachalternativen
Geändert (Changed)
TPdf.ValidatePdfAmeldet nunpvaiInfoXmpValueMismatch, wenn mit PDFium dekodierte Info-Werte nach Unicode- oder zeitzonenbewusstem Datumsvergleich von korrekt typisierten XMP-Werten abweichen
Version 3.71.0
Hinzugefügt (Added)
InspectPdfVT2sStreamliefert Nachweise zu Druckbedingungen für jeden PDF/VT-MIME-Teil, einschließlich OutputIntent-Identität, eingebetteter oder MIME-Profil-Herkunft, ICC-Hashes und Header-Fakten sowie DPart-Seiten- und DatensatzzahlenFPdfIccProfilebietet begrenzte Inspektion von ICC-Header und Tag-Tabelle mit Unterstützung für MD5, SHA-256, Farbraum, Version, Geräteklasse, Profil-ID und mehrsprachige Profilbeschreibung
Geändert (Changed)
- Die PDF/VT-2s-Validierung löst frühere ICC-MIME-Anhänge nun über
DestOutputProfileRef-URL-Dateispezifikationen auf und prüftCheckSum,ICCVersion,ProfileCS,ProfileName, Geräteklassen und zulässige Prozessfarbräume - Alle PDF/VT-Teile verlangen nun einen maßgeblichen
GTS_PDFX-OutputIntent, zur PDF/X-Basis passende eingebettete oder externe Profilpakete und dieselbe charakterisierte Druckbedingung, während reine PDF/X-Anhänge außerhalb von PDF/VT-Vergleichen bleiben - Die PDF/VT-2-Validierung einzelner Dateien erkennt
DestOutputProfileRefnun als externes Zielfarbprofil an, statt es als fehlend zu melden
Version 3.70.0
Geändert (Changed)
- Die PDF/VT-Validierung prüft
GTS_Scope,GTS_XID,GTS_EnvundGTS_Encapsulatednun direkt an jedem XObject, statt zuzulassen, dass nahegelegene oder verschachtelte Wörterbücher Hinweisanforderungen erfüllen - Der
Record-Gültigkeitsbereich löstRecordLevelnun aus dem indirektenDPartRoot-Wörterbuch auf, während derStream-Bereich in PDF/VT-1-Dateien abgelehnt wird - Dekodierte Inhaltsstreams von Seiten und Form-XObjects prüfen nun
Do-Ressourcensichtbarkeit,SingleUse-Vorkommenszahlen und Empfängerdatensatz-Zugehörigkeit über effektiv geerbte Ressourcen und die DPart-Hierarchie - Encapsulated XObjects prüfen nun boolesche Form, empfohlenen Gültigkeitsbereich, Image-
Intent, isolierte Transparenzgruppen, Blending-Farbräume sowie direkte oder verschachtelte Optional-Content-Abhängigkeiten
Version 3.69.0
Geändert (Changed)
- Die PAdES-Validierung lehnt doppelte
Contents-,ByteRange-,SubFilter-,Filter- undType-Einträge nun ab, statt den parsergewählten Wert zu akzeptieren - Die Signaturerkennung verwendet nun einen streambewussten linearen Wörterbuchscan, erkennt maskierte PDF-Namenstokens und lässt sich nicht durch ein geschlossenes verschachteltes Wörterbuch vor dem echten
ByteRangeumleiten - Die Validierung der Signatur-
ByteRangeverlangt nun, dass die ausgenommene Lücke exakt zum direkten hexadezimalenContents-Token passt, und erlaubt weiterhin spätere inkrementelle Revisionen - Signaturwörterbücher verlangen nun genau einen namenwertigen
Filterund erzwingen konsistente Kombinationen ausSig- oderDocTimeStamp-Typ und Subfilter
Version 3.68.0
Hinzugefügt (Added)
TPdf.BuildPadesEvidenceReportkorreliert PDFium-Signaturfakten, CMS-Richtlinien, Vertrauens- und Zeitstempelstatus, Zertifikatspfad-Hashes, DSS/VRI-Abdeckung und Entscheidungen späterer Revisionen für jede SignaturTPadesEvidenceReportexportiert begrenzte Mehrfachsignatur-Nachweise als JSON oder CSV und meldet Quell-, Signatur-, DSS-, Revisions- und Kürzungstelemetrie
Geändert (Changed)
- Die PAdES-Vertrauensvalidierung zeichnet nun SHA-256-Identitäten für das Unterzeichnerzertifikat und den geordneten Windows-Zertifikatspfad auf und bewahrt dabei standardmäßig die Offline-Validierung
- Die Nachweisgenerierung verwendet eine einzeln vorgehaltene Quellbyte-Erfassung über Compliance-, Vertrauens-, DSS- und Revisionsanalysen hinweg wieder, statt das Original-PDF für jede Stufe in einen neuen Stream zu kopieren
Version 3.67.0
Hinzugefügt (Added)
TPadesSignatureFieldOptionserzeugt konfigurierbare Signaturfeldnamen, erforderliche Seed-Werte, Grund- und Rechtsbestätigungslisten, akzeptable Unterzeichnerzertifikate und Feldsperren- Lokales und Remote-Signieren kann Genehmigungs- oder Zertifizierungssignaturen mit den ISO-32000-1-Transformationen
FieldMDPundDocMDPerzeugen
Geändert (Changed)
- Zertifizierungssignaturen bewahren vorhandene Katalogberechtigungen und registrieren die neue Signatur über
/Perms /DocMDP
Version 3.66.0
Hinzugefügt (Added)
RenderPageBandedToStreamschreibt PNG- oder TIFF-Ausgaben direkt in einen Aufrufer-Stream mit konfigurierbarer Bandhöhe, PNG-Kompression und Ausgabe-BytegrenzenRenderPageBandedToEncoderspeist sequenzielle Seitenbänder in vom Aufrufer definierte Codecs und meldet Band-, Zeilen-, Speicher-, Abschluss- und Ausgabetelemetrie
Behoben (Fixed)
RenderPageBandedbewahrt nun die Rendergeometrie der ganzen Seite und schneidet jedes angeforderte Band zu, statt die vollständige Seite in jedes Band umzuskalieren
Version 3.65.0
Hinzugefügt (Added)
TPdfParallelRenderReportmeldet nun Quellgröße, Spitzenwert des erfassten Speichers, Speicher-Backend und Art der gemeinsamen Basis
Geändert (Changed)
RenderPagesParallelteilt die erfasste Quelle über unveränderlichen Speicher, eine schreibgeschützte Dateizuordnung oderFPDF_LoadCustomDocument-Direktzugriff, statt ein zweites Byte-Array für das Gesamtdokument zu allokieren- Ausgelagerte Parallel-Rendering-Quellen bleiben unter
SaveMemoryLimitund erfordern kein Neuladen des vollständigen PDFs in adressierbaren Prozessspeicher mehr
Version 3.64.0
Hinzugefügt (Added)
ImportImposedbietet nun eine Überladung, dieTPdfImpositionExecutionReportmit Zählungen für native Importe, eindeutige Quellen, leere Slots, XObject-Vorlagen, Formularobjekte, Inhalts-Generierungen und Ausgabeseiten zurückgibt
Geändert (Changed)
- Die Ausrichtung ohne Geometrie sendet jede geordnete Quellseite durch einen einzigen
FPDF_ImportPagesByIndex-Aufruf, bevor leere Seiten eingefügt und native N-up-Kompositionen erzeugt werden - Die Ausrichtung mit eigener Geometrie verwendet pro eindeutiger Quellseite eine native XObject-Vorlage wieder, liest zwischengespeicherte Seitenmetriken ohne Änderung der Quellseite und allokiert den exakten Plan-Speicher vorab
Version 3.63.0
Hinzugefügt (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactionundRollbackPageObjectEditTransactiongruppieren native Seitenobjekt-Änderungen in einem atomaren seitenbezogenen Stapel mit validiertem Snapshot-RollbackPageObjectEditTransactionStatusmeldet die gebundene Seite, den Geändert-Zustand, die Anzahl erfolgreicher Änderungen und die Inhalts-Generierungsanzahl
Geändert (Changed)
- Festgeschriebene Objektstapel rufen
FPDFPage_GenerateContentnun einmal auf statt einmal pro Einfügungs-, Entfernungs-, Transformations-, Eigenschafts-, Mark-, Anmerkungsobjekt- oder Appearance-Änderung - Speichern, Seitenwechsel, Seitenlöschung, verschachtelte Bearbeitungstransaktionen und fehlgeschlagene native Einfügungs- oder Anmerkungsaktualisierungen werden abgelehnt, bevor verzögerte Inhalte verloren gehen können
Version 3.62.0
Hinzugefügt (Added)
ReadPageObjectsSnapshoterfasst Seitenobjekt-Fakten im Besitz des Aufrufers mit Budgets für Objekte, Pfade, Beschneidungen, Marks, Texte, Zeichenketten und DeadlinesPageObjectsSnapshotbietet revisionsbewusste LRU-Wiederverwendung mit konfigurierbarer Kapazität sowie Belegungs-, Treffer- und Fehlertelemetrie
Geändert (Changed)
PageComplexityverwendet nun den unveränderlichen Seitenobjekt-Snapshot wieder, statt native Objektaufzählungs-, Transparenz-, Pfad- und Bildabfragen zu wiederholen
Version 3.61.0
Hinzugefügt (Added)
TPdflegt nun einen vereinheitlichten Vorschaubild-LRU für eingebettete und gerenderte Vorschauen offen, mit konfigurierbaren Eintrags- und Byteobergrenzen sowie Treffer-, Fehler-, Verwerfungs-, Belegungs- und RevisionstelemetrieRenderPageThumbnailakzeptiert Drehung, Renderoptionen, Hintergrundfarbe undTPdfColorSchemeund bewahrt dabei den Bitmap-Vertrag des Aufrufers
Geändert (Changed)
- Wiederholte Vorschaubild-Extraktion und -Rendering verwenden native PDFium-Ergebnisse über Schlüssel für Revision, Seite, Quelle, Größe, Drehung, Flags, Hintergrund und Farbschema wieder, einschließlich zwischengespeicherter Abwesenheit optionaler eingebetteter Vorschaubilder
TPdfThumbnailViewsynchronisiert seinen Bitmap-Cache sichtbarer Seiten mit den Vorschaubild-Revisionen des Dokuments, sodass Bearbeitungen keine veralteten Vorschauen hinterlassen können
Version 3.60.0
Hinzugefügt (Added)
ReadTextPageSnapshoterfasst Unicode, UTF-16-Zuordnungen, Zeichengeometrie und -stil sowie normalisierte Textobjekt-Metadaten in einem Durchgang mit expliziten Budgets für Zeichen, Objekte, Schriftnamen und DeadlinesTextPageSnapshotstellt tiefe Kopien im Besitz des Aufrufers über einen konfigurierbaren revisionsbewussten LRU mit Kapazitäts-, Zähl-, Treffer- und Fehlertelemetrie bereit
Geändert (Changed)
GetStructuredTextundGetTextInReadingOrderim physischen Layout verwenden nun denselben Text-Snapshot wieder und wenden eine O(n log n)-Geometriesortierung an
Behoben (Fixed)
- Kleine Text- und Struktur-Snapshot-Caches verwerfen nun die älteste Seite, während neue Daten unter dem angeforderten Seitenindex gespeichert werden, und verhindern so seitenübergreifendes Cache-Aliasing
Version 3.59.0
Hinzugefügt (Added)
LifecycleActionPolicywählt deaktivierte, nur explizite oder kompatible automatische Ausführung von PDF-Dokument- und Seiten-LebenszyklusaktionenExecuteDocumentLifecycleActionlegt Dokument-JavaScript-, Open-, Close-, Save- und Print-Aktionen offen, währendExecutePageLifecycleActionSeiten-Open- und Close-Aktionen ausführt, ohnePageNumberzu ändern
Geändert (Changed)
- Kopflose Seitenladungen erhalten nun dieselben automatischen Seiten-Open- und Close-Aktionen wie Viewer-gesteuerte Ladungen, wobei temporäre Seiten unter der Render-Sperre wiederverwendet oder freigegeben werden
Version 3.58.0
Hinzugefügt (Added)
ReadStructureElementsundVisitStructureElementsbieten iterative Durchquerung der Tagged-Struktur mit expliziten Tiefen-, Element-, Attribut- und Zeitbudgets sowie detailliertem AbschlussstatusStructureElementsForPagelegt Eins-basierte Seitensnapshots offen, ohnePageNumberzu ändern, gestützt durch einen konfigurierbaren revisionsbewussten LRU-Cache mit Treffer-, Fehler- und Zähltelemetrie
Geändert (Changed)
- Barrierefreiheits-, Reflow-, Validierungs- und Viewer-Verbraucher verwenden nun Struktur-Snapshots des Aufrufers wieder, bis eine relevante Dokument- oder Seitenbearbeitung sie ungültig macht
Version 3.57.0
Hinzugefügt (Added)
- Vollständige native Formular-Host-Callbacks bieten nun lebensdauersichere Lazy-Seitenhandles, Cursor-Routing der Interaktionsansicht, Wertänderungsbenachrichtigungen, Rechtecke markierten Texts, URI-Ereignisse und GoTo-Zielereignisse
FormHostCallbacksCompletemeldet die Callback-Bereitschaft, währendFormSelectionRectsundClearFormSelectionRectsbegrenzte Auswahlgeometrie im Seitenraum offenlegen
Behoben (Fixed)
- XFA-Callbacks für die aktuelle Seite übersetzen nun korrekt zwischen PDFiums nullbasierten Seitenindizes und der einsbasierten
PageNumberder Komponente - AcroForm- und XFA-URI-Callbacks bewahren nun rohe URI-Bytes und verlangen vor jedem externen Start eine explizite Host-Freigabe
Version 3.56.0
Hinzugefügt (Added)
- Indizierte
PageMetrics-Snapshots legen Abmessungen, Drehung, Beschriftung, Transparenz und die fünf Standard-Seitenboxen einer Seite offen, ohne die aktive Seite zu wechseln
Geändert (Changed)
- Wiederholte Seitenmetadaten-Lesevorgänge verwenden einen automatisch ungültig gemachten nativen Snapshot-Cache wieder und reduzieren Seitenöffnungen in Vorschaubild-, Preflight- und Dokumentanalyse-Workloads
Version 3.55.0
Hinzugefügt (Added)
- Die Pfadinspektion legt exakte kubische Bézier-Kontrollpunkte offen, wenn der geladene PDFium-Build
FPDFPath_GetBezierControlPointsbereitstellt, mit optionaler Fähigkeitsermittlung für ältere DLLs FormFieldTypeAtPoint,TPdfView.FormFieldTypeAtund indizierteFontFlags-Eigenschaften legen native Formular- und Schriftfakten ohne rohe Handles offenTPdf.Signaturesliefert alle nativen Signaturinhalte, ByteRanges, Subfilter, Gründe, Zeitpunkte und Berechtigungen in einem Snapshot im Besitz des Aufrufers
Geändert (Changed)
- Prüfungen auf Formularfeld-Vorhandensein verwenden nun direktes natives Punkt-Hittesting, statt Anmerkungs-Handles zu öffnen und zu schließen
Behoben (Fixed)
- Die PDF/E-1-Validierung erlaubt nun gewöhnliche AcroForm-Felder, eingebettete Dateien und FileAttachment-Anmerkungen und meldet zugleich präzise AcroForm-
/XFAder obersten Ebene und/NeedAppearances true, einschließlich indirekter und Objektstream-Werte
Version 3.54.0
Hinzugefügt (Added)
FPdfProductionergänzt gemessene Multi-Codec-Bildauswahl, Farb- und Schriftverarbeitungs-Backends, SVG-Pfade, formatierte Ersetzungspläne, transaktionale XFA-Paket-Updates, Barcode-Vektoren, Portfolio-Modelle und sichere RichMedia-ExtraktionFPdfStandardsExecutionergänzt Messwertformatierung und GeoPDF-Konvertierung, transaktionale PDF/A-Reparatur, PDF/UA-2-Pläne, externe Mehrfarbprofile, historische DSS- und VRI-Nachweise, DPart-Abfragen, tiefgehende PDF/E-Fakten und PDF/R-Streifen mit festem SpeicherTPdf.ImportImposedsetzt begrenzte N-up- und Broschürenpläne über native N-up- oder Seiten-XObject-Pfade mit exakter Steg-, Beschnitt- und Creep-Geometrie um, währendTPdf.CompareWithsemantische, geometrische und tolerante Pixelunterschiede meldet- Die PAdES-Signatur unterstützt jetzt einsteckbare Pfadvalidatoren und HSM-Provider, signaturangehängtes PDF MAC,
cms-algorithm-protectionund Offline-Dokumente mit Signaturrichtlinie
Geändert (Changed)
- Die Layout-Engine akzeptiert begrenztes HTML und Markdown, fließt über Spalten hinweg und löst feste, automatische und fraktionale Rasterspuren auf
- XFDF-Roundtrips bewahren jetzt Mehrwert- und Rich-Text-Felder, Popups, Aktionen, Ziele, Appearance-Overlays, eigene Namensräume und den expliziten Anwesenheitsstatus
Version 3.53.0
Hinzugefügt (Added)
ConfigurePdfLibrarystellt eine unveränderliche native Konfiguration von Renderer, Schrift, V8, Brotli, Benutzer-Schriftpfaden und Sandbox vor dem ersten PDFium-Laden bereit- Native Strukturattribute, Anmerkungsbeziehungen, Anmerkungs-Dateianhänge, typisierte Wörterbuchwerte, Fokusrichtlinien, z-Order-Abfragen für Links und Formulare sowie Diagnose der Standard-TTF-Zuordnung sind über begrenzte übergeordnete APIs verfügbar
TPdfView.ReplaceFormTextAndKeepSelectionbewahrt die aktive Auswahl über wiederholte Bearbeitungen hinweg, und Freigabe-Ereignisse der rechten Maustaste erreichen jetzt die native Formular-Engine
Geändert (Changed)
- Die deterministische Dokumentzeit verwendet jetzt zusätzlich zur festen Epoche eine stabile UTC-Kalenderkonvertierung und erzeugt so in jeder Host-Zeitzone dieselben Metadaten
- Schreibvorgänge von Anhangs-Zeichenketten validieren das native Ergebnis und kodieren Wörterbuchschlüssel als UTF-8
Version 3.52.0
Hinzugefügt (Added)
TPdf.GetImageObjectRenderedBitmapliefert das Rendering-Ergebnis eines Bildobjekts mit angewandter aktueller Matrix, Farbraum, Masken und Rendering-StatusTPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSizeundTPdf.SetTextObjectFontSizelegen native Glyphenmessung und exakte Schriftgrößen-Bearbeitung von Textobjekten offenTPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMarkundTPdf.IsAnnotationObjectSubtypeSupportedergänzen präzises Bearbeiten von Inhaltsobjekten und Fähigkeitsprüfung
Version 3.51.0
Behoben (Fixed)
- Acht
TPdf-Mitglieder, die in früheren Versionshinweisen angekündigt wurden, waren im privaten Abschnitt deklariert und konnten nicht von außerhalb derPDFium-Unit aufgerufen werden; sie sind jetzt wie dokumentiert öffentlich:LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValueundSetAttachmentStringValue
Geändert (Changed)
- Die englische Referenzdokumentation deckt jetzt jedes öffentliche Mitglied von
TPdfundTPdfViewab: 88 Mitglieder, die keine Referenzseite hatten, erhielten eine, und die Klassenseiten, der Navigationsindex sowie die API-Referenz führen sie alle auf - Referenzseiten, die zuvor auf eine gemeinsam genutzte Seite verwiesen, verlinken jetzt auf die Seite des Mitglieds selbst, sodass ein Suchergebnis die Beschreibung der gesuchten API öffnet
- Die API-Referenz dokumentiert die aus öffentlichen Signaturen erreichbaren Enums und Records, einschließlich Lade- und Stream-Berichterstattung, Text-, Schrift- und OCR-Typen, Layout-Builder-Typen, PAdES-Validierungstypen, Batch- und Validierungstypen sowie Typen für paralleles Rendering
Version 3.50.0
Hinzugefügt (Added)
- Jede GUI-Demo öffnet jetzt mit sofort nutzbarem Inhalt statt eines leeren Formulars: Viewer- und Lab-Demos laden ein generiertes Beispieldokument, Berichts-Demos erzeugen beim Start einen fertigen Bericht, und Verarbeitungs-Demos generieren Beispieleingaben im Voraus, sodass die Hauptaktion mit einem Klick läuft
MultiPageViewer,SplitViewundFontPropertieserzeugen beim Start Beispieldokumente im Speicher (eine sechsseitige Präsentation, zwei nebeneinanderliegende Vergleichsdokumente und eine Seite mit mehreren Schriften zum Anklicken und Prüfen)- Verarbeitungs-Demos wie
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFundPrintPreferencesgenerieren Beispiel-PDFs neben der ausführbaren Datei und befüllen ihre Eingabefelder vorab, mit idempotenter Neuerzeugung, die vorhandene Dateien nie überschreibt FormFillundExtractImagesladen die in ihren Demo-Ordnern mitgelieferten Beispieldateien automatisch,ImageToPDFerzeugt zwei Beispiel-Bitmaps,WatermarkStamperstellt seine Stempel-Beispiele vorab, undXfdfLaböffnet auf einem generierten Dokument mit Text- und Hervorhebungs-Anmerkungen
Geändert (Changed)
CreatePDFerzeugt jetzt beim StartSample.pdfneben der ausführbaren Datei, ohne einen Dialog anzuzeigen, sodass das Dokument in dem Moment existiert, in dem die Demo öffnetTPdf.AboutInfound die Installations-Metadaten melden jetzt einheitlich Version 3.50.0
Version 3.49.0
Hinzugefügt (Added)
FORM_GetTextDirectionundFORM_SetTextDirectionaus den aktualisierten PDFium-Binärdateien sind jetzt gebunden, wodurch die dynamische Bindungsschicht eine vollständige Abdeckung aller 472 PDFium-Exporte behältTPdf.FocusedFormFieldTextDirectionundTPdf.SetFocusedFormFieldTextDirectionlegen die Textrichtung des fokussierten Widgets im Speicher über das neue EnumTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL) offen, mitTPdfView-Gegenstücken, die die Seitenansicht nach einer Richtungsänderung neu zeichnen
Geändert (Changed)
FPDF_LIBRARY_CONFIGspiegelt jetzt das PDFium-Layout der Version 6 mit dem experimentellen Feldm_BrotliEnabledfür Binärdateien wider, die mitPDF_ENABLE_BROTLIgebaut wurdenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden jetzt einheitlich Version 3.49.0
Version 3.48.0
Hinzugefügt (Added)
- Die
PDFViewer-Demo erzeugt beim Start jetzt ein sechsseitiges Showcase-Dokument im Speicher über die Erstellungs-API, sodass der Viewer mit gerendertem Inhalt öffnet und keine Beispieldatei auf der Festplatte nötig ist - Ein auf
TPdfThumbnailViewbasierendes Vorschaubild-Panel bietet in allen drei Demo-Portierungen klickbare Seitenvorschauen neben dem Lesezeichenbaum - Die Viewersuche hebt jetzt über
HighlightSearchTextjeden Treffer auf der aktuellen Seite hervor, statt nur ein einzelnes Ergebnissrechteck zu zeigen, und meldet die Trefferzahl in der Statusleiste - Ein-Klick-Schaltflächen
Nightund2-Upin der Symbolleiste schalten den Nacht-Duoton-Rendermodus und die Doppelseiten-Anzeige um
Geändert (Changed)
- Die Textauswahl im Viewer verwendet jetzt die eingebaute Auswahl-Engine von
TPdfViewmit Doppelklick-Wortauswahl, Ziehen-Auswahl und Zwischenablage-Kürzeln und ersetzt den handgeschriebenen Auswahlcode - Seiten werden mit Schlagschatten und sanftem Scrollen gerendert, für ein modernes Leseerlebnis
TPdf.AboutInfound die Installations-Metadaten melden jetzt einheitlich Version 3.48.0
Version 3.47.0
Hinzugefügt (Added)
FPdfBenchmarkführt begrenzte PDF-Korpora mit konfigurierbaren Warm-up- und Messdurchläufen, Seiten- und Pixelgrenzen, kooperativem Abbruch sowie Bestehens-, Fehler- oder Überspringungsstatus pro Fall ausTPdfBenchmarkReporterfasst Eingabe- und gespeicherte Bytegrößen, Lade- und Erstseiten-Latenz, Render-Durchsatz, Speicher- und Wiederöffnungsdauer, abgetastete Spitzen-Arbeitssatzgröße, semantische und Pixel-SHA-256-Hashes, Stabilität bei Wiederholungsläufen, erwartete Hash-Schranken und unabhängige Wiederöffnungs-Äquivalenz- Benchmark-Berichte exportieren formelsicheres CSV und strukturiertes JSON für CI, Release-Qualifikation und langfristige Performance-Verfolgung
GetSkiaRenderCapabilities,RenderPageSkiaundRenderPageSkiaByIndexstellen optionales natives Skia-Rendering von Seiten und Formularen mit Wiederverwendung des geparsten Seiten-Caches und ohne harte DLL-Export-Anforderung bereit- Ein versioniertes, fähigkeitsgeprüftes Druckausgabe-ABI stellt exakte Schmuckfarbenplatten-Aufzählung, Platten-Rendering, Überdruck-Erkennung und Überdruck-Vorschau bereit, sofern das geladene PDFium-Modul sie liefert
Behoben (Fixed)
- PDFium-Builds ohne
PDF_USE_SKIAladen nun normal, statt wegen fehlender experimenteller Skia-Exporte zu scheitern
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.47.0
Version 3.46.0
Hinzugefügt (Added)
ValidatePdfRprüft nun rein gerasterten Seiteninhalt, Streifengeometrie, Farbmodelle, effektive Auflösung, Kompressionsparameter, erforderliche Metadaten und verschlüsselte PDF 2.0-Profile über konfigurierbare ValidierungsoptionenBuildPdfARepairPlanwandelt Validierungsbefunde in abhängigkeitsgeordnete Behebungsschritte mit Sicherheitsklassen, Schutz vor Signatur-Auswirkungen und JSON-Ausgabe umBuildPdfXProductionPreflightberichtet Seitenboxen, eingebettete Schriften, OutputIntents, Farbmittel, Transparenz, Überdruck, Separationen, Bildauflösung und Produktionsreife, ohne Bildnutzdaten zu dekodieren- Die PDF/UA-2-Strukturvalidierung prüft nun Eigentümerschaft zugehöriger Dateien, Leserichtung, Beschreibungen, Beziehungen und Auffindbarkeit
Geändert (Changed)
TAssociateFile.Description,TPdf.ImageInfoundTPdf.PageComplexitystellen die Metadaten bereit, die Workflows für zugehörige Dateien und Produktions-Preflight benötigenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.46.0
Version 3.45.0
Hinzugefügt (Added)
TPdfXmpPacketparst, bearbeitet, klont und serialisiert XMP mit Namensraum-Unterstützung, einschließlich unbekannter Namensräume, typisierter RDF-Container, URI- und Ressourcenwerte, Qualifier, Sprachalternativen, Packet-Wrapper und erhaltenem PaddingTPdf.ReadXmpPacketundSaveAsWithXmpPacketstellen Metadaten-Lesen auf hoher Ebene und atomare Ausgabe bereit; Änderungen an signierten Dokumenten erfordern eine explizite Autorisierung
Sicherheit (Security)
- Der begrenzte XML-Reader lehnt DTDs und externe Entitäten ab und begrenzt Packet-Bytes, Verschachtelung, Knoten, Attribute und numerische Zeichenreferenzen
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.45.0
Version 3.44.0
Hinzugefügt (Added)
TPdfValidationRuleRegistryregistriert Profilklauseln mit Schweregrad, Abhängigkeiten, Reparaturhinweisen, Befunden sowie eingebauten oder benutzerdefinierten PrädikatenTPdfValidationBudgetundTPdfValidationExecutionContextbegrenzen Regeln, Fehler, Objekte, Rekursion, UTF-8-Befunde, reservierten Speicher, verstrichene Zeit, Schnellversagen und kooperativen AbbruchValidatePdfFilesParallelvalidiert Dateien über isolierte Worker-Dokumente, erhält die Eingabereihenfolge und aggregiert Problemverteilungen, Zeitmessungen, Fehler, Abbrüche und Ladefehler
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.44.0
Version 3.43.0
Hinzugefügt (Added)
TPdfStructureElementträgt nun Fakten zu Namensraum, Namensraum-Rollen-Mapping, Referenzen, zugehörigen Dateien, Anmerkungen, Widgets, Beschriftungen und Darstellungen für die semantische PDF/UA-2-ValidierungValidatePdfUa2StructureElementsund seine fokussierten Validatoren prüfen ISO/TS-32005-Namensräume und -Einbettung, begrenzte Tabellengitter, Anmerkungen, Formulare, Formula/MathML-Zuordnungen, zugehörige Dateien, Dokument-Roots, FENote, Listen, TOC-Referenzen, Titel und Beschriftungen, ohnepdfium.dllzu ladenClassifyPdfUaNamespaceidentifiziert die Struktur-Namensräume PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, benutzerdefiniert und fehlendPdfUa2StructureHasIssuebietet eine C++Builder-sichere Abfrage nach einem Einzelproblem, ohne eine Pascal-Menge als Wert zurückzugeben
Geändert (Changed)
ValidatePdfUaStructureElementswendet fürpuc2automatisch den neuen semantischen Regelsatz an und bewahrt dabei den PDF/UA-1-RegelpfadTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.43.0
Version 3.42.0
Hinzugefügt (Added)
TPdfUaSaveOptions.PdfUa2erzeugt PDF/UA-2-Ausgabe mitpdfuaid:part2,pdfuaid:rev2024 und einer effektiven PDF 2.0-KatalogversionValidatePdfUaerkenntpuc2und meldet fehlende Revisions-Metadaten, Nicht-PDF-2.0-Dateien, unbenannte Optional-Content-Konfigurationen, veraltete Anmerkungen und generische H-Überschriften
Geändert (Changed)
- Die PDF/UA-Validierung wählt nun profilspezifische Regeln für Tab-Reihenfolge, XFA und Überschriften für PDF/UA-1 und PDF/UA-2 aus
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.42.0
Version 3.41.0
Hinzugefügt (Added)
SetPageObjectMarkParamfügt einen Integer-, Real-, String- oder Blob-Parameter an einem bestehenden Marked-Content-Eintrag hinzu oder ersetzt ihn, ohne das Mark selbst zu ersetzenRemovePageObjectMarkParamentfernt eine ausgewählte Eigenschaft und bewahrt dabei den Mark-Namen und jede unbeteiligte Eigenschaft
Geändert (Changed)
- Nicht-ganzzahlige Marked-Content-Zahlen durchlaufen nun einen Round-Trip als
pmpFloat, statt in Integer-Snapshots abgeschnitten zu werden - Eine fehlgeschlagene Parameter-Validierung während
AddPageObjectMarkentfernt das teilweise erstellte native Mark TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.41.0
Version 3.40.0
Hinzugefügt (Added)
ConfigureSystemFontProviderinstalliert einen anwendungseigenen Font-Mapper, bevor PDFium startet, und liefert validierte TrueType- oder OpenType-Bytes für fehlende oder ersetzte DokumentschriftenTPdfSystemFontPolicysteuert Face-Ersetzung, nativen Fallback, Byte-Grenzen pro Schrift und begrenztes Anfrage-CachingGetSystemFontProviderStatisticsberichtet Mapping-, Cache-, Fallback-, Ablehnungs-, Datentabellen- und Live-Handle-Aktivität
Geändert (Changed)
- Provider-Callbacks legen das von PDFium angeforderte Face, Gewicht, den Stil, Zeichensatz und Pitch offen, während Callback-Fehler innerhalb der nativen Grenze bleiben
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.40.0
Version 3.39.0
Hinzugefügt (Added)
AddCidType2Textbettet vom Aufrufer bereitgestellte TrueType-Daten mit expliziter CID-zu-GID-Geometrie und CID-zu-Unicode-Mapping pro Glyphe einTPdfCidFontOptionswählt vollständige Einbettung, bevorzugtes Subsetting mit Fallback oder erforderliches Subsetting und konfiguriert begrenzte Schrift-, Glyph- und Unicode-BudgetsTPdfCidFontReportberichtet Subset-Entscheidungen, Bytegrößen, eindeutige Glyphen, Einbettungszustand, erwarteten Text, extrahierten Text und Extraktionsintegrität
Geändert (Changed)
- TrueType-Subsetting bewahrt angeforderte Glyph-Bezeichner, lehnt unsichere Ausgabe ab und rollt jedes eingefügte Seitenobjekt zurück, wenn die Mapping- oder Extraktions-Verifizierung fehlschlägt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.39.0
Version 3.38.0
Hinzugefügt (Added)
BuildReflowDocumenterstellt einen begrenzten, wiederverwendbaren semantischen Knotenbaum aus Tagged-PDF-Struktur oder Inferenz des physischen Layouts über einen ausgewählten SeitenbereichTPdfReflowDocument.ToHtmlgibt escapte responsive Überschriften, Absätze, Listen, Abbildungen, Beschriftungen, Seitenabschnitte und Tabellen mit Kopf- und Span-Semantik ausTPdfReflowOptionssteuert Tabellenerkennung, Seitenabschnitte, Geometrie, CSS, Zeilenumbrüche, Seitenbereich, Abbruch und Ressourcenbudgets
Geändert (Changed)
- Tabelleninhalt ersetzt während des Reflows überlappende Absatzblöcke, und der aktive Seitenzustand wird nach Erfolg, Fehler oder Abbruch wiederhergestellt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.38.0
Version 3.37.0
Hinzugefügt (Added)
ApplyOcrSearchLayerrendert ausgewählte Seiten über PDFium und sendet begrenzte Top-Down-BGRA-Pixel an einen vom Aufrufer bereitgestelltenIPdfOcrProviderTPdfOcrWordträgt Unicode-Text, Konfidenz und Pixelraum-Quadrilaterale, die über die native Seitengeometrie in unsichtbaren durchsuchbaren Text abgebildet werdenTPdfOcrReporterfasst seitenweise Fertigstellung, Überspringen vorhandenen Textes, Fehler, Abbruch, gerenderte Pixel sowie akzeptierte und abgelehnte Wörter
Geändert (Changed)
- Die OCR-Einfügung bewahrt ursprüngliche Scan-Bildstreams, filtert missgebildete oder konfidenzschwache Ergebnisse, committet einmal pro Seite und stellt die aktive Seite wieder her
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.37.0
Version 3.36.0
Hinzugefügt (Added)
ExtractTableserkennt Tabellen mit Trennlinien und Leerzeichen-Ausrichtung aus nativer Wortgeometrie und transformierten PfadbegrenzungslinienTPdfTableberichtet Zeilen, Spalten, verbundene Spans, Seitengrenzen, Kopfzellen, Erkennungsmodus, Konfidenz und direkte CSV- oder JSON-AusgabeExtractDocumentTablesscannt jede Seite unter gemeinsamen Budgets und kennzeichnet zusammengehörige Tabellen, die über Seitengrenzen hinweglaufen
Geändert (Changed)
- Die Tabellenextraktion erzwingt konfigurierbare Wort-, Linien-, Zellen- und Tabellengrenzen und stellt die aktive Seite nach Scans auf Dokumentebene wieder her
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.36.0
Version 3.35.0
Hinzugefügt (Added)
GenerateTaggedLayouterstellt ein neues semantisches Layout-Dokument mit nativem Marked Content, einem Document-Strukturbaum, ParentTree- und IDTree-Mappings sowie Dokumentsprach-MetadatenTPdfLayoutSemanticsmodelliert Überschriften, Abschnitte, Listen, Abbildungen, Beschriftungen, Tabellen, Kopfzuordnungen, Spans, alternativen Text, tatsächlichen Text, Sprachen und Element-IDsTPdfLayoutDocument.AddLinkerzeugt URI-Link-Anmerkungen und verknüpft jede Anmerkung über OBJR- und StructParent-Mappings mit ihrem Link-Strukturelement
Geändert (Changed)
- Layout-Text erhält standardmäßig Absatz-Semantik, während Kopf- und Fußzeilen, Linien, Bilder und wiederverwendbare Formulare standardmäßig Artefakte sind, sofern sie nicht explizit getaggt werden
- Die semantische Planvalidierung lehnt doppelte IDs, fehlende Eltern, Zyklen, ungültige Listen- oder Tabellen-Einbettung, Abbildungen ohne Ersatztext und nicht aufgelöste Tabellen-Kopf-IDs ab, bevor das Dokument ausgegeben wird
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.35.0
Version 3.34.0
Hinzugefügt (Added)
TPdf.AddShapedTextschreibt RTL-, Bidi-, kontextabhängige und Ligatur-Glyph-Läufe über natives System-Shaping und die PDFium-CID-Type-2-Schrift-APIsShapePdfTextundTPdfUniscribeTextShaperstellen positionierte Glyph-IDs, Vorschübe, Offsets, Quell-Cluster, visuelle Laufpositionen und Bidi-Level bereit, ohne ein Dokument zu ändern
Geändert (Changed)
- Erzeugte ToUnicode-Maps decken jede geformte Glyphe ab, während
ActualTextdie ursprüngliche logische Unicode-Zeichenkette für konforme Extraktions- und Barrierefreiheits-Consumer speichert - Marked-Content-Zeichenketten mit UTF-16-Byte-Reihenfolge-Marken werden nun über
PageObjectMarkskorrekt dekodiert TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.34.0
Version 3.33.0
Hinzugefügt (Added)
TPdfLayoutCachedNodeerstellt beim ersten Gebrauch Layout-Inhalt mit Struktur-Subklassen und unterstützt wiederholte skalierte Platzierungen überAddCachedNodeTPdfLayoutPlanberichtet Mess-Cache-Treffer und -Fehltreffer, Platzierungen zwischengespeicherter Knoten und wiederverwendete native XObjects
Geändert (Changed)
BuildPlanverwertet übereinstimmende Pläne anhand vollständiger Seitenbeschränkungen sowie Inhalt-, Schrift-, Stil-, Quell- und Messer-Identitäten wieder, ohne die Textmessung zu wiederholenGenerateLayoutwandelt jeden eindeutigen zwischengespeicherten Knoten in genau ein zielseitiges XObject um und erstellt für jede Platzierung ein leichtgewichtiges Form-ObjektTPdf.AboutInfo, Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.33.0
Version 3.32.0
Hinzugefügt (Added)
TPdfLayoutDocumentfügt umbrochenen Text, Abstandshalter, Linien, Bilder, wiederverwendbare Seiten-XObjects, explizite Seitenumbrüche, Kopf- und Fußzeilen zu einem vermessenen Seitenplan zusammenGenerateLayoutpaginiert das vollständige Layout, bevor native Seiten und Seitenobjekte atomar angehängt werden, mit stabilen{page}- und{pages}-Referenzen
Geändert (Changed)
TPdf.AboutInfo, Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.32.0
Version 3.31.0
Hinzugefügt (Added)
TPdfPagePlan-Builder beschreiben Lösch-, Verschiebe-, Einfüge-, Teil- und Zusammenführungsoperationen für Seiten, ohne sie anzuwendenValidatePagePlanliefert die exakte Alt-zu-Neu-Seitenzuordnung und inventarisiert betroffene Lesezeichen, benannte Ziele, Seitenbeschriftungen, Formularfelder, getaggte Seiten, importierte Funktionen und Signaturen
Sicherheit (Security)
- Pläne, die hängende Navigationsziele hinterlassen oder signierten Inhalt ohne explizite Autorisierung ändern würden, werden abgelehnt, bevor eine native Seitenoperation ausgeführt wird
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.31.0
Version 3.30.0
Hinzugefügt (Added)
SaveRecoverySnapshotschreibt ein prüfsummengesichertes, größenbegrenztes Wiederherstellungspaket mit Quell-Fingerabdruck und verifiziertem Dokument-Edit-JournalRestoreRecoverySnapshotspielt ein Wiederherstellungspaket nur dann wieder ab, wenn Prüfsumme, Journal-Kette, Quell-Fingerabdruck und wiederhergestellter Fingerabdruck übereinstimmenEnableRecoveryAutosaveaktualisiert nach jedem geänderten Commit, Undo oder Redo eine explizite Wiederherstellungsdatei atomar, ohne das Quell-PDF neu zu schreiben
Geändert (Changed)
InspectRecoverySnapshotberichtet Wiederherstellungsquelle, Fingerabdrücke, Eintragsanzahl, Position und begrenzten Speicher, ohne das Paket anzuwendenImportEditJournalund die Wiederherstellung verlangen nun eine expliziteAllowSignedDocument-Autorisierung, bevor Änderungen auf ein signiertes PDF angewendet werden- Der Speicher der Wiederherstellungspakete verwendet den konfigurierten begrenzten Random-Access-Store sowie Write-Through-Ersetzung im selben Verzeichnis für große Journale und absturzsichere Autosave-Aktualisierungen
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.30.0
Version 3.29.0
Hinzugefügt (Added)
BeginEditTransaction,CommitEditTransactionundRollbackEditTransactiongruppieren beliebige native Dokumentänderungen in atomare TransaktionenUndoEditundRedoEditwenden SHA-256-verifizierte inverse und vorwärtsgerichtete Deltas über Seiten-, Objekt-, Anmerkungs-, Anhangs- und Metadatenänderungen hinweg anExportEditJournalundImportEditJournalpersistieren begrenzte portable Deltas mit Quell-Fingerabdruck- und Digest-Ketten-Validierung für eine spätere Wiedergabe
Geändert (Changed)
- Transaktions-Snapshots verwenden reproduzierbare native Ausgabe, sodass unveränderte Commits leer bleiben, selbst wenn gewöhnliche PDFium-Speicherungen nicht-deterministische Bezeichner oder Zeitstempel enthalten
- Fehlgeschlagene Commits und ungültiges Journal-Replay stellen das zuvor ladbare Dokument atomar wieder her, während Eintragsanzahl, gespeicherte Bytes und Snapshot-Größe unter vom Aufrufer konfigurierten Grenzen bleiben
- Signierte PDFs erfordern eine explizite
AllowSignedDocument-Autorisierung, bevor eine Dokument-Änderungstransaktion beginnt TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.29.0
Version 3.28.0
Hinzugefügt (Added)
TPdf.InspectOptionalContentzählt OCG-Ebenen, Standard- und Alternativ-Konfigurationen, View/Print/Export-Verwendungszustände, Zoom- und Sprach-Metadaten, gesperrte Ebenen, Reihenfolge-Arrays, Radiogruppen, OCMD-Richtlinien, Sichtbarkeitsausdrücke und den effektiven Renderzustand aufTPdf.SaveAsOptionalContentConfiguredschreibt eine streng verifizierte Kopie mit vom Aufrufer gewählten Ebenenzuständen für eine ausgewählte Verwendung und Konfiguration
Geändert (Changed)
- Die Ebenenzustands-Ausgabe aktualisiert nun sowohl die Konfigurations-Arrays
/ONund/OFFals auch OCG-Usage-Zustandswörterbücher, sodass PDFium die angeforderte Sichtbarkeit über seinen nativen Rendering-Kontext anwendet - Konfigurationsschreibvorgänge lehnen unbekannte Gruppen, Änderungen an gesperrten Ebenen, Radiogruppen-Konflikte, verschlüsselte Staging-Dateien sowie signierte Dateien ohne explizite Autorisierung ab und entfernen standardmäßig automatische Zustandsregeln, damit das ausgewählte Ergebnis deterministisch bleibt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.28.0
Version 3.27.0
Hinzugefügt (Added)
TPdf.RenderPageByIndexrendert jede einsbasierte Seite in exakter Pixelgröße, ohne die aktive Bearbeitungsseite zu ändern oder Seitenwechsel-Ereignisse auszulösenPageSceneCacheCapacity,PageSceneCacheCountundClearPageSceneCachestellen begrenzte Szenen-Cache-Steuerung und -Diagnose bereit
Geändert (Changed)
- Indizierte Seiten-Renderings, gerenderte Vorschauen und die Extraktion eingebetteter Vorschauen verwenden den geparsten PDFium-Seitenzustand nun standardmäßig über einen LRU-Cache mit acht Einträgen wieder
- Szeneneinträge werden bei Seitenaktivierung, Bearbeitung, Seitenbaum-Änderungen, Formularzustand-Callbacks, explizitem Leeren und Dokumentabbau invalidiert, wobei laufende Renderings sicher bis zur Freigabe erhalten bleiben
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.27.0
Version 3.26.0
Hinzugefügt (Added)
TPadesSignatureAlgorithmInfoberichtet die Digest-, Signatur-, Public-Key- und Kurven-OID jedes CMS-Signierers zusammen mit seinem unabhängig bewerteten Algorithmus-RichtlinienzustandInspectPadesSignatureAlgorithmundEvaluatePadesSignatureAlgorithmerkennen die Profile P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519 und Ed448
Sicherheit (Security)
- Die PAdES-Validierung lehnt nun Elliptische-Kurven- und Digest-Abweichungen, ECDSA-Signatur-OIDs, die nicht zum CMS-Digest passen, unbenannte EC-Parameter, Ed25519-Parameter sowie Ed448-SHAKE256-Ausgabelängen anderer als 512 Bit ab
- Die native CMS-Verifizierung bleibt die Quelle kryptografischer Gültigkeit, während nicht verfügbare Algorithmen und nicht erkannte Kurven als
pcsUnsupportedgemeldet werden, statt als ungültige Signaturen zu gelten TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.26.0
Version 3.25.0
Hinzugefügt (Added)
TPdf.ExportObjectGraphexportiert aktive klassische, Xref-Stream- und Objekt-Stream-Objekte als begrenztes typisiertes JSON mit expliziten Dictionaries, Arrays, Strings, Namen, Skalarwerten, indirekten Referenzen, Stream-Bytezahlen und optionalen SHA-256-Stream-DigestsTPdf.SaveAsObjectGraphPatchedsetzt oder entfernt schema-geprüfte Werte der obersten Dictionary-Ebene über typisierte Null-, Boolean-, Integer-, Real-, Namens-, Textstring- und indirekte Referenz-Patchwerte
Sicherheit (Security)
- Der Objektgraph-Export erzwingt Objekt-, Rekursions-, String- und Ausgabe-Byte-Budgets, während das Patchen jede Operation vor der Zustellung validiert und hängende Referenzen, doppelte Operationen, verschlüsselte Eingaben, geschützte Stream-Filter- oder Längenänderungen sowie signierte Dokumente ablehnt, sofern nicht ausdrücklich autorisiert
- Objektgraph-Patches werden als inkrementelle Revision gestaffelt, für die Xref-Verifizierung erneut materialisiert, über PDFium strikt geladen und erst nach Bestehen aller Prüfungen kopiert oder atomar umbenannt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.25.0
Version 3.24.0
Hinzugefügt (Added)
TPdf.ValidatePadesTrustverifiziert jede auffindbare detachte Signatur gegen den exakten ursprünglichenByteRange, bewertet die signing-certificate-v2-Bindung und das aktuelle Windows-Systemvertrauen und berichtet unabhängige Signatur-, Ketten-, Sperr- und ZeitstempelzuständeTPdf.ValidatePadesTrustAsynclegt vor dem Versand einen Snapshot der ursprünglich geladenen Quelle an, berichtet gestaffelte Fortschritte für Parsing-, Kryptografie-, Kettenaufbau-, AIA-, OCSP-, CRL- und RFC-3161-Zeitstempelarbeit und unterstützt kooperativen AbbruchTPadesTrustValidationOptionswählt Offline- oder Online-Vertrauen, optionale Sperr- und Zeitstempelverifizierung, ein begrenztes URL-Abruf-Timeout, ein Abbruch-Token und einen Fortschritts-Callback
Sicherheit (Security)
- Signatur-Zeitstempel- und Document-Time-stamp-Token validieren nun ihren SHA-256-Message-Imprint, die angehängte CMS-Signatur, die TSA-Kette und den optionalen Sperrzustand unabhängig von der gewöhnlichen Dokumentsignatur
- Die Vertrauensvalidierung hasht niemals eine von PDFium neu gespeicherte Kopie, nutzt standardmäßig Offline-Zertifikatabruf nur aus dem Cache und meldet nicht unterstützte oder unbestimmte Zustände, statt nicht verfügbares natives Vertrauen oder Sperrnachweise als gültig zu behandeln
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.24.0
Version 3.23.0
Hinzugefügt (Added)
TPdf.RenewPadesArchiveTimestampundRenewPadesArchiveTimestampToStreamhängen einen neuen RFC-3161-Document-Time-stamp an eine bestehende PAdES-Signaturkette an, ohne historische Bytes zu ändernTPadesArchiveTimestampOptionssteuert TSA-Zugriff, Nonce, reservierte Token-Kapazität und eine optionale vollständige DSS-Aktualisierung, währendTPadesArchiveTimestampReportQuell- und Ergebnis-Level, Kettenlängen, Bytelängen und die zurückgegebene Zeitstempel-Identität erfasst
Behoben (Fixed)
- Neue und erneuerte PAdES-B-LTA-Ausgabe deklariert ESIC ExtensionLevel 2, während die B-LT-Validierung Level 2 nicht mehr verlangt, sofern kein Document Time-stamp vorhanden ist
Sicherheit (Security)
- Die Erneuerung hasht die exakten ursprünglich geladenen Bytes plus jede angeforderte DSS-Aktualisierung, lehnt verschlüsselte oder unvollständige Quellen ab, validiert das auffindbare B-LTA-Ergebnis vor dem Schreiben der Ausgabe und staffelt die Dateiausgabe vor der Ersetzung
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.23.0
Version 3.22.0
Hinzugefügt (Added)
TPdf.AnalyzeSignatureRevisionsrekonstruiert die ursprüngliche inkrementelle Revisionskette und liefert Objektänderungen pro Signatur, klassifiziert gegen DocMDP- und FieldMDP-BerechtigungenTPadesRevisionAnalysisReportunterscheidet erlaubte Formular-, Anmerkungs-, Signatur- und Validierungsmaterial-Updates von unzulässigen Seiten- oder Dokumentänderungen, nicht aufgelösten Fällen und verdächtigen Schattendefinitionen
Sicherheit (Security)
- Die Revisionsanalyse erkennt unreferenzierte Objektdefinitionen, Signaturobjekt-Redefinitionen, aktiven Inhalt, missgebildete Revisionsketten und nicht aufgelöste komprimierte Objekte und erzwingt dabei begrenzte Revisions-, Objekt- und Änderungsbudgets
- Die Analyse verwendet stets die ursprünglich geladene Datei, den Speicherpuffer, den benutzerdefinierten Stream oder die abgeschlossene progressive Quelle statt der von PDFium neu geschriebenen Bytes
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.22.0
Version 3.21.0
Hinzugefügt (Added)
TPdf.PreparePadesRemoteSignatureerstellt einen Platzhalter fester Breite für eine detachte Signatur und gibt eine persistente Anfrage zurück, die den SHA-256-Dokument-Digest, den exaktenByteRange, Reservierungskoordinaten und den Fingerabdruck des vorbereiteten PDFs enthältTPdf.CompletePadesRemoteSignatureschließt HSM-, Cloud- oder unterbrochene Signatursitzungen nach Validierung der persistenten Anfrage und des zurückgegebenen CMS abTPdf.SavePadesRemoteSigningRequestundTPdf.LoadPadesRemoteSigningRequestbieten ein stabiles versioniertes binäres Sitzungsformat für Prozess- und Maschinengrenzen
Sicherheit (Security)
- Der Abschluss lehnt modifizierte vorbereitete PDFs, veränderte
ByteRange-Koordinaten, wiederverwendete nicht-leere Platzhalter, übergroße CMS-Werte, nicht unterstützte SignedData-Formen, fehlende signing-certificate-v2-Attribute sowie CMS-Message-Digests ab, die nicht zum vorbereiteten Dokument passen TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.21.0
Version 3.20.0
Hinzugefügt (Added)
TPadesDssOptions.Vrisschreibt pro Signatur ein indirektes/Type /VRI-Dictionary, mit dem SHA-1 in Großbuchstaben des vollständigen dekodierten/Contents-Werts einschließlich Padding als SchlüsselTPadesDssVriwählt Zertifikat-, OCSP- und CRL-Material über validierte Indizes aus, während PAdES-B-LT- und B-LTA-Signieren die VRI der neuen Signatur nun automatisch erstellt
Geändert (Changed)
- DSS-Zertifikate, OCSP-Antworten und CRLs werden über Inhalts-Hashes dedupliziert, mit stabiler Reihenfolge des ersten Auftretens, exakten Byte-Kollisionsprüfungen und VRI-Referenz-Remapping, bevor Zieltbytes geschrieben werden
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.20.0
Version 3.19.0
Hinzugefügt (Added)
TPdf.GetStructuredTextwandelt die aktuelle Seite in wiederverwendbare Block-, Zeilen- und formatierte Span-Datensätze um und bewahrt dabei Quell-Zeichenindizes, Unicode-Skalare, Geometrie, Schriftnamen, -größen und -gewichte sowie TextwinkelTPdfStructuredTextOptionswählt Content-Stream- oder Physisches-Layout-Reihenfolge, optionale Schrift- und semantische Anreicherung und ein fail-closed-Maximalzeichenbudget- Tagged-PDF- und heuristische Fragmente lesbaren Inhalts reichern Blöcke mit Strukturart, Überschriftsebene, Sprache, Quelle und Strukturelement-Identität an, während nicht zugeordneter alternativer Text von Figuren weiterhin abgebildet wird
Geändert (Changed)
- Die Extraktion des physischen Layouts verwendet nun O(n log n)-Zeichenordnung, geometrisch wachsende Zeilen- und Span-Puffer, Zeilen- und Spalten-Clustering, gepufferten Unicode-Aufbau und Font-Caching angrenzender nicht-null Textobjekte für vorhersagbare Performance auf großen Seiten
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.19.0
Version 3.18.0
Sicherheit (Security)
TPdf.SaveAsRedactedwendet jedes/Redact-Rechteck auf einen isolierten Dokument-Snapshot an, entfernt jedes schneidende Seitenobjekt der obersten Ebene und malt ein deckendes Ersatzrechteck, ohne das geladene Dokument zu ändern- Die geschwärzte Ausgabe entfernt Schwärzungsanmerkungen, entfernt optional andere schneidende Anmerkungen, löscht nativ eingebettete Anhänge und entfernt Katalog-
/AF, aktiven Inhalt, Formulare, Metadaten und nicht erreichbare Objekte früherer Revisionen TPdfRedactionOptionssteuert Ersatzfarbe, Entfernung überlappender Anmerkungen und ein fail-closed-Seitenobjekt-Scan-Budget, währendTPdfRedactionReportjede Entfernung und Ausgabemetrik erfasstTPdfSanitiseOptions.StripAssociatedFilesentfernt nun standardmäßig Associated-File-Referenzen auf Katalogebene
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.18.0
Version 3.17.0
Hinzugefügt (Added)
TPdf.RenderPagesParallelrendert einsbasierte Seitenanforderungen parallel, wobei jeder Worker ein unabhängig geladenes PDFium-Modul, Dokument und Seitenzustand aus genau einem erfassten Dokument-Snapshot besitztTPdfParallelRenderOptionssteuert DPI, Worker-Anzahl, Rotation, native Render-Flags, Hintergrundfarbe, Pixelgrenzen pro Seite und aggregierte Grenzen der zurückgehaltenen AusgabeTPdfParallelRenderReportbewahrt die Anfragereihenfolge und gibt aufrufereigene Top-Down-BGRA- oder RGBA-Puffer mit seitenweisem Erfolg, Abbruch, Fehler, Abmessungen, Zeitmessung und Diagnosedetails zurück- Das progressive Worker-Rendering fragt
IPdfCancellationTokenzwischen nativen Chunks ab, während ungültige Anforderungen und Budgetfehler auf die jeweiligen Ergebnisse isoliert bleiben TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.17.0
Version 3.16.0
Hinzugefügt (Added)
TPdfEncryptionRevision.erR7ergänzt ISO/TS-32003-AES-256-GCM-Ausgabe mit/V 6,/R 7,/CFM /AESV4und der erforderlichen PDF 2.0-Entwicklererweiterung- Jeder verschlüsselte String und Stream erhält ein eindeutiges 96-Bit-IV, einen Chiffretext unveränderter Länge und ein 128-Bit-Authentifizierungs-Tag, während
EncryptMetadata = FalseMetadaten-Stream-Bytes bewahrt DecryptAesGcmDocumentBytesvalidiert Benutzer- oder Eigentümerpasswörter, verschlüsselte Berechtigungen, optionale eigenständige PDF-MAC-Daten und jedes GCM-Tag, bevor PDFium-kompatible Klartext-Bytes zurückgegeben werden- AESV4-Ausgabe lässt sich mit
TPdfEncryptOptions.EnableIntegrityProtectionkombinieren, sodass GCM-Authentifizierung pro Objekt und dokumentweiter ISO/TS-32004-PDF-MAC-Schutz koexistieren - Die Verschlüsselung verwendet nun gültige klassische Cross-Reference-Einträge, statt objektförmigen Text innerhalb von Streamdaten als indirekte Objekte zu interpretieren
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.16.0
Version 3.15.0
Hinzugefügt (Added)
TPdfEncryptOptions.EnableIntegrityProtectionschreibt eigenständige ISO/TS-32004-PDF-MAC-Authentifizierungscodes für Dokumente mit AES-256 Standard Security Handler Revision 5 und 6TPdf.ValidatePdfMacverifiziert die exakten ursprünglichen Quell-Bytes, den strikt EOF-abdeckenden/ByteRange, CMS-AuthenticatedData, den passwortabgeleiteten Dateischlüssel, authentifizierte Attribute, den umschlossenen MAC-Schlüssel und den HMAC-WertFPdfHmacergänzt HMAC-SHA256 und HKDF-SHA256, währendFPdfAesRFC-3394-AES-256-Key-Wrap- und authentifizierte Unwrap-Primitive hinzufügtTPdfMacValidationResultunterscheidet gültige, fehlende, ungültige und nicht unterstützte Authentifizierungscodes mit DiagnosetextTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.15.0
Version 3.14.0
Hinzugefügt (Added)
TPdf.ValidatePadesverifiziert nun detachte CMS-Signaturen unter Windows gegen die exakten ursprünglichen/ByteRange-Segmente, einschließlich signierter Attribute und des SignaturwertsTPadesValidationResultlegt einen aggregierten Integritätsstatus sowie ByteRange-, CMS-,signing-certificate-v2, Systemvertrauens-, Sperr- und Zeitstempelzustände pro Signatur offen, ohne nicht unterstützte oder ungeprüfte Nachweise mit einer ungültigen Signatur gleichzusetzen- Die Signierzertifikat-Bindung wird mit SHA-256 geprüft, Zertifikatsketten nutzen Windows-Systemvertrauens-Bewertung nur aus dem Cache, und native Fehlercodes bleiben für Diagnosen verfügbar
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.14.0
Version 3.13.1
Behoben (Fixed)
TPdf.ValidatePadesuntersucht nun die ursprüngliche Datei, den gepufferten Speicher oder benutzerdefinierte Stream-Bytes statt einer von PDFium neu gespeicherten Kopie, die Offsets ungültig machen oder Signatur-Dictionaries verwerfen könnte- PAdES-
/ByteRange-Prüfungen akzeptieren nun Signaturen, die eine frühere vollständige PDF-Revision gefolgt von gültigen inkrementellen Updates abdecken, und validieren zusätzlich Document-Time-stamp-Bereiche TPadesValidationResult.SourceStatusunterscheidet die Validierung der Originalquelle von nicht verfügbarer oder unvollständiger progressiver Eingabe, und Compliance-Prädikate lehnen Ergebnisse ohne Original-Bytes abTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.13.1
Version 3.13.0
Hinzugefügt (Added)
FPdfSha3stellt abhängigkeitsfreie SHA3-256-, SHA3-384-, SHA3-512- und SHAKE256-Primitive für ISO/TS 32001 und verwandte kryptografische PDF-2.x-Arbeiten bereit- Inkrementelle Kontexte absorbieren beliebig aufgeteilte Eingaben, während SHAKE256 wiederholte Squeeze-Aufrufe und Ausgaben über Sponge-Rate-Grenzen hinweg unterstützt
- Einmalige Byte-Array- und Kleinbuchstaben-Hexadezimal-Helfer ergänzen die Streaming-API, mit expliziter Lebenszyklus- und Größenvalidierung über Delphi, C++Builder und Lazarus
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.13.0
Version 3.12.0
Hinzugefügt (Added)
TPdf.ImportFDFimportiert FDF-Formulardaten aus Dateien oder Streams und wendet geparste Werte über den bestehenden Widget-Feldpfad anFdfImportFromStreamundFdfImportFromFileparsen direkte oder indirekte hierarchische Felder, PDF-Literal- und Hexadezimal-Strings, PDFDocEncoding, Unicode-Text, Namenswerte und explizite leere Werte unter begrenzten Ressourcenbudgets- Der FDF-Export schreibt nun nicht-ASCII-Feldnamen und -Werte als normkonforme UTF-16BE-Textstrings und escapet Quelldateinamen sicher
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.12.0
Version 3.11.0
Hinzugefügt (Added)
TPdf.DetectPageSkewrendert die aktuelle Seite mit niedrigem DPI und erkennt den Neigungswinkel, indem dunkle Pixel auf Kandidaten-Drehwinkel projiziert werden; zurückgegeben wird der Winkel, der die Zeilensummen-Varianz (Textzeilen-Ausrichtung) maximiert, mit einer Genauigkeit von etwa 0.1 GradTPdfSkewReportlegt den erkannten Winkel, die Konfidenz und die Abmessungen der Stichprobe offenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.11.0
Version 3.10.0
Hinzugefügt (Added)
TPdf.GetTextInReadingOrderextrahiert den Text der aktuellen Seite in roher Content-Stream-Reihenfolge oder in der Reihenfolge des physischen Layouts (von oben nach unten, von links nach rechts) überFPDFText_GetCharBox+ positionssortierte Zeichenextraktion, sodass mehrspaltiger und visuell umgeordneter Text natürlich lesbar ist- Die Enumeration
TPdfReadingOrderwählt zwischenroContentOrderundroPhysicalLayout TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.10.0
Version 3.09.0
Hinzugefügt (Added)
TPdfImageOptimizeOptions.PreserveBilevelüberspringt 1-Bit-Bilevel-Bilder (ImageMask / Strichzeichnungs-Scans) währendOptimizeImages, damit Nearest-Neighbour-Downsampling ihre scharfen Kanten nicht zerstörtTPdfImageOptimizeOptions.MinDimensionüberspringt Bilder, die kleiner als der Schwellwert sind (typischerweise Icons oder dekorative Elemente, die von einer weiteren Verkleinerung nicht profitieren)TPdfImageOptimizeOptions.Defaultliefert den empfohlenen Ausgangspunkt (150-DPI-Ziel, 1.5-Verhältnis, Bilevel erhalten, Mindestabmessung 8)TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.09.0
Version 3.08.0
Hinzugefügt (Added)
TPdfTileCachestellt einen begrenzten LRU-Cache gerenderter Seitenkacheln bereit, mit Dokumentrevision, Seite, Zoom, Rotation, Render-Flags und Geräterechteck als Schlüssel, sodass unveränderte Kacheln bei Neuzeichnungen nicht erneut gerendert werden und veraltete Kacheln einer früheren Speicherung automatisch verdrängt werdenTTileKeylegt den zusammengesetzten Cache-Schlüssel mit einer statischenCreate-Fabrik und einemEquals-Vergleich offenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.08.0
Version 3.07.0
Hinzugefügt (Added)
TPdf.GetAnnotationFontColorundTPdf.SetAnnotationFontColorkapseln die zuvor gebundenen, aber ungenutztenFPDFAnnot_GetFontColorundFPDFAnnot_SetFontColorund stellen Lesen und Schreiben der Widget-Textfarbe für die Formularfeld-Bearbeitung bereit, ohne das Anmerkungs-Dictionary direkt anzufassenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.07.0
Version 3.06.0
Hinzugefügt (Added)
TPdf.RenderPageBandedrendert die aktuelle Seite über einen Callback in horizontalen Bändern, sodass Poster und technische Seiten exportiert werden können, ohne je eine vollständige Ziel-Bitmap zuzuweisen — jedes Band rendert in ein frisch erzeugtesTBitmapder angeforderten Bandhöhe und wird nach Rückkehr des Callbacks freigegebenTPdfBandCallbacklegt den Vertrag pro Band (Bandindex, Top-y-Offset, Bitmap) mit Boolean-Rückgabe offen, mit der Aufrufer das Band-Rendering vorzeitig abbrechen könnenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.06.0
Version 3.05.0
Hinzugefügt (Added)
TPdf.RenderPageProgressiveWithColorSchemesteuert die native progressive Renderschleife mit einem Farbschema für Sehbeeinträchtigte überFPDF_RenderPageBitmapWithColorScheme_Start, sodass Aufrufer Pfad-Füll-/-Strich- und Text-Füll-/-Strichfarben für Barrierefreiheit überschreiben können, während die abbruchbewusste Continue-Schleife erhalten bleibtTPdfColorSchemelegt die vierTColor-Überschreibungsfelder mit einemDefaultoffen, das an die eingebauten PDFium-Farben delegiert, wenn alle FelderclDefaultsindTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.05.0
Version 3.04.0
Hinzugefügt (Added)
TPdf.ExportFDFserialisiert Formularfeldwerte neben dem bestehenden XFDF-Pfad als FDF-Dokument (ISO 32000-1 §12.7.11) und verwendet dabei dasselbeTXfdfField-Datenmodell, sodass Aufrufer Felder einmal sammeln und eines der beiden Formate ausgebenFdfExportToStreamundFdfExportToFileinFPdfXfdfstellen den FDF-Serialisierer auf niedriger Ebene für Aufrufer bereit, die Feldsammlungen unabhängig von einem geladenenTPdfaufbauenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.04.0
Version 3.03.0
Hinzugefügt (Added)
TPdf.SaveAsSanitisedschreibt eine saubere Kopie mit einer einzigen Revision, die aktiven Inhalt aus dem Katalog entfernt (/OpenAction, Katalog-/AA,/Names,/AcroForm,/Metadata) und anschließend nicht erreichbare Objekte beschneidet, sodass die verwaisten JavaScript-, Action- und Anhang-Körper aus dem Dateikörper verschwindenTPdfSanitiseOptionslegt unabhängige Entfernungssteuerungen pro Vektor plus einen optionalen Erreichbarkeits-Beschneidungsdurchlauf offen;TPdfSanitiseReporterfasst die Anzahl entfernter Einträge, beschnittener Objekte, Bytezahlen und etwaige FehlerTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.03.0
Version 3.02.0
Hinzugefügt (Added)
TPdf.SaveAsPageLabelledschreibt eine vollständige PDF-Kopie, deren Zahlenbaum/PageLabelsim Katalog durch die bereitgestellten Bereiche ersetzt wird, mit dezimaler, römischer Groß-/Kleinbuchstaben- und Buchstaben-Groß-/Kleinbezeichnung sowie optionalen Präfix-Textstrings und Startnummern gemäß ISO 32000-1 §12.4.2TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyleundTPdfPageLabelReportlegen das Bereichsmodell, die Stil-Enumeration und Byte-/Bereichszahlen pro Speichervorgang offen- Bestehende Katalog-
/PageLabels-Einträge werden erkannt und abgelehnt, sofern nichtReplaceExisting=Trueübergeben wird; in diesem Fall wird der alte Eintrag entfernt, bevor die neuen Bereiche injiziert werden TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.02.0
Version 3.01.0
Hinzugefügt (Added)
TPdf.FlattenPageRotationbackt das aktuelle/Rotatejeder Seite in den Content-Stream, die Seitenboxen und die Anmerkungsrechtecke ein und setzt/Rotateanschließend auf 0 zurück — unter Kapselung vonFPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotation, sodass das visuelle Layout erhalten bleibt, ohne auf den Rotations-Anzeige-Hinweis zu vertrauenTPdfFlattenRotationOptionslegt Anmerkungs-Transformation, Seitenbox-Tausch und Auto-Aktualisierung pro Seite offen;TPdfFlattenRotationReporterfasst verarbeitete, übersprungene und fehlgeschlagene Seiten sowie die Gesamtzahl transformierter Objekte und AnmerkungenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.01.0
Version 3.00.0
Hinzugefügt (Added)
TPdf.StampPagesFromPdfstempelt eine Quellseite als positioniertes, skaliertes, optional rotiertes Form-XObject-Overlay oder -Underlay auf eine oder mehrere Zielseiten, unter Kapselung vonCreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndexmit expliziten Seitenbox-, Anker-, Rand-, Skalierungs-, Rotations-, Blend- und Z-Order-RichtlinienTPdfOverlayOptionsundTPdfOverlayReportlegen Platzierungs-, Transformations-, Blend- und Z-Order-Steuerungen sowie gestempelte, fehlgeschlagene und übersprungene Zählungen pro Seite offenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 3.00.0
Version 2.99.0
Hinzugefügt (Added)
TPdf.RefreshAppearanceregeneriert selektiv den Appearance-Stream eines einzelnen Widgets überFPDFAnnot_SetAPund vermeidet so einenNeedAppearances-Neuaufbau der gesamten SeiteTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.99.0
Version 2.98.0
Hinzugefügt (Added)
TPdfView.MouseDownleitet Rechtsklick-Ereignisse nun überFORM_OnRButtonDownan die native Form-Fill-Engine weiter und ermöglicht so Kontextmenüs und Widget-Interaktionen beim Rechtsklick- Die Routemap-Einträge 78 (Link-Anmerkungs-Mapping), 82 (Widget-Präsentation) und 83 (Strukturattribut-Modell) wurden als bereits vollständig über bestehende Infrastruktur bestätigt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.98.0
Version 2.97.0
Hinzugefügt (Added)
TPdf.SetDeterministicTimeundTPdf.RestoreActualTimeermöglichen es Tests und reproduzierbaren Builds, eine feste Erstellungs-, Änderungs- und aktuelle Zeit über unterstützte native Callbacks zu injizierenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.97.0
Version 2.96.0
Hinzugefügt (Added)
TPdf.GetWidgetAdditionalActionJavaScriptliest Additional-Action-JavaScript eines Widgets für einen bestimmten Ereignisauslöser überFPDFAnnot_GetFormAdditionalActionJavaScript, ohne ein Skript auszuführenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.96.0
Version 2.95.0
Hinzugefügt (Added)
TPdf.GetObjectTextextrahiert den Unicode-Text eines Textseitenobjekts überFPDFTextObj_GetTextfür präzise Inhaltsbearbeitung und KodierungsdiagnoseTPdf.GetObjectsByTypeliefert die Indizes aller Seitenobjekte, die einer Kategorie entsprechen (Text, Pfad, Bild, Form, Shading), für selektive Kategorie-AusgabeTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.95.0
Version 2.94.0
Hinzugefügt (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValueundSetAttachmentStringValuelesen, schreiben und prüfen benutzerdefinierte File-Spec-Erweiterungswerte an eingebetteten AnhängenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.94.0
Version 2.93.0
Hinzugefügt (Added)
TPdf.InsertObjectAtIndexfügt ein Seitenobjekt überFPDFPage_InsertObjectAtIndexan einer angeforderten Stapelposition ein, statt es immer anzuhängenTPdf.UpdateAnnotationObjectcommittet ein bearbeitetes Anmerkungs-Appearance-Objekt überFPDFAnnot_UpdateObject, sodass Änderungen an anmerkungseigenen Seitenobjekten zuverlässig erhalten bleibenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.93.0
Version 2.92.0
Hinzugefügt (Added)
TPdf.InsertClipPatherstellt einen rechteckigen Clip-Pfad und fügt ihn über die nativen PfadeFPDF_CreateClipPathundFPDFPage_InsertClipPathin die aktuelle Seite ein und ergänzt damit den bestehendenPageObjectClipPath-InspektorTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.92.0
Version 2.91.0
Hinzugefügt (Added)
TPdf.GetPageComplexityscannt die aktuelle Seite und berichtet Bild-, Pfad- und Textobjektanzahlen sowie gesamte Pfadsegmente, gesamte Bildpixel und das Vorhandensein von Transparenz für die Rendering-PlanungTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.91.0
Version 2.90.0
Hinzugefügt (Added)
TPdf.IsAnnotationSubtypeSupportedfragt die geladene PDFium-DLL ab, welche Anmerkungs-Subtypen sie vor der Bearbeitung unterstütztTPdf.ChooseRenderFlagswählt aus endgültiger Skalierung und Zielgröße native Render-Flags (Halftone, begrenzter Bild-Cache) für adaptives Bild-SubsamplingTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.90.0
Version 2.89.0
Hinzugefügt (Added)
TPdf.GetTextRenderModelegt den nativen Text-Rendering-Modus (Füllen, Strich, Clip) eines Textseitenobjekts für Autorendiagnose offenTPdf.GetTextObjectRenderedBitmaprendert ein einzelnes Textobjekt über den nativenFPDFTextObj_GetRenderedBitmap-Pfad in eine isolierte BitmapTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.89.0
Version 2.88.0
Hinzugefügt (Added)
TPdf.GetThumbnailfällt nun auf das Rendern eines Ersatzes zurück, wenn die Seite keine eingebettete Vorschau hat, und setzt damit die Bevorzugung eingebetteter Vorschauen umTPdf.LinkAtPointgibt überFPDFLink_GetLinkAtPointzurück, ob an einer Koordinate im Seitenraum ein nativer Link existiert, statt nur Rechtecke zu scannenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.88.0
Version 2.87.0
Hinzugefügt (Added)
TPdf.AuditActiveContentliefert einenTPdfActiveContentAudit-Snapshot mit JavaScript-Action-Anzahl, Anzahl eingebetteter Dateien, Signaturanzahl, XFA-Formulartyp und Dokumentberechtigungen, ohne ein Skript oder eine Action auszuführenTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.87.0
Version 2.86.0
Hinzugefügt (Added)
TPdf.GetFeatureInventoryscannt jede Seite einmal und liefert einen einheitlichen Datensatz aus Text-, Pfad-, Bild-, Form-XObject- und Shading-Objektanzahlen neben Fakten zu Anhängen, Signaturen, Formulartyp, Berechtigungen und PDF-VersionTPdfFeatureInventorybündelt dokumentweite Fakten, die zuvor separate Eigenschaftsaufrufe erforderten, in einem einzigen SnapshotTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.86.0
Version 2.85.0
Hinzugefügt (Added)
TPdf.SaveAsReproducibleschreibt das Dokument neu, sodass zwei Speicherungen desselben Speicherzustands byteidentische Ausgabe erzeugen- Nicht-deterministische
/Info-Zeitstempel (/CreationDate,/ModDate) werden entfernt und die Quell-/ID(aus wallclock-abhängigen Bytes abgeleitet) wird weggelassen, während Objektreihenfolge und -generation stabil bleiben TPdfReproducibleReportberichtet behaltene und beschnittene Objektanzahlen sowie die Anzahl entfernter Zeitstempel-EinträgeTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.85.0
Version 2.84.0
Hinzugefügt (Added)
TPdf.SaveAsInlineImagesExternalisedschreibt das Dokument neu, extrahiert jedes Inline-BildBI/ID/EIin ein wiederverwendbares Bild-XObject und ersetzt den Inline-Block durch einen/ImN Do-Operator- Inline-Bild-Dictionary-Abkürzungen (
/W,/H,/BPC,/CS,/F, Farbraum-Werte und Filter-Werte) werden zu ihren vollständigen Bild-XObject-Namen expandiert, sodass das extrahierte Objekt normkonform ist - Das Seiten-Dictionary
/Resources /XObjectwird mit den neuen XObject-Referenzen aktualisiert, und der neu geschriebene Content-Stream wird Flate-komprimiert TPdfInlineImageExternaliseReportberichtet externalisierte, übersprungene und fehlgeschlagene Anzahlen sowie die Anzahl erstellter XObjectsTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.84.0
Version 2.83.0
Hinzugefügt (Added)
TPdf.SaveAsFlateRecompressedschreibt das Dokument neu und kodiert geeigneteFlateDecode-Streams mit maximaler Kompression neu; ein Stream wird nur ersetzt, wenn die gemessene Byte-Ersparnis einen Aufrufer-Schwellwert übersteigtTPdfFlateRecompressOptionswählt eine Mindest-Ersparnis in Bytes und ein Mindest-Ersparnis-Verhältnis, sodass bereits optimale Streams unangetastet bleibenTPdfFlateRecompressReportberichtet neu komprimierte, übersprungene und fehlgeschlagene Stream-Anzahlen zusammen mit den ursprünglichen und neu komprimierten Stream-Byte-Summen- Objektnummern und -generationen bleiben stabil; nur die neu komprimierten Stream-Nutzdaten und ihre direkten
/Length-Werte ändern sich, sodass jede verbleibende Cross-Reference gültig bleibt TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.83.0
Version 2.82.0
Hinzugefügt (Added)
TPdf.OptimizeImagesdurchläuft jedes Seitenbildobjekt und rechnet diejenigen herunter, deren effektive Platzierungs-DPI ein vom Aufrufer gewähltes Ziel überschreitet, und committet dann jede berührte Seite über den nativen Content-GeneratorTPdfImageOptimizeOptionswählt die Ziel-DPI und ein Mindest-Verhältnis, sodass nur tatsächlich überabgetastete Bilder neu kodiert werdenTPdfImageOptimizeReportberichtet optimierte, übersprungene und fehlgeschlagene Bildanzahlen zusammen mit einer strukturierten Fehlermeldung- Das Downsampling verwendet einen Nearest-Neighbour-Durchlauf über den nativen PDFium-Bitmap-Puffer, bewahrt Quellformat, Stride und Alphakanal, und
FPDFImageObj_SetBitmapkodiert das Ergebnis neu TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.82.0
Version 2.81.0
Hinzugefügt (Added)
TPdf.SaveAsDeduplicatedschreibt das Dokument als einzelne saubere Revision neu, die kompatible Schriften, Bilder und Form-XObjects auf einen gemeinsamen Vertreter zusammenfasst- Ein rekursiver Inhalts-Fingerabdruck kombiniert jedes Ressourcen-Dictionary, seinen vollständigen erreichbaren Teilgraphen und seine rohe Stream-Nutzlast, sodass Duplikate nur verschmelzen, wenn ihr gesamter Inhalt identisch ist
- Jede Cross-Reference auf ein verschmolzenes Duplikat wird auf den überlebenden Vertreter umgeschrieben, während die neu aufgebaute klassische Cross-Reference-Tabelle die Objektnummern stabil hält
TPdfDedupReportberichtet behaltene und beschnittene Objektanzahlen sowie verschmolzene Schrift-, Bild- und Form-XObject-Anzahlen pro KategorieTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.81.0
Version 2.80.0
Hinzugefügt (Added)
TPdf.SaveAsReachableschreibt das Dokument als einzelne saubere Revision neu, die nur die vom Katalog und vom Trailer-/Info-Dictionary aus erreichbaren indirekten Objekte behältTPdfPruneReportberichtet die behaltenen und beschnittenen indirekten Objektanzahlen zusammen mit Quell- und Ausgabe-Bytegrößen sowie strukturierten Fehlerursachen für verschlüsselte oder missgebildete Eingaben- Nicht erreichbare Waisenobjekte aus inkrementellen Updates, Seitenzusammenführungen oder reparierten Speicherungen werden entfernt, während die neu aufgebaute klassische Cross-Reference und der Trailer
/Root,/Infound/IDohne Neunummerierung bewahren TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.80.0
Version 2.79.0
Hinzugefügt (Added)
TPdf.CreateDocumentSearcherstellt eine dokumentweite Vorwärts- oder Rückwärtssuche, die jeweils einen Treffer zurückgibt, ohne einen Textindex des gesamten Dokuments aufzubauenTPdfDocumentSearchResultberichtet für jedes Ergebnis die einsbasierte Seite, den Zeichenbereich, den Treffertext und die Rechtecke im Seitenraum- Suchsitzungen akzeptieren
IPdfCancellationToken, behalten nur die aktuellen PDFium-Seiten- und Text-Handles und werden beim Schließen des Dokuments sicher beendet TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.79.0
Version 2.78.0
Geändert (Changed)
TPdfRangeRequestSchedulerverdrängt nun überlappende Transfers niedrigerer Priorität, sodass seitenkritische PDFium-Hints nicht hinter Hintergrund-Downloads warten- Extern verfügbare Sparse-Bytes brechen redundante aktive Transfers ab, während verdrängte oder doppelte Transport-Callbacks False zurückgeben, ohne veraltete Abdeckung zu veröffentlichen
- Die Prioritätsheraufstufung bewahrt unabhängige Wiederholungshistorien, und die Transport-Verdrängung verbraucht nicht mehr das Wiederholungsbudget unberührter Bereichsenden
TPdfRangeRequestStatistics.SupersededRequestCountberichtet Transportarbeit, die durch Hints höherer Priorität oder extern bereitgestellte Abdeckung verdrängt wurdeTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.78.0
Version 2.77.0
Hinzugefügt (Added)
TPdf.SaveAsNormalizedContentschreibt syntax-normalisierten Seiteninhalt in einen Stream oder eine atomar ersetzte Datei und berichtet normalisierte, übersprungene und zusammengeführte SeitenanzahlenNormalizePdfContentSequencebietet begrenzte eigenständige Token-Normalisierung für dekodierte Content-Stream-Sequenzen
Geändert (Changed)
- Seiten-
/Contents-Arrays können nun in einen Stream zusammengeführt werden, wobei Strings, Namen, Inline-Bild-Nutzdaten, unbekannte Operatoren und der grafische Zustand über Streams hinweg bewahrt werden - Missgebildete Token, unausgeglichene Zustandsbereiche, nicht unterstützte Filter, verschlüsselte Eingaben und Neuschreibungen signierter Dokumente haben explizite Richtlinien und strukturierte Statusberichte
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.77.0
Version 2.76.0
Hinzugefügt (Added)
TPdfStreamInspectorinventarisiert beliebige physische PDF-Stream-Objekte und berichtet Objekt-Offsets, rohe Längen, Filterketten, DecodeParms, External-File-Marker, Verschlüsselungszustand sowie native Bild- oder AnhangspfadeCopyRawDatakopiert vollständige kodierte Nutzdaten oder validierte Byte-Fenster, währendDecodeDataASCIIHex-, ASCII85-, LZW-, Flate-, RunLength-, TIFF-8-Bit- und PNG-Prädiktoren in deklarierter Reihenfolge anwendetTPdfStreamInspectOptionsbegrenzt Quell-, Roh-, Dekodier-, Dictionary-, Stream-Anzahl- und Expansionsverhältnis-Ressourcen, mit strukturierten Berichten für Grenzen, missgebildete Daten, nicht unterstützte Codecs, Verschlüsselung und Schreibfehler
Geändert (Changed)
- Die Stream-Längenauflösung legt nun exakte Spannen für direkte und indirekte
/Length-Werte offen, einschließlich Streams der Länge Null und Nutzdaten, die die Literal-Sequenzendstreamenthalten TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.76.0
Version 2.75.0
Hinzugefügt (Added)
TPdfLoadOptionsergänzt kompatible, strikte und Wiederherstellungs-Richtlinien für Datei-, Speicher-, Bytebereich- und benutzerdefinierte Stream-LadevorgängeTPdfLoadReportberichtet die native Wiederherstellungsroute, Xref-Gültigkeit, beschädigte Offsets, Eintragskonflikte, Revisionsanzahlen, Audit-Budgets und strukturierte Probleme für klassische, hybride und Xref-Stream-DokumenteTPdf.SaveAsRepairederstellt eine vollständige Kopie mit einer einzigen Revision und lädt sie unabhängig strikt, bevor der verifizierte Stream geliefert oder eine Zieldatei atomar ersetzt wird
Geändert (Changed)
- Bestehende Lade-Overloads behalten kompatibles Verhalten und veröffentlichen nun native Xref-Gültigkeit und Wiederherstellungsstatus über
LastLoadReport - Striktes Laden lehnt Dokumente ab, die einen nativen Xref-Neuaufbau erforderten oder das Struktur-Audit nicht bestanden haben, während signierte Reparaturausgabe eine explizite Autorisierung durch den Aufrufer erfordert
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.75.0
Version 2.74.0
Hinzugefügt (Added)
TPdf.MergeFilesführt dateibasierte Quelllisten mit Seitenbereichen und Passwörtern pro Quelle zusammen, wobei höchstens ein Quelldokument geöffnet bleibtTPdfBatchMergeOptionsergänzt Stoppen-oder-Überspringen-Fehlerbehandlung, quellbezogene oder gestückelte Importe, Formular- und Outline-Richtlinien, Einfügungssteuerung, Fortschritts-Callbacks, Abbruch, Viewer-Einstellungs-Kopieren und Rollback-SteuerungTPdfBatchMergeReportberichtet committete und zurückgerollte Seiten, Quellergebnisse, native Importaufrufe, größte Charge, Spitzenanzahl offener Quellen, Richtlinienerkennungen, Probleme und den Endstatus
Geändert (Changed)
- Der Standard-Batch-Pfad führt einen nativen Seitenimport pro Quelle aus, sodass PDFium geklonte Objekte über diese Quelle wiederverwenden kann, und schließt die Quelle, bevor die nächste Datei geöffnet wird
- Der gestückelte Modus bietet feinere Abbruchpunkte und kleinere native Batches, während fehlgeschlagene Teilquellen sowie Stop- oder Abbruch-Ergebnisse alle von der Operation eingefügten Seiten entfernen können
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.74.0
Version 2.73.0
Hinzugefügt (Added)
TPdfRandomAccessStorebietet threadsicheres sequenzielles und positioniertes I/O, hält kleine Inhalte in begrenztem Speicher und lagert einmalig in privaten temporären Speicher aus, sobald eine vom Aufrufer gewählte Obergrenze erreicht istTPdf.SaveMemoryLimitundSaveTemporaryDirectorykonfigurieren Speicher-Staging, währendLastSaveSpillCountundLastSaveLargestMemoryBuffermessbare Diagnosen pro Speichervorgang offenlegen
Geändert (Changed)
- Speicher-, Standardkonvertierungs-, Validierungs-, Verschlüsselungs-, DSS- und PAdES-Staging-Puffer teilen sich nun begrenzten Arbeitsspeicher mit exklusiven Delete-on-Close-Spill-Dateien und Memory-Scrubbing
- Benutzerdefinierte PDFium-Block-Callbacks serialisieren gewöhnliche Stream-Seeks und verwenden vom Cursor unabhängige positionierte Lesevorgänge, wenn sie auf
TPdfRandomAccessStorebasieren - Der dateibasierte XFA-Fähigkeits-Scan liest nun überlappende Blöcke fester Größe, statt das vollständige PDF in den Speicher zu kopieren
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.73.0
Version 2.72.0
Hinzugefügt (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSaveundEndIncrementalSavebieten eine Revisionssitzung, die nur geänderte oder neu erstellte indirekte Objekte anhängtTPdfIncrementalCommitInfoberichtet für jeden Commit die Anzahl geänderter Objekte, angehängte Bytes, gesamte Ausgabe-Bytes und die Anzahl erfolgreicher Revisionen
Geändert (Changed)
- Jeder geänderte Commit bewahrt die vollständige vorherige Ausgabe als exaktes Byte-Präfix, gibt keine Revision aus, wenn sich nichts geändert hat, und führt das klassische oder Xref-Stream-Format der Quelle fort
- Native inkrementelle Xref-Stream-Ausgabe wird mit ihrem erforderlichen Typ, Selbsteintrag, ihrer Länge, ihrem Index und ihrem Objekt-Terminator repariert, bevor sie weiterverarbeitet wird
- Verschlüsselte Dokumente werden abgelehnt, bevor eine Sitzung beginnt, während signierte Dokumente eine explizite Aufrufer-Berechtigung erfordern, damit die Signaturrichtlinie nicht versehentlich umgangen werden kann
- Die Datei-Überladung stellt eine temporäre Geschwisterdatei fertig, bevor sie das Ziel atomar ersetzt, und rollt den Sitzungszustand nach jedem Schreib- oder Ersetzungsfehler zurück
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.72.0
Version 2.71.0
Hinzugefügt (Added)
TPdf.SaveAsObjectStreamschreibt PDF-1.5+-Dateien mit begrenzten komprimierten Objektgruppen und einem reinen Xref-Stream mit vollständigen Typ-2-EinträgenPackPdfObjectStreamskann klassische, hybride, Xref-Stream- und bestehende Objekt-Stream-Eingaben nach Auflösung der aktiven Revision modernisieren
Geändert (Changed)
- Seitenlokale Objektordnung, adaptive Xref-Feldbreiten, direkter Katalogzugriff und konfigurierbare Obergrenzen für Mitglieder und dekodierte Bytes bringen Dateigröße und Random-Access-Performance ins Gleichgewicht
- Die Datei-Überladung stellt eine temporäre Geschwisterdatei fertig, bevor sie das Ziel atomar ersetzt, während ungültige inkrementelle, Versions- und Gruppierungsoptionen abgelehnt werden, bevor die Ausgabe beginnt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.71.0
Version 2.70.0
Hinzugefügt (Added)
TPdf.SaveAsLinearizedschreibt ein echtes Fast-Web-View-PDF in einen Stream oder eine Datei und verwendet dabei Erstseiten-Objektgruppierung, zwei Cross-Reference-Sektionen sowie Annex-F-Seitenoffset- und Shared-Object-Hint-Tabellen- Aktive Objekt-Stream-Mitglieder werden automatisch materialisiert, sodass Xref-Stream- und Objekt-Stream-Eingaben zu bereichsfreundlicher Ausgabe werden, ohne den sichtbaren Seiteninhalt zu ändern
Geändert (Changed)
- Die Datei-Überladung stellt eine temporäre Geschwisterdatei fertig, bevor sie das Ziel atomar ersetzt, während die Stream-Überladung die normalen PDFium-Speicheroptionen und expliziten Versionsprüfungen behält
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.70.0
Version 2.69.0
Hinzugefügt (Added)
TPdfRangeRequestSchedulerwandelt PDFium-Bytebereich-Hints in priorisierte, zusammengeführte, größenbegrenzte Transportarbeit um, ohne einen zusammenhängenden Download zu erzwingen- Vollständige und teilweise Fertigstellung, begrenzte Wiederholungen, Sparse-Verfügbarkeits-Deduplizierung, Anfragestatistiken und generationssicherer Abbruch unterstützen HTTP-Range- und benutzerdefinierte Transport-Pipelines
TPdfProgressiveDocument.RangeRequestserhält automatisch Dokument-, Formular- und Seiten-Hints und stuft nur genau die Bytes herauf, die eine interaktive Seite blockieren
Geändert (Changed)
CancelProgressiveLoadbricht nun aktive Bereichsarbeit vor nativer Verfügbarkeits- und Stream-Abbau ab, und veraltete Transport-Fertigstellungen werden sicher ignoriertTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.69.0
Version 2.68.0
Hinzugefügt (Added)
TPdfProgressiveDocumenthält PDFiums Verfügbarkeitssitzung am Leben, während ein entfernter oder wachsender Random-Access-Stream die von PDFium angeforderten Bytebereiche empfängtCheckDocumentAvailability,CheckFormAvailabilityundLoadAvailablePagegeben zusammengeführteTPdfDownloadRange-Hints zurück, sodass ein Host nur die Daten abrufen kann, die zum Öffnen und Anzeigen einer linearisierten Seite nötig sindAvailableByteCountunterstützt monotone zusammenhängende Downloads, währendOnDataAvailableSparse- und Out-of-Order-Bereichs-Caches unterstützt
Geändert (Changed)
- Linearisierte Dateien verwenden PDFiums native progressive Dokument-, Formular- und Seiten-Gates; nicht linearisierte Dateien wechseln nach Vorliegen der vollständigen Datei automatisch zum nativen Custom-Stream-Lader
TPdfStreamAdapterkann eine logische Endgröße offenlegen, die von den aktuell gespeicherten Bytes abweicht, und bewahrt dabei die explizite 4-GiB-FPDF_FILEACCESS-GrenzeTPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.68.0
Version 2.67.0
Hinzugefügt (Added)
TPdfView.AllowFormEventsschaltet die Maus-, Tastatur- und Fokus-Ereignisse aus, die der Viewer an die Form-Fill-Schicht weiterleitet — für einen reinen Lese-Viewer oder einen, der die Formularinteraktion selbst steuert- Formularfelder rendern auch bei ausgeschalteter Option weiterhin normal: Seitenladen und -schließen bleiben bewusst ungeprüft, da diese die Formularschicht initialisieren statt auf Eingaben zu reagieren
- Die Option reiht sich in die bestehenden Schalter
AllowUserPageChangeundAllowUserTextSelectionein und ist standardmäßig True, sodass das bestehende Verhalten unverändert bleibt
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.67.0
Version 2.66.0
Hinzugefügt (Added)
- Benannte Actions, die ein Dokument auslöst (ISO 32000-1 §12.6.4.11), erreichen den Host nun über das neue Ereignis
OnNamedAction; zuvor wurde jede davon verworfen - Ungenutzt bewegen die vier Standard-Navigationsnamen —
NextPage,PrevPage,FirstPage,LastPage— die Seite und begrenzen sie am Anfang und am Ende, statt umzuschlagen TPdf.PerformNamedActionermöglicht einer Anwendung, dasselbe Verhalten direkt auszulösen, und gibt False für einen Namen zurück, der keine von der Bibliothek gelieferte Bedeutung hat
Behoben (Fixed)
- Ein Verschlüsselungstest maß einen Stream-Körper durch Rückwärtsscan ab
endstream, was gelegentlich ein Chiffretext-Byte für einen Zeilenterminator hielt und einen intermittierenden Fehler meldete; die Bibliothek war durchgehend korrekt
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.66.0
Version 2.65.0
Hinzugefügt (Added)
BuildToUnicodeCMaperzeugt die ToUnicode-CMap (ISO 32000-1 §9.10.3), die eine CID-Schrift benötigt, damit ihr Text kopiert, durchsucht und von unterstützender Technik gelesen werden kann — ohne eine solche rendert der Text korrekt, extrahiert sich aber als nichts- Einträge werden am Spezifikationslimit von 100 pro Block gestückelt, doppelte Glyphen werden einmal geschrieben, und
.notdefwird übersprungen - Die CMap folgt der Konvention CID = GID, sodass neben ihr kein
CIDToGIDMap-Stream nötig ist
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.65.0
Version 2.64.0
Hinzugefügt (Added)
- Freihand- und Stempelanmerkungen zeichnen sich aus ihren eigenen Seitenobjekten statt aus dem Seiten-Content-Stream, und diese Objekte sind nun erreichbar:
AnnotationObjectCountundAnnotationObjectInfolesen sie,AddPathToAnnotationübergibt der Anmerkung einen mitCreatePathgebauten Pfad, undRemoveAnnotationObjectlöscht eines - Der Aufbau einer Stempel-Darstellung erfordert kein externes Werkzeug mehr: den Pfad wie gewohnt erstellen und dann der Anmerkung statt der Seite übergeben
- PDFium akzeptiert Seitenobjekte nur für Freihand- und Stempel-Subtypen; jeder andere Subtyp wird mit einer Meldung abgelehnt, die die Einschränkung benennt, statt undurchsichtig zu scheitern
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.64.0
Version 2.63.0
Hinzugefügt (Added)
TPdf.AddStandardFontTextzeichnet Text mit einer der 14 Schriften, die jeder PDF-Reader bereitstellen muss, und bettet überhaupt kein Schriftprogramm ein — die entstehende Datei ist messbar kleiner als derselbe Text, gezeichnet mitAddText, das die gefundene System-Schrift einbettet- Die neue Enumeration
TPdfStandardFontbenennt alle 14 Schriften, sodass ein Aufrufer einen Basis-Schriftname nicht falsch tippen kann; PDFium vergleicht diese Namen exakt, und ein Tippfehler würde stillschweigend keine Schrift liefern - PDF/A und PDF/X verlangen beide, dass jede Schrift eingebettet ist; Ausgaben für diese Profile sollten daher weiterhin
AddTextverwenden
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.63.0
Version 2.62.0
Hinzugefügt (Added)
TPdf.TextObjectGlyphOutlineliefert die Kontur einer Glyphe der Schrift eines Textobjekts als Pfadsegmente, zum Umwandeln von Text in Vektorgrafik oder zum Untersuchen einer Glyphe, die eine Schriftersetzung verändert haben könnte- Das Ergebnis verwendet den bestehenden Typ
TPdfPathSegmentswieder, sodass es sich genau wie die Kontur eines gezeichneten Pfadobjekts liest - Koordinaten liegen im eigenen Design-Raum der Schrift, normalisiert, sodass ein Em 1.0 ist; die angeforderte Schriftgröße skaliert sie nicht, sodass ein Aufrufer, der Geräteeinheiten möchte, selbst mit der Punktgröße multipliziert
- Ein leeres Ergebnis bedeutet, dass die Schrift für diese Glyphe keine Kontur offenlegt, was kein Fehler ist; die Anfrage einer Glyphe eines Nicht-Text-Objekts löst eine Exception aus
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.62.0
Version 2.61.0
Hinzugefügt (Added)
TPdf.InspectAvailabilityberichtet, was PDFium über ein PDF sagen kann, ohne es als Dokument zu laden: ob die Datei linearisiert ist („web optimized“), ob ein vollständiges Parsen gelingen würde, ob sie Formulardaten trägt und welche Seite ein Viewer zuerst zeigen würde- Die neuen Typen
TPdfAvailability,TPdfLinearizationundTPdfFormAvailabilitytragen die Antworten; der Stream wird gelesen, aber nicht behalten, und seine Position wird bei der Rückkehr wiederhergestellt - Damit schließt sich die letzte Lücke in der Familie
FPDFAvail_*, die gebunden und geladen war, aber in der gesamten Bibliothek keinen Aufrufer hatte - Delphi, Lazarus und C++Builder decken jeweils die berichteten Fakten, die Stream-Positions-Garantie und die Ablehnung nil-Streams ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.61.0
Version 2.60.0
Hinzugefügt (Added)
- Marked Content (ISO 32000-1 §14.6) ist nun über die High-Level-API erreichbar:
PageObjectMarksliest jedes BDC-Tag und seine Eigenschaftsliste von einem Seitenobjekt,AddPageObjectMarkschreibt eines,RemovePageObjectMarklöscht eines, undPageObjectMarkedContentIDberichtet die MCID - Die neuen Typen
TPdfContentMark,TPdfContentMarkParamundTPdfMarkParamKindtragen den Tag-Namen und seine typisierten Parameter (Integer, Float, String, Blob), wobei die Wertart von PDFium aufgelöst wird, statt von dem Getter erraten zu werden, der erfolgreich ist - Das Hinzufügen eines Marks baut den Seiten-Content-Stream neu auf, sodass das Tag eine Speicherung überlebt; das musste explizit sein, weil
SaveAsInhalt nicht von selbst neu erzeugt - Delphi, Lazarus und C++Builder führen jeweils sechs Fälle, darunter einen, der den gespeicherten Content-Stream aufbläht, um zu bestätigen, dass der BDC-Operator und seine Eigenschaftsliste wirklich angekommen sind
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.60.0
Version 2.59.0
Hinzugefügt (Added)
TPdfAnnotationerhältHasLinkUriundLinkUri, sodassCreateAnnotationnun einen funktionierenden Weblink erzeugen kann: die Anmerkung wird mit einer/URI-Action gespeichert, die auf die angegebene Adresse zeigt- Das Setzen einer Link-URI auf einem anderen Subtyp als
anLinklöst eine Exception aus, da nur eine Link-Anmerkung ein Action-Dictionary trägt - Das Feld ist vorerst nur schreibbar; das Zurücklesen eines Link-Ziels läuft über die Familie
FPDFLink_*, die das Dokument-Handle benötigt - Delphi, Lazarus und C++Builder verifizieren alle, dass die gespeicherten Bytes die
/URI-Action und die Zieladresse tragen
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.59.0
Version 2.58.12
Hinzugefügt (Added)
- Die PDF/X-Validierung meldet
pvxiTrimBoxWithArtBox, wenn eine Seite/TrimBoxund/ArtBoxzusammen trägt; beide geben die fertige Seite an, sodass ein RIP nicht wissen kann, welche maßgeblich ist (ISO 15930) - Die PDF/X-Validierung meldet
pvxiPageBoxOutsideMediaBox, wenn/TrimBoxoder/BleedBoxüber die/MediaBoxhinausreicht, einschließlich einer Box mit negativem Ursprung; eine Box jenseits des Mediums kann nicht belichtet werden - Rechtecke werden vor dem Vergleich normalisiert, sodass beide Eckreihenfolgen akzeptiert werden und eine Box, die die Medienkante exakt berührt, weiterhin validiert
- Preflight-Berichte klassifizieren beide Probleme unter Struktur und nennen das konkrete Gegenmittel
- Delphi, Lazarus und C++Builder decken alle die beiden abgelehnten Fälle und den konformen Fall ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.12
Version 2.58.11
Hinzugefügt (Added)
- Die PDF/UA-Validierung meldet
pvuaiTociWithoutToc, wenn ein Dokument TOCI-Einträge taggt, aber nie den TOC-Container taggt, zu dem sie gehören, wodurch unterstützende Technik Inhaltsverzeichniseinträge ohne Inhaltsverzeichnis ankündigt (ISO 14289-1 §7.7) - Preflight-Berichte klassifizieren das Problem unter Struktur und empfehlen, die Einträge in ein TOC-Element einzuschließen
- C++Builder erhält neben den Delphi- und Lazarus-Fällen seine erste PDF/UA-Testabdeckung
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.11
Version 2.58.10
Hinzugefügt (Added)
- Die PDF/A-Validierung meldet
pvaiSymbolicTrueTypeEncoding, wenn eine symbolische TrueType-Schrift einen/Encoding-Eintrag trägt; ISO 19005-1 §6.3.7 lässt nur die eingebaute cmap der Schrift zu, sodass ein/Encodingihr widersprechen würde - Das symbolische Flag wird aus dem
/FontDescriptorgelesen, ob es inline im Schrift-Dictionary oder indirekt referenziert geschrieben ist; eine nicht-symbolische Schrift behält ihr erforderliches/WinAnsiEncodingoder/MacRomanEncoding, ohne markiert zu werden - Preflight-Berichte klassifizieren das Problem unter Inhalt und empfehlen, den Eintrag zu entfernen
- Delphi und Lazarus decken den markierten Fall sowie beide akzeptierten Fälle ab; C++Builder deckt den markierten und den nicht-symbolischen Fall ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.10
Version 2.58.9
Hinzugefügt (Added)
- Die PDF/A-Validierung meldet die Container-Implementierungsgrenzen von ISO 19005-1 Annex C:
pvaiNameOverLimitfür Namen länger als 127 Bytes,pvaiArrayOverLimitjenseits von 8191 Elementen,pvaiDictOverLimitjenseits von 4095 Einträgen undpvaiNestingOverLimitjenseits von 28 Verschachtelungsebenen - Die Grenzen sind einschließend, sodass ein Container, der exakt auf einer liegt, weiterhin validiert; Tests fixieren sowohl die abgelehnte als auch die akzeptierte Seite jeder Grenze
- Preflight-Berichte klassifizieren die vier Probleme unter Struktur und nennen in jeder Empfehlung die konkrete Grenze
- Delphi und Lazarus decken alle vier Grenzen sowie die Grenzfälle ab; C++Builder deckt die Array-Grenze und die Grenzfälle ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.9
Version 2.58.8
Hinzugefügt (Added)
- Die PDF/R-Validierung meldet
pvriPageImageMismatch, wenn die Bildanzahl nicht zur Seitenanzahl passt; ISO 23504-1 §6.5.1 macht jede Seite zu genau einem Streifenbild, sodass eine Seite ohne oder mit mehreren nicht konform ist - Delphi-, Lazarus- und C++Builder-Tests decken eine Seite ohne Bild, eine Seite mit zwei Bildern und den konformen Ein-Bild-Fall ab
Geändert (Changed)
- Die PDF/R-Marker-Injektionstests starten nun von einer Quellseite, die bereits ein Streifenbild trägt, da Marker-Injektion Metadaten hinzufügt und keinen Seiteninhalt liefern kann
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.8
Version 2.58.7
Hinzugefügt (Added)
- Die PDF/R-Validierung meldet
pvriFontForbidden, wenn eine Seite eine Schriftressource benennt; eine PDF/raster-Seite trägt das gescannte Bild und nichts anderes (ISO 23504-1 §6.5.2) - Die PDF/R-Validierung meldet
pvriForbiddenImageFilterfür Streifenkodierungen außerhalb der weißen Liste, sodass/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodeund/Cryptabgelehnt werden, während/CCITTFaxDecode,/DCTDecode,/JPXDecodeund/FlateDecodedurchgehen (ISO 23504-1 §6.6) - Preflight-Berichte klassifizieren beide Probleme unter Inhalt und empfehlen das konkrete Gegenmittel
- Delphi-, Lazarus- und C++Builder-Tests decken eine Schriftressource, einen abgelehnten Filter und eine Seite ab, die nur Kodierungen der weißen Liste verwendet
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.7
Version 2.58.6
Hinzugefügt (Added)
- Die PDF/E-Validierung meldet
pveiFontNotEmbedded, wenn ein Dokument Schriftverwendung zeigt, aber kein eingebettetes Schriftprogramm trägt, sodass die Anforderung sowohl auf dem DLL-freien Pfad als auch über PDFium geprüft wird - Eine technische Zeichnung muss Jahrzehnte später identisch rendern, daher nimmt ISO 24517-1 keine der 14 Standardschriften aus; die Prüfung gilt gleichermaßen für
/Type1,/TrueType,/Type0und/MMType1 - Preflight-Berichte klassifizieren das neue Problem unter Inhalt und empfehlen, jedes Schriftprogramm einzubetten
- Delphi-, Lazarus- und C++Builder-Tests decken einen Deskriptor ohne Programm, ein eingebettetes
/FontFile2und ein Dokument ab, das überhaupt keine Schrift verwendet
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.6
Version 2.58.5
Hinzugefügt (Added)
InjectPdfEMarkersschreibt nun den OutputIntent, den ISO 24517-1 §6.2 verlangt: ein eingebettetes sRGB-ICC-Zielprofil, einen/GTS_PDFE1-OutputIntent, der es benennt, und das Katalog-Array/OutputIntents, alles als Teil desselben inkrementellen Updates- Der Profil-Stream leitet sein
/Naus dem ICC-Header ab, statt drei Komponenten anzunehmen, sodass ein CMYK-Profil korrekt beschrieben würde - Die PDF/E-Validierung meldet
pveiMissingOutputIntentundpveiMissingIccProfile, sodass ein Kandidat ohne angegebene Farbbedingung nicht mehr akzeptiert wird - Delphi-, Lazarus- und C++Builder-Tests decken einen akzeptierten OutputIntent, einen ohne Zielprofil und einen Katalog ohne jeden OutputIntent ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.5
Version 2.58.4
Hinzugefügt (Added)
- Die PDF/X-Validierung meldet
pvxiFontNotEmbeddednun aus einem Byte-Scan, sodass eine nicht eingebettete Schrift auf dem DLL-freien Pfad erfasst wird statt nur über die PDFium-gestützte Prüfung - Anders als in PDF/A sind die 14 Standardschriften in PDF/X nicht ausgenommen, sodass jede Schriftverwendung ohne eingebettetes Schriftprogramm gemeldet wird
- Die Prüfung bleibt konservativ: sie schlägt nur an, wenn die Datei Schriftverwendung zeigt, aber überhaupt kein
/FontFile,/FontFile2oder/FontFile3trägt, weil das Zählen von Deskriptoren gegen Programme bei gemeinsam genutzten Deskriptoren Fehlalarme erzeugt - Delphi-, Lazarus- und C++Builder-Tests decken einen Deskriptor ohne Programm, ein eingebettetes Programm und ein Dokument ab, das keine Schrift verwendet
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.4
Version 2.58.3
Hinzugefügt (Added)
- Die PDF/X-Validierung meldet nun
pvxiColorSpaceForbidden, wenn ein PDF/X-1a-Kandidat/DeviceRGB,/CalRGBoder/Labträgt, was ISO 15930-1 §6.2 vom CMYK-Austausch ausschließt - Die Prüfung ist allein auf PDF/X-1a begrenzt, sodass PDF/X-3 und spätere RGB sowie die geräteunabhängigen Räume, die sie mit dem OutputIntent paaren, weiterhin zulassen
- Nur eindeutige Farbraum-Namenstokens werden geprüft; ein
ICCBased-Stream benötigt ein aufgelöstes/Nund verbleibt bei der Objektmodell-Schicht - Delphi-, Lazarus- und C++Builder-Tests decken einen markierten RGB-Raum, einen markierten Lab-Raum, ein akzeptiertes CMYK- und Graustufen-Paar sowie den zulässigen Fall auf PDF/X-3 ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.3
Version 2.58.2
Hinzugefügt (Added)
- Die PDF/X-Validierung meldet nun
pvxiTransparencyForbiddenfür eine Transparenzgruppe oder eine aktive Softmask, was ISO 15930-1 §6.2 (PDF/X-1a) und ISO 15930-3 §6.3 (PDF/X-3) verbieten - Die Prüfung ist an die erkannte Konformität gebunden, sodass PDF/X-4 und PDF/X-6 Transparenz weiterhin zulassen und eine Datei, deren Level nicht identifiziert werden konnte, nie für eine Regel markiert wird, die für sie vielleicht nicht gilt
- Eine mit
/SMask /Noneexplizit abgeschaltete Softmask wird nicht als Transparenz behandelt PdfHasActiveSMaskzog vonFPdfPdfain die SchnittstelleFPdfPdfCommonum, sodass jeder Validator eine gemeinsame Softmask-Regel nutzen kann- Delphi-, Lazarus- und C++Builder-Tests decken eine markierte Gruppe auf X-1a, eine markierte Softmask auf X-3, eine abgeschaltete Softmask und den zulässigen Fall auf X-4 ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.2
Version 2.58.1
Hinzugefügt (Added)
- Die PDF/X-Validierung prüft nun die Gestalt des OutputIntents, den ISO 15930-7 §6.2.4 verlangt:
pvxiOutputIntentSchememeldet einen Subtypen, der vorhanden, aber nicht/GTS_PDFXist, undpvxiOutputIntentMissingIdentifiermeldet ein fehlendes/OutputConditionIdentifier - Der Subtyp wird als vollständiges Namenstoken verglichen, sodass ein längerer Name wie
/GTS_PDFXVersionnicht mehr durchgeht, während eine mit#xxescapte Schreibweise desselben Namens weiterhin durchgeht - Ein OutputIntent, der überhaupt keinen Subtypen trägt, wird unangetastet gelassen, da sein Fehlen bereits von den Problemen auf Markerebene gemeldet wird
- Preflight-Berichte ordnen beide Probleme der OutputIntent-Kategorie zu und schlagen die Behebung vor
- Delphi-, Lazarus- und C++Builder-Tests decken den akzeptierten Subtypen, einen PDF/A-Subtypen, ein längeres Namenstoken, einen fehlenden Subtypen und einen fehlenden Bedingungsbezeichner ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.58.1
Version 2.58.0
Geändert (Changed)
- Alle 35 Callbacks, die PDFium aus seinen eigenen C++-Frames aufruft (Form-Fill, XFA, JavaScript-Plattform, progressive Render-Pause sowie Stream-Lesen und -Schreiben), fangen nun jede Pascal-Exception ab und geben den dokumentierten Fehlerwert zurück, statt über die Sprachgrenze hinaus aufzuwickeln
- Ein Event-Handler, der eine Exception auslöst, eine fehlgeschlagene Allokation oder ein unerwarteter Fehler innerhalb eines Callbacks kann daher den Prozess nicht mehr mitreißen oder PDFium in einem undefinierten Zustand hinterlassen
Behoben (Fixed)
- Das Registrieren eines Formular-Timers leckte seinen Eintrag, wenn der zugrunde liegende Timer nicht erstellt werden konnte
Hinzugefügt (Added)
- Delphi-, Lazarus- und C++Builder-Tests decken nun das Speichern in einen Zielstream ab, der Schreibvorgänge verweigert, und stellen sicher, dass das Dokument danach nutzbar und speicherbar bleibt
Version 2.57.8
Behoben (Fixed)
- Ältere Delphi-Versionen (XE5 und früher) brachten die Testversion der Bibliothek nicht mehr durch den Compile mit
E2003 Undeclared identifier: 'GetTickCount64'inFPdfPades.pas, weil die mit diesen Compilern gelieferte Windows-Unit das Symbol nicht exportiert - Dieselben Compiler scheiterten auch an
GetUserDefaultLocaleNameinPDFium.pasund an der Zuweisung vonTBytesanarray of ByteinGetXfaFormPackets, sodass der XFA-Locale-Callback und der Paket-Snapshot nun auch auf diesen Compilern bauen
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.8
Version 2.57.7
Geändert (Changed)
- Jede Neuschreibung beim Speichern schneidet den Zielstream nun vor dem Schreiben ab, statt ihn nur zurückzuspulen, sodass ein vom Aufrufer bereitgestellter Puffer, der zuvor ein längeres Dokument enthielt, keinen veralteten Anhang hinter dem neuen
%%EOFbehalten kann - Delphi-, Lazarus- und C++Builder-Tests decken nun das Speichern in einen vorgefüllten Stream ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.7
Version 2.57.6
Behoben (Fixed)
- Der Objektscan vor der Verschlüsselung akzeptierte Ziffernfolgen beliebiger Länge, sodass eine lange Zahl irgendwo in der Datei in eine negative oder ungültige Objektnummer umschlagen und einen Phantom-Eintrag in die neu aufgebaute Cross-Reference-Tabelle einfügen konnte
- Objektnummern oberhalb der ISO 32000-1 Annex C-Grenze und Generationen über 65535 werden nun als Objekt-Header abgelehnt, statt abgeschnitten zu werden
Hinzugefügt (Added)
- Delphi-, Lazarus- und C++Builder-Tests stellen nun die exakte Anzahl der in-use-Einträge der neu aufgebauten Tabelle fest
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.6
Version 2.57.5
Behoben (Fixed)
- Die Verschlüsselung mit
EncryptMetadata = Falseschrieb/EncryptMetadata falsein das Encrypt-Dictionary, verschlüsselte aber dennoch den Metadaten-Stream des Dokuments, sodass ein Reader, der dieser Deklaration folgte, unlesbares XMP vorfand - Ein
/Type /Metadata-Stream wird nun unverändert kopiert, wenn die Metadaten-Verschlüsselung ausgeschaltet ist, während jeder andere Stream weiterhin verschlüsselt wird
Hinzugefügt (Added)
AnsiNameTokenMatchesKeyist nun Teil der SchnittstelleFPdfPdfCommonfür delimiter-bewusste Namensvergleiche- Delphi-, Lazarus- und C++Builder-Tests decken nun beide Metadaten-Verschlüsselungsmodi ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.5
Version 2.57.4
Behoben (Fixed)
- Die während der Verschlüsselung neu aufgebaute Cross-Reference-Tabelle ließ den Pflicht-Freelist-Kopf Objekt 0 aus, den ISO 32000-1 §7.5.4 verlangt, sodass ihre erste Subsektion ein Objekt zu spät begann
- Jeder neu aufgebaute Eintrag behauptete Generation 0; Objekte, die mit einer höheren Generation geschrieben wurden, behalten sie nun, sodass die Tabelle mit den Objekt-Headern übereinstimmt, auf die sie zeigt
Hinzugefügt (Added)
- Delphi-, Lazarus- und C++Builder-Tests decken nun den Freelist-Kopf-Eintrag und die Bewahrung der Generation in der neu aufgebauten Tabelle ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.4
Version 2.57.3
Behoben (Fixed)
- Die verschlüsselte Ausgabe ließ das Schlüsselwort
streamjedes Stream-Objekts weg, sodass die gespeicherte Datei keine gültige PDF-Syntax mehr war und strikte Reader den Seiteninhalt als weder Stream noch Array von Streams meldeten - Die
/Length-Neuschreibung fand/Lengthals bloße Teilzeichenkette, sodass ein Stream-Dictionary mit/Length1(jede eingebettete Schrift) seinen Schlüsselnamen beschädigt bekam, während die tatsächliche Länge veraltet blieb - Ein Stream, der seine Länge indirekt als
/Length N 0 Rangab, bekam die Objektnummer mit der neuen Länge überschrieben; der Eintrag wird nun durch die direkte verschlüsselte Länge ersetzt - Ein Stream-Dictionary ganz ohne
/Lengtherhält nun eines, statt den Reader ohne Länge zu lassen
Hinzugefügt (Added)
AnsiFindDictKeyTokenist nun Teil der SchnittstelleFPdfPdfCommonfür delimiter-bewusste Dictionary-Schlüsselsuchen auf oberster Ebene- Delphi-, Lazarus- und C++Builder-Tests decken nun die Bewahrung von
/Length1, den Ersatz indirekter Längen und die Übereinstimmung der Stream-Körpergröße ab
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.3
Version 2.57.2
Behoben (Fixed)
SaveAsEncryptedundSaveAsEncryptedToStreammitRevision = erR6erzeugten Dokumente, die in etwa einer von vier Dateien ihr eigenes korrektes Passwort zurückwiesen, weil der Rundenzähler des ISO 32000-2 §7.6.4.3 Algorithmus 2.B eine Runde zu niedrig startete und die zusätzliche Runde die Werte/U,/O,/UEund/OEveränderte- R6-verschlüsselte Dokumente öffnen nun mit dem Benutzer- oder Eigentümerpasswort in jedem konformen Reader wieder und lehnen weiterhin ein falsches Passwort ab
Hinzugefügt (Added)
- Die Lazarus- und C++Builder-Testsuiten erhielten Verschlüsselungsabdeckung, die zuvor nur Delphi hatte: R6-Schlüssellängen, Encrypt-Dictionary-Felder, einen wiederholten Verschlüsselungs- und Wiederöffnungs-Round-Trip sowie die Zurückweisung falscher Passwörter
Geändert (Changed)
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.2
Version 2.57.1
Geändert (Changed)
- Das Tippen in ein Formularfeld, das Bewegen der Textmarke und das Umschalten von Kontrollkästchen zeichnen nun nur den Bereich neu, den PDFium als beschädigt meldet, statt den gesamten Viewer
- Beschädigungsboxen werden für die nach oben zeigende Seiten-Y-Achse normalisiert, um ein Pixel verbreitert, damit anti-aliased Widget-Ränder sauber bleiben, und auf den sichtbaren Client-Bereich beschnitten
- Eine Beschädigungsbox, die vollständig aus dem Viewport gescrollt ist, plant keine Neuzeichnung mehr ein, während eine inaktive Ansicht oder eine nicht gemappte Seite weiterhin auf eine vollständige Neuzeichnung zurückfällt
- Delphi-, Lazarus- und C++Builder-Tests decken nun begrenzte Formular-Invalidierung, gespiegelte Seitenboxen, Off-Screen-Boxen und die Sicherheit inaktiver Ansichten ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.1
Version 2.57.0
Hinzugefügt (Added)
TPdfThumbnailView.Orientationunterstützt vertikale und horizontale Vorschaulayouts und behält dabei die bestehende vertikale Voreinstellung beiFirstVisiblePageIndex,LastVisiblePageIndexundEnsureCurrentPageVisiblemachen den Vorschausize-Bereich mit einsbasierten Seitenindizes sichtbar und steuern ihn
Geändert (Changed)
- Das Ändern von
CurrentPageIndexscrollt die ausgewählte Vorschau in beiden Ausrichtungen in den sichtbaren Bereich - Delphi-, Lazarus- und C++Builder-Tests decken nun Orientierungsvoreinstellungen, Umschaltung, sichtbare Bereiche und die Sichtbarkeit der ausgewählten Seite ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.57.0
Version 2.56.2
Geändert (Changed)
HighlightSearchText,AddSearchTextHighlightundClearHighlightinvalidieren nun nur die Geräterechtecke für Suchbereiche, die hinzugefügt oder entfernt wurden, anstatt die gesamte Ansicht neu zu zeichnen- Das Ersetzen von Hervorhebungen durch dieselben Treffer oder das Anhängen doppelter Treffer plant keine unnötige Neuzeichnung mehr ein
- Delphi-, Lazarus- und C++Builder-Tests decken nun begrenzte Invalidierung, idempotente Aktualisierungen, Löschen und Sicherheit inaktiver Ansichten ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.56.2
Version 2.56.1
Geändert (Changed)
TPdfThumbnailViewverwendet gerenderte Bitmaps für Seiten weiter, die über Neuzeichnungen und benachbarte Scrollpositionen sichtbar bleiben- Der Cache behält nur den aktuellen sichtbaren Seitenbereich und gibt Einträge genau dann frei, wenn Seiten diesen Bereich verlassen, das zugewiesene Dokument sich ändert oder sich die Vorschaudimensionen ändern
- Delphi-, Lazarus- und C++Builder-Tests decken nun Cache-Wiederverwendung, Viewport-Beschneidung, Größeninvalidierung, Dokumentersetzung und Komponentenzerstörung ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.56.1
Version 2.56.0
Hinzugefügt (Added)
TPdfView.CutSelectedFormTextToClipboardundTPdfView.PasteFormTextFromClipboardbieten Unicode-Zwischenablagebearbeitung für das fokussierte bearbeitbare Formular-Widget
Geändert (Changed)
- Fokussierte Formular-Editoren behandeln nun die Standard-Tastaturkürzel Kopieren, Ausschneiden, Einfügen und Alles auswählen, bevor sie die Texteingabe an PDFium weiterleiten
- Ausschneiden und Einfügen weisen schreibgeschützte Felder und Sitzungen ohne Formular-Ausfüll- oder Änderungsberechtigung zurück, während Ausschneiden erfolgreich kopiert, bevor der ausgewählte Text entfernt wird
- Delphi-, Lazarus- und C++Builder-Tests decken nun Verhalten ohne Fokus, Tastaturkürzel-Roundtrips und das Zurückweisen schreibgeschützter Felder ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.56.0
Version 2.55.0
Hinzugefügt (Added)
TPdfView.AddSearchTextHighlighthängt eindeutige Treffer für einen weiteren Suchbegriff an das aktuelle Seiten-Overlay an, sodass mehrere Abfragen gemeinsam hervorgehoben bleiben
Geändert (Changed)
HighlightSearchTextbleibt der Ersatz-Einstiegspunkt und nutzt nun den additiven Scanner, während doppelte Zeichenbereiche ignoriert werden undClearHighlightdie gesamte angesammelte Menge entfernt- Delphi-, Lazarus- und C++Builder-Tests decken nun die Akkumulation unterschiedlicher Abfragen und die Unterdrückung doppelter Bereiche ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.55.0
Version 2.54.0
Hinzugefügt (Added)
TPdfstellt nun vollständige Seitenobjekt-Snapshots, gestapelte Stilaktualisierungen, affine Objekttransformationen, Pfadsegmente, Clip-Pfade und Form-XObject-Kindobjekte bereit- Die Zeicheninspektion umfasst nun Füll- und Strichfarben, Schriftname und -flags, lose Glyph-Grenzen, effektive Matrizen, Textobjekt-Handles und die Umrechnung von Zeichen- in Textindex
- Anmerkungen führen nun Rahmengeometrie sowie normale, Rollover- und Down-Darstellungsströme in beide Richtungen
- Neue rohe und dekodierte Vorschauzugriffe, Seiteninhalt- und Anmerkungs-Transformationen sowie
RenderPageWithMatrixbieten direkte erweiterte Render- und Bearbeitungspfade
Geändert (Changed)
- Stiländerungen an Seitenobjekten können als ein Stapel committet werden, sodass PDFium den Seiteninhalt nur einmal regeneriert
- Das Matrix-Rendering verwendet den bestehenden Zero-Copy-Bitmap-Pfad, wenn das Ziel-Bitmap-Layout kompatibel ist
Version 2.53.1
Behoben (Fixed)
- Die eingebaute chinesische Kopieren-Menübeschriftung verwendet nun kodierungsunabhängige Unicode-Codepunkte und wird in Lazarus-Builds korrekt angezeigt
- Ältere Delphi-Toolchains können
FPdfAsynckompilieren, wenn ihreWinapi.Windows-Unit dieGetTickCount64-Deklaration weglässt
Version 2.53.0
Hinzugefügt (Added)
- Neue
Tests.ApiCoverage-Testumgebung, die öffentliche TPdf-APIs abdeckt, die bisher keine End-to-End-Testabdeckung hatten:GetPageBox/SetPageBox(MediaBox/CropBox Lesen/Schreiben, Fehler bei fehlender Box und Speichern-Roundtrip),FlattenPage/FlattenAllPages(Rückgabewert und Erhalt der Seitenanzahl),GenerateFormAppearances(keine Aktion bei Nicht-Formular-Dokumenten),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 mit Passwort-Roundtrip — prüft, dass die verschlüsselte Datei ohne Passwort nicht geöffnet wird und mit Passwort geöffnet wird), Begrenzungsvalidierung vonDeletePage(Seite 0 und außerhalb des Bereichs werfenEPdfError) und die in v2.38.0 eingeführten Anmerkungs-SentinelsHasContents/HasAuthor(prüfen, dassDefault(TPdfAnnotation)sie aufFalsebelässt)
Version 2.52.0
Hinzugefügt (Added)
TPdfView.CopySelectedFormTextToClipboardkopiert die Textauswahl innerhalb des fokussierten AcroForm-Widgets in die Windows-Zwischenablage alsCF_UNICODETEXT
Geändert (Changed)
- SeitenText- und fokussierte Formular-Kopieroperationen verwenden nun denselben defensiven Unicode-Zwischenablage-Schreiber und lassen die Zwischenablage unverändert, wenn ihre Auswahl leer ist
- Delphi-, Lazarus- und C++Builder-Tests decken nun inaktive oder unfokussierte Formular-Kopieraufrufe und einen Roundtrip einer fokussierten Formularauswahl über die Windows-Zwischenablage ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.52.0
Version 2.51.0
Hinzugefügt (Added)
TPdfView.SelectLineAtwählt die visuelle Textzeile aus, die eine einsbasierte Seite und einen nullbasierten Zeichenindex enthält, ohne Mauseingabe
Geändert (Changed)
- Programmgesteuerte Zeilenauswahl, Dreifachklick-Auswahl sowie
Shift+HomeoderShift+Endnutzen nun ein gemeinsames Zeichen-Box-Zeilengrenzmodell - Delphi-, Lazarus- und C++Builder-Tests decken nun stabile Zeilenauswahl und ungültige Seiten- oder Zeichenindizes ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.51.0
Version 2.50.0
Hinzugefügt (Added)
TPdf.LoadDocumentakzeptiert nun ein nullbasiertesIndex- undCount-Fenster in einenTBytes-Puffer, sodass eingebettete PDFs geladen werden können, ohne ein temporäres Byte-Array-Segment zuzuweisen
Geändert (Changed)
- Das Laden von Bytebereichen weist negative oder außerhalb liegende Fenster zurück, bevor der Dokumentzustand geändert wird, und behält die bestehenden gepufferten und entliehenen Puffer-Lebensdaueroptionen bei
- Delphi-, Lazarus- und C++Builder-Tests decken nun eingebettete PDF-Fenster und ungültige Bytebereich-Argumente ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.50.0
Version 2.49.1
Hinzugefügt (Added)
TPdfView.FitModeunterstützt nunpfmFitHeightzum Anpassen der aktuellen Seite an die sichtbare Viewport-Höhe, wobei bei Bedarf horizontales Scrollen zulässig bleibt
Behoben (Fixed)
- Fit-Modi konvergieren nun, nachdem eine Scrollbar-Änderung die Client-Area verändert, sodass Fit-Page-, Fit-Width- und Fit-Height-Ergebnisse in VCL und LCL konsistent bleiben
- Delphi-, Lazarus- und C++Builder-Viewer-Tests decken nun
pfmFitHeight-Auswahl und Enum-Round-Trips ab TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.49.1
Version 2.49.0
Hinzugefügt (Added)
- Die öffentliche PDFium-Binding-Oberfläche deckt nun alle 470 exportierten Funktionen der geprüften Header ab, einschließlich Anhangsbeschreibungs-Zugriff über
FPDFAttachment_SetDescriptionundFPDFAttachment_GetDescription TPdfmacht nun Anhangsbeschreibungen, Querverweis-Gültigkeit, Trailer-End-Offsets, Security-Handler-Revision, 64-Bit-Speicherladung, Signatur-Bytebereiche, Web-Link-Textbereiche sowie erweiterte Bild-, Filter-, Metadaten- und ICC-Profil-Snapshots verfügbar- Formular-Assistenten unterstützen nun nativen Feldfokus, fokussierte Auswahl-Option-Abfragen und -Aktualisierungen, Mausrad-Weiterleitung, beschreibbare Tintenzüge und Formular-Overlays nach progressivem Rendering
Geändert (Changed)
FormFieldCount, Formularfeld-Indizes und Tab-Reihenfolge beschreiben nun nur Widget-Annotationen anstelle unverwandter Seiten-Annotationen- Headless
TPdf-Seiten treten nun in den Form-Fill-Seiten-Lebenszyklus ein und aus ihm aus, sodass nativer Fokus und fokussierte Feld-APIs ohneTPdfViewfunktionieren - Anhangsbeschreibungs-Exporte sind fähigkeitsgeprüft, sodass Anwendungen mit einem älteren PDFium-Build die Bibliothek weiterhin laden und die nicht verfügbare Funktion erkennen können
Behoben (Fixed)
- Progressives Seiten-Rendering zeichnet nun Formular-Steuerelemente, wenn Form-Filling aktiviert ist
- Delphi-, Lazarus- und C++Builder-Tests decken nun die neuen Dokumentdiagnosen, Anhangsbeschreibungen, Tintenpfade, Formularverhalten, Signatur-Bytebereiche, Web-Link-Bereiche und Bild-Metadaten ab
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.49.0
Version 2.48.0
Hinzugefügt (Added)
TPdfMatrixmacht nun Fabriken, Klonen und Zuweisung, Finite-State- und Invertierbarkeits-Diagnosen, toleranzbasierten Vergleich, Translations-Zugriff, Determinanten-Bericht und affine Zerlegung verfügbar- Prepend-Komposition, pivot-bewusste Rotation, Skalierung, Scherung und Spiegelung sowie Stretch-, Contain- und Cover-Rechteck-Abbildung unterstützen Local-Space- und angepasste Layout-Workflows ohne manuelle Koeffizienten-Arithmetik
- Nicht-mutierender Invers-Zugriff, inverses Punkt-Mapping, Vektor- und Viereck-Transforms, dynamische Punkt- und Rechteck-Batches, In-Place-Varianten und einpassige transformierte Bounds erweitern die wiederverwendbare Geometrie-Oberfläche
Geändert (Changed)
- Translation, Skalierung und Achsenspiegelung aktualisieren nun nur die betroffenen Koeffizienten statt über allgemeine affine Multiplikation zu routen
- Rechteck-Transformation normalisiert ihre Eingabe einmal, verwendet einen spezialisierten exakten achsenausgerichteten Pfad, wo möglich, und berechnet allgemeine rotierte Bounds ohne temporäre Punkt-Datensätze
- Punkt- und Rechteck-Batch-Transforms weisen ein Ergebnis-Array zu oder nutzen Aufrufer-Speicher, während transformierte Punkt-Bounds in einem Pass ohne Zwischen-Array akkumuliert werden
Behoben (Fixed)
- Rechteck-Abbildung lehnt nullgroße, nicht-endliche und
Single-überlaufende Ergebnisse ab, bevor eine unbrauchbare Matrix veröffentlicht wird - Delphi-, Lazarus- und C++Builder-Tests verifizieren nun Kompositions-Reihenfolge, Pivot-Invarianten, Invers-Round-Trips, angepasste Rechtecke, Zerlegung und Massen-Geometrieverhalten
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.48.0
Version 2.47.0
Hinzugefügt (Added)
FPdfAsyncbietet nun strukturierte Abbruch-Gründe und -Meldungen, entfernbare Callback-Registrierungen, Timeout-basierte Quellen, Abbruch-Warten und atomare Try-Cancel-Operationen über erweiterte Schnittstellen, die die ursprüngliche API bewahrenTPdfFuture<T>.RunExfügt konfigurierbare Reply-Dispatch und Worker-Priorität hinzu, während Ergebnis-Umschläge Operations-IDs, Wert-Gültigkeit, Exception-Klassennamen, Abschluss-Zeitmessung und wiederverwendbare Abschluss-Helfer verfügbar machenTPdfAsyncExecutorfügt einen wiederverwendbaren festen Worker-Pool mit vier FIFO-Prioritätsspuren, optionale Bounded-Queue-Backpressure, abbrechbare Task-Handles, Timeout-bewusstes Warten, Task-Snapshots, aggregierte Statistiken und geordnetes Shutdown hinzu
Geändert (Changed)
- Wiederholte asynchrone Jobs können Worker-Threads und O(1)-Warteschlangen-Operationen wiederverwenden, statt für jede Aufgabe einen Thread zu erzeugen, während synchronisierter Abschluss für UI-Hosts verfügbar bleibt
- Executor- und Future-Fehler bewahren Exception-Klasse und -Meldung-Diagnosen, Abbruch behält seinen ursprünglichen Grund, und Callback-Exceptions bleiben vom Worker-Lebenszyklus und Shutdown isoliert
- Delphi-, Lazarus- und C++Builder-Tests decken nun die erweiterte Abbruch-, Future-Metadaten-, Task-Kontroll-, Backpressure-, Prioritäts-Sortier-, Statistik-, Fehler- und Shutdown-Oberfläche ab
Behoben (Fixed)
- Nebenläufige Abbruch-Eigentümer erhalten nun ein deterministisches Erstschreiber-Ergebnis, statt auf eine separate Beobachtungs- und Abbruch-Sequenz zu vertrauen
- Main-Thread-Idle-Warten verarbeitet synchronisierte Task-Replies und verhindert, dass ein abgeschlossener Worker den Executor während koordinierten Shutdowns dauerhaft nicht-idle lässt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.47.0
Version 2.46.0
Hinzugefügt (Added)
FPdfAsn1macht nun Bezeichner-Klassen, 64-Bit-High-Tag-Number-Kodierung und -Dekodierung, geparste TLV-Datensätze, Zero-Copy-Child-Reader-Fenster, typisierte Primitive-Decoder sowie Content- oder kodierten-Wert-Slices verfügbar- DER-Writer unterstützen nun den vollen vorzeichenlosen 64-Bit-INTEGER-Bereich, validierte beliebige INTEGER-Inhalte, ENUMERATED, automatische UTCTime- oder GeneralizedTime-Auswahl, Application- und Private-Tags, Multi-Value-SEQUENCE und kanonisch sortierte SET-OF-Ausgabe
ValidateDergibt offset-bewusste Validierungsfehler zurück und erzwingt konfigurierbare Nesting-, Knotenanzahl-, Content-Längen-, Fehleranzahl-, Root- und optionale SET-Sortierungslimits
Geändert (Changed)
- DER-Konkatenation und Multi-Value-Komposition verwenden eine Ausgabe-Allokation, Writer-Buffer zeigen Reserve-, Count-, Capacity- und Ownership-Transfer-Operationen, und SET-OF-Sortierung verwendet nun
O(n log n)-Merge-Sortierung - BOOLEAN-, INTEGER-, BIT-STRING-, OBJECT-IDENTIFIER-, NULL-, UTF8String-, PrintableString-, IA5String-, UTCTime- und GeneralizedTime-Werte erhalten kanonische Form-Prüfungen während Kodierung, typisierter Dekodierung oder Validierung
- Das Lazarus-Laufzeitpaket exportiert nun
FPdfAsn1, und Delphi-, Lazarus- und C++Builder-Test-Suites üben dieselbe öffentliche DER-Oberfläche
Behoben (Fixed)
- Kontextspezifische Tag-Nummern größer als 30 werden nicht mehr in die unteren fünf Bezeichner-Bits abgeschnitten
- Missgebildete High-Tag-Bezeichner, nicht-minimale definite Längen, ungültiges UTF-8, nicht-Null-BIT-STRING-Padding, ungültige Zeitfelder, nachfolgende Roots und Ressourcenlimit-Verstöße werden deterministisch abgelehnt
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.46.0
Version 2.45.0
Hinzugefügt (Added)
FPdfPreflightReportweist nun jedem Problem Info-, Warning- oder Error-Schweregrad zu und macht pro-Standard- und Berichtsebene-Schweregrad, Status, Kategorie, Issue-Code, Lookup-, Search-, Flattening- und Filtering-APIs verfügbar- Preflight-Berichte exportieren nun SARIF 2.1.0, JUnit-XML, NDJSON und natives XML über passende
To*- undSave*ToFile-Methoden für CI-, Automatisierungs- und Streaming-Pipelines - Stabile SHA-256-Bericht-Fingerabdrücke identifizieren äquivalente Validierungsergebnisse unabhängig von Quellpfaden und Generierungs-Zeitstempeln
Geändert (Changed)
- JSON-, CSV-, Text-, Markdown- und HTML-Berichte enthalten nun Schweregrad und erweiterte Status-Zusammenfassungen; HTML fügt zugängliche Tabellen-Beschriftungen und eine Status-Zusammenfassung hinzu
- Issue- und Standard-Sammlungs-Konstruktion verwendet geometrisches Kapazitätswachstum, Abfrage-Ergebnisse sind vordimensioniert, JSON-Escaping schreibt in einen begrenzten Ausgabe-Buffer, und alle Berichtsdateien verwenden einen direkten UTF-8-Writer
- Issue-Kategorie-Zusammenfassungen verwenden deterministische Sortierung, Zeitstempel enthalten Millisekunden, JSON trägt
formatVersion: 2, und CSV-Zellen neutralisieren Tabellenkalkulations-Formeln
Behoben (Fixed)
- JSON-Export bewahrt nun gültige ergänzende Unicode-Paare und ersetzt isolierte UTF-16-Surrogate-Code-Units statt malformede skalare Daten auszugeben
- HTML-Escaping maskiert nun Apostrophe, und gefilterte Berichtsansichten besitzen unabhängige Issue-Arrays anstelle gemeinsam genutzten veränderlichen Ergebnisspeichers
TPdf.AboutInfo, Lazarus-Paket-Metadaten und Installer-Metadaten melden nun einheitlich Version 2.45.0
Version 2.44.0
Hinzugefügt (Added)
- Lesezeichen und Ziele machen den Offen-Zustand, Nachkommenanzahlen, Aktionsziele, Ziel-Ansichtsmodi und bis zu vier Ansichtsparameter verfügbar
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissionundUserHasPermissionstellen typisierte Dokumentinspektions-Snapshots und Berechtigungsabfragen bereitExtractThumbnail(PageNumber)rendert eine angeforderte Seite, ohne die aktive Seite zu ändern, und RFC-3161-Zeitstempel-Ergebnisse machen Policy, Generierungszeit und Nonce-Details verfügbar
Geändert (Changed)
- Lesezeichen-, JavaScript-, Metadaten-, Ziel- und Thumbnail-Pfade verwenden validierte Zwei-Pass-Buffer, geometrisches Sammlungswachstum und zyklensichere Traversierung
- Die Speichern-Postverarbeitung löst den aktiven Katalog, den Seitenbaum und die Open-Action über die aktuelle xref-Revision auf, speichert dekodierte Objekt-Streams zwischen und scannt PDF-Dictionaries mit lexikalischen Grenzen
- Das gemeinsame PDF-Parsing erzwingt nun exakte Objekt-Header, Generationen, Dictionary-Schlüssel, Stream-Längen, Prädiktor-Geometrie, Integer-Bereiche sowie Kommentar-, Literal-String- und Hexadezimal-String-Grenzen
- Die RFC-3161-Antwortvalidierung bindet nun sowohl Nonce als auch SHA-256-
messageImprint, erfordert einen strukturell gültigen Signer und wendet strikte DER-Längen-, OID-, INTEGER- und GeneralizedTime-Regeln an
Behoben (Fixed)
- Inkrementelle Dokumente wählen beim Hinzufügen einer Standard-Open-Action keine inaktiven doppelten Kataloge oder fehlerhaften Referenzsuffixe mehr aus
- Zeitstempel-Token mit Long-Form-DER-Längen behalten das vollständig kodierte Token bei, während fehlerhafte CMS-Optional-Feld-Reihenfolgen und leere Signer-Sets abgewiesen werden
- Saubere Delphi-Builds schreiben PAdES-Nonce-Seed-Felder nun über ausrichtungssichere Byte-Kopien und übergeben XFA-Antwort-Bytes mit dem exakten nativen Zeigertyp
TPdf.AboutInfo, Lazarus-Paketmetadaten und Installer-Metadaten melden nun durchgängig Version 2.44.0
Version 2.43.0
Hinzugefügt (Added)
- XFDF-Feld- und Anmerkungsdatensätze (annotation records) stellen nun Präsenzkennzeichen (presence flags) bereit, die einen ausgelassenen XML-Wert von einem explizit leeren Wert unterscheiden
Geändert (Changed)
- Der XFDF-Import akzeptiert nun Elemente und Attribute mit Namensraum-Präfixen, gemischten Text- und CDATA-Inhalt, Entitätsreferenzen sowie leerzeichenrelevante Werte, während ungültige Unicode-Skalarreferenzen abgewiesen werden
- Der XFDF-Import und -Export verwenden indizierten Feldabgleich und begrenzte geometrische Buffer, was den Durchsatz und das Spitzenallokationsverhalten für tief verschachtelte Formulare, große Anmerkungssammlungen, Ink-Listen, Vertices und Markup-Quadrilaterale verbessert
- Die PDF/A- und PDF/UA-Validierung verwenden begrenztes Wachstum für große Seiten-, Stream-, Strukturnamen- und RoleMap-Sammlungen; die PDF/UA-RoleMap-Auflösung folgt nun direkten Arrays und indirekten Namens- oder Array-Objekten exakter Generation
Behoben (Fixed)
- XFDF-Round-Trips bewahren nun tief verschachtelte Feldpfade, explizit leere Feldwerte, explizit leere Anmerkungsinhalte und die Unterscheidung zwischen fehlenden und leeren Inhalten
- Ungültige Speicherbuffer-Ladevorgänge und Seitenzuweisungen außerhalb des gültigen Bereichs werden abgewiesen, ohne einen unvollständigen Dokument- oder Seitenzustand zu hinterlassen, und ein fehlgeschlagener nativer Seiten-Reload behält die zuvor aktive Seite bei
- Große Marked-Content-Identifikatoren und Signatur-Metadatenbuffer werden vor der Allokation oder dem nativen Zugriff begrenzt und validiert
Version 2.42.0
Hinzugefügt (Added)
TPdfMatrixbietet nunInvert,TryInvert,TransformPointundTransformRectfür Koordinaten-Mapping, Hit-Testing, normalisierte Grenzen und explizite Behandlung singulärer MatrizenTPdf.WrapTexthat eineBreakLongWords-Überladung erhalten, die CJK- und anderen Text ohne Leerzeichen aufteilt, während gültige UTF-16-Surrogatpaare zusammengehalten werdenTPdfAnnotation.AttachmentPointSetsmacht jedes Quadrilateral in mehrzeiligen Markup-Anmerkungen verfügbar, während das bestehende FeldAttachmentPointsein Alias für den ersten Satz bleibt
Geändert (Changed)
- Textextraktion, Erstellung lesbarer Inhalte, Wortsuche und gesprochene Text-Offset-Zuordnung verwenden nun begrenzte Allokation und binäre Suchpfade, was wiederholte Allokationen und lineare Scans auf großen Seiten reduziert
- ASN.1-Serialisierung und verschlüsselte PDF-Erzeugung verwenden nun geometrische Ausgabebuffer; die Sortierung verschlüsselter Objekte verwendet
O(n log n)-Sortierung und xref-Zeilen werden direkt in den finalen Buffer geschrieben WrapTextbehält CR-, LF- und CRLF-Zeilengrenzen bei und verwendet ein einzelnes natives Messobjekt für die gesamte Operation wieder- Der XFDF-Import und -Export bewahren jedes Markup-Quadrilateral; der Import wendet zudem RGB-/Innenfarben an und parst Dezimalkoordinaten unabhängig von der Prozess-Locale
Behoben (Fixed)
- Legacy-Aufrufer können Anmerkungsinhalt und Autor wieder durch Zuweisen von nicht-leeren Zeichenfolgen aktualisieren, ohne die neueren Sentinel-Werte
HasContentsundHasAuthorsetzen zu müssen - Explizit leere Anmerkungszeichenfolgen verwenden nun einen gültigen nullterminierten nativen Buffer, sodass das Löschen von
/Contents,/Tund anderen optionalen Textschlüsseln keinen nil-Zeiger mehr an PDFium übergibt
Version 2.41.0
Geändert (Changed)
- Preflight-Berichtsmethoden
SaveJsonToFile,SaveMarkdownToFileundSaveTextToFileschreiben nun UTF-8 unter Delphi (analog zur vorhandenen MethodeSaveHtmlToFile) statt der System-ANSI-Codepage; Nicht-ASCII-Zeichen in Dateipfaden, Empfehlungen und Scope-Notes wurden unter Delphi bei Verwendung dieser Methoden zuvor unlesbar dargestellt SaveCsvToFileschreibt nun UTF-8 mit einem BOM-Präfix, sodass Excel für Windows die Kodierung automatisch erkennt; ohne das BOM behandelt Excel eine UTF-8-CSV als Codepage 1252 und verfälscht Nicht-ASCII-Zeichen
Behoben (Fixed)
- Die Demo
ExtractImagesverlor die im Cache gespeichertenTBitmap-Objekte inFExtractedImages, wenn das Formular geschlossen wurde, ohne sie zuvor explizit freizugeben; das Formular überschreibt nunDestroy, umClearExtractedImagesaufzurufen und jedes zwischengespeicherte Bitmap freizugeben
Version 2.40.0
Geändert (Changed)
TPdf.RenderPage(HDC, ...)maskiert nun FPU/SSE-Ausnahmen um den Aufruf vonFPDF_RenderPage, entsprechendTPdfView.RenderPage(HDC)(behoben in v2.25.0) und jedem Rendering-Einstiegspunkt, der ein Bitmap zurückgibt; die direkte DC-Überladung aufTPdf-Ebene ließ FPU-Ausnahmen bei Compilern vor D12 zuvor unmaskiert
Behoben (Fixed)
ColorToARGBgibt nun ein vollständig transparentes Pixel (Alpha 0) fürclNoneundclDefaultzurück, anstatt den Sentinel-Wert als literale RGB-Farbe zu behandeln; das vorherige Verhalten erzeugte eine dunkle, fast deckende Füllung, wenn ein AufruferclNoneübergab und “keine Farbe” erwartete
Version 2.39.1
Behoben (Fixed)
- Explizite PDF 1.3-Speichervorgänge entfernen nun die Einträge
/SMask /None,/AIS falseund/TK true, die nur den anfänglichen Grafikzustand wiederholen, während sie weiterhin nicht standardmäßige Transparenzzustände ablehnen
Version 2.39.0
Geändert (Changed)
CreatePDFundImageToPDFverwenden nun bestätigte Speicherziele und melden den Erfolg nur, wennSaveAserfolgreich abgeschlossen wurdeBatchExport,PDFtoJpgundSplitPDFweisen nun eindeutige Ausgabeverzeichnisse zu, sodass wiederholte Ausführungen und gleichnamige Eingaben frühere Ergebnisse bewahrenSplitViewbricht die Suche nun einmal um, ohne nach einem Abbruch oder fehlendem Treffer einen versteckten Seitenzustand zu hinterlassen, und bricht unvollständige Druckaufträge ab, anstatt eine unvollständige Ausgabe zu übermitteln
Behoben (Fixed)
MergePDFweist nun ungültige Seitenteilbereichstokens sowie Quellüberschreibende Pfade ab, zählt die tatsächlich importierten Seiten und weigert sich, ein leeres Ergebnis zu speichern- Die
Attachment-Demos für Delphi und C++Builder führen Speichervorgänge auf demselben Pfad nun über ein Rollback-sicheres Ersetzen der Datei aus, sodass eine fehlgeschlagene Umbenennung die Original-PDF nicht löschen kann
Version 2.38.0
Geändert (Changed)
SetAnnotationDataschützt nun Schreibvorgänge für/Contentsund/Authordurch die WächterHasContents/HasAuthoraufTPdfAnnotation, passend zum bestehenden MusterHasName/HasSubject/HasIcon; zuvor wurden diese beiden Felder bedingungslos geschrieben, sodass die Zuweisung einesDefault(TPdfAnnotation)-Datensatzes zur ausschließlichen Aktualisierung von Farbe oder Flags den vorhandenen Inhalt und Autor der Anmerkung stillschweigend mit leeren Zeichenfolgen überschrieb;GetPageAnnotationsetzt nun die Wächter, sodass ein Lese-Modifikations-Schreib-Zyklus die ursprünglichen Werte beibehält
Behoben (Fixed)
GenerateFormAppearancesliest den Kontrollkästchen- oder Radioknopf-Wert nun überFPDFAnnot_GetFormFieldValue(das gemäß ISO 32000-1 §12.7.5 zum übergeordneten Feldwörterbuch navigiert) statt überFPDFAnnot_GetStringValue(Annot, 'V', ...)(das das Widget-Wörterbuch liest); das Widget enthält in der Regel kein/V, weshalb/ASnie mit dem aktivierten Zustand synchronisiert wurde und ein flachgelegtes Kontrollkästchen/Radioknopf als deaktiviert dargestellt wurde
Version 2.37.0
Geändert (Changed)
ParseTsaUrlbegrenzt den Port nach dem Parsen nun auf1..65535; ein zu großer Portwert würde sich andernfalls durch eineDWORD-Abschneidung umbrechen und könnte auf einem gültigen Port landen- XFDF-
ParseFieldakzeptiert nun einen Tiefenparameter (Standardwert 0, begrenzt auf 64) und gibt am Limit ein leeres Feld zurück, sodass eine bösartig verschachtelte 100 000 Ebenen tiefe<field>-Kette nicht mehr den Stack überlaufen lassen kann
Behoben (Fixed)
- Die TSA-HTTP-Anforderung schützt nun vor einem leeren Anforderungskörper, bevor
@ReqDer[0]anWinHttpSendRequestübergeben wird; eine Dereferenzierung eines dynamischen Arrays der Länge Null würde auf einen ungültigen Zeiger zugreifen;BuildTimeStampReqgibt zwar immer eine nicht leere SEQUENCE zurück, aber die Aufrufstelle sichert den Vertrag nun ab
Hinweise (Notes)
- Der Header-Kommentar in
FPdfTsaWinzur HTTPS-Sperrprüfung wurde korrigiert: WinHttp validiert die Serverzertifikatskette standardmäßig, führt jedoch **keine** CRL/OCSP-Sperrprüfung durch, es sei denn, dies wird explizit überWinHttpSetOptionaktiviert; die vorherige Formulierung behauptete, dass die Sperrprüfung “kostenlos mitgeliefert wird”, was irreführend war
Version 2.36.0
Geändert (Changed)
- TSA-HTTP-Anforderungen senden nun einen expliziten
Content-Length-Header zusätzlich zu denContent-Type- undAccept-Headern; WinHttp generiert diesen zwar aus der Gesamtlänge, einige RFC 3161-Proxys erfordern jedoch einen expliziten Header und weisen die Anforderung andernfalls mit411 Length Requiredab - Der XFDF-Export verwirft nun C0-Steuerzeichen (außer TAB/LF/CR, die bereits maskiert sind), anstatt eine ungültige Backslash-Hex-Sequenz auszugeben; die vorherige Maskierung
\-01Fist kein gültiges XML (Backslash hat in XML keine besondere Bedeutung), sodass jeder konforme Reader das Dokument als fehlerhaft zurückgewiesen hätte InjectAssociatedFilesschreibt nun/Subtypein das Wörterbuch des EmbeddedFile-Streams, wenn der AufruferTAssociateFile.MIMETypeangibt; das Feld war deklariert und dokumentiert, aber der Injektor hat zuvor fest codiert/Type /EmbeddedFileverwendet und das Feld ignoriert (ISO 32000-2 §7.11.4 erlaubt/Subtypeim Stream)
Behoben (Fixed)
- Der XFDF-Import übersprang das erste Inhaltsbyte nach einem UTF-8-BOM sowie das erste Byte, wenn kein BOM vorhanden war:
BytesToAnsi(Bytes, 4, ...)(BOM) undBytesToAnsi(Bytes, 1, ...)(kein BOM) verwendeten fehlerhafte Start-Offsets um eins verschoben, daBytesToAnsieinen 0-basierten Array-Index erwartet; die Aufrufe verwenden nun3und0 ExtractSignatureValuewies zwei Einrückungsfehler bei unvollständigenif-Verzweigungen auf, bei denenR.Position:= CNbedingungslos für die optionalen Zweigecertificates [0]andsignedAttrs [0]ausgeführt wurde; die Zweige sind nun inbegin/endeingeschlossen, sodass die Position nur dann vorrückt, wenn das optionale TLV tatsächlich gelesen wurde (die gleiche Fehlerklasse wurde inAddSignatureTimestampToCmsin v2.22.0 behoben)
Version 2.35.0
Geändert (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvailundTFPDFAvail_IsFormAvailakzeptieren nunhints: PFX_DOWNLOADHINTSanstelle vonvar hints: FX_DOWNLOADHINTS, sodass der dokumentierte, reine Abfragemodusnullptr(prüfen der aktuellen Verfügbarkeit ohne Anforderung weiterer Daten) unter Delphi erreichbar ist; der PDFium-Header erlaubt explizit, dasshintsnull sein kann; die vorherige Bindung mittelsvarmachte dies unmöglichTFPDF_SetSystemFontInfoakzeptiert nunpFontInfo: PFPDF_SYSFONTINFOanstelle vonvar pFontInfo: FPDF_SYSFONTINFO, sodass Aufrufernilübergeben können, um PDFium mitzuteilen, die Verwendung einer zuvor registrierten Systemzeichenschnittstelle einzustellen (der dokumentierte Deaktivierungspfad)TPdfThumbnailView.PaintberechnetVisibleRowsnun mit derselben Formel wieUpdateScrollBarRange(ClientHeight div RowHeight), sodass die Anzahl der gezeichneten Zeilen mit der Seitengröße der Bildlaufleiste übereinstimmt; die vorherige, reine Zeichenformel ((ClientHeight - FMarginY) div RowHeight + 1) konnte bei Grenzhöhen um eine Zeile abweichen, wodurch ein Rendering für eine nicht sichtbare Zeile verschwendet wurde oder die letzte sichtbare Zeile fehlte
Version 2.34.0
Hinzugefügt (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— übergeordnete API, die das Dokument speichert und es anschließend mit PDF 2.0 AES-256-CBC (V=5/R=5/R=6) verschlüsselt; akzeptiertTPdfEncryptOptionsmit Benutzer-/Eigentümerpasswort, Berechtigungen und Revision; delegiert anEncryptDocumentBytes- Verschlüsselung literaler StrF-Zeichenfolgen:
EncryptDocumentBytesverschlüsselt nun literale(...)-Zeichenfolgen in Nicht-Stream-Objekten (Info-Wörterbuch usw.) in AES-256-CBC-Hexadezimalzeichenfolgen, passend zum Stream-Verschlüsselungsformat (16-Byte-IV + PKCS7-Chiffretext); Hexadezimalzeichenfolgen<...>bleiben unverändert
Version 2.33.0
Hinzugefügt (Added)
- Injektor für die AES-256-CBC-Verschlüsselung des gesamten Dokuments in
FPdfEncrypt.pas;EncryptDocumentBytesnimmt eine Klartext-PDF und ein Passwort entgegen, verschlüsselt jedes indirekte Stream-Objekt (16-Byte-IV + AES-256-CBC PKCS7 unter dem Dateischlüssel), korrigiert/Length, hängt das/Encrypt-Wörterbuchobjekt an und erstellt eine vollständige klassische Querverweistabelle + Trailer mit/Encryptund/IDneu; vervollständigt den PDF 2.0-Verschlüsselungs-Stack (AES-Block + GCM + SHA-512/384 + R6-Schlüsselableitung + Wörterbuch + Dokumenten-Sweep) - Hilfsfunktion
EncryptStreamPayload— das PDF 2.0 AES-256-Stream-Format (IV dem AES-CBC-PKCS7-Chiffretext vorangestellt), wiederverwendbar für Aufrufer, die ihr eigenes Objekt-Layout verwalten
Version 2.32.0
Hinzugefügt (Added)
- Die neue Unit
FPdfSha512.pasimplementiert SHA-512 / SHA-384 (FIPS 180-4) vollständig in Pascal; die PDF 2.0 R6-Passworthash-Iteration benötigt diese Funktionen und wählt in jeder Runde anhand des mod-3-Ergebnisses eines 128-Bit-Werts zwischen SHA-256/384/512; die Implementierung wurde mit dem Known-Answer-Test FIPS-180-4 B.1 überprüft - Die neue Unit
FPdfEncrypt.pasleitet die Verschlüsselungsschlüssel für PDF 2.0 ab und erstellt das Encrypt-Dictionary; sie implementiert Algorithmus 2.B aus ISO 32000-2 §7.6.4.3 (R6-Hash-Schleife: AES-128-CBC + iterative Auswahl von SHA-256/384/512), berechnet den 32-Byte-Schlüssel für die Dateiverschlüsselung sowie die Einträge/O,/U,/OE,/UEund/Permsund erstellt das Encrypt-Dictionary mit V=5/R=5/R=6 und/CFM /AESV3; die Bytepuffer folgen dem TBytes-Modell
Version 2.31.0
Hinzugefügt (Added)
- Die neue Unit
FPdfAes.passtellt AES-Blockchiffre-Primitiven nach FIPS 197 bereit: AES-128 und AES-256 vollständig in Pascal, ergänzt um Hilfsfunktionen für den CBC-Modus und ein CSPRNG-Backend; die Known-Answer-Tests aus FIPS-197 Anhang C.2 / C.3 bestätigen die Korrektheit; diese Primitiven bilden die kryptografische Grundlage für den PDF 2.0-Verschlüsselungs-Stack - Authentifizierte AES-GCM-Verschlüsselung (NIST SP 800-38D) in der neuen Unit
FPdfAesGcm.pas; implementiert GHASH (GF(2^128)-Multiplikation), GCTR und die GCM-AEAD-Konstruktion auf Basis der AES-Blockprimitiven; die NIST-GCM-Testfälle 1 und 3 (AES-128) entsprechen exakt dem maßgebenden Chiffretext und Tag; Testfall 13 (AES-256) führt Hin- und Rückweg aus; GCM ist der ISO/TS 32003-Modus für PDF 2.0 - Integritätsprüfung für PDF/A Level A ParentTree und ClassMap (ISO 19005-1 §6.8.3);
pvaiParentTreeMissingkennzeichnet ein StructTreeRoot ohne den /ParentTree-Nummernbaum;pvaiClassMapUnresolvedkennzeichnet eine /C-Klassenreferenz ohne eine /ClassMap
Version 2.30.0
Hinzugefügt (Added)
- Einbettung assoziierter Dateien (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); die neue UnitFPdfAssocFileshängt/AF-Arrays von Dateispezifikationsreferenzen an den Katalog oder ein beliebiges Seitenwörterbuch an und deckt alle acht ISO 32000-2 Tabelle 45/AFRelationship-Werte ab; verwendet das durchInjectPadesDssMarkersbewährte inkrementelle Aktualisierungsmuster wieder - Unterstützung für PDF/X-6 (ISO 15930-9:2020);
TPdfXConformancefügtpxc6hinzu; der Injektor und die Validierung leiten dies durch die Identifikationpdfxid:GTS_PDFXVersion; PDF/X-6 ist der auf PDF 2.0 basierende Nachfolger von PDF/X-4 für den vollständigen Austausch - PDF/A verbietet die
/Thread-Aktion (Whitelist-Lücke in ISO 19005-1 §6.6.1); die Liste der verbotenen Aktionen deckt nun Thread neben Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition und Hide ab
Behoben (Fixed)
- Der PDF/A-4e-Validierungspfad berücksichtigt nun dieselben Prüfungen für Tagged-Structure, MarkInfo und Worttrennungszeichen wie Level A; die speicherseitige Abstufung in v2.29.0 deckte
PdfAIsLevelEab, aber drei Tore vonValidatePdfAComplianceprüften ausschließlichPdfAIsLevelA, sodass ein PDF/A-4e-Dokument ohne Tagged-Structure geräuschlos passierte - Abweichung beim OCG-
/BaseState-Test: der PostProcess-Durchlauf in v2.28.0 weitete die Akzeptanz korrekterweise auf/ONoder/OFFaus (ISO 32000-1 Tabelle 8.70 erlaubt beide), aber die Delphi- und C++-Tests erwarteten weiterhin, dass/OFFabgelehnt wird; Tests verwenden nun einen tatsächlich ungültigen Wert (/Undefined) und ein neuer positiver Test sichert die Akzeptanz von/OFFab - Übermäßiges Abgleichen von geospatialem
/Subtype /GEO:ContainsDictionarySubtype('GEO')glich jedes Wörterbuch ab, das das Token enthielt, einschließlich nicht verwandter wie ein verirrtes/ViewerPreferences << /Subtype /GEO >>; das neueContainsMeasureDictionarySubtypeerfordert zusätzlich/Type /Measureoder einen Measure-exklusiven Geschwisterschlüssel, sodass Nicht-Measure-Wörterbücher die Anforderung ADBE ExtensionLevel 3 nicht mehr auslösen
Version 2.29.0
Hinzugefügt (Added)
- Unterstützung für PDF/A-4 (ISO 19005-4:2020) im Validator, dem XMP-Injektor und der Pdfium-Objektmodellebene;
TPdfAConformancefügtpac4base,pac4fundpac4ehinzu; die Basisebene ist PDF 2.0 (ISO 32000-2) und ersetzt die alten A/B/U-Ebenen durch Base + F (Form) + E (Barrierefreiheit);ValidatePdfAliest einpdfaid:part=4XMP-Paket (die Basis lässt das Konformitätselement weg),SaveAsPdfAgibt dieses aus undSignPadesWithPdfAakzeptiertpac4baseals Langzeit-Archivierungscontainer - Bindung für
FPDFBookmark_GetColor— der letzte ungebundene öffentliche Export von PDFium (469/469);TBookmarkerhält die FelderHasColorundColor, die aus dem/C-Array des Lesezeichens gefüllt werden (ISO 32000-1 §12.3.3); die Bindung verwendet ein tolerantes Laden, sodass ältere DLLs, die vor dem Export entstanden sind, weiterhin funktionieren - PDF/E-1 (ISO 24517-1 §5) Header-Versionsprüfung
pveiBadPdfVersion— PDF/E-1 basiert auf PDF 1.6, und ein von 1.6 abweichender Header wird nun gekennzeichnet - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— die Verschlüsselung ist nur bei einem%PDF-2.0-Header zulässig; ein 1.x-Körper mit/Encryptwird nun gekennzeichnet (zuvor eine No-op-Anweisung) - PDF/R-1
pvriBadMediaBox— dieMediaBoxjeder Seite muss[0 0 w h]sein;PdfRHasNonZeroMediaBoxOriginist ein gebietsunabhängiger ASCII-Scanner, der MediaBoxes mit indirekten Referenzen überspringt - PDF/A Level A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — eine vorhandene, aber unvollständige RoleMap, die benutzerdefinierte/S-Strukturtypen unzugeordnet lässt, wird nun gekennzeichnet, wodurch die Lücke geschlossen wird, die durch die bestehende reine VorhandenseinsprüfungpvaiRoleMapMissinghinterlassen wurde
Behoben (Fixed)
PdfVersionToName(20)gab"1.0"anstelle von"2.0"zurück, was den/Version-Eintrag des Katalogs und die Validator-Meldungen bei jedem Speichervorgang von PDF 2.0 beschädigte; der Formatierer teilt Haupt- und Nebenversionen für Versionscodes>= 20nun explizit auf- Der negative INTEGER-Encoder in
FPdfAsn1.paskonnte unter Delphi 12 nicht kompiliert werden (E2015beiInteger(-(V<0))), was das gesamte Testprojekt blockierte; behoben durch die Verwendung vonInt64(-Ord(V<0))für die Vorzeichenerweiterungsmaske - Die Liste der verbotenen Anmerkungen für PDF/A enthält nun
/RichMediain allen Teilen (zuvor übersehen; ISO 32000-1 §12.5.6.35 verbietet dies in PDF/A)
Version 2.28.0
Hinzugefügt (Added)
TPdfVersionenthält nunpv20für PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)gibt nunpv20anstelle vonpvUnknownzurück, undEncodePdfVersion(pv20)gibt 20 aus, sodass die Version eines PDF 2.0-Dokuments beim Zurücklesen nicht mehr verloren geht und explizit geschrieben werden kann
Geändert (Changed)
DecodeDateparst nun PDF-Datumszeichenfolgen mit optionalen abschließenden Feldern gemäß PDF-Referenz 3.8.3, anstatt das vollständige 23-stellige FormatD:YYYYMMDDHHmmSSOHH'mm'zu erfordern; konforme abgeschnittene Daten wieD:20260712,D:20260712153000undD:20260712153000Zwerden nun akzeptiert; zuvor wurden sie durch eine festeLength=23-Prüfung abgelehnt; die Zeitzonen-Stundenverschiebung wird nun mit dem realen Bereich von UTC-12 bis UTC+14 abgeglichen statt mit> 23FPdfMeasure.MeasureTextkodiert den Schriftnamen nun als FPC-AnsiString/ Delphi-UTF8Encode, entsprechend den anderen FPDF_BYTESTRING-Aufrufstellen der Bibliothek, anstatt eines einfachenAnsiString-Castings, das Nicht-ASCII-Familiennamen durch die aktuelle Codepage unlesbar machte
Behoben (Fixed)
- Der Pfad für negative Werte in
TDerWriter.Integerstürzte ab oder erzeugte fehlerhaftes DER: die Schleifewhile V <> -1 do V := V shr 8ließInnerleer beiValue = -1(Bereichsfehler beim nachfolgendenInner[Length(Inner)-1]) und erzeugte zu viele Bytes für andere negative Werte; der Encoder extrahiert nun Zweierkomplement-Bytes mit vorzeichenerweiternden Verschiebungen und stoppt korrekt, wenn der Rest reine Vorzeichenerweiterung ist; CMS/PAdES-INTEGER-Felder sind positiv, daher betrifft dies nur Aufrufer, die negative Werte übergeben, aber der Pfad ist nun korrekt TPdf.GetCharacterOriginundTPdfView.GetCharacterOriginignorierten den Rückgabewert vonFPDFText_GetCharOriginund gaben bei einem Fehler einen nicht initialisierten Punkt zurück; das Ergebnis wird nun mit null initialisiert, und ein fehlgeschlagener Lesevorgang gibt den Ursprung zurück (passend zum Vertrag vonGetCharacterRectangle)
Version 2.27.0
Geändert (Changed)
- Die Delphi-, C++Builder- und Lazarus-Demos
PDFViewerundMultiPageViewerkapseln Dokumentensuchen nun einmalig, akzeptierenEnterundF3für das nächste Ergebnis, setzen den Suchkontext bei geänderten Trefferoptionen zurück und reservierenEsczum Abbrechen einer aktiven Suche oder eines Druckauftrags - Der Viewer-Druck folgt nun der aktuellen Viewerdrehung und wählt entsprechend Hoch- oder Querformat, sodass die Symbolleistendrehung in den gedruckten Seiten berücksichtigt wird
- Alle drei
ViewerInteractionLab-Demos unterstützen nunCtrl+A,Ctrl+C,Enter,F3undEsc, ohne die nativen Auswahl- und Kopierbefehle der Bearbeitungssteuerelemente abzufangen
Behoben (Fixed)
- Der Abbruch des Viewer-Drucks in C++Builder und Lazarus bricht nun den Druckerauftrag ab, statt die vor dem Abbruch gerenderten Seiten zu übermitteln, und Lazarus verlässt ausdrücklich jede verschachtelte Kopier-, Seiten- und Sortierschleife
- Die Delphi-Schaltfläche Cancel von
MultiPageViewerist nun mit ihrem Handler verbunden, und die Suchfelder von C++Builder/LazarusMultiPageViewerbehalten die native Bearbeitung mit Pfeil-, Home- und End-Tasten
Version 2.26.0
Geändert (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnailund ihre Gegenstücke inTPdfViewerwerben nun die Render-Sperre umFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap, entsprechendRenderPage/RenderTile. Diese PDFium-Rendering-Aufrufe liefen zuvor ohne Sperre und konnten mit einem gleichzeitigenUnloadPage/ReloadPageam selben Dokument konkurrierenTPdf.RenderPageThumbnailberücksichtigt nun den Seiteneintrag/Rotate: Für Seiten mit/Rotate 90oder270wird die Anpassung aus den gedrehten Abmessungen neu berechnet, sodass das Seitenverhältnis der Miniaturansicht dem Viewer entspricht, statt die intrinsischen (ungedrehten) Werte vonFPDF_GetPageSizeByIndexzu verwenden
Behoben (Fixed)
TPdfView.GetCharacterRectangleignorierte den Rückgabewert vonFPDFText_GetCharBoxund übergab bei einem PDFium-Fehler ein nicht initialisiertesTPdfRectangleanPageToDevice. Das Rechteck wird nun mit null initialisiert und ein fehlgeschlagenesGetCharBoxgibtRect(0,0,0,0)zurück- Die Pufferlänge für URI- und Dateipfade von
GetLinkAnnotationswar um eins zu groß: Der zweite Aufruf vonFPDFAction_GetURIPath/GetFilePathübergabsizeeinschließlich des abschließenden NUL an einen Puffer der Größesize-1. Der Aufruf übergibt nunsize-1und kann bei einem PDFium-Build ohne eigene Begrenzung nicht hinter die Zuweisung schreiben
Version 2.25.0
Geändert (Changed)
TPdf.AddText,SetText,AddPathundInsertFormObjectFromXObjectmachen nun die zwischengespeicherte Textseite und Linkanmerkungen ungültig, bevor sie den Seiteninhalt neu erzeugen, entsprechendSetTextPositionsundRemoveObject. Zuvor lieferteGetText/GetWebLinks/FindFirstnach einer Seitenbearbeitung veraltete Daten, und das beibehalteneFPDF_TEXTPAGE-Handle wurde danach mit undefiniertem Verhalten verwendetTPdfView.RenderPage(HDC, ...)erwirbt nun die Render-Sperre und maskiert FPU/SSE-Ausnahmen umFPDF_RenderPage, entsprechend allen anderen Rendering-Einstiegspunkten. Die direkte DC-Überladung konnte zuvor mitUnloadPage/ReloadPagekonkurrieren und ließ FPU-Ausnahmen bei Compilern vor D12 unmaskiert- Die Delphi-Demo
PrintPDFruft bei Abbruch nunPrinter.Abortauf, statt denfinally-Block bisPrinter.EndDocdurchlaufen zu lassen und so die bereits gerenderten Seiten zu übermitteln. Die Lazarus-Demo behandelte dies bereits korrekt
Behoben (Fixed)
TPdf.GetCharacter,TPdf.GetCharcodeund ihre Gegenstücke inTPdfViewkürzten vonFPDFText_GetUnicodegelieferte Codepunkte der Astralebene (Emoji, CJK Extension B) überWideChar()auf die unteren 16 Bit und erzeugten ein einzelnes Ersatzzeichen. Zeichen über U+FFFF geben nun U+FFFD zurück; verwenden SieGetTextfür die vollständige UTF-16-CodierungGetWebLinksriefSetLength(Rectangles, FPDFLink_CountRects(...))ohne Absicherung eines Rückgabewerts von-1auf, was auf einer fehlerhaften SeiteEOutOfMemoryauslöste. Eine negative Anzahl wird nun auf null begrenztTPdf.Destroyentfernt nunPasswordüberUniqueString+FillCharaus dem Speicher, bevor der referenzgezählte Puffer freigegeben wird
Version 2.24.0
Hinzugefügt (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmentundDeleteAttachmentvalidieren nun Seiten- und Anlagenindex und lösen bei ungültigen WertenEPdfErroraus, entsprechend dem bestehenden Verhalten der Anmerkungszugriffe. Zuvor wurde ein ungültiger Index direkt an PDFium übergeben und führte zu einem stillen No-op oder undefiniertem Verhalten
Behoben (Fixed)
- Seitenobjekt-Handle-Lecks bei Fehlern in
TPdf.AddText,AddBitmapundAddJpegImagesind behoben: Wenn einer der AufrufeFPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrixoderFPDFImageObj_LoadJpegFileInlinevorFPDFPage_InsertObjectfehlschlug, zerstört jeder Pfad das nativeFPDF_PAGEOBJECT-Handle nun vor dem erneuten Auslösen TPdf.UnloadPagezerstört ein laufendesFPath-Handle (durchCreatePathgesetzt, aber noch nicht vonAddPathübernommen) nun überFPDFPageObj_Destroy, statt es bei einem Seitenwechsel oder aufgegebenen Pfad nur aufnilzu setzenTPdf.InsertFormObjectFromXObjectließ denUpdatePage-Aufruf (FPDFPage_GenerateContent) weg, den jede der anderen Einfügungen (AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject) durchführt, sodass ein auf diese Weise eingefügtes Form-XObject beim nächsten Neuladen oder Speichern verschwand;UpdatePagewird nun nach der Einfügung aufgerufen
Version 2.23.0
Behoben (Fixed)
- Die Validierung von optionalem Inhalt akzeptiert bei
/BaseStatenun zusätzlich zu/ONauch/OFF(ISO 32000-1 Table 8.70 erlaubt beide); die vorherige Prüfung lehnte legitime/OCProperties /D /BaseState /OFF-Konfigurationen mit der Fehlermeldung “malformed optional content” ab, obwohl die Datei konform war - Die Validierung von optionalem Inhalt akzeptiert bei
/Intentnun/Designund Arrays wie[/View /Design], nicht nur/View; ISO 32000-1 Table 8.70 definiert/Intentals einen Namen oder ein Array von Namen aus/Viewund/Design - Die Erkennung des Geospatial-Measure-Wörterbuchs für die PDF-1.7-Schranke
/Extensions /ADBEExtensionLevel 3 erfordert nicht mehr/Type /Measure, das ISO 32000-1 Table 254 als optional kennzeichnet; GeoPDF-Produzenten, die/Typeweglassen (PDFBox, QGIS, FME), umgingen die Schranke zuvor und erzeugten geräuschlos nicht konforme PDF-1.7-Ausgaben; der Detektor gleicht nun allein/Subtype /GEOab
Version 2.22.0
Geändert (Changed)
- Die Fit-Zoom-Berechnungen von
TPdfView(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom) verwenden nunClientWidth/ClientHeightstattWidth/Heightdes Fensters, sodasspfmFitPage/pfmFitWidth/pfmFitHeightdie Seite an den sichtbaren Viewport statt an den Außenrahmen mit Bildlaufleisten und Rändern anpassen AddSignatureTimestampToCmslöst nun eine expliziteExceptionaus, die das unlesbare CMS-SignerInfo-Feld (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) benennt, statt stillschweigendExitauszuführen; außerdem ist der fehlendebegin/end-Block um den optionalen ZweigsignedAttrs [0]korrigiert, derR.Positionunverändert ließ
Behoben (Fixed)
- Das CNG-Privatschlüssel-Handle
NCryptKeyHandleinResolveWinSignerwird bei Fehlern nachCryptAcquireCertificatePrivateKeynun überNCryptFreeObjectfreigegeben, bevor die Besitzübertragung anTWinCmsSigner.Createerfolgt EcDsaP1363ToDerweist nun eine vollständig nullwertiger- oders-Hälfte zurück, stattINTEGER 0auszugeben; ECDSA-Signaturen mitr = 0oders = 0sind ungültig (RFC 4754 §6 / FIPS 186-4 §6 verlangen1 ≤ r, s ≤ n-1)
Version 2.21.12
Behoben (Fixed)
- Explizite PDF-1.5-bis-PDF-1.7-Speichervorgänge lehnen nun fehlerhafte Katalog-
/OCProperties-Strukturen ab, einschließlich fehlender erforderlicher/OCGs- oder/D-Einträge, ungültiger Standard-Konfigurationswerte und Nicht-Array-Statuseinträge
Version 2.21.11
Behoben (Fixed)
- Explizite PDF-Versions-Speichervorgänge lehnen nun direkte oder indirekte Seiten-
/Annots-Einträge ab, deren Anmerkungswörterbücher den erforderlichen/Subtype- oder/Rect-Eintrag weglassen
Version 2.21.10
Behoben (Fixed)
- Explizite PDF-1.7-Speichervorgänge erfordern nun, dass geospatiale
/Type /Measure /Subtype /GEO-Wörterbücher und Projection-Anmerkungen/Extensions /ADBEmit/BaseVersion /1.7und/ExtensionLevel 3oder neuer deklarieren
Version 2.21.9
Behoben (Fixed)
- Explizite PDF-1.7-Speichervorgänge erfordern nun, dass RichMedia-Anmerkungen und
RichMediaExecute-Aktionen/Extensions /ADBEmit/BaseVersion /1.7und/ExtensionLevel 3oder neuer deklarieren
Version 2.21.8
Behoben (Fixed)
- Explizite PDF-1.7-Speichervorgänge erfordern nun, dass PRC-3D-Streams
/Extensions /ADBEmit/BaseVersion /1.7und/ExtensionLevel 1oder neuer deklarieren, anstatt PRC als Kern-PDF-1.7-Funktion zu behandeln
Version 2.21.7
Behoben (Fixed)
- Explizite PDF-1.4-und-ältere-Speichervorgänge lehnen nun Bild-XObject-
/SMaskInData-Einträge ab, einschließlich eines expliziten Werts von0, da eingebettete JPEG-2000-Softmaske-Kanäle PDF 1.5 oder neuer erfordern
Version 2.21.6
Behoben (Fixed)
- Explizite PDF-1.4-und-ältere-Speichervorgänge lehnen nun 16-Bit-Bild-XObjects ab, die PDF 1.5 oder neuer erfordern, während PDF 1.5 bis PDF 1.7-Ziele ihre
/BitsPerComponent 16-Bilddaten beibehalten
Version 2.21.5
Behoben (Fixed)
- Explizite PDF-1.4-und-ältere-Speichervorgänge lehnen nun Dokument-Katalog-
/PageLayout /TwoPageLeft- und/TwoPageRight-Werte ab, die PDF 1.5 oder neuer erfordern, während PDF 1.5 bis PDF 1.7-Ziele das angeforderte Zweiseitenlayout beibehalten
Version 2.21.4
Behoben (Fixed)
- Explizite PDF-1.3-Speichervorgänge lehnen nun Dokument-Katalog-
/Lang-Einträge ab, die PDF 1.4 oder neuer erfordern, während PDF 1.4 bis PDF 1.7-Ziele den Sprachbezeichner beibehalten
Version 2.21.3
Behoben (Fixed)
- Explizite PDF-1.3-Speichervorgänge lehnen nun Dokument-
/EmbeddedFiles-Namensträume ab, die PDF 1.4 oder neuer erfordern, ohne eingebettete Dateiströme abzulehnen, die über ältere Dateispezifikationen referenziert werden
Version 2.21.2
Behoben (Fixed)
- Explizites Speichern als PDF 1.3 lehnt aktive Metadatenstreams ab, die PDF 1.4 oder neuer benötigen; für PDF 1.4 bis PDF 1.7 bleiben sie erhalten
Version 2.21.1
Behoben (Fixed)
- Die Hybrid-Referenz-Validierung wendet nun zusätzliche
/XRefStm-Einträge vor klassischen xref-Platzhaltern derselben Revision an, sodass komprimierte Annotationen und andere versionsgeschlossene Objekte nicht mehr übersehen werden, wenn die Kompatibilitätstabelle sie als frei markiert
Version 2.21.0
Geändert (Changed)
- Alle Delphi-, C++Builder- und Lazarus-Viewer-Beispiele können nun eine PDF öffnen, die als erstes Befehlszeilenargument übergeben wird, und die C++Builder- und Lazarus-
MultiPageViewer-Beispiele bieten explizite Alles auswählen- und Kopieren-Tastenkombinationen
Behoben (Fixed)
- Viewerbeispiele lehnen ungültige Lesezeichen- und Linkseitenziele ab, erhalten Ladefehler, prüfen manuelle Zoomwerte konsistent, drucken die angeforderte ausgefüllte Seite statt wiederholt die sichtbare und brechen abgebrochene Delphi-Druckjobs ab, statt Teilausgaben einzureichen
Version 2.20.0
Geändert (Changed)
- Alle Delphi-, C++Builder- und Lazarus-Viewer-Beispiele bieten nun konsistente Tastenkombinationen für Öffnen, Suchen, Speichern, Drucken, Zoomen und Seitennavigation, während jede
ViewerInteractionLab-Variante auch Seitensprünge, validierten manuellen Zoom von 10–600%, persistente Interaktionsprotokolle und Klickkoordinaten-Hin-und-Rück-Prüfungen unterstützt
Version 2.19.1
Behoben (Fixed)
- Explizite PDF-Versionsprüfung folgt jetzt der aktiven klassischen, hybriden oder xref-Stream-Revisionskette einschließlich komprimierter Objekteinträge; ersetzte, freigegebene und unreferenzierte Objekte verursachen keine falschen Funktionsversionsfehler mehr
Version 2.19.0
Geändert (Changed)
- C++Builder- und Lazarus-Beispiele für Anhänge, Bild-/Textextraktion, Seitenkonvertierung und Aufteilen verwenden eigene Ausgabeverzeichnisse oder sicher abgeschlossene Dateien, stabile Namen mit führenden Nullen, reaktionsfähige Fortschrittsanzeigen und Abschlussberichte mit Fehlerzahlen pro Element
Behoben (Fixed)
- Das C++Builder-Beispiel
CJKTextLabmisst Text nun über die exportierten PDFium-Bearbeitungsfunktionen, undMergePDFvermeidet eine mehrdeutige VCL-Nachrichtenüberladung, wodurch saubere RAD Studio 37-Builds wiederhergestellt werden
Version 2.18.3
Behoben (Fixed)
- Der PAdES B-LTA Document Time-stamp wird nun als auffindbares Signaturfeld registriert — ein unsichtbares Widget, das über das erste-Seite-
/Annotsund das AcroForm-/Fields(ETSI EN 319 142-1 §5.4.3) erreichbar ist — statt als unerreichbares verwaistes Objekt, das signaturfeldenumerierende Validatoren nicht finden konnten; bestehende Annotationen und Felder bleiben erhalten
Version 2.18.2
Behoben (Fixed)
- PAdES-Signierung und klassisches Querverweisschreiben lösen nun einen klaren Fehler aus, wenn ein Byte-Offset die feste 10-stellige Feldbreite (~9.3 GB) überschreitet, anstatt den
/ByteRange-Platzhalter stillschweigend ungeschrieben zu lassen (was eine ungültige Signatur erzeugt) oder die 20-Byte-xref-Zeile zu überschreiten (ISO 32000-1 §7.5.4); die Ausgabe von Querverweisströmen verwendet 8-Byte-Binärfelder und ist nicht betroffen
Version 2.18.1
Behoben (Fixed)
- PAdES-Signierung löst nun indirekte erste-Seite-
/Annots-,/AcroForm- und/Fields-Referenzen durch den vollständigen Objekt-Header (ISO 32000-1 §7.5.3) und durch die tatsächliche Generierungsnummer der Referenz auf; eine bloße Teilstring-Suche stimmte zuvor mit einer Objektnummer innerhalb einer längeren überein (löste5 0 Rauf15 0 objauf) und eine fest codierte Generation verfehltegen>0-Objekte, was die Signaturfeld-Arrays korrumpierte oder gültige Dokumente ablehnte - Wenn Katalog, erste Seite,
/Annots,/AcroFormoder/Fieldsin einem Objektstrom liegt, versucht die Signierung nun auf einer erweiterten Kopie erneut, bevor sie fehlschlägt, anstatt das Dokument direkt abzulehnen
Version 2.18.0
Hinzugefügt (Added)
ReadPdfVersionInfomeldet die Header-Version, die effektive Kernversion, die Katalog-Override und das Adobe-Entwicklererweiterungslevel aus einem PDF-Stream
Geändert (Changed)
- Explizites Speichern als PDF 1.3-1.7 prüft Katalog, Seitenressourcen, XFA, Schwärzung und Entwicklererweiterungen im jeweiligen Eigentümerobjektkontext; verschlüsselte Ausgabe mit expliziter Version und inkrementelle PDF-1.3-Normalisierung werden zum Erhalt der Dokumentintegrität abgelehnt
- Dateipfad-Speicherungen schreiben nun in eine benachbarte temporäre Datei und ersetzen das Ziel erst, nachdem alle Komprimierungs-, Normalisierungs- und Versionsprüfungen erfolgreich abgeschlossen sind
Behoben (Fixed)
- Die PDF 1.3-Ausgabe enthält nun die erforderliche vollständige
/ProcSet-Ressource und entfernt PDF 1.4-Transparenzschlüssel, wenn diese nur die initialen Grafikzustandswerte von PDF 1.3 wiederholen - Hybrid-Referenz-, Xref-Stream- und Objektstrom-Dateien werden nicht mehr durch den klassischen Xref-Kompressor neu geschrieben, wodurch verhindert wird, dass komprimierte Objekteinträge verworfen werden
- Namen, die Transparenz- oder Katalogfunktionsschlüssel in Strings, Kommentaren oder nicht verwandten Ressourcenmaps ähneln, verursachen keine falschen Zielversions-Fehler mehr
Version 2.17.0
Hinzugefügt (Added)
- PAdES-Signaturen werden nun als unsichtbare Widget-Annotationen im ersten-Seite-
/Annots-Array und im AcroForm-/Fields-Array registriert, wobei bestehende Annotationen und Formularfelder erhalten bleiben
Geändert (Changed)
- Inkrementelle PDF/A-, PDF/X-, PDF/E-, PDF/R-, PDF/UA-, PDF/VT- und PAdES-Updates bewahren nun die Querverweisdarstellung des Quelldokuments: Xref-Stream-Dokumente erhalten ein Xref-Stream-Update, wie von ISO 32000-1 §7.5.8.1 gefordert, während klassische Dokumente weiterhin eine Xref-Tabelle erhalten
- Querverwei-Offsets,
startxref,/Prev, PAdES-ByteRange-Werte und SHA-256-Bereichsverarbeitung verwenden nun 64-Bit-Positionen mit segmentiertem Hashing, was Dateien größer als 2 GB in 64-Bit-Builds ermöglicht - Generierte beschreibbare XMP-Pakete reservieren nun 2048 Bytes Auffüllung vor der schließenden Paketanweisung
Version 2.16.10
Behoben (Fixed)
- Die Erweiterung von Objektströmen wiederbelebt keine veralteten Kopien von Objekten mehr, die ein inkrementelles Update aus dem Objektstrom in eine einfache Definition migriert hat (ISO 32000-1 §7.5.7); Konformitätsprüfungen und Marker-Injektion lösten zuvor den veralteten Katalog oder das Metadaten-Wörterbuch bei solchen Dateien auf
Version 2.16.9
Behoben (Fixed)
- Auf Free Pascal werden Textstrings, deren Eingabe kein gültiges UTF-8 ist, byteweise als Latin-1 erweitert und als UTF-16BE-Hex-Strings geschrieben; die rohen hohen Bytes flossen zuvor in einen Literal-String, was keine legale PDF 1.7-Textstringkodierung ist
- Stream-Dekodierung erkennt nun rohe Deflate-Daten ohne RFC 1950 zlib-Wrapper (ein häufiger Defekt fehlerhafter Writer) und dekomprimiert sie im Roh-Modus, sodass Konformitätsprüfungen bei solchen Streams nicht mehr still blind werden
Version 2.16.8
Behoben (Fixed)
- Inkrementelle Updates, die durch den Speicher-Post-Processing-Pfad geschrieben werden, aktualisieren nun das zweite (ändernde) Trailer-
/ID-Element wie von ISO 32000-1 §14.4 gefordert; beide Elemente wurden zuvor verbatim kopiert, sodass Caching- und Synchronisations-Tools nach jedem Update einen unveränderten Identifier sahen
Version 2.16.7
Behoben (Fixed)
- Die Stream-Body-Ausblendung, die von Konformitätsprüfungen verwendet wird, erfordert nun, dass das
stream-Schlüsselwort von einem Zeilenende gefolgt wird (ISO 32000-1 §7.3.8.1); das Wort in einem Literal-String wie(downstream)blendete zuvor alle folgende Struktur bis zum nächstenendstreamaus und verbarg echte Verletzungen vor den Byte-Level-Prüfungen - Die PDF/X- und PDF/E-Verbotsmerkmal-Scans blenden zusätzlich Literal-Strings und Kommentare (§7.2.2) aus, sodass ein Wert wie
/Title (see /JavaScript docs)oder ein kommentiertes Token kein falschesJavaScript-,AcroForm- oderLZWDecode-Ergebnis mehr erzeugt
Version 2.16.6
Behoben (Fixed)
- PDF/VT DPM-Einträge werden nun beim Schreiben wie dokumentiert validiert: Schlüsselnamen, die die NMTOKEN-Regel von ISO 16612-2 §6.6 oder die Registrant-Präfix-Regel in Anhang E verletzen, sowie doppelte Namen werden abgelehnt, anstatt in das DPart-Wörterbuch geschrieben zu werden — ein Name mit Leerzeichen wurde zuvor in ein gefälschtes Schlüssel/Wert-Paar aufgeteilt und korrumpierte das Wörterbuch
Version 2.16.5
Behoben (Fixed)
- Das Entfernen eines Wörterbucheintrags, dessen Wert ein Hex-String ist (wie
/Check <...>), entfernt nun den gesamten Eintrag; die Injektoren hinterließen zuvor einen verwaisten Hex-Wert und erzeugten ein syntaktisch defektes Wörterbuch - Das Entfernen eines Eintrags, dessen indirekte Referenz Zeilenumbrüche zwischen den Tokens verwendet (ISO 32000-1 §7.3.10 erlaubt beliebige Leerzeichen), hinterlässt keine Generierungsnummer und kein
R-Schlüsselwort mehr
Version 2.16.4
Behoben (Fixed)
- Der Maximum-Objektnummer-Scan erfordert nicht mehr, dass Objekt-Header eine Zeile beginnen (ISO 32000-1 §7.5.3 erlaubt beliebige Leerzeichen oder Trennzeichen davor), sodass Injektoren keine Objektnummer mehr zuweisen können, die mit einem Inline-
N G obj-Header kollidiert und die Datei still korrumpiert; Objektnummern sind durch die Anhang-C-Obergrenze begrenzt - Streams, deren
/Lengtheine indirekte Referenz ist, lösen nun das referenzierte Integer-Objekt auf und verwenden seinen Wert, wenn er mit dem schließendenendstreamübereinstimmt; solche Streams wurden zuvor durch eine Muster-Suche begrenzt, die Bodies, die dieendstream-Bytesequenz legal enthielten, abschnitt — typisch für eingebettete PDF-Anhänge
Version 2.16.3
Behoben (Fixed)
- Stream-Komprimierungsdurchläufe übergeben Querverweisstream-Dokumente (PDF 1.5+-Dateien ohne klassisches
trailer-Schlüsselwort) unverändert; der Rebuild-Pfad parstestartxrefzuvor fälschlicherweise als Tabellenposition und synthetisierte einen gerateenen Trailer, was eine nicht öffenbare Datei erzeugen konnte - Der Kompressor überspringt XMP-Metadatenstreams, damit ein PDF/A-Dokument seinen obligatorisch ungefilterten Metadatenstream behält (ISO 19005-1 §6.7.2), und lässt externe Datei-Streams (
/Fmit/FFilter) unberührt - Die neu aufgebaute Querverweistabelle scannt eine stream-bereintigte Kopie des Dokuments, sodass binärer Stream-Inhalt keine Objekt-Header mehr fälschen oder die Tabelle aufblähen kann; das
/Sizedes neu aufgebauten Trailers spiegelt nun die tatsächliche Tabelle wider und Objektnummern sind auf die Anhang-C-Obergrenze begrenzt - Das Auffinden der ursprünglichen Querverweistabelle akzeptiert CR-only-Zeilenenden (ISO 32000-1 §7.5.1) und kann die
xref-Buchstaben instartxrefnicht mehr abgleichen; das Stream-Schlüsselwort-Scannen erhielt den gleichenendstream-Tail-Guard und rückt nun nach übersprungenen Stream-Bodies vor
Version 2.16.2
Behoben (Fixed)
- Integer-Parsing in den Byte-Level-PDF-Readern akzeptiert nun das explizite
+-Vorzeichen, das von ISO 32000-1 §7.3.3 erlaubt wird, und lehnt Ziffernfolgen ab, die überlaufen würden, sodass feindliche oder korrumpierte Dokumente geparste Längen und Offsets nicht mehr in irreführende Werte umbrechen können
Version 2.16.1
Behoben (Fixed)
- Der PDF/UA-Injektor schreibt den Katalog-
/Lang-Wert als ordnungsgemäßen PDF-Text-String; er führte den Wert zuvor durch den XML-Escaper, sodass ein Sprach-Tag mit&oder Klammern einen korrumpierten Eintrag erzeugte und Nicht-ASCII-Eingaben als rohes UTF-8 geschrieben wurden - Der PDF/E-
/ISO_PDFEVersion-Info-Eintrag verwendet den gemeinsamen Text-String-Encoder und hält Nicht-ASCII-Werte in PDF 1.7 legal - XML-Escaping für XMP-Pakete verwirft Steuerzeichen, die in XML 1.0 illegal sind, sodass Metadaten, die aus einem beschädigten Quelldokument kopiert wurden, den gesamten Metadatenstream nicht mehr wohlgeformt ungültig machen können
- PDF-zu-XMP-Datumskonvertierung validiert, dass Datumsfelder numerisch sind und füllt ein fehlendes Minutenfeld auf, verhindert fehlerhafte ISO 8601-Daten im generierten XMP; auf Nicht-Windows-Plattformen enthält der Fallback-Zeitstempel nun auch die Tageszeit statt nur des Datums
Version 2.16.0
Hinzugefügt (Added)
- Stream-Dekodierung rekonstruiert nun
/DecodeParms-Prädiktoren (PNG-Prädiktoren 10–15 und TIFF-Prädiktor 2, ISO 32000-1 §7.4.4.4) nach FlateDecode unter Berücksichtigung von/Colors,/BitsPerComponentund/Columns; mit einem Prädiktor komprimierte Objektströme — eine häufige PDF 1.5+-Writer-Wahl — zeigten zuvor differenzierte Bytes, sodass die von ihnen getragenen Objekte für Konformitätsprüfungen und Marker-Injektion still unsichtbar waren
Behoben (Fixed)
- Die FlateDecode-Erkennung parst den
/Filter-Wert nun als Namen oder Array statt als Teilstring-Abgleich, sodass kaskadierte Filter-Chains und Vorkommen des Wortes in nicht verwandten Werten kein falsches Inflate mehr auslösen; nicht unterstützte Filter-Chains fallen wie bisher auf die rohen Bytes zurück
Version 2.15.1
Behoben (Fixed)
- Der Wörterbuch-Scanner überspringt nun Literal-Strings, Hex-Strings und Kommentare beim Ausbalancieren von
<</>>(ISO 32000-1 §7.2.2), sodass Wörterbücher mit Werten wie(A >> B)oder einem Hex-String, der an den schließenden Delimiter angrenzt, beim Parsen von Trailer, Katalog und Konformitätsprüfungen nicht mehr abgeschnitten werden - Literal-String-Extraktion dekodiert nun den vollständigen §7.3.4.2 Tabelle 3 Escape-Satz —
\n \r \t \b \f, oktal\ddd, Zeilenfortsetzungen und nicht escaped EOL-Normalisierung — anstatt den Escape-Buchstaben verbatim zu kopieren, was korrekte/Producer-,/GTS_PDFXVersion- und/ISO_PDFEVersion-Vergleiche für Writer wiederherstellt, die oktale Escapes verwenden - Literal-Strings, die von Marker-Injektoren geschrieben werden, escapen nun CR, LF und andere Steuerzeichen, damit Werte die reader-seitige Zeilenenden-Normalisierung Byte für Byte überstehen
Version 2.15.0
Behoben (Fixed)
- Inkrementelle Updates, die von PDF/A-, PDF/X-, PDF/E-, PDF/R-, PDF/UA- und PDF/VT-Marker-Injektoren sowie von PAdES-Signierungs- und DSS-Pfaden geschrieben werden, bewahren nun den permanenten Dateiidentifier des Quelldokuments: das erste Trailer-
/ID-Element wird verbatim wie von ISO 32000-1 §14.4 gefordert übernommen und nur das zweite (ändernde) Element wird aktualisiert; zuvor wurden beide Elemente regeneriert, sodass externe Referenzen und Langzeitvalidierungs-Workflows nach jedem Speichern eine andere Dokumentidentität sahen - PAdES-Signaturen, DSS-Injektion und B-LTA Document Time-stamps tragen nun die
/Info-Referenz des Quell-Trailers (ISO 32000-1 §7.5.6) weiter, sodass Dokumenteigenschaften nach dem Signieren nicht mehr aus Reader-Panels verschwinden; der Document Time-stamp-Trailer gewinnt auch das/ID-Array - Das Trailer-
/Info-Fallback für Querverweisstream-Dokumente lokalisiert nun das XRef-Stream-Wörterbuch korrekt und bewahrt die Generierungsnummer der Referenz; es stimmte zuvor nie auf konformen PDF 1.5+-Dateien überein und verwarf/Infostill
Version 2.14.4
Behoben (Fixed)
- Das Signatur-Wörterbuch-
/M-Datum, das vonTPdf.SignPadesundSignPadesBytesgeschrieben wird, trägt nun das obligatorischeD:-Präfix und denZ-UTC-Offset-Marker, der von ISO 32000-1 §7.9.4 verlangt wird; strenge Validatoren lehnten die Signierdatum-Zeichenfolge zuvor als fehlerhafte Datumszeichenfolge ab
Version 2.14.3
Behoben (Fixed)
- Wörterbuchschlüssel-Lookups im gemeinsamen PDF-Reader stimmen nun mit ganzen Namens-Tokens überein (ISO 32000-1 §7.3.5); zuvor wurde ein Stream, dessen Wörterbuch
/Length1vor/Lengthauflistete (typisch für FontFile-Streams), auf die falsche Byteanzahl abgeschnitten, was Konformitätsprüfungen für PDF/A, PDF/UA und andere, die Schriften-, CMap- oder Metadaten-Streams lesen, still blendete - Trailer-Lookups für
/Encrypt,/Root,/Sizeund/Infostimmen nicht mehr mit längeren Schlüsseln überein, die dasselbe Präfix teilen (wie/EncryptMetadata) - Die Erweiterung von Objektströmen vertraut keinem korrumpierten oder feindlichen
/N-Wert mehr: Nicht-Integer-Werte ergeben nun 0 statt einer nicht initialisierten Zahl, und eine aus/Firstabgeleitete Obergrenze verhindert überdimensionierte Allocations beim Scannen fehlerhafter Dokumente
Version 2.14.2
Behoben (Fixed)
- Die PDF/X-, PDF/VT-, PDF/UA-, PDF/E- und PDF/R-Marker-Injektoren kopieren verschlüsselte Quelldokumente nun unverändert durch, anstatt Klartext-Update-Abschnitte anzuhängen; das frühere Verhalten erzeugte Dateien, deren neuester Trailer den
/Encrypt-Eintrag verlor (ISO 32000-1 §7.5.6), sodass konforme Reader den verschlüsselten Body fälschlicherweise als Klartext lasen TPdf.SignPades,SignPadesBytesundInjectPadesDssMarkerslösen nunEPadesCryptoaus, wenn das Quelldokument verschlüsselt ist, anstatt still eine korrumpierte oder nicht verifizierbare Datei zu emittieren; entfernen Sie die Verschlüsselung vor dem Signieren oder Einbetten von DSS-Material
Version 2.14.1
Behoben (Fixed)
TPdf.SignPadesundSignPadesBytesfüllen nun alle vier/ByteRange-Felder des Signatur-Wörterbuchs rückwirkend aus; zuvor blieben die letzten drei Felder bei ihren Null-Platzhaltern, sodass erzeugte Signaturen einen leeren Byte-Bereich deklarierten und die Verifizierung in konformen Validatoren scheiterte- PAdES B-LTA Document Time-stamp-Wörterbücher erhalten dieselbe
/ByteRange-Rückwärtsfüllkorrektur ValidatePadesComplianceakzeptiert nun das Standard-Signaturlayout, bei dem die Byte-Bereichslücke den Hex-/Contents-Wert enthält, und prüft, dass das zweite Bereichssegment genau am Dateiende endet; zuvor bestanden nur lückenlose Bereiche die Abdeckungsprüfung
Version 2.14.0
Hinzugefügt (Added)
TPdf.ExportXFDFserialisiert jeden Formularfeldwert und jede Annotation über alle Seiten in ein XFDF-Dokument (ISO 19444-1) und emittiert<fields>für hierarchische Formularwerte und<annots>für alle unterstützten Annotationssubtypen (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFliest ein XFDF-Dokument in das geladene PDF zurück, erstellt Annotationen auf den übereinstimmenden Seiten neu und wendet Feldwerte auf ihre Widget-Annotationen an- Der
TPdfAnnotation-Record erhieltName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), Linienendpunkte, Polygon/Polylinie-Eckpunkte und Ink-List-Gesture-Felder, damit XFDF-Rundreisen die vollständigen Annotationsmetadaten erhalten - Neues
XfdfLab-Beispiel in den Delphi-, C++Builder- und Lazarus-Demo-Sets demonstriert den Export/Import-Rundreise
Version 2.13.6
Behoben (Fixed)
ValidatePdfAbehandelt nun Katalog-/Metadata-Streams ohne/Type /Metadataoder/Subtype /XMLals fehlende XMP-Metadaten überpvaiMissingXmpMetadata- PDF/A-Preflight-Berichte klassifizieren
pvaiMissingXmpMetadatanun als Metadaten und empfehlen einen Katalog-/Metadata-Stream mit/Type /Metadata,/Subtype /XML, ungefilterten XMP undpdfaid-Markern
Version 2.13.5
Behoben (Fixed)
ValidatePdfAmeldet nun Widget-Annotationen ohne Erscheinungsbild-Wörterbuch und PDF/A-2-/PDF/A-3-Annotationen, die/APbenötigen, aber nicht haben, überpvaiAnnotationApDictViolation- PDF/A-Preflight-Berichte kategorisieren
pvaiAnnotationApDictViolationnun als Inhalt, den die Marker-Injektion nicht reparieren kann
Version 2.13.4
Behoben (Fixed)
ValidatePdfAmeldet nun PDF/A-2- und PDF/A-3-Inline-Bilder, deren/I- oder/Interpolate-Werttrueist, überpvaiImageDictionaryViolation, was der bestehenden Image-XObject-Wörterbuch-Abdeckung entspricht- PDF/A-Preflight-Berichte kategorisieren
pvaiImageDictionaryViolationnun als Inhalt, den die Marker-Injektion nicht reparieren kann
Version 2.13.3
Behoben (Fixed)
ValidatePdfAmeldet nun PDF/A-1-Inline-Bilder, die/LZWDecode- oder abgekürzte/LZW-Filter in Content-Streams verwenden, überpvaiInlineImageLzwForbidden, was der bestehenden PDF/A-2- und PDF/A-3-Inline-Bild-Abdeckung entspricht- Der Inline-Bild-Filter-Scanner rückt nun an führenden Ressourcennamen wie
/GS1vorbei und vermeidet so Blockierungen beim Scannen breiterer PDF/A-1-Content-Streams
Version 2.13.2
Hinzugefügt (Added)
TPdf.SetFocusedFormFieldTextschreibt Text in den Bearbeitungspuffer des aktuell fokussierten Formularfelds überFORM_ReplaceSelection, symmetrisch zuFocusedFormFieldText. Für AcroForm-Text-/Combo-Felder wird der Wert beim Fokusverlust in/Vübertragen und bleibt bestehen; für XFA-Textfelder landet der Schreibvorgang nur im In-Memory-Puffer (PDFium stellt keine öffentliche API zur Verfügung, um XFA-Werte zurück in das Datensatzpaket zu übertragen, daher bleibt er nach dem Speichern nicht bestehen)- Die JavaScript-Host-Plattform wird nun immer angehängt, wenn die V8-Engine verfügbar ist, unabhängig davon, ob das Dokument XFA ist — sodass eingebettetes AcroForm-JavaScript (Dokumentskripte, Feldberechnungen,
app.alert) ebenfalls ausgeführt werden kann. Zuvor warm_pJsPlatformnur für XFA-Dokumente verdrahtet, wodurch AcroForm-JS still deaktiviert blieb
Geändert (Changed)
- Das Anhängen der JavaScript-Plattform ist nun von der XFA-Entscheidung in
InitializeFormFillunabhängig — diem_pJsPlatform-Tabelle wird erstellt, wennV8FeaturesAvailablewahr ist, und nach der XFA-Version-/Callback-Verdrahtung angewendet, anstatt darin verschachtelt zu sein
Version 2.13.1
Hinzugefügt (Added)
- Neue Host-Events legen Informationen offen, die die v2.13.0-Formularfüll-Callbacks zuvor verschluckten:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Jedes Event ist standardmäßig das bestehende No-Op-Verhalten, wenn nicht zugewiesen, sodass bestehende Hosts nicht betroffen sind - Die schreibgeschützte Eigenschaft
TPdf.XfaFormPacketsgibt einen einmaligen Snapshot aller XFA-Pakete (TXfaPacketList) zurück und erfüllt die zuvor deklarierten, aber ungenutztenTXfaPacket-/TXfaPacketList-Typen - XFA-spezifische PDFium-Fehlercodes
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTsind nun gebunden und überLastPdfErrorzugänglich und ersetzen den generischen "Unknown error" bei XFA-Lade-/Layout-Fehlern
Geändert (Changed)
FFI_DoURIActionWithKeyboardModifierkonsultiert nunOnXfaUriAction, bevor eine URI aus einem XFA-Feld per Shell ausgeführt wird, und gibt dem Host ein Vetorecht (Sicherheit: ein bösartiges XFA-Feld konnte zuvor bedingungslos beliebige URLs starten). Nicht zugewiesene Handler behalten den vorherigenShellExecuteW-Standard beiDecodeFormFieldTypeleitet XFA-Feldtypen nun überIsXfaFormFieldstatt über einen expliziten 8-Branch-Case, wodurch das Enum durch ordinalen Versatz mitFPDF_FORMFIELD_XFA_*ausgerichtet bleibt
Behoben (Fixed)
ValidatePdfAmeldet nun PDF/A-1-Ansprüche, die PDF 1.5-Querverweisströme oder Objektströme verwenden, mit dem neuenpvaiPdfA1Pdf15Structure-Problem, während Objektströme für PDF/A-2 und PDF/A-3 weiterhin erlaubt bleiben
Version 2.13.0
Hinzugefügt (Added)
- Vollständige XFA (XML Forms Architecture) Runtime-Unterstützung:
TPdf.InitializeFormFillverdrahtet nun alle 14 Version-2-FPDF_FORMFILLINFO-Callbacks (FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) und hängt eineIPDF_JsPlatforman, damit eine XFA-fähigepdfium.dlldynamische XFA-Formulare rendern und skripten kann - Neue
Lib\FPdfXfa.pas-Unit, die die XFA-Konstanten (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) und dieTXfaPacket-/TXfaSaveFormat-Typen deklariert, die zuvor nur in Kommentaren referenziert wurden - Statischer XFA-Paket-Reader auf
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameplusGetXfaTemplate/GetXfaDatasets/GetXfaConfigextrahieren die XFA-template-,datasets- undconfig-Pakete als rohe XML ohne XFA-fähige Runtime — nützlich für Compliance-Auditing und Datenmigration - Fähigkeitssonden: globales
XfaFeaturesAvailableund pro DokumentTPdf.XfaRuntimeAvailable(obFPDF_LoadXFAtatsächlich erfolgreich war) undTPdf.XfaStaticReadable(ob die Paket-Reader-Exports auflösen) TPdfFormFieldTypeerweitert mitfiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, mitDecodeFormFieldType, das die neuenFPDF_FORMFIELD_XFA_*-Werte abbildet- JavaScript-Host-Events auf
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrlundOnXfaRuntimeMissingermöglichen dem Host, JS-Dialoge und XFA-Navigation anzupassen oder zu reagieren, wenn ein XFA-Dokument die Engine nicht starten kann - Neues
XfaLab-Delphi-Beispiel demonstriert XFA-Erkennung, Paketextraktion, Fähigkeitssondierung und den Runtime-fehlenden Fallback-Pfad
Geändert (Changed)
TPdf.LoadDocumentscannt die Eingabe nun vorab auf XFA-Marker (/XFAim AcroForm-Wörterbuch oder Katalog-/NeedsRendering) und wählt, wenn gefunden, automatischpdfium.v8.dllaus, indemEnableV8Engine := Truegesetzt wird, bevor die Singleton-Bibliothek erstmals geladen wird; sobald eine einfachepdfium.dllgeladen ist, kann der Prozess nicht wechseln, sodassOnXfaRuntimeMissingdiesen Fall signalisiertTPdf.GetPageCountspiegelt nun die Seitenanzahl wider, die die XFA-Engine überFFI_PageEventnach dynamischer Neupaginierung meldet, anstatt nur dem statischen PDF-Seitenbaum- Wenn ein XFA-Dokument geöffnet wird, aber die Runtime nicht verfügbar ist, setzt
InitializeFormFillnunversion=1undxfa_disabled=1, anstatt Version 2 mit nicht zugewiesenen Callbacks anzufordern, was zuvor das Risiko einer ungültigen Callback-Zeiger-Dereferenzierung barg
Version 2.12.2
Behoben (Fixed)
ValidatePdfACompliancemeldet nun verwendete benutzerdefinierte XMP-Namespaces ohnepdfaExtension:schemas, akzeptiert aber weiterhin Standard-pdfaid-Metadaten ohne Erweiterungsdeklarationen- Die PDF/A-3-eingebettete Dateivalidierung erfordert nun sowohl
/F- als auch/UF-Einträge auf oberster Ebene in Dateispec-Wörterbüchern und ignoriert verschachtelte/EF-Stream-Schlüssel beim Prüfen dieser Namen
Version 2.12.1
Behoben (Fixed)
ValidatePdfACompliancedekodiert nun escaped PDF-Namens-Tokens vor dem Abgleich mit JavaScript, LZWDecode, Type1 und verwandten verbotenen Namen, sodass obfuskierte, aber semantisch identische Namen korrekt gemeldet werden- PDF/A-Inline-Bild-Prüfungen lehnen nun
/Filter- und/F-Werte ab, die/LZWDecode, abgekürztes/LZWoder/Cryptverwenden, einschließlich Array- und escaped-Namens-Formen - PDF/A-Validierung meldet nun Metadaten-Streams mit verbotenen Stream-Filtern, OutputIntent-ICC-Profile, deren
/N-Komponentenanzahl fehlt oder inkonsistent ist, und PDF/A-3-eingebettete Datei-Specs mit fehlendem oder ungültigem/AFRelationship
Version 2.12.0
Hinzugefügt (Added)
- TSA-HTTP-Anfragen setzen nun explizite 30-s-Timeouts für jede Phase (Auflösung/Verbindung/Senden/Empfangen) über
WinHttpSetTimeouts, sodass eine langsame oder nicht erreichbare Zeitstempel-Behörde den Signier-Thread nicht auf unbestimmte Zeit blockieren kann, anstatt auf WinHttp's implizite Standardwerte zu vertrauen - Nonce-Ableitung pro Anfrage für PAdES B-T/B-LTA-Zeitstempel-Anfragen, wenn der Aufrufer
TPadesSignOptions.Nonceweglässt: ein SHA-256-Fold aus monotonem Zähler + Wanduhr +GetTickCount64+ Prozess-ID ersetzt den früheren festen$100000000-Fallback, sodass zwei in derselben Millisekunde ausgestellte Anfragen denselben Anti-Replay-Nonce nicht mehr wiederverwenden PdfInflatebegrenzt die dekomprimierte Ausgabe nun auf 256 MiB, um zu verhindern, dass ein zlib-komprimierter Stream bei feindlicher oder korrumpierter Eingabe den Speicher erschöpft (eine "zlib-Bombe"); das Limit ist für jeden realen PDF-Stream großzügig
Geändert (Changed)
TPdfView-Überblendung (Suchhervorhebung, Textauswahl, Lesewort, Spread-Auswahl) verwendet keine Pixel-für-Pixel-GetPixel/SetPixelVmehr; das Rechteck wird nun durch ein 32-bpp-Off-Screen-TBitmapundScanLinein einem einzigen Durchlauf überblendet, was Tausende von GDI-Kernel-Übergängen pro Paint eliminiert und große Auswahlen reaktionsfähig machtFPdfAsn1.TDerReader.ReadIntegerlehnt nun INTEGER-Felder ab, die länger als 8 Bytes sind (und 8-Byte-Negative, deren Vorzeichenbitshl >= 64erfordern würde), und gibt 0 zurück, anstatt einen falschen Wert durch undefiniertes Verschiebungsverhalten bei CMS/PAdES-ASN.1-Eingaben zu berechnenParseTimeStampRespspiegelt den Anfrage-Nonce nicht mehr alsTPadesTimestamp.Noncezurück; bis der TSTInfo-Walker, der den zurückgegebenen Nonce verifiziert, verfügbar ist, bleibt das Feld 0, um "nicht verifiziert" zu signalisieren, anstatt Aufrufern falsches Vertrauen zu geben, dass die Zeitstempel-Antwort frisch ist
Behoben (Fixed)
PointsToPixelsgab seine Eingabe für jeden DPI unverändert zurück: der Divisor warPointsPerInch(die 72-Konstante) statt dem Literal 72, was die Formel aufResult := Pointsreduzierte. Jeder externe Aufrufer, der Punkte→Gerätepixel-Größen über diesen Helfer durchführt, erhält nun das korrektePoints × PixelsPerInch / 72PdfMaxObjNumunterzählte auf Dokumenten, die Objektströme verwenden (PDF 1.5+ ObjStm): Objekte, die in einem/ObjStmkomprimiert sind, tragen keinenN 0 obj-Marker, sodass der rohe Byte-Scan sie verfehlte, und Injektoren, dieMaxObj+1für neue Objekte allokieren, würden mit versteckten ObjStm-Mitgliedern kollidieren und die Datei still korrumpieren. Der Scan erweitert nun zuerst Objektströme, damit jede Objektnummer sichtbar istInjectPdfAMarkersfälscht keinen PDF/A-Konformitätsanspruch mehr auf einem verschlüsselten Dokument: PDF/A (ISO 19005-1 §7.1) verbietet Verschlüsselung, und der Injektor kopierte die Quelle zuvor mit den Markern durch, auch wenn die nächste Validierung sie ablehnen würde. WennHasEncryptgesetzt ist, wird die Quelle nun unverändert durchgeleitet. Der normaleTPdf.SaveAsPdfA-Pfad entfernt bereits Verschlüsselung (saRemoveSecurity) vor der Injektion, daher betrifft dies nur direkte AufruferPdfReadStreamByteslehnt nun ein/Lengthab, das größer ist als die gesamte Datei, bevor der Ergebnispuffer allokiert wird, und schließt einen frühen Allokationspfad bei einer korrumpierten oder feindlichen indirekten Länge
Version 2.11.0
Hinzugefügt (Added)
- Der PDFium-
FPDF_FILEHANDLER-Record deklariert nun seine sechs Callbacks (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) als echte Felder statt Kommentare und entspricht dem C-Header-Layout. Die XFA-FFI-Dateiübertragungs-Callbacks (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL), diePFPDF_FILEHANDLERzurückgeben oder verbrauchen, bleiben in der Pascal-Formularfüll-Schicht unimplementiert, aber der Typ ist nun für jeden zukünftigen XFA-Submit/Upload-Pfad strukturell korrekt - PDFium-Bibliotheksladen und -entladen (
LoadLibrary/UnloadLibrary) werden nun durch einen prozessglobalen kritischen Abschnitt serialisiert, sodass zweiTPdfFuture<T>-Worker-Threads (oder ein Worker, der mit dem Hauptthread konkurriert) nicht beidePDFiumLibrary=0beobachten und doppelt binden können, oder die DLL freigeben können, während ein anderer Thread mitten im Binden ist - Ein
initialization/finalization-Abschnitt ruft nunUnloadLibrarybeim Unit-Entladen auf und stellt sicher, dassFPDF_DestroyLibraryausgeführt wird (Worker-Thread-Join, V8-Isolate-Entsorgung, Font/Cache-Abbau), anstatt sich auf das OS zum Zurückfordern der DLL zu verlassen
Geändert (Changed)
TPdf.SetActiveschluckt nun jede Ausnahme während des Ladens (zuvor nurEPdfError), sodass ein Stream-Fehler oder eine Zugriffsverletzung während des Formular-/SeitenaufbausActive=Falsehinterlässt statt einer teilweise geladenen Komponente mit unbestimmtem Zustand- Konsistente Zeichenkodierung für PDFium-Metadatenschlüsselargumente:
TPdf.GetMetaTextverwendet nun dieselbe FPC-AnsiString/Delphi-UTF8Encode-Aufteilung wieGetViewerPreferenceund die Ladepfade, anstatt eines rohenAnsiString(Tag)-Casts - Deduplizierung der
BytesToAnsi-,AnsiToBytes-,WriteBytes- undWriteStr-Helfer:FPdfCompressimportiert diese nun ausFPdfPdfCommon(seineWriteBytesToStream/WriteAnsiToStream-Aliases werden pensioniert) und die redundante Drei-Argument-BytesToAnsi-Überladung inFPdfPdfawird entfernt.FPdfAsn1behält seine lokale Kopie aus Designgründen, um die Kryptographie-Schicht frei von der Konformitätsschicht-Unit zu halten
Behoben (Fixed)
- Ressourcenleck in
TPdf.LoadDocument(Datei, Speicher,TBytes,TMemoryStream, benutzerdefinierter Stream) undTPdf.CreateDocument: wennInitializeFormFilloderReloadPagenach erfolgreichemFPDF_LoadDocument/FPDF_CreateNewDocumenteine Exception auslöste, wurde das nativeFPDF_DOCUMENT-Handle geleakt, weilFActivezu diesem Zeitpunkt noch False war. Jeder Pfad umhüllt nun das Post-Load-Setup intry/exceptund schließt das Dokument bei Fehler, sodass die Komponente sauber inaktiv bleibt - Benutzerfreundlichere PDFium-DLL-Ladediagnostik:
CheckLoadLibraryerkenntERROR_BAD_EXE_FORMAT(193) und meldet eine 32/64-Bit-Architektur-Diskrepanz, die auf den passendenDLLs/Win32- oderDLLs/Win64-Build hinweist, anstatt nur den generischen OS-Fehler weiterzuleiten.CheckGetProcAddressgibt nun an, dass die bereitgestelltepdfium.dllälter als die Bindung ist, wenn ein erforderlicher Export fehlt, anstatt des rohen OS-"procedure not found"-Texts
Version 2.10.1
Behoben (Fixed)
- PAdES SignerInfo sid Standardisierung: Die Signer-Kennung verwendet nun die RFC 5652 §5.3-Form
issuerAndSerialNumber(issuer Name + serialNumber, beide unverändert aus dem Signer-Zertifikat-DER extrahiert) und ersetzt die bisherige nicht standardgemäßesubjectKeyIdentifier+ full-cert SHA-256-Platzhalterform, die Adobe Acrobat und andere konforme Validatoren abgelehnt haben. Ein neuer TbsCertificate-DER-Walker (ExtractIssuerAndSerial) liest die issuer-SEQUENCE und die serial-INTEGER als rohe TLV-Bytes — Serials überschreiten häufig denInt64-Bereich, daher ist das rohe TLV zwingend erforderlich. DiesubjectKeyIdentifier-Form bleibt lediglich als Fallback, wenn das Parsing des Zertifikat-DER fehlschlägt
Geändert (Changed)
TCmsSignerId.SerialNumber: Int64wurde durchSerialDer: TBytesersetzt (das rohe serialNumber-TLV). Der CMS-Builder bettet das zugeschnittene TLV unverändert inIssuerAndSerialNumberein und vermeidet so einenInt64-Überlauf bei 20-Byte-CA-Serials (Obergrenze nach RFC 5280 §4.1.2.2)
Version 2.10.0
Hinzugefügt (Added)
- PAdES B-LT Langzeitvalidierung: Wenn
TPadesSignOptions.Level >= plB_LT, hängtSignPadesBytesein inkrementelles Update an, das ein/DSS-Wörterbuch mit dem Signer-Zertifikat und der vollständigen Intermediate-Chain trägt (das selbstsignierte Root wird gemäß RFC 5652 §10.2.3 ausgeschlossen), zuzüglich des/Extensions /ESICLevel-1-Markers (EN 319 142-1 §5.4.2) - PAdES B-LTA Archiv-Zeitstempel: Wenn
Level >= plB_LTAundTsaUrlgesetzt ist, wird ein Document Time-stamp-Signaturwörterbuch (/SubFilter /ETSI.RFC3161) angehängt, dessen/ByteRangedie gesamte Datei abdeckt; der ESIC-Marker wird zu Level 2 hochgestuft. Damit sind die vier PAdES-Baseline-Level vollständig (B-B, B-T, B-LT, B-LTA) - Erhebung der Zertifikatskette:
ResolveWinSignerruft nunCertGetCertificateChainauf und fülltTPadesResolvedSigner.ChainCertDermit den Intermediate-CA-Zertifikaten, sodass B-LT/DSS /Certsjedes zum Validieren der Signatur erforderliche Zertifikat enthält, ohne externe Lookups.CertFreeCertificateContextist nun gebunden und schließt das in v2.8.0 vermerkte Speicherleck von einem Kontext pro Sign - PDF/A-Integrations-Workflow:
TPdf.SignPadesWithPdfAkonvertiert das Dokument zunächst nach PDF/A (höchster Level, den die Bibliothek heute ausgibt) und wendet dann die angeforderte PAdES-Signatur an — das Langzeitarchiv-Container-Muster, das EN 319 142-1 Anhang A.7 empfiehlt
Version 2.9.0
Hinzugefügt (Added)
- PAdES B-T vertrauenswürdiger Zeitstempel:
TPadesSignOptionserhält die FelderLevel,TsaUrlundNonce. WennLevel >= plB_TundTsaUrlgesetzt ist, extrahiertSignPadesBytesden Signaturwert aus dem erstellten CMS, fordert einen RFC 3161-Zeitstempel darüber an und bettet das zurückgegebene TimeStampToken als SignerInfo-unsigned-Attributsignature-time-stampein — der B-T-Schritt mit vertrauenswürdiger Zeit (EN 319 142-1 §6.3 Anforderung o) FPdfTsa: plattformübergreifender RFC 3161-Client —BuildTimeStampReq(Version 1, SHA-256-messageImprint über dem Signaturwert, Nonce, certReq=true),ParseTimeStampResp(akzeptiert PKIStatus 0/1, lehnt 2+ ab, extrahiert das TimeStampToken-ContentInfo unverändert) undRequestTimestamp(Einmal-Ablauf aus Build+POST+Parse).PadesTsaAvailablesteuert die Funktion auf Plattformen ohne HTTP-BackendFPdfTsaWin: Windows-WinHttp-Backend, dynamisch aus winhttp.dll gebunden (keine neue Compile-Time-Abhängigkeit; HTTPS wird vom Windows-Zertifikatsspeicher ausgehandelt). Es spiegelt das dynamische Bindungsmuster vonFPdfCryptoWinwiderFPdfCms:ExtractSignatureValuedurchläuft ein erstelltes CMS, um die rohen Signatur-Oktetts zu recovered (die TSA-Hash-Eingabe), undAddSignatureTimestampToCmsbaut das ContentInfo mit einem neuenunsignedAttrs [1](0xA1) neu auf, der das Zeitstempel-Attribut trägt. Der Stage-1-Validator erkennt das Ergebnis als B-T-Signatur
Version 2.8.0
Hinzugefügt (Added)
- PAdES B-B-Signatur-Stack: Vier neue, reine Pascal-/plattformübergreifende Bausteine (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) plus ein Windows-CNG-Backend (FPdfCryptoWin) ermöglichen esTPdf.SignPades/SignPadesToStream, eine PAdES B-B-Signatur vollständig zu erzeugen. Das Signer-Zertifikat wird über den SHA-1-Fingerabdruck aus dem Current-User-“MY”-Speicher aufgelöst; RSA-PSS (empfohlen), RSA PKCS#1 v1.5 und ECDSA werden überNCryptSignHashunterstützt FPdfSha256: eigenständige FIPS 180-4 SHA-256-Implementierung (Init/Update/Final + Einmal-Helfer). FPC 3.2.2 liefert keine SHA-2-Unit, daher besitzt die Bibliothek eine eigene, um jeden CMS-Codepfad auf einen einzigenTSHA256Digest-Typ zu halten, ohne RTL-VerzweigungenFPdfAsn1: DER-Encoder (TDerWriter) und -Reader (TDerReader) für SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/context-spezifische Tags, mit der definite-length-Kodierung und der IMPLICIT-Tag-Behandlung, die CMS erfordertFPdfCms: CAdES-SignedData-Builder (BuildSignedData), der die von PAdES-Baseline geforderten signed-Attribute content-type, message-digest und signing-certificate-v2 ausgibt, mit optionalem signing-time und commitment-type-indication. Der signedAttrs-Digest wird über die SET-getaggte (0x31)-Form berechnet und mit dem IMPLICIT-[0]-(0xA0)-Tag gemäß RFC 5652 §5.4 neu ausgegebenFPdfCrypto+FPdfCryptoWin: Krypto-Backend-Abstraktion mitPadesCryptoAvailable/ResolvePadesSignerund der Windows-Implementierung, die crypt32.dll / ncrypt.dll dynamisch bindet (keine neue Compile-Time-DLL-Abhängigkeit). ECDSA-Signaturen werden von der Windows IEEE P1363 r¦s-Form in die vom CMS geforderte DER-ECDSA-Sig-Value-Form umkodiertSignPadesBytes: Signatur-Injektion auf Byte-Ebene — reserviert einen festbreiten/Contents-Hex-Slot, berechnet die abdecknde/ByteRange, hasht das Dokument, erstellt und bettet das CMS ein und hängt das inkrementelle Update an. Der Validator (v2.7.0) erkennt die Ausgabe als PAdES B-B-Signatur
Version 2.7.0
Hinzugefügt (Added)
- PAdES-Strukturvalidator (ETSI EN 319 142-1 V1.2.1): Die neue Unit
FPdfPadesund die MethodeTPdf.ValidatePadesinspizieren über/ByteRangeerreichbare Signaturwert-Wörterbücher, durchlaufen die CMS-SignedDatainnerhalb von/Contentsweit genug, um die CAdES-detached-Form zu bestätigen, und erkennen die vier Baseline-Level (B-B, B-T, B-LT, B-LTA) sowie Document Time-stamp-Wörterbücher (/SubFilter /ETSI.RFC3161) - PAdES-Problemmenge auf Klausel-Ebene: 26
ppei*-Enums decken die Akzeptanz von/SubFilterab (adbe.pkcs7.sha1undadbe.x509.rsa_sha1als verboten markiert), die Dateiabdeckung von/ByteRange, das Verbot von/Cert, die CMS-SignedData-Form (einzelner Signer, detached eContent, Versionsbereich), die erforderlichen signed-Attribute (content-type,message-digest,signing-certificate/v2), verbotene Digests (MD5, SHA-1), die gegenseitige Ausschließlichkeit von/Reasonvscommitment-type-indication(Anforderung d), die B-T-Anforderung einer vertrauenswürdigen Zeit, das B-LT/DSS+/Certs+ ESIC-Level-1-Marker sowie den B-LTA Document Time-stamp + ESIC-Level-2-Marker - DSS-Injektor:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamhängen an eine Kopie des Dokuments ein inkrementelles Update an, das ein/DSS-Wörterbuch (mit/Certs-,/OCSPs-,/CRLs-Stream-Arrays) und den/Extensions /ESIC-Marker (Level 1 oder 2) trägt, wobei die ursprünglichen Bytes erhalten bleiben — der B-LT/B-LTA-Einbettungsschritt für Validierungsmaterial (Klausel 5.4.2) - Plattformübergreifende, abhängigkeitsfreie Phase: Validator und Injektor sind reines Pascal und funktionieren auf jeder unterstützten IDE (Delphi, Lazarus, FPC, C++Builder); für dieses Release wird kein kryptografisches Backend benötigt und es wird keine neue DLL-Abhängigkeit eingeführt
Version 2.6.0
Geändert (Changed)
- Standardübergreifende Deduplizierung: Sieben weitere duplizierte Helferfunktionen (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) wurden aus den einzelnen Standard-Units entfernt und in
FPdfPdfCommonkonsolidiert, was den Copy-Paste-Wartungsaufwand um etwa 300 Zeilen verringert - PreflightReport-Qualität: PDF/X- und PDF/E-Inhaltsklassen-Probleme, die zuvor in die generische “fehlender Marker”-Kategorie landeten, tragen nun genaue Content-/Metadata-/Security-Kategorien und klauselspezifische Empfehlungen (~15 Enums über beide Standards hinweg)
- PDF/E- und PDF/R-Testabdeckung: Sechs weitere Enums mit zuvor null Abdeckung erhielten positive Tests (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Lazarus-Build-Korrektur:
Tests.PdfVT(eine Delphi-exklusive DUnitX-Unit, hinzugefügt in v2.5.x) wird nun aus dem Lazarus-Projekt ausgeschlossen, um die Kompilierung wiederherzustellen
Version 2.5.3
Hinzugefügt (Added)
- OutputIntent-Vollständigkeit (PDF/X-4 §6.2.4):
pvviOutputIntentSchememarkiert einen OutputIntent, dessen/Snicht/GTS_PDFXist;pvviOutputIntentMissingIdentifiermarkiert ein fehlendes/OutputConditionIdentifier - PDF/VT-2 Reference-XObject-Ausnahme (§6.2.2):
pvviReferenceXObjectForbiddenwird für einePDF/VT-2-Datei nicht mehr ausgelöst, die legal Reference-XObjects auf einer X-5g/5pg-Basis verwenden darf - MIME-Boundary-Zeichenvalidierung (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharmarkiert eine Boundary, deren Zeichen außerhalb des bchars-Sets liegen oder deren Länge 70 überschreitet
Behoben (Fixed)
InjectPdfVTMarkersschreibt nun Info/CreationDateund/ModDateaus den Speicheroptionen, sodass die erzeugte DateiValidatePdfVTComplianceohne ein falschespvviInfoModDateMismatchdurchläuft (der Injektor hatte zuvor die XMP-Daten neu geschrieben, die Info-Wörterbuch-Daten aber veraltet belassen)
Version 2.5.2
Hinzugefügt (Added)
- Info-
/ModDate-Konsistenz (§6.3 NOTE 2, PDF/X-4-Basis):pvviInfoModDateMismatchmarkiert ein Info-Wörterbuch-/ModDate, das nach der Normalisierung von PDF-Datum zu XMP-Datum nichtxmp:ModifyDateentspricht - PDF/VT-2s Inline-Chunk-Konformität (Anhang A.2): Der MIME-Validator führt nun
ValidatePdfVTCompliancefür jeden Inline-application/pdf-Teil aus und markiert einen Nicht-PDF/VT-Body übervtmviInlinePdfNotPdfVT
Version 2.5.1
Hinzugefügt (Added)
- DParts-Chunking-Validierung (ISO 16612-2 §6.5 Tabelle 4):
pvviDPartsBadChunkingmarkiert ein/DParts-Array, dessen nicht-finale Sub-Arrays nicht exakt 8192 Einträge haben oder dessen letztes Sub-Array außerhalb von 1..8192 liegt - RecordLevel-Konsistenz über Streams hinweg (Anhang A.2): Der PDF/VT-2s-MIME-Validator extrahiert nun
/RecordLeveljedes Inline-PDFs und markiert Uneinigkeit übervtmviRecordLevelMismatch, was die bestehende NodeNameList-Prüfung ergänzt - Hinweise auf wiederkehrende grafische Objekte (§6.7):
pvviGtsScopeInvalidValuemarkiert ein/GTS_Scopeaußerhalb von {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelmarkiert/Recordohne ein/RecordLevel;pvviGtsXidNotUuidmarkiert ein/GTS_XID, das keine RFC 4122 uuid:-URI ist;pvviGtsEnvMissingmarkiert ein fehlendes/GTS_Env, wenn/GTS_ScopeStream oder Global ist (§6.7.4) - MIME-Vorwärtsreferenz-Erkennung (Anhang A.2):
vtmviForwardReferencemarkiert ein Inline-PDF, das einen Dateinamen (über/EF /F) zitiert, der nicht durch einen früheren Anhangsteil im Stream eingeführt wurde
Behoben (Fixed)
ExtractNodeNameListFromPdfundExtractRecordLevelFromPdfinFPdfPdfvtMimelösten einen wiederkehrenden Off-by-one-Fehler, bei dem der vonAnsiFindKeyzurückgegebene 1-basierte Offset als absoluter Byte-Offset in das expandierte PDF behandelt wurde
Version 2.5.0
Hinzugefügt (Added)
- PDF/VT Document Part Metadata (DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptionserhieltDpmEntriesundDpmTarget, sodass ein Writer ein/DPM-Wörterbuch an den synthetisierten DPart-Knoten anhängen kann, mit Schlüsselnamen-Validierung gegen die Annex-E-Second-Class-Prefix-Regel und den §6.6-NMTOKEN-/Eindeutigkeits-/GTS_Managed-Form-Regeln auf der Validator-Seite - PDF/VT-2s-Streaming-Austausch (Anhang A): Die neue Unit
FPdfPdfvtMimestelltBuildPdfVT2sStreamundValidatePdfVT2sStreamfür denmultipart/mixed-MIME-Umschlag bereit, der Inline-PDF/VT-Chunks plus Anhangs-ICC-Profile trägt, mit derX-PDFVT-Stream-version: 1-Header-Reihenfolgen-Regel und derNodeNameList-Konsistenzprüfung über Streams hinweg TPdf.ValidatePdfVTführt nun eine autoritative JavaScript-Action-Zählung überFPDFDoc_GetJavaScriptActionCountdurch, was den Byte-Level-/JavaScript-Namen-Scan ergänzt
Behoben (Fixed)
- PDF/VT-
Trapped-Korrektheit auf der PDF/X-4-Basis: Der Enum-WertptvUnknownwird entfernt (PDF/X-4 verbietet/Unknown),ptvUnspecifiedwird beim Schreiben zu/Falsenormalisiert (ein fehlendes/Trappedist ebenfalls verboten), und ein neuespvviTrappedInvalid-Problem markiert einen fehlenden oderUnknown-Wert ValidatePdfVTComplianceexpandiert nun Objekt-Streams (PdfExpandObjectStreams) vor dem Scannen, sodass ein Katalog-, OutputIntent- oder Metadata-Wörterbuch innerhalb eines komprimierten ObjStm (PDF 1.5+, typisch für PDF/X-4-Produzenten) von den Byte-Level-Lookups erreichbar ist
Geändert (Changed)
- PDF/VT-1 erbt nun die vollständigen PDF/X-4-Inhaltsverbote:
pvviAcroFormForbidden(/AcroFormoder/XFA),pvviAdditionalActionsForbidden(Katalog/AA),pvviMissingTrimBoxundpvviReferenceXObjectForbidden(Reference XObject, nur X-5g/5pg) - Standardübergreifende Deduplizierung:
BuildDictObj,IccComponentCount, das eingebaute sRGB-ICC-Profil (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumundPdfExpandObjectStreamswurden von dreifach duplizierten lokalen Kopien inFPdfPdfa/FPdfPdfx/FPdfPdfvtzu einer einzigen kanonischen Heimat inFPdfPdfCommonbefördert; das 3144-Byte-ICC-Literal existiert nun genau einmal in der Codebasis
Version 2.4.0
Behoben (Fixed)
InjectPdfUaMarkersverwirft nicht mehr die/Info-Referenz des Trailers auf einer cross-reference-stream-Basis: Die lokale FunktionSourceTrailerInfoRef(der das xref-stream-Fallback fehlte) wurde durch die gemeinsame FunktionPdfSourceTrailerInfoRefersetzt (übernommen aus der PDF/A-Kopie, die das Fallback seit v2.0.0 besitzt)- Die gemeinsame Funktion
PdfReadStreamBytesverarbeitet nun indirekte/Length N G R-Referenzen (portiert aus der lokalen PDF/A-Kopie), sodass die PDF/VT-, PDF/R- und PDF/E-Validatoren XMP-Metadatenströme nicht mehr fälschlicherweise einlesen oder überspringen, wenn sie von Werkzeugen mit indirekter Length generiert wurden (Acrobat, Ghostscript)
Geändert (Changed)
- Standardübergreifende Deduplizierung: Die lokalen Kopien von
PdfReadTrailerinFPdfPdfaundFPdfPdfx, die lokalen Kopien vonSourceTrailerInfoRefinFPdfPdfaundFPdfPdfuasowiePdfReadStreamBytesinFPdfPdfawurden gelöscht — die gemeinsamen Versionen inFPdfPdfCommongelten nun überall; dies spart etwa 330 Zeilen duplizierten Code ein und eliminiert den Wartungsaufwand zur Synchronisierung der Kopien - Abbau von PDF/X-Testschulden: Sieben Inhaltsklassen-Enums, die zuvor eine Testabdeckung von null aufwiesen, erhielten positive Tests (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Geändert (Changed)
- Abbau von PDF/A-Testschulden wird fortgesetzt: Drei weitere Enums mit zuvor einer Testabdeckung von null erhielten positive Tests;
pvaiForbiddenRenderingIntent(§6.2.9) markiert einen nicht standardisierten rendering-intent-Namen in einem content stream;pvaiJpeg2000Violation(§6.2.2) markiert ein JPXDecode-Bild mit/NumComponentsaußerhalb von {1,3,4} in Part 2;pvaiInlineImageLzwForbidden(§6.1.10) markiert ein Inline-Bild mit LZW-Filter in Part 2
Version 2.2.0
Geändert (Changed)
- Regressionsprüfungen für Kreuzreferenzströme (cross-reference stream): Das bestehende
Validate_XrefStreamTrailer_DetectsConformanceverifiziert nun auch, dass die catalog-Referenz/Metadataaufgelöst und das XMPpdfaid:partauf einer Kreuzreferenzstrom-Basis (xref-stream) gelesen wird (nicht nur/Root+/ID); ein neuer TestInjectPdfA_XrefStreamBase_RoundTripssichert den in v2.0.0 hinzugefügten Kreuzreferenzstrom-Pfad des Injektors ab; zwei standardübergreifende Tests (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) verifizieren, dass die PDF/E- und PDF/R-Validatoren PDFs mit Kreuzreferenzstrom nicht mehr als nicht analysierbar ablehnen - Abbau von PDF/A-Testschulden:
Validate_MinimalPdf_FlagsRequiredMarkersstellt sicher, dass ein minimales PDF die FlagspvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataundpvaiMissingXmpDatesauslöst — dies schließt die Symmetrielücke zu den PDF/E- und PDF/X-Validatoren, die bereits über entsprechende Tests verfügten; zwei weitere Enums mit zuvor null Abdeckung erhielten positive Tests:pvaiUnembeddedFontundpvaiSubsetMissingCidSet
Version 2.1.0
Behoben (Fixed)
- PDF/E wurde versehentlich bei der v2.0.0 Kreuzreferenzstrom-Korrektur (cross-reference-stream fix) ausgelassen: Sowohl
InjectPdfEMarkersals auchValidatePdfEComplianceriefenPdfReadTrailerweiterhin ohneAcceptXrefStreamauf, sodass der PDF/E-Injektor bei PDF 1.5+-Ausgaben (dem Standardverhalten von pdfiumsSaveAsCopy) geräuschlos fehlschlug; beide Aufrufstellen übergeben nunTrue - Das gemeinsam genutzte
PdfReadTrailer-Fallback für Kreuzreferenzströme enthält nun das Schutz-Flag/Type /XRef, das die lokalen Kopien von PDF/A und PDF/X bereits hatten, sodass ein beschädigterstartxref-Offset, der auf ein nicht verwandtes Wörterbuch verweist, sauber fehlschlägt, anstatt fälschlicherweise als Trailer analysiert zu werden - Der
/Lang-Auflöser für indirekte Referenzen inValidatePdfUaCompliance(v2.0.0) war unerreichbar:PdfFindObjDictfindet nur<<-Wörterbücher, aber ein/Lang-Zeichenkettenobjekt ist(...)oder<...>ohne Wörterbuch; dies wurde durch einen direkten Objekt-Body-Scan ersetzt, der das Zeichenketten-Token lokalisiert
Geändert (Changed)
- Sieben tote Hilfsmethoden-Duplikate (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj), die byte-identische Kopien der gemeinsam genutzten
FPdfPdfCommon-Versionen waren, wurden ausFPdfPdfaundFPdfPdfuaentfernt — die gemeinsam genutzten Versionen werden nun überall überuseseingebunden
Version 2.0.0
Behoben (Fixed)
- Standardübergreifender geräuschloser Fehler: Der gemeinsam genutzte Helper
PdfReadTrailer(verwendet von den PDF/UA-, PDF/X-, PDF/VT- und PDF/R-Marker-Injektoren und -Validatoren) akzeptiert nun einen ParameterAcceptXrefStreamund fällt auf das Kreuzreferenzstrom-Objektwörterbuch zurück, wenn keintrailer-Schlüsselwort vorhanden ist (PDF 1.5+); zuvor führte dieSaveAsCopy-Ausgabe von pdfium (die einen Kreuzreferenzstrom verwendet) dazu, dass jeder Marker-Injektor geräuschlos fehlschlug — die Quellbytes wurden unverändert kopiert und der Aufruf lieferte dennoch Erfolg zurück; der PDF/R-1.0-Validator (dessen PDF 2.0-Basis immer ein Kreuzreferenzstrom ist) war praktisch wirkungslos; die ausgereifte Implementierung des PDF/A-Validators wurde auf den gemeinsam genutzten Helper portiert, sodass jeder Standard davon profitiert - Das Scannen des Trailer-Wörterbuchs in
InjectPdfUaMarkersundInjectPdfAMarkersverwendet nun das tieferenbewusstePdfDictEndanstelle einer einfachen>>-Suche, sodass ein Trailer, der ein verschachteltes Wörterbuch enthält (z. B./Encrypt << ... >>), nicht mehr vor einem nachfolgenden/Info-Eintrag abgeschnitten wird
Geändert (Changed)
TPdf.ValidatePdfUaunterdrückt nun den groben Byte-Level-FehlerpvuaiFontNotEmbedded, wenn der präzise Fehler des Pdfium-ObjektmodellspvuaiPdfiumFontNotEmbeddedbereits ausgelöst wurde, sodass der Preflight-Bericht für denselben Defekt keine zwei nahezu identischen Zeilen zur Schrifteinbettung mehr enthältpvuaiLangInvalidFormat(§7.2) löst nun ein indirekt referenziertes/Lang(N 0 R) in sein Zeichenkettenobjekt auf und validiert den Inhalt, sodass ein indirekt referenzierter Sprach-Tag kein blinder Fleck mehr ist
Version 1.99.0
Behoben (Fixed)
pvuaiLangInvalidFormat(§7.2) lässt hex-kodierte/Lang-Zeichenketten nicht mehr ungeprüft passieren: UTF-16BE-Paare (mit einemFE FFBOM) und reine ASCII-Hex-Zeichenketten werden jetzt dekodiert und derselben BCP 47-Grammatikprüfung wie literale(...)-Zeichenketten unterzogen, sodass ein fehlerhaftes Hex-/Langerkannt wird, während ein konformes (z. B. ein UTF-16BEen-US) nicht mehr Gefahr läuft, markiert zu werden
Geändert (Changed)
pvuaiFontMissingToUnicode(§7.21.7) nimmt nun/MacExpertEncodingneben/WinAnsiEncodingand/MacRomanEncodingaus, was den vier in der Klausel aufgeführten Ausnahmebedingungen entspricht
Version 1.98.0
Hinzugefügt (Added)
pvuaiNeedAppearancesTrue(§7.18.4) markiert ein AcroForm, dessen/NeedAppearances-Flag true ist, da Widget-Darstellungen nicht zuverlässig gesperrt sind und Hilfstechnologien sie nicht mit dem Strukturbaum verknüpfen können; portiert aus dem PDF/A-Validator und eingeschränkt auf das Vorhandensein von/AcroForm, um die Scanfläche einzugrenzen
Geändert (Changed)
- veraPDF-Korpus-Regression: Das Pass/Fail-Paar für §7.20 Reference-XObject und die Pass/Fail-Paare für §7.21.4.2 Subset CharSet/CIDSet wurden in
Live_Corpus_ValidatePdfUaMatchesConformanceintegriert; die Pass-Beispiele für §7.21.7 ToUnicode-forbidden-value und §7.18.6.2 Media-Clip wurden ebenfalls als Schutz vor Falsch-Positiven integriert (ihre Fail-Beispiele verwenden Wörterbuch-Layouts, die der Byte-Level-Scan nicht erfasst, weshalb nur die Pass-Seite integriert ist) - Die Korpus-Pass-Path-Assertionsliste wurde um 15 neue Schutzmaßnahmen für null Falsch-Positive erweitert, sodass nun jede aktive
pvuai*-Prüfung auf Byte-Ebene und Strukturebene mit konformen Beispielen getestet wird (zuvor waren nur ca. 30 der 60 aktiven Probleme geschützt); der Schutz fürpvuaiLangInvalidFormatwurde bewusst weggelassen, da die Prüfung auf Byte-Ebene hex-kodierte/Lang-Zeichenketten, die sie nicht dekodieren kann, vorsorglich markiert
Version 1.97.0
Behoben (Fixed)
- Härtung von
ValidatePdfUaStructureElements: Der Durchlauf der Parent-Kette vonEnclosingTableenthält nun einen Hop-Zähler (begrenzt durch die Elementanzahl), sodass ein fehlerhafterParentIndex-Zyklus auf einem synthetischen Strukturelement-Array den Aufrufer nicht mehr blockieren kann; die Array-Allokation für Marked-Content-IDs inValidatePdfUaPageContentTaggingist nun auf eine Million Einträge begrenzt, um eine Multi-GB-Allokation bei fehlerhaften/böswilligenMarkedContentIDs zu verhindern
Geändert (Changed)
- Der Enum-Dokumentationskommentar zu
pvuaiOrderedListMissingListNumberingbeschreibt nun genau, was die Prüfung tut: Sie markiert einL-Element, dessenListNumbering-Wert außerhalb der Menge aus ISO 32000-1 Tabelle 347 liegt (ein fehlendes Attribut wird nicht markiert); der vorherige Kommentar deutete an, dass auch geordnete Listen ohne das Attribut erkannt würden, was die Implementierung jedoch nicht tut - Die beiden
7.21.3.3-t02-WMode-Mismatch-Korpus-Fail-Beispiele sind nun inLive_Corpus_ValidatePdfUaMatchesConformanceintegriert — seit v1.95.0 wird der CMap-Stream mit FlateDecode dekomprimiert, sodass der Vergleich zwischen Wörterbuch und Inhalt nun auf einer lesbaren Seite erfolgt; der veraltete Kommentar „nicht integriert“ wurde entfernt
Version 1.96.0
Hinzugefügt (Added)
- Standardübergreifende Konsistenz:
TPdf.ValidatePdfUaerhält zwei aus dem PDF/A-Validator portierte Prüfungen;pvuaiAnnotationFlagsViolation(§7.18.1) markiert eine nicht freigestellte Annotation, die das Hidden- / Invisible- / NoView-Flag trägt, was den Lesefluss von Hilfstechnologien stört;pvuaiActionTargetMissing(§7.18.5) markiert eine GoToR- / URI- / SubmitForm-Aktion, der ihr erforderlicher Zielschlüssel (/F+/D, /URI, /F) fehlt, wodurch der Link für Hilfstechnologien unbrauchbar wird
Behoben (Fixed)
- Seitenübergreifendes Zusammenführen des Strukturbaums: Die
AllElems-Akkumulationsschleife inTPdf.ValidatePdfUapasst nun denParentIndexjedes Elements vom seitenlokalen Array an das zusammengeführte Array an; andernfalls behielten die untergeordneten Elemente von Seite 2 einen seitenlokalen Index bei, der auf den Bereich von Seite 1 verwies, was jede ParentIndex-abhängige Prüfung (Tabellen-/Listenstruktur, §7.4.4 H-Child-Zähler, EnclosingTable) geräuschlos beschädigte - RoleMap-Parsing:
PdfReadRoleMapPairsbeendet den gesamten Schlüssel/Wert-Scan nicht mehr, wenn ein Wert eine indirekte Referenz (N 0 R) oder ein Array ([...]) ist — beides gültige RoleMap-Formen gemäß ISO 32000-1 14.8.5.1; es überspringt nun nur diesen Eintrag (Continue) anstatt mitBreakabzubrechen, was Fehlalarme vonpvuaiRoleMapUnresolvedbei Typen verhindert, die nach einem Indirekt-/Array-Eintrag zugewiesen werden
Geändert (Changed)
FPdfPreflightReport: 18 aktiveTPdfUaValidationIssue-Werte, die zuvor in die Sammelkategorie „fehlender Marker“ fielen, tragen nun genaue Kategorien (Struktur / Inhalt / Metadaten / Sicherheit) und klauselspezifische Empfehlungen; außerdem wurde der TippfehlerpuaNone / pua1→pucNone / puc1inPDFSpecComplianceMatrix.mdbehoben
Version 1.95.0
Geändert (Changed)
- Überprüfung der Zuverlässigkeit von
TPdf.ValidatePdfUa: Die Prüfung §7.21.3.3pvuaiCMapWModeMismatchund die Prüfung §7.21.7pvuaiToUnicodeForbiddenValuedekomprimieren nunFlateDecode-komprimierte CMap- / ToUnicode-Streams vor dem Scannen (zuvor wurden nur unkomprimierte Streams bewertet, ein bekannter Falsch-Negativ-Fall); die gemeinsam genutzten HelperPdfInflateundPdfReadAndDecodeStreamwurden vonFPdfPdfa/FPdfPdfxnachFPdfPdfCommonverlagert, sodass alle Konformitätsprüfungen dieselbe Kopie nutzen
Hinzugefügt (Added)
pvuaiSubsetCharSetEmpty(§7.21.4.2) markiert einen Type 1-Subset-FontDescriptor, der einen/CharSet-Schlüssel trägt, dessen Zeichenkettenwert leer ist — das bestehendepvuaiSubsetMissingCharSeterfasste nur einen fehlenden Schlüssel; ein leeres/CIDSetwird nicht markiert, da eine Schriftart ohne CIDs legitimerweise eine leere Bitmap tragen kann
Version 1.94.0
Hinzugefügt (Added)
- Zweite Audit-Runde für
TPdf.ValidatePdfUaschloss sechs Lücken zu ISO 14289-1, die durch eine klauselweise Überprüfung und einen erneuten Scan der bereits gepackten, aber vom PDF/UA-Pfad nicht genutzten nativen Pdfium-APIs aufgedeckt wurden;pvuaiHeadingFormatInvalid(§7.4.3) markiert benutzerdefinierte Überschriften-Tags, die mit H beginnen, aber Trennzeichen, Leerzeichen oder römische Zahlen anstelle von reinen arabischen Ziffern enthalten;pvuaiMissingDocumentOutline(§7.17, Soll-Bestimmung) markiert ein mehrseitiges Dokument, das keine Lesezeichen-Gliederung enthält (einseitige Dokumente sind ausgenommen);pvuaiStructElementLangInvalid(§7.2) markiert einen Strukturelement-/Lang-Wert, der kein gültiger BCP 47-Tag ist;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) markiert ein Widget-Strukturelement, dem der Attributbesitzer PrintField fehlt;pvuaiLinkNotInStructureTree(§7.18.5) markiert ein Dokument, dessen/Subtype /Link-Annotationen nicht als Link-Strukturelemente offengelegt sind;pvuaiPdfiumAnnotationMissingContentsundpvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) fügen einen präzisen Scan auf Basis des Pdfium-Objektmodells hinzu, der Hidden-, Off-Crop-Box-, Popup- und Widget-Annotationen ausnimmt — was Fehlalarme der Heuristik auf Byte-Ebene beseitigt, die die/F-Flags oder/Rectnicht lesen kann
Version 1.93.0
Hinzugefügt (Added)
TPdf.ValidatePdfUalegt nun eine Prüfung über das Pdfium-Objektmodell über den Byte-Level-Inspektor, was der PDF/A-Runde-7-Architektur entspricht: Sie durchläuft die Textobjekte jeder Seite überFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) und scannt jedes Zeichen überFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) sowieFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — präziser als die Heuristiken auf Byte-Ebene, die nur anspringt, wenn keine Schriftprogramme vorhanden sind oder überhaupt kein/ToUnicodeerscheint; der Durchlauf bricht auf drei Ebenen vorzeitig ab: Die Seitenschleife wird beendet, wenn alle drei Probleme der Pdfium-Ebene bereits gesetzt sind, die Schleife pro Objekt bricht beim ersten nicht eingebetteten Font ab, und der Zeichenscan überspringt den.notdef-Durchlauf, wennUnicodeMapErrorbereits aufgetreten ist; PDF/UA war der letzte PDF-Standard-Validator ohne eine Pdfium-Objektmodellebene
Version 1.92.0
Hinzugefügt (Added)
Tests.PdfRerstellt — die erste Testdatei für den PDF/R-1-Validator (FPdfPdfr), die Header-Validierung, das Verbot von ObjStm, die Erkennung von Raster-Markern und einen Schutz vor Falsch-Positiven bei fehlerfreien Dateien abdeckt; alle sechs PDF-Standard-Testsuiten verfügen nun über eigene Testdateien: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = insgesamt 212 Tests
Version 1.91.0
Hinzugefügt (Added)
ValidatePdfEundValidatePdfVTerhielten Prüfungen auf Inhaltsebene, die zuvor nur in den PDF/A-, PDF/UA- und PDF/X-Validatoren verfügbar waren:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(nur PDF/E),pveiEmbeddedFilesForbidden(nur PDF/E),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbidden,pvviOpiForbidden;TPdf.ValidatePdfEandTPdf.ValidatePdfVTerhalten zudem eine Pdfium-Objektmodellebene (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded), die Textobjekte der Seite überFPDFFont_GetIsEmbeddeddurchläuft und beim ersten nicht eingebetteten Font vorzeitig abbricht
Version 1.90.0
Hinzugefügt (Added)
TPdf.ValidatePdfXlegt nun eine Prüfung über das Pdfium-Objektmodell über den Byte-Level-Inspektor: Sie durchläuft die Textobjekte jeder Seite überFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedund meldet eine nicht eingebettete Schriftart alspvxiPdfiumFontNotEmbedded— präziser als die Heuristik auf Byte-Ebene, die nur anspringt, wenn keine Schriftprogramme vorhanden sind; der Durchlauf bricht beim ersten gefundenen nicht eingebetteten Font ab
Geändert (Changed)
- Strukturbaum-Durchlauf von
TPdf.ValidatePdfUa: Der seitenweise Aufruf vonValidatePdfUaPageContentTagging(der eine Zuordnungskarte für Marked-Content-IDs aufbaut und jedes Text-/Bildobjekt abgleicht) wird nun auf nachfolgenden Seiten übersprungen, sobaldpvuaiUntaggedContentbereits gefunden wurde — Strukturelemente werden weiterhin für die seitenübergreifenden Prüfungen (Note unique ID, Überschriftenreihenfolge) gesammelt, aber der aufwendige seitenweise Content-Tagging-Durchgang bricht frühzeitig ab
Version 1.89.0
Geändert (Changed)
- Leistung der
TPdf.ValidatePdfA-Pdfium-Objektmodellebene: Der Seiten-/Objekt-Durchlauf bricht nun auf drei Ebenen vorzeitig ab — die Seitenschleife wird beendet, wenn alle zutreffenden Probleme der Pdfium-Ebene bereits gefunden wurden, die Schleife pro Objekt wird beendet, wenn beide Pro-Objekt-Probleme (Font-Einbettung + Transparenz) gesetzt sind, und der Zeichenscan auf Textseiten überspringt den.notdef-Durchlauf, wennUnicodeMapErrorbereits aufgetreten ist;Assigned()-Prüfungen zur API-Verfügbarkeit und Konformitätsflags werden einmal vor der Schleife in lokalen Booleans zwischengespeichert, anstatt bei jeder Seite/jedem Objekt/jedem Zeichen neu ausgewertet zu werden; bei einem großen nicht-konformen Dokument kann der Durchlauf nun nach der ersten Seite stoppen, anstatt alle Seiten zu scannen; bei einem konformen Dokument ist der Overhead pro Seite geringer (keine wiederholtenAssigned-Aufrufe)
Version 1.88.0
Hinzugefügt (Added)
ValidatePdfXerhielt acht neueTPdfXValidationIssue-Werte auf Inhaltsebene, die die Druckaustausch-Einschränkungen abdecken, die PDF/X über die Dateiformat-Marker hinaus auferlegt:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(kein/TrimBoxauf einer Seite) undpvxiTrappedNotSet(/Trappedfehlt oder ist/Unknown); der PDF/X-Validator prüfte zuvor nur XMP/OutputIntent-Marker, dies ist seine erste Prüfung auf Inhaltsebene; die gemeinsam genutzten HelperPdfStructureBytes,PdfHasNameundPdfCountNamewurden zuFPdfPdfCommonhinzugefügt, sodass alle Konformitätsprüfungen sie nutzen können
Version 1.87.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung deckt nun die Verbundschrift-Regeln gemäß ISO 14289-1 §7.21.3 ab:
pvuaiCidSystemInfoMismatchmarkiert Type0-Schriften, bei denen die eingebettete CMap und die untergeordnete CIDFont hinsichtlichRegistry/Orderingnicht übereinstimmen oder derenSupplementder CIDFont das der CMap überschreitet;pvuaiCMapNotEmbeddedmarkiert CMaps, die namentlich (alsEncodingoderUseCMap) referenziert werden und keine vordefinierten CMaps gemäß ISO 32000-1 Tabelle 118 sind;pvuaiCMapWModeMismatchmarkiert eingebettete CMaps, derenWMode-Wörterbucheintrag vom WMode im Stream-Inhalt abweicht
Behoben (Fixed)
- Die §7.21.3.2-Prüfung
pvuaiCidFontMissingCidToGidMapübersah CIDFontType2-Wörterbücher, deren Schlüssel-/WertpaarSubtypedurch einen Zeilenumbruch getrennt ist; zusätzlich wird nun einCIDToGIDMap-Namenswert, der nichtIdentityist, als Fehler gemeldet
Version 1.86.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung deckt nun die TrueType-Kodierungsregeln gemäß ISO 14289-1 §7.21.6 ab:
pvuaiTrueTypeEncodingInvalidmarkiert nicht-symbolische TrueType-Schriften, derenEncodingfehlt oder wederMacRomanEncodingnochWinAnsiEncodingist (direkt oder überBaseEncoding);pvuaiSymbolicTrueTypeEncodingmarkiert symbolische TrueType-Schriften, die einen nicht-standardmäßigenEncoding-Namen tragen
Version 1.85.1
Geändert (Changed)
- Die ISO 14289-1 §7.18.3-Tabulatorreihenfolgeprüfung
pvuaiMissingTabsOrderwird nun seitenweise ausgeführt: Jede Seite mit Anmerkungen muss/Tabs /Sin ihrem eigenen Seitenwörterbuch deklarieren, sodass eine konforme Nachbarseite eine Seite ohne diesen Eintrag nicht länger verdeckt
Version 1.85.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung unterscheidet nun gemäß ISO 14289-1 §7.15 zwischen dynamischen und statischen XFA-Formularen:
pvuaiXfaDynamicmarkiert Formulare, deren XFA-KonfigurationdynamicRenderaufrequiredsetzt
Geändert (Changed)
- Das bisherige Kandidaten-Flag
pvuaiXfaPresentfür beliebige XFA-Inhalte wird zurückgezogen und nicht mehr ausgelöst (statisches XFA entspricht §7.15); der Enum-Wert bleibt zur API-Kompatibilität erhalten
Version 1.84.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung erkennt nun nicht getaggte Echtinhalte gemäß ISO 14289-1 §7.1:
pvuaiUntaggedContentmarkiert gerenderte Text- und Bildobjekte, die weder vom Strukturbaum der Seite (über ihre Markierungsinhalt-IDs) beansprucht noch als Artefakt ausgezeichnet sind - Neue Seitenebenen-Hilfsmethoden
GetPageContentMarkInfosundValidatePdfUaPageContentTaggingsowie derTPdfPageContentMarkInfo-Record zur direkten Verwendung
Version 1.83.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung setzt nun das Überschriftenmodell gemäß ISO 14289-1 §7.4.4 durch:
pvuaiHeadingModelMixedmarkiert Dokumente, die das generischeH-Tag mit nummeriertenH1..Hn-Überschriften mischen;pvuaiHeadingMultipleInNodemarkiert Strukturknoten, die mehr als eine untergeordneteH-Überschrift enthalten
Version 1.82.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung löst nun die gemäß ISO 14289-1 §7.1 erforderliche RoleMap auf:
pvuaiRoleMapRemapsStandardmarkiert RoleMap-Einträge, die einen Standard-Strukturtyp neu definieren;pvuaiRoleMapUnresolvedmarkiert verwendete nicht-standardmäßige Strukturtypen, deren RoleMap-Kette fehlt, hängt oder zyklisch ist — indirekte Ketten, die zu einem Standardtyp führen, werden akzeptiert, und ungenutzte RoleMap-Einträge werden nie bewertet - Neue Hilfsmethoden
PdfUaIsStandardStructType,PdfReadRoleMapPairs(mit PDF-Name-#hh-Escape-Dekodierung) undValidatePdfUaRoleMapUsagezur direkten Verwendung
Version 1.81.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung deckt nun das gemäß ISO 14289-1 §7.6 erforderliche ISO 32000-1-Listen-Tagging ab:
pvuaiListStructureInvalidmarkiert LI-Elemente außerhalb eines L-Containers sowie Lbl-/LBody-Teile außerhalb eines LI-Elements, akzeptiert dabei jedoch verschachtelte Listen und die zulässige Lbl-Verwendung innerhalb von Note- und BibEntry-Elementen
Version 1.80.0
Hinzugefügt (Added)
- Die PDF/UA-Validierung deckt nun das gemäß ISO 14289-1 §7.5 erforderliche ISO 32000-1-Tabellen-Tagging ab:
pvuaiTableStructureInvalidmarkiert TH/TD-Zellen außerhalb einer TR-Zeile sowie Zeilen oder Zeilengruppen außerhalb ihres Table-Containers;pvuaiTableHeaderMissingScopemarkiert Kopfzellen, deren Beziehung weder über ein Scope-Attribut noch über eine Headers/ID-Zuordnung bestimmbar ist;pvuaiTableHeadersUndefinedIdmarkiert Headers-Referenzen in Dokumenten, die keine Strukturelement-IDs definieren TPdfStructureElementlegt die TabellenattributeScope,HasHeaders,HeadersIds,ColSpanundRowSpanfrei, die beim Strukturbaum-Durchlauf aufgelöst werden
Geändert (Changed)
- Der Strukturbaum-Durchlauf liest nun alle Layout- und Tabellenattribute in einem einzigen Durchgang über die Attributwörterbücher jedes Elements, anstatt einen Scan pro Attribut durchzuführen
Version 1.79.1
Hinzugefügt (Added)
- Das
AnnotationsLab-Beispiel wurde nach Lazarus und C++Builder portiert und reiht sich damit in das bestehende Delphi-Konsolenbeispiel ein
Fehlerbehebung (Fixed)
TPdf.CreateAnnotationkonnte “Cannot set attachment points” für Markup-Anmerkungen (Hervorheben, Unterstreichen, Durchstreichen, Schnörkel) auslösen, die Quad-Punkte verwenden, da die neue Anmerkung noch keinen zu ersetzenden Quad-Slot hatte; stattdessen wird nun das erste Quad angehängt
Version 1.79.0
Hinzugefügt (Added)
- Neues Delphi-Konsolenbeispiel
AnnotationsLab: erstellt Text-, Hervorhebungs-, Quadrat- und Kreis-Anmerkungen, schreibt sie in eine PDF-Datei, lädt die Datei anschließend neu und listet die Anmerkungen der Seite auf
Version 1.78.0
Hinzugefügt (Added)
- Neu:
TPdf.MeasureTextundTPdf.MeasureTextWidth: Messen die gerenderte Breite und Höhe einer Zeichenfolge für eine bestimmte Schriftart und -größe (PDF-Benutzereinheiten, 1 Einheit = 1/72 Zoll), ohne der Seite Inhalt hinzuzufügen, was Layout- und Zeilenumbruchlogik auf der Grundlage vonAddTextermöglicht; bereitgestellt durch die eigenständige EinheitFPdfMeasureals Klassen-Hilfsmethode (Class Helper) - Neu:
TPdf.WrapText: Ein "gieriger" Zeilenumbruch (greedy word wrap), basierend aufMeasureTextWidth, der Text an Leerzeichen trennt und Wörter in Zeilen packt, die nicht breiter als eine vorgegebene Breite (in PDF-Benutzereinheiten) sind; ein überlanges einzelnes Wort erhält eine eigene Zeile (keine Umbrüche innerhalb von Wörtern), und die umgebrochenen Zeilen werden als Array zurückgegeben
Version 1.77.0
Hinzugefügt (Added)
ValidatePdfAerhielt drei neueTPdfAValidationIssue-Werte, die die Klauseln abdecken, die zuvor vom früheren Lücken-Audit als “NEIN” oder “Lese-Verhalten” (“reader behaviour”) bewertet wurden (angehängte Ordinalwerte, vorhandene Werte unverändert):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — ein Zeichen, das ohne Zuordnungsfehler in Unicode 0 aufgelöst wird, das Laufzeitsymptom einer.notdef-Glyphenreferenz; erkannt über die Pdfium-Objektmodellschicht),pvaiWordBreakMissing(Level A 6.8.3.2 — ein Show-String in einem Content-Stream, der länger als 20 Zeichen ohne Leerzeichen ist, ein wahrscheinlicher Verstoß durch verschmolzene Wörter; grobe Heuristik, die CJK-Fehlerkennungen vermeidet) undpvaiLinkActionMissingTarget(6.6.3 — eine GoToR/URI/SubmitForm-Aktion, der ihr Anzeigeziel-Schlüssel fehlt, sodass ein Reader sie nicht präsentieren kann)
Version 1.76.0
Hinzugefügt (Added)
ValidatePdfAhat drei neueTPdfAValidationIssue-Werte erhalten (Ordnungszahlen angehängt, bestehende Werte unverändert):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — ein/BaseFont- oder/FontName-Token, das Bytes ≥ 0x80 enthält, die kein gültiges UTF-8 bilden),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — ein Inline-Bild in einem Seiten-Inhaltsstrom verwendet den LZW- oder Crypt-Filter) undpvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — ein nicht-symbolischer TrueType-Font, dessen Encoding-Wörterbuch/Differencesenthält)
Version 1.75.0
Hinzugefügt (Added)
ValidatePdfAhat drei neueTPdfAValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — ein numerisches Token, das die 32-Bit-Grenze für vorzeichenbehaftete Ganzzahlen von 2,147,483,647 überschreitet),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — ein/BM-Wert außerhalb der standardmäßigen Blend-Mode-Menge nach ISO 32000-1 §11.3.5; ergänzt das PDF/A-1pvaiTransparentColorSpace, das nur Normal/Compatible zulässt) undpvaiHexStringOddDigits(6.1.6 — ein<...>Hex-String mit einer ungeraden Anzahl von Hex-Ziffern)
Version 1.74.0
Hinzugefügt (Added)
ValidatePdfAhat drei neueTPdfAValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvaiPermissionsViolation(6.1.12 — ein/Perms-Dictionary, das/DigestLocation,/DigestMethododer/DigestValuezusammen mit/DocMDPenthält),pvaiTransActionForbidden(PDF/A-2 6.5.1 — eine Trans-Übergangsaktion, erkannt durch das/S /Trans-Aktions-Dictionary-Muster, um falsche Übereinstimmungen mit/Transparencyzu vermeiden) undpvaiPdfiumObjectTransparency(PDF/A-1 6.4 — ein Seitenobjekt weist nachFPDFPageObj_HasTransparencyechte Transparenz auf, was die in v1.73.0 eingeführte Pdfium-Objektmodell-Schicht erweitert, um Blend-Mode-/Soft-Mask-Effekte zu erfassen, die dem Namens-Scan auf Byte-Ebene entgehen können)
Version 1.73.0
Hinzugefügt (Added)
TPdf.ValidatePdfAlegt nun einen Pdfium-Objektmodell-Durchlauf über den Byte-Level-Inspektor: Er durchläuft die Textobjekte jeder Seite überFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedund meldet eine nicht eingebettete gerenderte Schriftart alspvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), und lädt jede Textseite, umFPDFText_HasUnicodeMapErrorzu scannen und meldet eine fehlerhafte Unicode-Zuordnung alspvaiPdfiumUnicodeMapError(6.3.8). Dies sind Prüfungen, die der Byte-Level-Inspektor nicht durchführen kann — er sieht nur Namens-Token, keine aufgelösten Font-Handles oder den Mapping-Status pro Zeichen — und werden in das Byte-Level-Ergebnis zusammengeführt. Die eigenständige Byte-Level-FunktionValidatePdfACompliancebleibt unverändert
Version 1.72.0
Hinzugefügt (Added)
ValidatePdfAhat fünf neueTPdfAValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — der Katalog darf/NeedsRenderingnicht enthalten),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — ein OutputIntent darf/DestOutputProfileRefnicht enthalten),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — eine Dateispezifikation mit/EFmuss auch/UFenthalten),pvaiXmpPacketBytesAttr(6.7.5 — der XMP-Paket-Header darf das veraltete Attributbytes=oderencoding=nicht enthalten) undpvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — das Annotations-/F-ToggleNoView-Bit, Wert 512, ist verboten)
Version 1.71.0
Geändert (Changed)
ValidatePdfUalöst nunpvuaiOrderedListMissingListNumberingaus (ISO 14289-1 7.6): Der Strukturbaum-Walker löst das Layout-AttributListNumberingfür jedesL-Element über die Pdfium-Attribut-API auf und markiert jeden Wert außerhalb der in ISO 32000-1 Tabelle 347 definierten Menge (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Ein fehlendes Attribut wird nicht markiert, da die Liste ungeordnet sein könnte; dies schließt die letzte verbleibende ISO 14289-1 Lücke, die am Ende von Runde 5 erfasst wurde
Version 1.70.0
Hinzugefügt (Added)
ValidatePdfUahat vier neueTPdfUaValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — ein CID-Subset-FontDescriptormuss/CIDSetdeklarieren),pvuaiToUnicodeForbiddenValue(7.21.7 — eine ToUnicode-CMap darf keinen Code aufU+FEFFoderU+FFFEabbilden; unkomprimierte Streams werden auf die Ausgabeformen<FEFF>/<FFFE>gescannt),pvuaiLangInvalidFormat(7.2 —/Langmuss ein gültiger RFC 1766 / BCP 47-Tag sein; eine freizügige Grammatik akzeptierten,en-US,zh-Hans,es-419und markiert eindeutig nicht konforme Werte) undpvuaiOrderedListMissingListNumbering(7.6 — aus Gründen der API-Vollständigkeit beibehalten; wird vom Validator noch nicht ausgelöst, da die zuverlässige Unterscheidung zwischen geordneten und ungeordneten Listen den AttributwertListNumberingerfordert, den der Strukturbaum-Walker nicht bereitstellt)
Version 1.69.0
Hinzugefügt (Added)
ValidatePdfUahat zwei neueTPdfUaValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — ein Widget-Strukturelement muss innerhalb einesForm-Elements verschachtelt sein; der Strukturbaum-Walker überprüft nun den direkten übergeordneten Typ jedes Widgets) undpvuaiSubsetMissingCharSet(7.21.4.2 — ein Type-1-Subset-FontDescriptormuss/CharSetdeklarieren, identifiziert durch das aus sechs Buchstaben bestehende+-Subset-Namen-Präfix bei/FontName)
Version 1.68.0
Hinzugefügt (Added)
ValidatePdfUahat zwei neueTPdfUaValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — ein URI-Aktions-Dictionary darf nicht/IsMapmit dem Werttrueenthalten, da dies das barrierefreie Linkziel deaktiviert) undpvuaiHeadingSequenceViolation(7.4.2 — nummerierte Überschriften müssen beiH1beginnen, und eine absteigende Sequenz darf keine dazwischenliegende Ebene überspringen, z. B. istH1→H3eine Verletzung). Die Überschriftenprüfung ist die erste PDF/UA-Regel auf Strukturbaumebene im Validator:ValidatePdfUaStructureElementsdurchläuft nun die Liste der typisierten Elemente und verifiziert die SequenzH1…H6(undH7+gemäß 7.4.3) in Dokumentenreihenfolge
Version 1.67.0
Hinzugefügt (Added)
ValidatePdfUahat fünf neueTPdfUaValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — eine Link-Annotation muss eine alternative Beschreibung über/Contentsenthalten),pvuaiAnnotationMissingContents(7.18.1 — jede nicht ausgenommene Annotation ohne/Contentsmuss eine alternative Beschreibung haben; Popup und Widget sind ausgenommen),pvuaiEmbeddedFileMissingName(7.11 — ein Dateispezifikations-Dictionary muss/Fund/UFenthalten),pvuaiMediaClipMissingAlt(7.18.6.2 — ein Medienclip-Daten-Dictionary muss/CTund/Altenthalten) undpvuaiCidFontMissingCidToGidMap(7.21.3.2 — ein eingebetteter Type-2-CIDFont muss/CIDToGIDMapenthalten)
Version 1.66.0
Hinzugefügt (Added)
ValidatePdfUahat fünf neueTPdfUaValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvuaiRoleMapMissing(ISO 14289-1 7.1 — ein getaggtes Dokument mit nicht standardmäßigen Strukturtypen muss eine/RoleMapenthalten),pvuaiOptionalContentAsKey(7.10 — ein Konfigurations-Dictionary für optionalen Inhalt darf nicht den Auto-State-Schlüssel/ASenthalten),pvuaiXfaPresent(7.15 — das Vorhandensein eines AcroForm/XFAwird markiert, da dynamisches XFA verboten ist),pvuaiTrapNetAnnotation(7.18.2 —/TrapNet-Annotationen sind verboten) undpvuaiReferenceXObject(7.20 — Reference XObjects, die durch den/Ref-Marker gekennzeichnet sind, sind verboten)
Behoben (Fixed)
ValidatePdfUaliefert nicht länger bei jeder verschlüsselten Datei fälschlicherweisepvuaiEncryptionPresent(False-Positive): PDF/UA erlaubt Verschlüsselung, solange beim Schlüssel/Pdes Verschlüsselungs-Dictionarys die Bitposition 10 (Wert 1024) gesetzt ist, was den Zugriff für assistierende Technologien gewährt (7.16). Der genaue Verstoß wird nun über das neuepvuaiEncryptionPBitMissinggemeldet;pvuaiEncryptionPresentwird aus Gründen der API-Kompatibilität im Enum beibehalten, aber vom Byte-Level-Validator nicht mehr ausgelöst
Version 1.65.0
Hinzugefügt (Added)
ValidatePdfAhat fünf neueTPdfAValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — ein eingebetteter Type-2-CIDFont muss/CIDToGIDMapenthalten),pvaiSubsetMissingCharSet(6.3.5 — ein Type-1-Subset-FontDescriptormuss/CharSetenthalten),pvaiSubsetMissingCidSet(6.3.5 — ein CID-Subset-FontDescriptormuss/CIDSetenthalten),pvaiWidgetActionForbidden(6.6.1 — eine Widget-Annotation darf weder/Anoch/AAenthalten) undpvaiOptionalContentAsKey(ISO 19005-2 6.9 — ein Konfigurations-Dictionary für optionalen Inhalt darf nicht den Auto-State-Schlüssel/ASenthalten; neuerdings relevant, da PDF/A-2 optionalen Inhalt zulässt)
Version 1.64.0
Hinzugefügt (Added)
ValidatePdfAhat acht neueTPdfAValidationIssue-Werte erhalten (Ordinalzahlen angehängt, bestehende Werte unverändert):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — dem Header%PDF-x.ymuss ein%-Kommentar mit mindestens vier Bytes größer als 127 folgen),pvaiExternalStreamRef(6.1.7 — ein Stream-Dictionary darf nicht/F,/FFilteroder/FDecodeParmsenthalten),pvaiOutputIntentScheme(6.2.2 — das OutputIntent/Smuss/GTS_PDFA1sein),pvaiInfoXmpDateMismatch(6.7.3 — InfoCreationDate/ModDatemuss auch alsxmp:CreateDate/xmp:ModifyDateerscheinen),pvaiMarkInfoMissing(6.8.2.2 — Level A erfordert/MarkInfomit/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — das Annotations-Dictionary/APdarf nur/Nenthalten),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Anhang E.2 — jede verknüpfte Dateispezifikation (associated filespec) muss/AFRelationshipenthalten) undpvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — ein JPEG2000-Bild muss 1, 3 oder 4 Komponenten deklarieren)
Behoben (Fixed)
ValidatePdfAliefert nicht länger fälschlicherweisepvaiAnnotationFlagsViolation(False-Positive) bei Dokumenten, die einen aus einem einzigen Buchstaben bestehenden Font-Ressourcennamen wie/Font << /F 5 0 R >>verwenden; der Scan nach dem/F-Flag ist nun an einen Annotationskontext (/Subtypeeines Annotationstyps) gebunden, was dem dokumentierten Verhalten entspricht (6.5.3)ValidatePdfAmeldet nun die PDF/A-3-Anforderung für verknüpfte Dateien pro Datei: Ein Dokument wird nur noch markiert, wenn einer eingebetteten/Type /Filespec, die über/EFauf einen eingebetteten Stream verweist,/AFRelationshipfehlt, anstelle der vorherigen Alles-oder-Nichts-Prüfung (any-or-none check) für das gesamte Dokument (ISO 19005-3 Anhang E.2)- Die veraltete (deprecated) Aktion
/SetStatewurde neben/SetOCGStatezur Menge der verbotenen Aktionen hinzugefügt, sodass der Name der Aktion aus der PDF-Referenz direkt abgefangen wird (6.6.1)
Version 1.63.0
Hinzugefügt (Added)
TPdf.MeasureTextundTPdf.MeasureTextWidthhinzugefügt: misst die gerenderte Breite und Höhe von Text bei einer bestimmten Schriftart und -größe, ohne Inhalte zur Seite hinzuzufügen (in PDF-Benutzereinheiten, 1 Einheit = 1/72 Zoll); ermöglicht Layoutberechnungen und automatischen Zeilenumbruch auf Basis vonAddText; wird von der eigenständigen UnitFPdfMeasureals Class Helper bereitgestellt
Geändert (Changed)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFundDemo\Lazarus\MergePDFfür alle drei IDEs erweitert: unterstützt jetzt die Auswahl von Seitenbereichen pro Datei, optionalen Ausgabepfad, Deduplizierung, ein Ausführungsprotokoll, eine Abbrechen-Schaltfläche und eine Zusammenfassung nach dem Zusammenführen; Lesezeichen und Metadaten werden beim Import der ersten Quelle übernommenCreatePDF-Demos für alle drei IDEs ergänzt um eine Option „Europäischer Text" zum Schreiben akzentuierter Texte in Tschechisch, Französisch, Deutsch, Spanisch, Portugiesisch, Polnisch und Türkisch, zur Prüfung von Schriftauswahl und Unicode-Verarbeitung (das frühere BeispielEuropeanTextwurde integriert)- Die Beispiele
ExtractTextPagesundEuropeanTextwurden entfernt: die seitenweise Textausgabe vonExtractTextPageswird nun von den Seitenbereichs- und Seitentrennoptionen inExtractTextabgedeckt; die mehrsprachige Textwiedergabe vonEuropeanTextwurde inCreatePDFintegriert
Version 1.62.2
Behoben (Fixed)
- Die C++Builder-Header (
.hpp) für jede RAD-Studio-Version und Plattform (Win32/Win64/Win64x) wurden neu erzeugt; sie hatten sich von den Pascal-Quellen entfernt und hinterließen veraltete Funktionssignaturen sowie fehlende Units, die C++Builder-Nutzer über die Quellverteilung erreichten
Version 1.62.1
Behoben (Fixed)
- Die Quellkompilierung unter RAD Studio 12 Athens und älter wurde wiederhergestellt: Eine
TArray<Byte>-Zuweisung im PDF/UA-Validierungspfad verwendete eine nur in Delphi 13 verfügbare implizite Array-Konvertierung, die auf älteren IDEs nicht kompilierte
Version 1.62.0
Hinzugefügt (Added)
TPdf.RenderPageThumbnailrendert jede Seite per Index in ein seitenverhältnisangepasstes Bitmap, ohne die aktuelle Dokumentseite, die geladene Seite oderOnPageChangezu ändern
Behoben (Fixed)
TPdfThumbnailViewsteuert beim Zeichnen nicht mehr diePageNumberdes Host-Dokuments; früher lud jede Neuzeichnung Seiten neu, lösteOnPageChangeaus und verwarf die Textseite, was eine verknüpfteTPdfViewstören und Neuzeichnungsschleifen auslösen konnte. Miniaturen werden jetzt überRenderPageThumbnailgerendert, ohne solche Nebenwirkungen- Die PDF/X-Konformitätsprüfung untersucht jetzt Dokumente mit Cross-Reference-Streams (PDF 1.6, typisch für PDF/X-4) und Objekte in komprimierten Objekt-Streams, statt solche Dateien pauschal als nicht konform zu melden; das
GTS_PDFXVersion-Markerfeld wird sowohl aus XMP in Elementform als auch in RDF-Attributform gelesen - Die PDF/R-Validierung meldet jetzt
pvriInfoXmpMismatch, wenn sich Info-Wörterbuch und XMP bei Producer oder Creator unterscheiden; der Fehler war zuvor deklariert, aber nie ausgelöst worden - Formularfüll-Timer werden jetzt pro Anforderung verfolgt, sodass ein Dokument, das mehrere Timer gleichzeitig laufen lässt (zum Beispiel ein JavaScript-Intervall neben dem Blink des Feldcursors), sie alle behält, statt alle bis auf den neuesten zu verlieren
- Das Zeichnen von
TPdfViewund seine öffentlichen MethodenRenderPage/RenderTilehalten jetzt den Dokument-Render-Lock und serialisieren damit gegen das Rendern desselbenTPdfim Worker-Thread (PDFium ist nicht threadsicher) - Nicht-ASCII-Text in PDF/X-, PDF/R- und PDF/VT-Metadaten (OutputIntent-Bedingungsnamen, Creator, Producer) wird jetzt gemäß ISO 32000-1 §7.9.2.2 als UTF-16BE-String statt als rohes UTF-8 kodiert, was konforme Leser sonst falsch lesen würden
- Konformitätshelfer lesen eingebettete Metadatenströme mit indirekter
/Length-Referenz jetzt korrekt, laden Quelldaten mitReadBuffer(sodass ein kurzer Lesevorgang sauber fehlschlägt) und weisen einen negativenstartxref-Offset zurück, statt einen Lesezugriff außerhalb des Bereichs zu riskieren
Version 1.61.0
Geändert (Changed)
- FFI/ABI-Deklarationen wurden korrigiert, was eine Neukompilierung von Code erforderlich machen kann, der die betroffenen Callbacks implementiert: Der
FFI_OpenFile-Formularfüll-Callback trägt jetztcdecl(Win32-Stack-Konvention), und dervalue-Parameter vonFPDFAnnot_SetStringValueundFPDFAttachment_SetStringValueist jetztFPDF_WIDESTRING(UTF-16LE), passend zu den PDFium-Headern - Progressive-Load-Callbacks
FX_FILEAVAIL.IsDataAvailundFX_DOWNLOADHINTS.AddSegmentnehmen jetztsize_t-Offsets, undsize_that unter Free Pascal / Lazarus Win64 jetzt die Pointer-Breite statt wie zuvor auf 32 Bit gekürzt zu werden, was Data-Availability- undout-size_t-API-Aufrufe unter FPC Win64 korrigiert
Behoben (Fixed)
- Speichersicherheit: ein use-after-free des Formularfüll-Timers beim Zerstören eines
TPdfmit aktivem AcroForm-Cursor; ein doppeltesFPDF_CloseDocumentim Fehlerpfad vonImportNPagesToOne; Pascal-Ausnahmen, die während Speichern und JPEG-Einfügen dieFPDF_FILEWRITE- /FPDF_FILEACCESS-Callbacks über die C-Grenze verlassen; sowie ein Integer-Überlauf bei der Textextraktion beim Lesen von einem Startindex bis zum Seitenende TPdfFuture<T>liefert seinen Ergebnis-Callback jetzt zuverlässig aus; die Rückmeldung wurde zuvor fast immer verworfen und konnte einen freigegebenen Thread berühren, weil sich der Worker freigab, bevor die eingereihte Rückmeldung lief- PDF/A-, PDF/X-, PDF/E-, PDF/R-, PDF/VT- und PDF/UA-Ausgaben schreiben jetzt Kreuzreferenzeinträge mit exakt 20 Bytes, wie in ISO 32000-1 §7.5.4 gefordert
- Die Einschleusung von Standards-Markern zerstört kein Wörterbuch mehr, wenn der entfernte Schlüssel, zum Beispiel
/Trapped, der letzte Eintrag war; zuvor wurde dadurch das schließende>>verschluckt und ein fehlerhaftes Objekt erzeugt - Die OutputIntent-ICC-Profilströme geben jetzt die erforderliche
/N-Komponentenzahl für PDF/X und PDF/VT an, die bei PDF/A bereits vorhanden war; verschlüsselte Quelldokumente werden vor dem Einschleusen von PDF/X-, PDF/E-, PDF/R-, PDF/VT- und PDF/UA-Markern entschlüsselt, sodass die Ausgabe gültig statt stillschweigend beschädigt ist - Das UTF-8-xpacket-BOM in erzeugtem XMP wird jetzt als exakte Bytefolge ausgegeben, was Beschädigungen auf Delphi-Installationen mit einem ANSI-Codepage ungleich Latin-1 behebt; Trailer für inkrementelle Updates behalten jetzt die
/Info-Referenz des Dokuments SaveAsmit Kompression kürzt keine Streams mehr, deren/Lengtheine indirekte Referenz ist, und neu aufgebaute Kreuzreferenztabellen verwenden jetzt 20-Byte-Einträge, echte Generationsnummern und lassen den veralteten/Prev-Zeiger weg- Die Konformitätsvalidierung liest XMP-Versionsmarker in Attributform für PDF/E und PDF/X jetzt korrekt, sodass attributserialisierte PDF/X-4-Dateien erkannt werden, verlangt den exakten
PDF/E-1-Bezeichner, liest Metadatenströme mit indirekter/Lengthkorrekt und vergleicht beim Prüfen des PDF/UA-Trailers das/ID- oder/StructTreeRoot-Schlüssel eines Strukturelements nicht mehr fälschlich; ein fehlerhafterstartxref-Offset löst keinen Bereichsfehler mehr aus TPdfThumbnailView: Die letzte Seite ist jetzt über die Bildlaufleiste erreichbar, die aktuelle Seite des Host-Dokuments wird nach dem Zeichnen der Miniaturen wiederhergestellt, und die standardmäßige Mouse-Leave-Behandlung wird erneut ausgelöst- Graustufen-Seiten- und Bild-Bitmaps werden nicht mehr mit einer falschen Palette gerendert;
TPdfViewbleibt außerdem nicht mehr mit einer hängenden Referenz zurück, wenn seinTPdfzuerst freigegeben wird - Preflight-Berichte: HTML wird als UTF-8 gespeichert, passend zum deklarierten Zeichensatz, und JSON-Zeichen-Escaping erzeugt auf Free Pascal korrekte
\u-Sequenzen für Nicht-ASCII-Zeichen - Test-Builds: Der Dialog mit der Test-Erinnerung erscheint jetzt, statt unterdrückt zu werden, bevor er angezeigt werden kann
TPdfStreamAdapterweist jetzt Streams über 4 GiB mit einem klaren Fehler zurück, statt die an PDFium übergebene Länge stillschweigend zu kürzen
Version 1.60.1
Geändert (Changed)
- Die AccessibilityReader-Demos für Delphi, Lazarus und C++Builder lesen jetzt über
TPdfReadingSessionvor: Jede Seite wird mitBuildSpokenTextFromWordszu einem gesprochenen Block zusammengesetzt, SAPI-Wortpositionen speisenFeedSpokenPosition, und die Session schaltet Seiten weiter und steuert den Wortcursor der Ansicht, statt der zuvor in jedem Demo vorhandenen handgeschriebenen Orchestrierung - Wortgenaues Karaoke-Tracking in den Demos funktioniert jetzt auch, wenn NVDA die Sprachausgabe ist:
EstimatePacingtaktet den Lese-Cursor nach verstrichener Sprechzeit, während NVDA zuvor ganz ohne Wortverfolgung vorgelesen hat - Pause und Resume funktionieren in den Demos jetzt ebenfalls mit NVDA:
ResumeRestartsChunkspricht die aktuelle Seite bei Resume erneut vom Anfang an, während SAPI sein natives Pausieren und Fortsetzen an Ort und Stelle behält
Version 1.60.0
Hinzugefügt (Added)
- Live-Low-Vision-Rendering in
TPdfView: Die neuen RenderoptionenreInvertundreNightDuotonefärben jedes gerenderte Seitenkachelbild vor dem Zeichnen von Such-, Auswahl-, Lese- und Wortcursor-Overlays neu ein, entweder mit vollständiger Farb-Invertierung oder einer Nacht-Duoton-Palette, und bringen damit die vorhandenen Bitmap-Farbtransformationen in den interaktiven Viewer für Einzel- und Doppelseitenlayouts; das Umschalten der Optionen zeichnet sofort neu NightDuotoneInkundNightDuotonePaperkonfigurieren die Nachtpalette, standardmäßig mit bernsteinfarbenem Text auf schwarzer Seite; wenn beide Optionen gesetzt sind, gewinntreInvert
Version 1.59.0
Hinzugefügt (Added)
TPdfReadingSession:Eine sprachengine-neutrale Orchestrierungskomponente für Vorlesen. Sie verwaltet den Chunk-Cursor, den Wort-Cursor und den Wiedergabestatus (Play/PlayFrom/Pause/Resume/Stop), arbeitet sich durch die geladenenTPdfSpokenText-Chunks, sobald der Host überTickLeerlauf meldet, übersetzt gesprochene Textoffsets zurück in Seitenzeichen und steuert automatisch einen angehängtenTPdfView-Wortcursor; der Host bindet jede Sprachausgabe überOnSpeaksowie die Anforderungsereignisse für Abbrechen / Pause / Fortsetzen an, sodass die Bibliothek selbst keine Speech-API verlinktFeedSpokenPositionverarbeitet Wortpositionen der Engine, etwa SAPIStatus.InputWordPosition;EstimatePacingmitEstimatedWordsPerMinutetaktet Engines ohne Positionssignal;ResumeRestartsChunkspricht für Engines ohne native Pause den aktuellen Chunk erneutOnChunkChange,OnWordChangeundOnFinishedfeuern nur bei echten Änderungen, und eine freigegebene angehängte Ansicht löst sich automatisch ab, sodass Hostcode flackerfrei und absturzsicher bleibt
Version 1.58.0
Hinzugefügt (Added)
EstimateSpokenWordIndexschätzt aus verstrichener Zeit und einer Wörter-pro-Minute-Rate, welches Wort eine Sprachausgabe gerade spricht, und gibt längeren Wörtern proportional mehr Zeit, sodass Engines ohne Wortpositionsmeldung, etwa der NVDA Controller Client, trotzdem den wortgenauen Lesecursor treiben können; der Aufrufer liefert die verstrichene Zeit, daher bleibt die Routine uhrfrei und unit-testbar
Version 1.57.0
Hinzugefügt (Added)
- Spoken-Text-Zusammenstellung mit Zwei-Domänen-Zuordnung für Vorlese-Tracking:
BuildSpokenTextFromWordsundSpokenTextAppendbauen aus Seitenwortboxen die Zeichenkette für eine Text-to-Speech-Engine und protokollieren dabei eine Bereichstabelle, undSpokenToPageCharübersetzt einen von der Engine gemeldeten gesprochenen Offset, etwa SAPIStatus.InputWordPosition, zurück in den Seitenzeichenindex, sodass das wortgenaue Hervorhebungs-Tracking korrekt bleibt, wenn der gesprochene Text nicht der gesamte Seitentext ist, etwa bei übersprungenen Bereichen, unitweiser Lektüre oder Ausspracheüberschreibungen TPdfSpokenTextundTPdfSpokenSpantragen den gesprochenen String sowie die Quellseitenbereiche, aus denen er aufgebaut wurde; Offsets auf eingefügten Trennzeichen lösen sich zum nächsten gemappten Wort auf und Offsets jenseits der gemappten Bereiche melden keinen Treffer
Version 1.56.9
Hinzugefügt (Added)
Demo\Delphi\PreflightReportergänzt eine Vorschau des Aktionsplans, die nicht bestandene Standards, Prioritäten, nächste Maßnahmen, Fehlercodes und Empfehlungen in eine Maßnahmen-Checkliste bündeltDemo\Delphi\PreflightReportCliakzeptiertplan/actionplanals Ausgabeformat für Einzeldatei- und Batchläufe und schreibt dieselbe Maßnahmen-Checkliste in eine Textdatei
Geändert (Changed)
- Beide Delphi-PreflightReport-Demos zeigen jetzt Pass-/Aktions-/Überprüfungsstatus-Zählwerte zusammen mit den Gesamtstandards und Meldungen an
Version 1.56.8
Geändert (Changed)
ViewerInteractionLabenthält jetzt Seiten-Sprung-Steuerelemente, manuelle Zoom-Steuerelemente, ein klickbasiertes Logging derDeviceToPage/PageToDevice-Koordinaten und ein klareres Interaktionsprotokoll für Auswahl-, Such-, Rotations- und Navigationsprüfungen- Die Readme-Seiten von
ViewerInteractionLabdokumentieren jetzt den hinzugefügten Interaktionsworkflow in den lokalisierten Demo-Readme-Dateien
Version 1.56.7
Hinzugefügt (Added)
AccessibilityWorkbenchCliordnet jede ausgelöste Feststellung ihrem WCAG 2.1 Success Criteria und der ISO 14289-1 (PDF/UA-1)-Klausel zu und zeigt im Bericht einen Abschnitt zur Standardabdeckung anAccessibilityWorkbenchCliberechnet einen dokumentierten Accessibility-Score von 0 bis 100 mit einer veröffentlichten Strafwertung und den Stufen excellent / good / needs work / poor, als Einzeldatei- und Batchdurchschnitt ausgegebenAccessibilityWorkbenchCliakzeptiertfailscore=N, um den Lauf mit Exit Code 2 zu beenden, wenn eine Datei unter N liegtAccessibilityWorkbenchClischreibt ein SARIF 2.1.0-Protokoll, wenn der Batch-Zusammenfassungsname auf.sarifendet, mit einer Regel pro Befundtyp und den dazugehörigen WCAG 2.1- sowie PDF/UA-Tags für CI und Code-ScansAccessibilityWorkbenchCliergänzt den Befehlversion, der die verknüpfte PDFium Delphi Component-Version ausgibt
Version 1.56.6
Hinzugefügt (Added)
IntakeWorkbenchCliberechnet einen SHA-256-Forensikhash jeder Eingabedatei (fällt aufunavailablezurück bei Compilern ohneSystem.Hash) und meldet ihn in jedem FormatIntakeWorkbenchCliakzeptiertpasswords=file.txt, um passwortgeschützte Dokumente aus einer Kandidatenliste probeweise zu entsperren, wobei der passende Kandidatenindex gespeichert wird, ohne das Passwort selbst zu protokollierenIntakeWorkbenchCliakzeptiertcopyto=dir, um jede geprüfte Datei in einen risikobezogenen Unterordner zu verschieben und so aus dem Auditor einen Intake-Sortierer zu machenIntakeWorkbenchClischreibt ein SARIF 2.1.0-Protokoll, wenn der Batch-Zusammenfassungsname auf.sarifendet, mit einer Regel pro Risikomarker und einem Ergebnis pro markierte Datei für CI- und Code-ScansIntakeWorkbenchCliergänzt den Befehlversion, der die verknüpfte PDFium Delphi Component-Version ausgibt
Version 1.56.5
Hinzugefügt (Added)
IntakeWorkbenchClileitet nun empfohlene Maßnahmen nach der Intake-Prüfung ab, darunter accept, request-password, manual-review, quarantine und deduplicate, und zeigt Maßnahmenzähler in Batch-Zusammenfassungen anAccessibilityWorkbenchClileitet nun empfohlene Behebungsmaßnahmen wie pass-through, remediate-tags, run-ocr, remediate-semantics und manual-review ab, inklusive passender Batch-Maßnahmenzähler
Geändert (Changed)
- Beide CLI-Demos auf Tool-Ebene zeigen die empfohlene Maßnahme in der Konsole sowie in Text-, HTML-, JSON- und CSV-Ausgabe, damit Batch-Betreiber Dateien ohne Risiko beim Nachverarbeiten von Statusfeldern routen können
Version 1.56.4
Behoben (Fixed)
- Beim Lesen von Anmerkungen, Lesezeichen oder Link-Anmerkungen in einer Schleife gehen keine Textzeichenketten des vorherigen Elements mehr verloren: Die Ergebnisdatensätze von
TPdfAnnotation,TBookmarkundTLinkAnnotationwerden jetzt mit einem verwalteten Initialisierungsansatz geleert statt mit Rohspeicher-Nullung, so dass Dokumente mit vielen textbehafteten Anmerkungen den Prozessspeicher nicht mehr dauerhaft aufblasen - Das Zerstören eines
TPdf, das einenOnUnsupportedFeature-Handler registriert hatte, entfernt ihn jetzt aus dem prozessweiten PDFium-Callback, sodass ein späterer Dokument-Ladevorgang in einer anderenTPdf-Instanz ohne eigenen Handler nicht mehr in die freigegebene Komponente verzweigt (use-after-free)
Version 1.56.3
Behoben (Fixed)
AccessibilityWorkbenchClizählt leere Seiten nicht mehr als heuristische Lese-Reihenfolgesseiten, sodass getaggte Dokumente mit leeren Trennseiten ihren korrekten Zugänglichkeitsstatus behalten; Seiten ohne lesbaren Inhalt werden jetzt separat gemeldetAccessibilityWorkbenchCliweist bei der Tabellenkopf-Erkennung keine äußere Tabelle mehr einemTH-Zellensatz einer verschachtelten Tabelle zu, und Formularfeld- sowie Schriftartnamen werden mit Groß-/Kleinschreibung abgeglichen, sodass unterschiedliche Felder nicht zusammengeführt werdenIntakeWorkbenchCliURL-Host-Inventare entfernen jetzt Userinfo-, Query- und Fragmentanteile, sodass ein präparierter Link wie[email protected]dem echten Host zugeordnet wird undmailto:-Ziele ihre Domain statt unsichtbar beitragenIntakeWorkbenchCli-Markdown-Berichte maskieren Backticks in vom Angreifer kontrollierten Pfaden, Hosts und Anhangsnamen, damit das Berichtformat von einem Dokument aus nicht gebrochen werden kann
Geändert (Changed)
AccessibilityWorkbenchClimeldet Fehler bei Font-Scan und Formularfeld-Scan als separate Zähler, markiert nicht eingebettete Schriften mit eingebetteten Instanzen und begrenzt lange Schriftenlisten mit einem expliziten KürzungsmarkerIntakeWorkbenchCliBatch-Zusammenfassungen erhalten eine Spalte für die Anzahl der Anhangs-Anmerkungen, und der Anmerkungsbestand je Seite ist auf 20000 Anmerkungen pro Seite begrenzt, wobei die Begrenzung in jedem Format angezeigt wird
Version 1.56.2
Hinzugefügt (Added)
AccessibilityWorkbenchCliprüft jetzt Schrifteinbettung, Tooltips von Formularfeldern, Quelle der Lesereihenfolge, Dokumentgliederungen, Tabellen- und Listenstruktur, verdächtigen Alternativtext und ausführlichere Prüfdetails pro Seite, damit Barrierefreiheits-Batchberichte mehr Korrekturziele erkennenIntakeWorkbenchClimeldet jetzt Seiten-Scanlimits, launch- und remote-go-to-Aktionen, URI-Hostinventare, Anmerkungszahlen, nicht unterstützte PDFium-Funktionen, doppelte Dokumentkennungen und erweiterte Risikomarker für die automatisierte intake-Prüfung
Geändert (Changed)
IntakeWorkbenchCliakzeptiertmaxpages=Nim Einzeldatei- und Batchmodus, um Seiten-Scans pro Dokument zu begrenzen und trotzdem metadata-, attachment-, script-, XFA-, signature- und risk-Berichte abzuschließen
Version 1.56.1
Behoben (Fixed)
- Das Laden einer älteren
pdfium.dll, der ein neuerer Export fehlt, schlägt jetzt sauber fehl: Der Fehlerpfad setzt jeden gebundenen API-Einstiegspunkt zurück, sodassAssigned()-Prüfungen (zum Beispiel fürFPDF_GetLastErroroderFPDF_GetSecurityHandlerRevision) melden, dass die Bibliothek nicht geladen ist, statt das bereits entladene Modul aufzurufen und mit einer Zugriffsverletzung abzustürzen UnloadLibrarylöscht jetzt alle PDFium-API-Bindungen statt nur die optionalen V8-Hilfsfunktionen, sodass nach der Freigabe der DLL keine veralteten Funktionszeiger zurückbleiben
Version 1.56.0
Hinzugefügt (Added)
- Wortweiser Karaoke-Lesecursor in
TPdfView:TrackReadingWordAtordnet den Zeichenversatz des aktuellen Wortes einer Text-to-Speech-Engine, etwa SAPIStatus.InputWordPosition, den Wortboxen der Seite zu, hebt das enthaltene Wort als eigene Überlagerung über dem Leseblock hervor, rollt es in den sichtbaren Bereich und gibt den Wortindex zurück, sodass das gesprochene Wort mit fortschreitender Stimme aufleuchtet SetReadingWordundClearReadingWordsetzen oder löschen das hervorgehobene Wort direkt aus einemTPdfWordBox; das erneute Setzen desselben Wortes ist ein No-op, sodass wortweises Tracking die Ansicht nicht flackern lässtReadingWordColorundReadingWordFollowsteuern die Wortcursorfarbe und ob die Ansicht automatisch zum gesprochenen Wort rollt
Version 1.55.2
Behoben (Fixed)
- ViewerInteractionLab gibt den Toolbar-Zeilen jetzt mehr vertikalen Raum, sodass Open PDF, Create Sample, Navigation, Suche und Auswahlsteuerungen bei skalierten Schriftarten nicht mehr überlappen
Version 1.55.1
Behoben (Fixed)
- ViewerInteractionLab platziert Prev, Next und Rotate jetzt in der zweiten Toolbar-Zeile und vermeidet damit die Startüberlappung mit Open PDF und Create Sample
Version 1.55.0
Hinzugefügt (Added)
- Brücke von Wortbox zu Textauswahl für Lesen-und-Auswählen:
TPdfView.SelectWordBoxundSelectWordSpanwählen eine einzelne Wortbox oder eine gleichseitige Wortboxspanne ausPageWordBoxesüber ihre Zeichenbereiche aus, sodass das gerade gelesene Wort oder die Zeile auch ausgewählt und kopiert werden kann WordBoxIndexAtCharIndexordnet einen Zeichenindex der enthaltenden Wortbox zu und steuert die wortweise Hervorhebung, während der TTS-Lesecursor fortschreitet
Version 1.54.0
Hinzugefügt (Added)
- Sprachzugängliche Formular-Accessoren, die das fokussierte Feld direkt aus dem logischen Cursor lesen:
FocusedFormFieldValue,FocusedFormFieldNameundFocusedFormFieldDetailsaufTPdfundTPdfViewliefern den Wert des aktuellen Felds, den menschenlesbaren Namen als/TU-Tooltip mit Fallback auf/Tsowie die vollständigeTPdfFormFieldInfomit Typ, Flags und Optionen, also alles, was eine Sprach-UI beim Durchschalten durch ein Formular ansagen muss
Behoben (Fixed)
FocusedFormFieldValueliest das Feld überFocusedFormFieldIndexstatt über den interaktiven pdfium-Fokus, sodass ein sprachgesteuerter Formular-Workflow auch ohne sichtbares Caret den richtigen Wert erhält; das bestehendeFocusedFormFieldTextspiegelt weiterhin den pdfium-Fokus wider und bleibt unverändert
Version 1.53.0
Hinzugefügt (Added)
- Unterstützung für Hervorhebung auf Wortebene:
TPdf.PageWordBoxesundTPdfView.PageWordBoxeszerlegen eine Seite inTPdfWordBox-Records, von denen jeder den Worttext, seinen Zeichenbereich und ein Begrenzungsrechteck im Seitenraum trägt, sodass ein Accessibility-Reader jedes gesprochene Wort der Reihe nach hervorheben kann, indem er das Rechteck anSetReadingHighlightübergibt BuildWordBoxesteilt Seitentext in TPdfWordBox-Records mit Worttext und FTextPage-Zeichenbereichen
Version 1.52.0
Hinzugefügt (Added)
- Low-Vision-Rendering-Helfer
InvertPdfBitmap,GrayscalePdfBitmapundDuotonePdfBitmapwenden In-Place-Farbtransformationen auf ein gerendertes 32-Bit-Bitmap an, sodass ein Accessibility-Reader Seiten invertiert, im Dark Mode, in Graustufen oder in einem benutzerdefinierten Zwei-Farben-Schema anzeigen kann, zum Beispiel mit dunklem Hintergrund und hellem Text - Die Transformationen arbeiten pixelweise auf VCL und Lazarus/LCL identisch und lassen die Bitmapabmessungen unverändert
Version 1.51.0
Hinzugefügt (Added)
- Satzbasierte Leseeinheiten für assistives Zuhörlesen:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsundTPdfView.ReadingUnitslinearisieren den lesbaren Inhaltsstrom in geordneteTPdfReadingUnit-Records in Satzgröße; jeder Record trägt den vorzulesenden Text sowie seinen semantischen Typ, die Seite, Hervorhebungsrechtecke und das Sprach-Tag, sodass eine Screen-Reader-App seitenweise oder dokumentweit eine gesprochene Einheit nach der anderen durchlaufen kann NextReadingUnitOfKindFindet die nächste oder vorherige TPdfReadingUnit, deren Kind einem gewünschten TPdfContentFragmentKind entsprichtBuildReadingUnitswandelt beliebigeTPdfContentFragmentsdirekt in Leseeinheiten um: Überschriften sowie Figuren- und Alt-Beschreibungen bleiben als Ganzes erhalten, Absätze werden an Satzgrenzen getrennt, Dezimalpunkte bleiben erhalten, und der Lesecursor ist ein einfacher, vom Aufrufer verwalteter Index
Version 1.50.0
Hinzugefügt (Added)
ValidatePdfAkann nun auch PDF-1.5+-Dokumente prüfen, die den Katalog, OutputIntent oder andere Dictionaries innerhalb komprimierter Objekt-Streams (/Type /ObjStm) speichern. Die Objekt-Streams werden dekomprimiert und die darin enthaltenen Objekte aufgelöst, sodass solche Dokumente nach ihren tatsächlichen Eigenschaften validiert werden, statt als ohne ihre PDF/A-Kennzeichnungen gemeldet zu werden
Version 1.49.5
Behoben (Fixed)
ValidatePdfAmeldet eine fehlendepdfaExtension:schemas-Beschreibung nicht länger als Problem. Das PDF/A-Kennungsschema (pdfaid) ist allgemein bekannt, sodass weder veraPDF noch PDF/A-2/-3 dafür eine Erweiterungsschema-Beschreibung verlangen, und das Bemängeln ihres Fehlens hat jedes konforme PDF/A von Drittanbietern fälschlich beanstandet. Dokumente, die die Bibliothek selbst erzeugt, enthalten die Beschreibung weiterhin
Version 1.49.4
Behoben (Fixed)
ValidatePdfAerkennt nun die Konformitätsstufe auch dann, wenn die PDF/A-Kennung als XML-Attribute (pdfaid:part="2") statt als Kindelemente geschrieben ist, sodass Dokumente in Attributform nicht länger mit unbekannter Stufe gemeldet werden. Damit wird auch eine Folgewirkung behoben, bei der eine nicht erkannte Stufe dazu führte, dass die stufenspezifischen Prüfungen auf die strengen PDF/A-1-Regeln zurückfielen und eingebettete Dateien sowie Transparenz, die PDF/A-2 und PDF/A-3 erlauben, fälschlich beanstandeten
Version 1.49.3
Behoben (Fixed)
ValidatePdfAprüft nun auch PDF-1.5+-Dokumente, deren Cross-Reference-Daten als cross-reference stream vorliegen (Dateien ohnetrailer-Schlüsselwort). Die Konformitätsstufe, die Trailer-/IDund die übrigen Kennzeichnungen werden aus dem Dictionary des cross-reference stream gelesen, sodass solche Dokumente nach ihren tatsächlichen Eigenschaften validiert werden, statt als vollständig nicht konform gemeldet zu werden
Version 1.49.2
Behoben (Fixed)
ValidatePdfAmeldet bei Dokumenten, die alle ihre Schriften einbetten, kein fälschliches Problem mit nicht eingebetteten Schriften mehr. Die bisherige Heuristik verglich die Anzahl der/FontDescriptor-Tokens mit den eingebetteten Schriftprogrammen, doch jede eingebettete Schrift trägt zwei/FontDescriptor-Tokens bei (die Referenz im Schrift-Dictionary sowie das Descriptor-Objekt), sodass jede Datei mit eingebetteten Schriften fälschlich beanstandet wurde. Die Prüfung meldet nun nur noch ein Dokument, das Schriften referenziert, jedoch überhaupt kein Schriftprogramm einbettet – übereinstimmend mit der entsprechendenValidatePdfUa-Korrektur
Version 1.49.1
Behoben (Fixed)
- PDF/A-Ausgabe validiert nun mit veraPDF als konformes PDF/A-1b und PDF/A-1a: Der eingebettete sRGB-OutputIntent-ICC-Profil-Stream (referenziert durch
/DestOutputProfile) deklariert nun die erforderliche/N-Komponentenanzahl (3 für das integrierte RGB-Profil), wie von ISO 19005-1 6.2.3.2 vorgeschrieben. VonSaveAsPdfAerzeugte Dokumente bestanden die strenge PDF/A-1-Validierung bisher nicht, weil der Destination-Profile-Stream/Nausließ; der Wert wird aus dem Header des ICC-Profils abgeleitet, sodass auch ein vom Aufrufer bereitgestelltes CMYK- oder Gray-Profil die korrekte Anzahl erhält
Version 1.49.0
Behoben (Fixed)
ValidatePdfUameldet bei konformen getaggten PDF-Dokumenten keine fälschlich fehlende XMP-Kennzeichnung mehr – die PDF/UA-Kennung (pdfuaid:part),dc:title, die XMP-Datumsangaben und die Trailer-/IDwerden nun aus den ursprünglichen Dokument-Bytes statt aus der neu gespeicherten Kopie gelesen, der der/Metadata-XMP-Stream und bei cross-reference-stream-Dateien die Trailer-/IDfehlen- Die Schriften-Einbettungsprüfung von
ValidatePdfUawurde korrigiert, sodass ein Dokument, das alle seine Schriften einbettet, nicht länger als mit nicht eingebetteten Schriften gemeldet wird; es kennzeichnet nun nur noch ein Dokument, das Schriften referenziert, jedoch überhaupt kein Schriftprogramm einbettet ValidatePdfUaakzeptiert nun einFormula-Strukturelement, dessen Alternativtext überActualTextstatt über einenAlt-Eintrag bereitgestellt wird (ISO 14289-1 §7.7), übereinstimmend mit der bestehendenFigure-Regel
Version 1.48.0
Hinzugefügt (Added)
- Programmgesteuerte Textauswahl auf
TPdfView:SelectTextRange(nach Seite und Zeichenbereich) undSetSelection(nach expliziten seitenweisen Bereichen) wählen Text per Code aus – etwa um eine Passage zu lesen und hervorzuheben; beide zeichnen neu und lösenOnSelectionChangeaus, wenn sich die Auswahl ändert.SelectionRangesliest die aktuelle Auswahl als seitenweise Zeichenbereiche, undSelectionRectanglesliefert ihre Rechtecke in Seitenkoordinaten für eigene Hervorhebungen oder zum Hinscrollen
Version 1.47.0
Hinzugefügt (Added)
- Formularfeld-Navigation für sprachgesteuertes Ausfüllen von Formularen, sowohl auf
TPdfals auch aufTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusundFocusedFormFieldText. Diese bewegen einen logischen Feldcursor in Tabulatorreihenfolge über die Widget-Felder der Seite (mit Umlauf an den Enden), sodass ein assistierendes Vorleseprogramm das Formular durchlaufen, jedes Feld überFormFieldInfo[Index].AlternateName(den /TU-Tooltip) ansagen und es überFormField[Index]ausfüllen kann - Ereignis
TPdfView.OnFormFieldFocusChange, das ausgelöst wird, wenn der Feldcursor sich bewegt (es übergibt den Index des neuen Felds bzw. -1, wenn der Fokus aufgehoben wird)
Version 1.46.0
Hinzugefügt (Added)
- Inhaltsstrom für assistierendes Vorlesen:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentundTPdfView.ReadableContentliefern eine geordnete Liste semantischerTPdfContentFragment-Elemente. Jedes Element trägt den gesprochenen Text (echte Glyphen oderActualText/Alt bei Abbildungen), eine Fragmentart (Überschrift mit Ebene, Absatz, Abbildung, Listenelement, Tabellenzelle, Link, einfacher Text), die Sprache, die 1-basierte Seite sowie Block- und zeilenweise Hervorhebungsrechtecke. Getaggte PDF-Dokumente werden anhand des Strukturbaums in logischer Lesereihenfolge linearisiert; ungetaggte Seiten greifen auf die Renderreihenfolge zurück, sodass sich jedes Dokument vorlesen lässt - Synchronisierte Lese-Hervorhebung auf
TPdfView:SetReadingHighlight,ClearReadingHighlightund die veröffentlichte EigenschaftReadingHighlightColorheben den aktuell vorgelesenen Block über den Such- und Auswahl-Overlays hervor - Neue öffentliche Typen
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindundTPdfReadingOrderSourcesowie die neue HilfsfunktionClassifyStructType
Version 1.45.0
Hinzugefügt (Added)
ValidatePdfUadurchläuft nun auch den aktiven getaggten Strukturbaum und meldet drei Inhaltsverstöße mit hoher Konfidenz, die eine reine Byte-Analyse nicht erkennen kann: einFigure-Element ohne Alt-Eintrag und ohne ActualText (ISO 14289-1, 7.3), einFormula-Element ohne Alt-Attribut (7.7) sowie einNote-Element ohne eindeutige ID (7.9). Drei neueTPdfUaValidationIssue-Werte machen diese Verstöße sichtbar:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltundpvuaiNoteMissingId. Der Strukturbaum-Durchlauf wird bei ungetaggten Dokumenten übersprungen- Neue öffentliche Hilfsfunktion
ValidatePdfUaStructureElements: Sie wendet die Strukturbaum-Regeln auf eine flache Elementliste an (wie sieTPdf.StructureElementszurückgibt), sodass die Prüfungen unabhängig vom Laden eines vollständigen Dokuments ausgeführt oder per Unit-Test verifiziert werden können
Version 1.44.5
Behoben (Fixed)
- Die
ValidatePdfA-Schrifteinbettungsprüfung (pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) erkennt nun auch nicht eingebettete einfache Schriften ohne/FontDescriptor, insbesondere die 14 Standard-Type-1-Schriften (Helvetica, Times, Courier usw.), für die PDF/A keine Einbettungsausnahme gewährt. Bisher blieben solche Schriften unbemerkt; die Prüfung berücksichtigt nun auch einfache Schrift-Dictionaries (/Type1,/TrueType,/MMType1) bei der Auswertung eingebetteter Schriftprogramme – analog zur PDF/UA-Korrektur in 1.44.3
Version 1.44.4
Behoben (Fixed)
ValidatePdfVTlehnt nun fehlerhafte ISO 16612-2 §6.5 DPart-Bäume ab, bei denen/DPartsein flaches Referenz-Array statt des vorgeschriebenen array of arrays ist oder ein leaf DPart seine/Start-Seite als/Endwiederholt, obwohl der Bereich nur eine Seite enthältValidatePdfVTvalidiert/NodeNameList-Namen nun nach der Expansion von PDF name#xx-Escapes als XML NMTOKEN-Werte. Dadurch werden ungültige Hierarchieebenen-Namen überpvviMissingDPartRootgemeldet, statt als nutzbare DPart-Struktur akzeptiert zu werden
Version 1.44.3
Behoben (Fixed)
- Die
ValidatePdfUa-Schrifteinbettungsprüfung (pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) erkennt nun auch nicht eingebettete einfache Schriften ohne/FontDescriptor, insbesondere die 14 Standard-Type-1-Schriften (Helvetica, Times, Courier usw.), für die PDF/UA keine Einbettungsausnahme gewährt. Bisher blieben solche Schriften unbemerkt, sodass ein Dokument, das sie verwendete, als konform gemeldet werden konnte; die Prüfung berücksichtigt nun auch einfache Schrift-Dictionaries (/Type1,/TrueType,/MMType1) bei der Auswertung eingebetteter Schriftprogramme
Version 1.44.2
Behoben (Fixed)
ValidatePdfVTbelässt ein vorhandenes, aber nicht erkanntespdfvtid:GTS_PDFVTVersion-Marker nun beipvcUnknown, statt es zupvcNoneherabzustufen. Dadurch bleiben ungültige dateibezogene Zeichenfolgen wiePDF/VT-2svon Dokumenten unterscheidbar, die gar kein PDF/VT-Marker tragen; PDF/VT-2s wird nach ISO 16612-2 Annex A über den MIME stream header identifiziert, nicht über das XMP-Marker einer PDF-Datei- Die
/DPartRoot-Prüfung validiert die tree semantics aus ISO 16612-2 §6.5 nun strenger:/DPartRootNodeund/NodeNameListmüssen die tatsächliche DPart-Tiefe beschreiben, DPart parent links müssen einen Baum bilden,/Startund/DPartsschließen sich gegenseitig aus, und das/DPartjeder Seite muss auf das abdeckende leaf DPart in derselben depth-first-Reihenfolge wie der page tree zeigen
Version 1.44.1
Behoben (Fixed)
SaveAsPdfVTschreibt nun eine minimale Document Part Hierarchy nach ISO 16612-2 §6.5, wenn das Quell-PDF kein verwendbares/DPartRootbesitzt. Der erzeugte Baum verknüpft jede Seite über/DPart, erhält eine bereits gültige Hierarchie und überlässt reichere Empfänger-/DPM-Metadaten dem aufrufenden WorkflowValidatePdfVTprüft nun die verwendbare DPart-Struktur, liest PDF/VT-XMP-Werte sowohl aus RDF-Attributen als auch aus Elementtext und erzwingt die exakte PDF/VT-zu-PDF/X-Basis: PDF/VT-1 erfordert PDF/X-4, während PDF/VT-2 PDF/X-4p, PDF/X-5g oder PDF/X-5pg erfordertTPdfVTSaveOptions.Conformance = pvc2schreibt keine ungültigen einteiligen PDF/VT-2-Marker mehr. Der Einzeldaten-Writer normalisiert die Ausgabe auf PDF/VT-1, weil PDF/VT-2 Dateisatz-Semantik erfordert
Version 1.44.0
Hinzugefügt (Added)
ValidatePdfUameldet nun zusätzlich zu den Dateiformat-Markierungen auch byteprüfbare inhaltliche PDF/UA-Verletzungen: eine Schriftart, deren Schriftprogramm nicht eingebettet ist (ISO 14289-1, 7.21.4), eine Schriftart, der eine/ToUnicode-CMap fehlt, wenn keine befreite Simple-Font-Kodierung vorhanden ist (7.21.7), sowie ein Dokument, das Anmerkungen enthält, aber keine/Tabs /S-Tabulatorreihenfolge für die Seite deklariert (7.18.3)- Drei neue
TPdfUaValidationIssue-Werte —pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeundpvuaiMissingTabsOrder— werden vonValidatePdfUaund im Preflight-Bericht ausgegeben. Es handelt sich um grobe Heuristiken, die als Preflight-Hinweise gedacht sind und keine vollständige ISO 14289-1-Prüfung ersetzen
Version 1.43.1
Behoben (Fixed)
SaveAsPdfUaerzwingt nun die gemäß ISO 14289-1, 7.1 zwingend erforderlichen Katalogeinträge/ViewerPreferences/DisplayDocTitle truesowie/MarkInfo/Marked true/Suspects false, auch wenn das Quelldokument diese Dictionaries bereits mit fehlenden oder widersprüchlichen Werten enthält. Bisher wurden die Markierungen nur dann eingefügt, wenn die Dictionaries vollständig fehlten; ein Quelldokument, das beispielsweise ein/ViewerPreferencesohneDisplayDocTitleoder ein/MarkInfomit/Marked falseenthielt, erzeugte daher eine nicht konforme Ausgabedatei- Vorhandene Schlüssel in einem bereits vorhandenen
/ViewerPreferences- oder/MarkInfo-Dictionary bleiben erhalten; ein als indirekter Verweis geliefertes Dictionary wird aufgelöst, bevor die zwingend erforderlichen Schlüssel gesetzt werden
Version 1.43.0
Hinzugefügt (Added)
ValidatePdfAwendet nun die PDF/A-2-/PDF/A-3-Regeln für eingebettete und zugeordnete Dateien sowie für Text auf Stufe U an. Eingebettete Dateien werden für PDF/A-1 weiterhin abgelehnt; bei PDF/A-3 wird eine eingebettete Datei beanstandet, der der erforderliche Schlüssel/AFRelationship(ISO 19005-3 Annex E) fehlt, während PDF/A-2-Anhänge zulässig sind (deren eigene Konformität wird nicht rekursiv geprüft). Ein neues ProblempvaiUnicodeMappingMissingmeldet ein PDF/A-2u- oder PDF/A-3u-Dokument, dessen Schriften keine/ToUnicode-Zuordnung tragen (ISO 19005-2 6.2.11.7). Transparenz und Optional Content werden weiterhin nur für PDF/A-1 beanstandet
Version 1.42.0
Hinzugefügt (Added)
- PDF/A-2 (ISO 19005-2) und PDF/A-3 (ISO 19005-3) werden nun auf allen drei Konformitätsstufen — a, b und u — von
SaveAsPdfA,ValidatePdfAund der EigenschaftPdfAConformanceunterstützt. Die AufzählungTPdfAConformanceerhältpac2a,pac2u,pac3aundpac3u(PDF/A-1 hat keine Stufe u). Beim Speichern werden das passendepdfaid:part(2 oder 3) undpdfaid:conformance(A, B oder U) geschrieben, wobei der OutputIntent-SubtypGTS_PDFA1beibehalten wird, den ISO 19005-2 aus Kompatibilitätsgründen weiterhin vorsieht. Eine Anforderung auf Stufe A wird weiterhin auf die passende Stufe B herabgestuft (für jeden Teil), wenn dem Dokument die für diese Stufe erforderliche getaggte Struktur fehlt
Version 1.41.0
Hinzugefügt (Added)
ValidatePdfAerkennt nun zusätzlich zu den bereits gemeldeten strukturellen Markern auch PDF/A-Verstöße auf Inhaltsebene, die durch das Einfügen von Markern nicht behoben werden können: JavaScript und andere verbotene Aktionen, Additional Actions (/AA), eingebettete Dateien,LZWDecode, Transparenz (Soft Masks und Transparency Groups), Optional Content (/OCProperties), verbotene Annotation-Subtypen (FileAttachment, Sound, Movie, 3D, Screen), AcroForm/NeedAppearances trueund/XFA, Schriften, deren Deskriptoren kein eingebettetes Schriftprogramm enthalten, sowie eine Level-A-Angabe ohne die von ISO 19005-1 6.8 geforderte getaggte Struktur. Die Prüfungen auf Transparenz, Optional Content und eingebettete Dateien gelten nur für PDF/A-1 (diese Funktionen sind in PDF/A-2 und PDF/A-3 erlaubt). NeueTPdfAValidationIssue-Werte machen jeden Fall sichtbar; die vorhandenen Werte bleiben unverändert
Version 1.40.3
Behoben (Fixed)
SaveAsPdfAentfernt nun jede Verschlüsselung des Quelldokuments, bevor die PDF/A-Ausgabe erzeugt wird. ISO 19005-1 6.1.3 verbietet den Trailer-Schlüssel/Encrypt, doch der Speicherpfad behielt zuvor den Sicherheits-Handler der Quelle bei, sodass das Speichern eines verschlüsselten Dokuments als PDF/A eine verschlüsselte, nicht konforme Datei erzeugte. Beim PDF/A-Speichern wird das Dokument nun zuerst entschlüsselt. Unverschlüsselte Dokumente sind davon nicht betroffen
Version 1.40.2
Behoben (Fixed)
- Es wurde verhindert, dass
SaveAsPdfAeine falsche Konformitätsangabe für PDF/A Level A ausgibt. Wenn Level A (pac1a) angefordert wird, dem Quelldokument jedoch die von ISO 19005-1 6.8 geforderten Marker der getaggten Struktur fehlen — ein/StructTreeRootim Katalog sowie ein/MarkInfo-Dictionary mit/Marked true—, wird die gespeicherte Datei nun als das passende Level B (pdfaid:conformance=B) gekennzeichnet, statt Level A zu behaupten. Rein visuelle PDF/A-1b-Ausgabe ist davon nicht betroffen
Version 1.40.1
Behoben (Fixed)
- Die Prüfung der PDF-Versionskonformität wurde verschärft, sodass die Aktion
SetOCGState(set-optional-content-group-state) als PDF-1.5-Funktion erkannt wird. Das Speichern in ein Ziel der Version PDF 1.2, 1.3 oder 1.4, das eineSetOCGState-Aktion enthält, wird nun in Übereinstimmung mit ISO 32000-1 (Table 198) zurückgewiesen; zuvor konnte eine solche Aktion in eine Ausgabe niedrigerer Version durchgereicht werden. Die davon verschiedene, veraltete PDF-1.2-AktionSetStatewird weiterhin ab PDF 1.2 akzeptiert
Version 1.40.0
Hinzugefügt (Added)
- Die API
FPDFPageObj_AddExistingMark()aus PDFium wurde angebunden; sie fügt einem Seitenobjekt eine vorhandene Inhaltsmarkierung hinzu. Wenn aufeinanderfolgende Seitenobjekte dieselbe Markierung teilen, fasst das gespeicherte PDF sie zu einer einzigen, alle umfassenden Markierung zusammen; nicht aufeinanderfolgende Objekte erhalten separate Kopien - Die API
FPDFTextObj_SetFontSize()aus PDFium wurde angebunden, um die Punktgröße eines vorhandenen Textobjekts zu ändern, als Ergänzung zur bereits vorhandenen Anbindung vonFPDFTextObj_GetFontSize()
Geändert (Changed)
- Die mitgelieferten PDFium-Laufzeit-DLLs (Win32 und Win64, Standard- und V8-Builds) wurden auf den PDFium-Snapshot vom 2026-06-02 aktualisiert
Version 1.39.53
Geändert (Changed)
- Die Delphi-Beispiele
PDFViewer,SplitViewundMultiPageVieweröffnen Dokumente jetzt standardmäßig im ModusZoom to Page - Die erste Darstellung passt jetzt die gesamte Seite in den Anzeigebereich ein, bevor der Benutzer eine manuelle Zoomstufe auswählt
TPdf.AboutInfo, Lazarus-Paketmetadaten und Installationsprogramm-Versionsmetadaten wurden auf 1.39.53 aktualisiert
Version 1.39.52
Geändert (Changed)
Demo\Lazarus\CreatePDFwurde erweitert, sodass das Einstiegssample jetzt eine zweiseitige PDF mit vector paths, table content, embedded image, text annotation, rotated text und einem klareren document-building walkthrough erzeugt- Für alle Delphi-, C++Builder- und Lazarus-Demoordner wurden ansprechendere
README.html-Seiten ergänzt; das verbleibende reine Text-README der Demo wurde durch eine browserlesbare Anleitung ersetzt TPdf.AboutInfo, Lazarus-Paketmetadaten und Installer-Versionsmetadaten wurden auf 1.39.52 aktualisiert
Version 1.39.51
- Die Batch-Zusammenfassungen von
Demo\Delphi\PreflightReportCliwurden um Standardstatus-Summen für Pass, Action required und Review über die ausgewählten Standards erweitert - Zeilen pro Datei enthalten jetzt Action-required- und Review-Zähler in TXT / HTML / JSON / CSV-Zusammenfassungen, sodass CI-Artefakte leichter geprüft werden können, ohne jeden erzeugten Bericht zu öffnen
TPdf.AboutInfo, Lazarus-Paketmetadaten und Installer-Versionsmetadaten wurden auf 1.39.51 aktualisiert
Version 1.39.50
- Der Verzeichnis-Batch-Modus von
Demo\Delphi\PreflightReportCliwurde erweitert:batchdir=foldersammelt gefundene PDF-Pfade, sortiert sie und erzeugt Berichte anschließend in stabiler Reihenfolge - Rekursive Verzeichnisscans erzeugen jetzt reproduzierbare Berichtsreihenfolgen und Zusammenfassungszeilen, während explizite
batch=list.txt-Verarbeitung weiterhin die Reihenfolge der Listendatei beibehält TPdf.AboutInfo, Lazarus-Paketmetadaten und Installer-Versionsmetadaten wurden auf 1.39.50 aktualisiert
Version 1.39.49
- Die Batch-Zusammenfassungen von
Demo\Delphi\PreflightReportCliwurden erweitert und protokollieren jetzt run settings: Quelltyp, Quellpfad, rekursiven Zustand, Ausgabeverzeichnis, Berichtsformat, ausgewählte Standards undfailon=-Modus - JSON-Zusammenfassungen enthalten jetzt ein
run-Objekt, TXT- und HTML-Zusammenfassungen zeigen einen Abschnitt für run settings, und CSV-Zeilen wiederholen dieselben Audit-Spalten für Tabellenkalkulationen und CI pipelines TPdf.AboutInfo, Lazarus-Paketmetadaten und Installer-Versionsmetadaten wurden auf 1.39.49 aktualisiert
Version 1.39.48
- Das batch output naming von
Demo\Delphi\PreflightReportCliwurde verbessert, sodass duplicate input file names mit demselbenoutdir=ihre generated reports nicht mehr gegenseitig ueberschreiben - Batch runs haengen jetzt
-2,-3und weitere Suffixe an, wenn ein generated report path in derselben Ausfuehrung bereits vergeben wurde, und summaries protokollieren den finalen collision-safe report path TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.48 aktualisiert
Version 1.39.47
- Die batch summaries von
Demo\Delphi\PreflightReportCliwurden erweitert, sodass TXT- und JSON-Ausgaben jetzt aggregate totals fuer total files, processed files, failed files, issues undfailon=matches enthalten - CSV summaries bleiben fuer bestehende consumers eine reine row table, waehrend HTML summaries dieselben aggregate metrics weiter im dashboard header anzeigen
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.47 aktualisiert
Version 1.39.46
Demo\Delphi\PreflightReportCliwurde umsummary=batch.html/.htmerweitert, damit batch runs neben TXT / CSV / JSON manifests ein browser-readable dashboard ausgeben koennen- HTML summaries zeigen total-, processed-, failed-, issue- und
failon=match metrics und listen danach jeden input mit report links, status, counts und error text auf TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.46 aktualisiert
Version 1.39.45
Demo\Delphi\PreflightReportCliwurde umbatchdir=folderundrecursiveerweitert, damit Skripte PDF folders direkt scannen koennen, ohne zuerst ein list file zu schreiben- Directory batch mode verwendet das Verhalten von
outdir=,summary=,standards=undfailon=aus list-based batch mode wieder; non-recursive scannt nur die ausgewaehlte folder, undrecursiveschliesst subfolders ein TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.45 aktualisiert
Version 1.39.44
Demo\Delphi\PreflightReportCliwurde umsummary=batch.csv|json|txterweitert, damit batch runs neben den per-file reports ein machine-readable manifest ausgeben können- Batch summaries enthalten jeden input path, report path, status, standard count, passed count, issue count,
failon=match state und error text für CI jobs und externe scripts TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.44 aktualisiert
Version 1.39.43
Demo\Delphi\PreflightReportCliwurde umbatch=list.txtundoutdir=reportserweitert, damit scripts in einem Lauf preflight reports für eine Liste von PDF files erzeugen können- Batch mode überspringt leere Zeilen und
#-Kommentarzeilen, leitet jeden.preflight.<ext>report name aus dem Eingabe-PDF ab, fährt nach per-file errors fort und fasst processed und failed files vor der Rückgabe zusammen TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.43 aktualisiert
Version 1.39.42
Demo\Delphi\PreflightReportCliwurde umfailon=none|issues|action|reviewerweitert, damit CI jobs erzeugte preflight results in deterministische exit codes umsetzen können- Die CLI gibt jetzt exit code 2 zurück, wenn eine ausgewählte
failon=rule nach dem Erzeugen der report file und der optional attached-report PDF zutrifft; runtime errors geben weiterhin exit code 1 zurück TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.42 aktualisiert
Version 1.39.41
Demo\Delphi\PreflightReportCliwurde umattach=output.pdferweitert, sodass ein erzeugter preflight report als document-level attachment in eine neue PDF copy eingebettet werden kann- Die CLI behält die erzeugte TXT / HTML / Markdown / JSON / CSV report file auf dem Datenträger und verweigert das Anhängen an den ursprünglichen input PDF path, um versehentliches Überschreiben zu vermeiden
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.41 aktualisiert
Version 1.39.40
Demo\Delphi\PreflightReportCliwurde hinzugefügt, ein Delphi console companion für scriptableFPdfPreflightReport-Erstellung ohne Öffnen eines viewer- Die CLI unterstützt no-argument sample creation sowie input / output arguments, optional password, die Ausgabeformate
text/html/md/json/csvundstandards=filtering für PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R und PDF/VT TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.40 aktualisiert
Version 1.39.39
FPdfPreflightReportwurde umTPdfPreflightReport.ToMarkdownundSaveMarkdownToFileerweitert, damit preflight reports als fuer issue tracker geeignetes Markdown exportiert werden koennen- Die Delphi-, C++Builder- und Lazarus-Beispiele
PreflightReportwurden um Markdown preview switching und Save MD actions neben dem bestehenden TXT / HTML / JSON / CSV workflow erweitert TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, um 1.39.39 zu melden
Version 1.39.38
- Die Delphi-, C++Builder- und Lazarus-Beispiele
SecurityAuditwurden um JSON audit report export neben dem bestehenden TXT save / copy workflow erweitert - Der JSON report enthält
format,generatedAt,summary,findingCountsowie strukturiertefindings-Zeilen mit severity-, area- und detail-Feldern TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, um 1.39.38 zu melden
Version 1.39.37
FPdfPreflightReportwurde umTPdfPreflightReport.ToCsvundSaveCsvToFileerweitert, sodass preflight reports als spreadsheet-friendly CSV exportiert werden können- Die Delphi-, C++Builder- und Lazarus-
PreflightReport-samples wurden um CSV preview switching und Save CSV actions neben dem vorhandenen TXT / HTML / JSON workflow erweitert TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, um 1.39.37 zu melden
Version 1.39.36
FPdfPreflightReportwurde umTPdfPreflightReport.IssueCategoryCountssowie die wiederverwendbaren TypenTPdfPreflightIssueCategoryCountundTPdfPreflightIssueCategoryCountserweitert, um marker-level issues nach category zu aggregierenTPdfPreflightReport.ToText,ToHtmlundToJsonwurden aktualisiert, sodass generierte PreflightReport-Ausgaben issue-category count summaries neben per-standard rows und detailed issue recommendations enthaltenTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.36 aktualisiert
Version 1.39.35
- Das erweiterte
PrintDialogsample wurde in Delphi, C++Builder und Lazarus inPrintPreferencesumbenannt, sodass der demo name jetzt zum Workflow für PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border und duplex mapping passt TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.35 aktualisiert
Version 1.39.34
Demo\Delphi\PrintPDFwurde um PDF-Laden per Drag-and-drop erweitert, und der vorhandeneDemo\CBuilder\PrintPDFworkflow wurde zusammen mit den PrintPDF-Beispielen für Delphi und Lazarus dokumentiertTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, sodass 1.39.34 gemeldet wird
Version 1.39.33
Demo\CBuilder\SplitViewwurde hinzugefügt und vervollständigt die SplitView sample matrix für Delphi, C++Builder und LazarusTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.33 melden
Version 1.39.32
Demo\Lazarus\SplitViewwurde hinzugefügt und bringt side-by-side PDF comparison mit two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets und rotation nach LazarusTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.32 melden
Version 1.39.31
Demo\Lazarus\PrintPDFwurde hinzugefügt und bringt den standard PDF print workflow mit preview navigation, page ranges, copies, collate mode, progress und cancellation nach LazarusTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.31 melden
Version 1.39.30
Demo\Lazarus\FontPropertieswurde hinzugefügt und vervollständigt die FontProperties-Beispielmatrix über Delphi, C++Builder und LazarusTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, sodass 1.39.30 gemeldet wird
Version 1.39.29
Demo\CBuilder\FontPropertieswurde hinzugefügt und bringt die Prüfung indexierter Zeichen- und Schriftmetadaten neben dem Delphi-Beispiel auch zu C++BuilderTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, sodass 1.39.29 gemeldet wird
Version 1.39.28
Demo\Delphi\ExtractTextPageswurde hinzugefügt und vervollständigt die Beispielmatrix für die seitenweise Textextraktion über Delphi, C++Builder und LazarusTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, sodass 1.39.28 gemeldet wird
Version 1.39.27
Demo\Lazarus\PrintDialogwurde hinzugefügt und vervollständigt den PrintDialog sample matrix für Delphi, C++Builder und LazarusTPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.27
Version 1.39.26
Demo\CBuilder\PrintDialogwurde hinzugefügt, sodass der N-up printing und PDF author print preferences workflow neben dem Delphi sample auch C++Builder abdecktTPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.26
Version 1.39.25
Demo\CBuilder\ViewerInteractionLabwurde hinzugefügt und vervollständigt den ViewerInteractionLab sample matrix für Delphi, C++Builder und Lazarus- Library build workflow und Win64 C++Builder package outputs wurden aktualisiert, damit
TPdfViewviewer interaction methods in Win64 demos korrekt linken TPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.25
Version 1.39.24
Demo\Lazarus\ViewerInteractionLabwurde hinzugefügt, sodass der focused viewer interaction workflow neben dem Delphi sample auch Lazarus abdecktTPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.24
Version 1.39.23
Demo\Lazarus\SearchAndSelectwurde hinzugefügt und vervollständigt die SearchAndSelect sample matrix für Delphi, C++Builder und LazarusTPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.23
Version 1.39.22
Demo\CBuilder\ContentExtractionLabundDemo\Lazarus\ContentExtractionLabwurden hinzugefügt, sodass der multi-category content extraction workflow alle unterstützten demo IDEs abdecktTPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.22
Version 1.39.21
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportundDemo\CBuilder\PreflightReportum einen preview format selector erweitert, damit Benutzer text oder JSON output vor dem Speichern prüfen könnenTPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.21
Version 1.39.20
- JSON-Export für
FPdfPreflightReportüberTPdfPreflightReport.ToJsonundSaveJsonToFilehinzugefügt, mit maschinenlesbarer summary, per-standard status / priority, next action und issue detail Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportundDemo\CBuilder\PreflightReportum Save JSON Aktionen neben dem TXT / HTML Export erweitertTPdf.AboutInfo, Lazarus package metadata und installer version metadata melden jetzt 1.39.20
Version 1.39.19
FPdfPreflightReportwurde umTPdfPreflightStatus, issue categories, per-standard priority und next-action guidance in TXT / HTML reports erweitertDemo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportundDemo\CBuilder\PreflightReportzeigen jetzt status, priority, issue count und next action in der summary gridTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.19 aktualisiert
Version 1.39.18
Demo\Lazarus\SecurityAuditwurde hinzugefügt und vervollständigt die Delphi-, C++Builder- und Lazarus-Beispielmatrix für den read-only PDF risk-surface audit workflow- Das Lazarus-Beispiel listet permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability und unsupported-feature callbacks auf und speichert oder kopiert die finding list als TXT report
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.18 aktualisiert
Version 1.39.17
Demo\CBuilder\SecurityAuditwurde hinzugefügt und bringt den read-only PDF risk-surface audit workflow neben dem vorhandenen Delphi-Beispiel zu C++Builder- Das C++Builder-Beispiel listet permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability und unsupported-feature callbacks auf und speichert oder kopiert die finding list als TXT report
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.17 aktualisiert
Version 1.39.16
Demo\CBuilder\SearchAndSelectwurde hinzugefügt und bringt den eigenständigen SearchAndSelect viewer workflow neben dem vorhandenen Delphi-Beispiel zu C++Builder- Das C++Builder-Beispiel erstellt oder öffnet PDFs, listet seitenübergreifende matches mit page / character-index previews, unterstützt Previous / Next und double-click navigation und hebt aktuelle Seitentreffer mit
HighlightSearchTexthervor - Es zeigt außerdem
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangeund spreadDisplayMode-Optionen; Versionsmetadaten melden jetzt 1.39.16
Version 1.39.15
Demo\CBuilder\WatermarkStampwurde hinzugefügt und vervollständigt die Delphi-, Lazarus- und C++Builder-demo matrix für wiederverwendbare Form XObject watermark und stamp workflows- Das C++Builder-Beispiel erstellt target- und stamp-PDFs, verwendet die stamp page über
CreateXObjectFromPagewieder, wendetTPdfMatrixtransforms an und speichert centered watermarks, corner stamps und page number labels TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.15 melden
Version 1.39.14
Demo\Lazarus\WatermarkStampwurde hinzugefügt und bringt den wiederverwendbaren Form XObject watermark und stamp workflow nach Lazarus- Das Lazarus-Beispiel erstellt target- und stamp-PDFs, verwendet die stamp page über
CreateXObjectFromPagewieder, wendetTPdfMatrixtransforms an und speichert centered watermarks, corner stamps und page number labels TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.14 melden
Version 1.39.13
Demo\CBuilder\PreflightReportwurde hinzugefügt und vervollständigt die Delphi-, Lazarus- und C++Builder-Demomatrix für den wiederverwendbarenFPdfPreflightReportworkflow- Das C++Builder-Beispiel verwendet
FPdfPreflightReport.hpp, um standard summaries, TXT report previews, TXT / HTML report files und Open Last Report-Verhalten zu erzeugen TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.13 melden
Version 1.39.12
Demo\Lazarus\PreflightReportwurde hinzugefügt und bringt den PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R und PDF/VT preflight report workflow zu Lazarus- Das Lazarus-Beispiel kann ein PDF öffnen oder erstellen, target standards auswählen, summary rows und TXT report output anzeigen, TXT / HTML reports speichern und den zuletzt gespeicherten report öffnen
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.12 melden
Version 1.39.11
Demo\Delphi\SearchAndSelectwurde um eine Suchergebnisliste über alle Seiten erweitert, die page number, character index und preview text erfasst- Previous / Next match navigation und double-click result jumping wurden ergänzt, während das Verhalten von
HighlightSearchTextauf der aktuellen Seite erhalten bleibt TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden aktualisiert, damit sie 1.39.11 melden
Version 1.39.10
Demo\Delphi\SecurityAuditwurde um Save Report und Copy Report actions erweitert, die den aktuellen summary und die finding rows als TXT audit report exportieren- Das demo löscht jetzt den report export state, wenn das audit panel zurückgesetzt wird, damit kopierte oder gespeicherte reports den sichtbaren findings entsprechen
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.10 aktualisiert
Version 1.39.9
Demo\Delphi\ContentExtractionLabwurde um source-PDF save, report copy-to-clipboard und all / none category selection actions erweitert- Das demo invalidiert jetzt den aktuellen report, wenn sich category selection ändert, damit TXT / JSON exports dem sichtbaren extraction scope entsprechen
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.9 aktualisiert
Version 1.39.8
Demo\Delphi\ContentExtractionLabwurde hinzugefügt, ein einheitliches content extraction workflow sample für document metadata, page text, page objects, images, attachments, links, annotations, bookmarks und font / character metrics- Das Beispiel kann ein vorhandenes PDF öffnen oder ein synthetic PDF mit text, image, attachment und annotation Inhalt erzeugen und anschließend summary rows sowie detaillierte TXT / JSON reports generieren
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.8 aktualisiert
Version 1.39.7
Lib\FPdfPreflightReport.paswurde hinzugefügt, ein wiederverwendbarer report helper, derValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRundValidatePdfVTin einTPdfPreflightReport-Objekt zusammenführtDemo\Delphi\PreflightReportwurde als workflow sample hinzugefügt: PDF öffnen oder erstellen, target standards auswählen, summary rows und issue recommendations anzeigen sowie TXT- oder HTML-Berichte speichern- Die erzeugten Berichte beschreiben ausdrücklich die Grenze der eingebauten marker-level validation, damit Anwendungen bei Bedarf dedizierte content-level preflight tools ergänzen können
TPdf.AboutInfo, Lazarus package metadata, package project lists und installer version metadata wurden auf 1.39.7 aktualisiert
Version 1.39.6
Demo\Delphi\SearchAndSelectwurde hinzugefügt, ein fokussiertes viewer workflow Beispiel für search highlighting, text selection, selected-text preview, copy, clear und spread display modes- Das Beispiel demonstriert
HighlightSearchText, match-case / whole-word Suchoptionen,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardundClearSelection, ohne neue Library API hinzuzufügen TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.6 aktualisiert
Version 1.39.5
Demo\Delphi\ViewerInteractionLabwurde zu einem SearchAndSelect-artigen viewer UX Beispiel mitHighlightSearchText, match-case / whole-word Optionen, Vorschau des ausgewählten Textes und vorhandenen selection / clipboard controls erweitertDemo\Delphi\PrintDialogwurde erweitert, um PDF author print preferences zu prüfen:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlingund sichtbaresSetPdfPrintPaperHandlingDevModeduplex mappingDemo\Delphi\SecurityAuditwurde hinzugefügt, ein schreibgeschütztes risk-surface Beispiel, das permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state und V8 / XFA helper availability auflistetTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.5 aktualisiert
Version 1.39.4
Demo\CBuilder\ImageToPDFundDemo\Lazarus\ImageToPDFwurden hinzugefügt und vervollständigen die ImageToPDF-Beispielmatrix für Delphi, C++Builder und Lazarus- Die neuen Beispiele demonstrieren Mehrfachauswahl von Bildern, Vorschau des ausgewählten Bildes, eine PDF-Seite pro Bild, A4 portrait / landscape-Seitengröße, zentrierte Bildskalierung, Fortschritt pro Bild und das Öffnen des erzeugten PDF nach dem Speichern
TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.4 aktualisiert
Version 1.39.3
Demo\CBuilder\BatchExportwurde hinzugefügt und bringt den Multi-File-PDF-zu-JPG-Export-Workflow zu C++Builder, neben den vorhandenen Delphi- und Lazarus-Beispielen- Das Beispiel demonstriert
LoadCustomDocument,IPdfCancellationTokenSource, Streaming-Eingabe überTFileStream, Fortschritt pro Datei und pro Seite, Abbruchbehandlung, DPI / quality / password-Eingaben und das Öffnen des Ausgabeordners nach Abschluss TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.3 aktualisiert
Version 1.39.2
Demo\Delphi\WatermarkStampwurde hinzugefügt, ein ausführbares Form XObject Workflow-Beispiel, das ein Ziel-PDF und ein wiederverwendbares stamp PDF erstellt und danach zentrierte Wasserzeichen, Stempel oben rechts und Seitenzahl-Labels auf jede Seite anwendet- Das Beispiel demonstriert
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixundFPDFPageObj_SetMatrix, ohne neue Bibliotheks-API hinzuzufügen Docs\en-us\Examples.htmlwurde aktualisiert, um beim Übergeben von Matrizen das aktuelle MusterTPdfMatrix.Handlefür Aufrufe vonFPDFPageObj_SetMatrixzu verwendenTPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.2 aktualisiert
Version 1.39.1
Demo\Delphi\ViewerInteractionLabwurde hinzugefügt, ein fokussiertesTPdfView-Beispiel für display modes, fit modes, page colors, rotation, user text selection, clipboard actions undDeviceToPage-KoordinatenfeedbackDemo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabwurde hinzugefügt, damit Lazarus-Benutzer den Validierungs- und marker-output-Workflow für PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R und PDF/VT ausführen können- Die standards units wurden in
Lib\37.0\PDFiumPas.dprojundLib\FPC\PDFiumLaz.lpkaufgeführt, und der Build des Delphi-DemosSplitViewwurde durch Entfernen eines doppeltenWinapi.ShellAPI-Imports korrigiert - Batch-build-Blocker der Delphi-Demos in
BatchExport,PDFViewer,MultiPageViewerundSplitViewwurden behoben, ohne ihr Laufzeitverhalten zu ändern - Die Batch-build-Kompatibilität der C++Builder-Demos
PDFViewerundMultiPageViewerwurde korrigiert, indemnullptrfür den aktuellen project mode durchNULLersetzt wurde TPdf.AboutInfo, Lazarus package metadata und installer version metadata wurden auf 1.39.1 aktualisiert
Version 1.39.0
Demo\Delphi\StandardsLabwurde hinzugefügt, ein ausführbares Standards-Workflow-Beispiel, das ein PDF lädt oder erstellt,ValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRundValidatePdfVTausführt und erkannte conformance, Bestehensstatus und issue-Zahlen in einer Tabelle zeigt- Die Speichern-Schaltflächen in StandardsLab rufen
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRundSaveAsPdfVTauf, sodass die PDF-Standards-marker-Ausgabe ohne eigenes Testprogramm sichtbar wird TPdf.AboutInfo, Lazarus-Paketmetadaten und Installer-Versionsmetadaten wurden auf 1.39.0 aktualisiert
Version 1.38.0
- Such- und Textauswahl-Overlays in
TPdfViewverwenden jetzt echtes alpha blending statt logischer mask-Zeichnung, sodass Seiteninhalt unter Hervorhebungen erhalten bleibt SetPdfPrintPaperHandlingDevModehinzugefügt, umTPrintPaperHandlingauf Windows-DEVMODE.dmDuplex-Werte abzubilden:DMDUP_SIMPLEX,DMDUP_HORIZONTALundDMDUP_VERTICALTPdfView.SmoothScrollanimiert line/page scrollbar commands jetzt in timer-driven segments; thumb tracking bleibt unmittelbarTPdf.AboutInfound Installer-Versionsmetadaten auf 1.38.0 aktualisiert
Version 1.37.0
TPdfbesitzt jetzt eine Render-Sperre pro Instanz, dieRenderPage,RenderTile,RenderPageProgressive, Seiten-Reload und Dokument-Unload serialisiert. Worker-Rendering über eine gemeinsame Komponente ist damit praktikabel; die Anwendung koordiniert weiterhin Dokumentänderungen und Lebensdauer- Der zero-copy-Bitmap-Wrapper weist bottom-up
TBitmap-DIBs nun zurück und fällt auf einen PDFium-eigenen Buffer mit abschließender Kopie zurück, wodurch stride corruption / access violation in VCL-Render-Tests beseitigt werden TPdfView-Auswahl präzisiert:AllowUserTextSelectionsperrt nur Benutzereingaben, code-level Auswahl-APIs zeichnen weiterhin, undSelectAllfolgt dem tatsächlich sichtbaren spread, sodass die Cover-Seite nicht mehr Seite 2 auswählt. Delphi-, Lazarus- und C++Builder-Tests wurden erweitertTPdf.AboutInfound Installer-Versionsmetadaten auf 1.37.0 aktualisiert
Version 1.36.0
- Die Endbenutzer-Textauswahl in
TPdfViewist jetzt aktiviert; die in v1.17.0 reservierte EigenschaftAllowUserTextSelectionsteuert nun eine vollständige Drag-Select-Pipeline. Ein Linksklick auf ein Textzeichen wechselt in den Auswahlmodus, ein Linksklick auf leeren Raum schwenkt wie bisher weiter. Das Form-Fill-Widget behält Vorrang, sodass ein Klick auf ein Formularfeld weiterhin das Feld fokussiert, statt eine Auswahl zu starten - Ein Doppelklick wählt das Wort, ein Dreifachklick die Zeile,
Ctrl+Awählt die aktuelle Seite aus, in spread display modes beide Seiten, undCtrl+Ckopiert die Auswahl alsCF_UNICODETEXTin die Windows-Zwischenablage Shift+Left/Shift+Righterweitert die Auswahl zeichenweise, auch auf die Nachbarseite im spread mode;Shift+Home/Shift+Enderweitert bis zum sichtbaren Zeilenrand und verwendet die Box-Höhe des Seed-Zeichens als Toleranz für die Zeilenclusterung, sodass Zeilen mit gemischten Schriftgrößen korrekt zusammenbleiben- Beim Überfahren von Text wechselt der Cursor zu
crIBeam, außerhalb von Text wird der Standardcursor wiederhergestellt. Während eines Textauswahl-Drags scrollt ein Ziehen in eine 20-Pixel-Totzone an einer Viewer-Kante die Seite automatisch weiter, Takt 50 ms und 16 px je Takt, begrenzt auf dieselben Grenzen wie der Pan-Pfad, sodass die Auswahl ohne vorheriges Loslassen der Maus über den aktuellen Viewport hinaus erweitert werden kann - Seitenübergreifende Auswahl funktioniert in spread display modes,
dmTwoPageContinuousunddmTwoPageContinuousWithCover; ein Drag, der auf der linken Seite beginnt und auf der rechten endet, wählt den zusammenhängenden Bereich über beide Seiten hinweg aus.SelectedTextverbindet die seitenweisen Ausschnitte mit CR/LF, sodass der zurückgewonnene Text wie normaler mehrzeiliger Inhalt gelesen werden kann - Neue published property
SelectionColor, StandardwertclHighlight, die Windows-Systemfarbe für Auswahl, unabhängig vonHighlightColor, das Suchtreffer gelb einfärbt. Suchhervorhebungen und eine laufende Drag-Auswahl können gleichzeitig ohne Farbkonflikt angezeigt werden - Neues published event
OnSelectionChangewird immer dann ausgelöst, wenn sich die materialisierten Bereiche der Auswahl tatsächlich ändern, niemals bei identischer erneuter Anwendung, sodass Host-Anwendungen es ohne Debouncing direkt an Statusleisten-Text oder Button-Enabled-State binden können - Neue public API auf
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Das sind Einstiegspunkte auf Code-Ebene und sie funktionieren immer unabhängig vonAllowUserTextSelection; der Schalter sperrt nur Benutzereingaben, sodass Kiosk-Hosts benutzergesteuerte Auswahl deaktivieren und trotzdem Toolbar-Schaltflächen wie Select All oder Copy über dieselbe API ansteuern können - Ein Standard-Kontextmenü mit Rechtsklick für
Copy/复制wird automatisch angehängt, wenn der Host kein eigenesPopupMenuzugewiesen hat; der übliche Ablauf Auswahl markieren, Rechtsklick, Kopieren funktioniert damit sofort. Die Beschriftung wird anhand vonSysLocale.PriLangIDzwischen Englisch und Chinesisch gewählt; Hosts mit voller Lokalisierung oder erweitertem Menü weisen einfach ihr eigenesPopupMenuzu, dann wird das Standardmenü unterdrückt - Die Auswahl wird bei Übergängen über
SetPdf,SetPageNumber,SetActive(False)undDisplayModeautomatisch gelöscht;OnSelectionChangewird dabei genau einmal ausgelöst, wenn die vorherige Auswahl nicht leer war. Das Form-Fill-Subsystem behält Vorrang; während ein Formularfeld bearbeitet wird, werden alle Auswahl-Tastenkürzel zurückgestellt, sodass das FeldCtrl+C/Ctrl+A/Shift+arrowsfür seine eigene Auswahl erhält - Die Regressionssuiten für Delphi und Lazarus wurden auf jeweils 202 Fälle und die C++Builder-Suite auf 159 Fälle erweitert; abgedeckt sind Standardwerte, Round-Trip, Verhalten der public API, Löschung bei Zustandswechseln, Maus-Drag auf Text oder Leerraum, Klick versus Drag, Wechsel des IBeam-Cursors, Doppelklick-Wort, Dreifachklick-Zeile, Tastenkürzel, Standard-Popup mit Attach / Defer / Caption sowie seitenübergreifende Auswahl im spread, einschließlich einer CR/LF-Round-Trip-Prüfung der Zwischenablage
Version 1.35.0
- PDF/VT-Marker-Injektion (ISO 16612-2:2010) hinzugefügt: TPdf.SaveAsPdfVT erhebt das aktuelle Dokument zu einer PDF/VT-1- oder PDF/VT-2-konformen Datei, dem PDF-Subset für variable und transaktionale Druckaufgaben. PDF/VT baut auf PDF/X-4 auf, ISO 16612-2 §6.2.1 verlangt daher, dass jede PDF/VT-1-Datei auch PDF/X-4 entspricht, also schreibt der Injektor zusammen mit den PDF/VT-spezifischen Eigenschaften den vollständigen PDF/X-4-Marker-Satz mit XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)und/Trappedsowie Katalog-/OutputIntentsmit Verweis auf ein OutputIntent-Dictionary mit eingebettetem ICC-Profil - Die PDF/VT-spezifische Injektion umfasst XMP
pdfvtid:GTS_PDFVTVersion, gleich "PDF/VT-1" oder "PDF/VT-2" nach §6.3 Table 2, undpdfvtid:GTS_PDFVTModDate, synchron gehalten mitxmp:ModifyDatenach §6.3 NOTE 1, sowie eine pdfaExtension:schemas-Beschreibung, die beide pdfxid- und pdfvtid-Namespaces mit den NPES-URIshttp://www.npes.org/pdfx/ns/id/undhttp://www.npes.org/pdfvt/ns/id/deklariert. Der Trailer trägt ein/ID-Array - TPdf.SaveAsPdfVTToStream für PDF/VT-Ausgabe im Speicher und Kurzform
TPdf.SaveAsPdfVT(FileName)hinzugefügt; erzeugt PDF/VT-1 mit dem gebündelten sRGB IEC61966-2.1 OutputIntent, 3144 Bytes und dasselbe Profil wie SaveAsPdfA / SaveAsPdfX, sowie/Trapped /False - TPdf.ValidatePdfVT prüft PDF/VT-Marker: XMP
pdfvtid:GTS_PDFVTVersionundGTS_PDFVTModDate, Übereinstimmung vonpdfvtid:GTS_PDFVTModDateundxmp:ModifyDate, Basiskennungpdfxid:GTS_PDFXVersion, Katalog-/DPartRootnach §6.5,/OutputIntentsmit/DestOutputProfile, Trailer /ID, Verschlüsselungsstatus undxmp:CreateDate/ModifyDate; TPdfVTValidationResult liefert erkanntes Level und Probleme - TPdf.PdfVTConformance liefert das aktuelle Dokumentlevel (pvc1, pvc2, pvcNone oder pvcUnknown) ohne expliziten ValidatePdfVT-Aufruf
- Neue Typen der Unit FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue und TPdfVTSaveOptions
- Die Document Part Hierarchy, also der
DPartRoot- /DPart-Baum nach §6.5, ist eine Struktur auf Anwendungsebene und hängt von der Empfänger- und Seitenbereichszuordnung des Variable-Data-Print-Workflows ab. SaveAsPdfVT synthetisiert keinen DPart-Baum; ValidatePdfVT meldet ein fehlendes/DPartRootalspvviMissingDPartRoot, damit Aufrufer PDF/VT-Dateien durch einen separaten DPart-Aufbauschritt leiten können. Inhaltsseitige PDF/X-4-Anforderungen wie Schrifteinbettung, Transparenz, ICC-Farbmanagement und OPI- / JavaScript- / Reference-XObject-Verbote bleiben in der Verantwortung des Dokumentautors und der PDFium-Rendering-Pipeline - TPdf.AboutInfo-Zeichenkette aktualisiert, um die aktuelle Produktversion zu melden
Version 1.34.0
- PDF/R-1-Markerinjektion (ISO 23504-1:2020): TPdf.SaveAsPdfR überführt das aktuelle Dokument in eine PDF/R-1-konforme Datei für den Rasterbildtransport gescannter Dokumente; die Nachbearbeitung ergänzt die Dateiformatmarker — den eindeutigen
%PDF-raster-1.0-Versionskommentar zwischen Trailer und startxref (§5), Katalog nach §6.3 mit ausschließlich Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata, Info nach §6.4.3 mit Creator / Producer / CreationDate / ModDate, Katalog-/Metadata-XMP mit den vier Einträgen aus §6.4.4 Table 1 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate) und Trailer-/ID - TPdf.SaveAsPdfRToStream für PDF/R-Ausgabe im Speicher und Kurzform
TPdf.SaveAsPdfR(FileName)hinzugefügt - TPdf.ValidatePdfR hinzugefügt: prüft ein offenes PDF auf PDF/R-1-Konformitätsmarker, darunter den
%PDF-raster-x.y-Fußkommentar, die Header-Version, das Fehlen von /Type /ObjStm, White-List-Konformität von Katalog und Info-Dictionary, das Vorhandensein des XMP-Metadatenstreams und Trailer /ID, und liefert TPdfRValidationResult mit erkanntem Konformitätslevel und den gefundenen Problemen - TPdf.PdfRConformance liefert das Dokumentlevel (prc1, prcNone oder prcUnknown) ohne expliziten ValidatePdfR-Aufruf
- Neue Typen in FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue und TPdfRSaveOptions;
TPdfRSaveOptions.Defaultsetzt StripInfoOptionalEntries und StripCatalogOptionalEntries auf True für §6.3-/§6.4.3-konformen Katalog und Info; False erhält Quelleinträge, erfüllt dann diese Klauseln nicht, die übrigen Marker bleiben - Inhaltsanforderungen bleiben Aufgabe des Quell-PDFs: Contents-Struktur je Seite (§6.5.1), MediaBox
[0 0 w h](§6.5.3), Filter (§6.2.2 — nur FlateDecode, bitonales CCITTFaxDecode und DCTDecode mit 8-Bit-Grau/RGB), keine Objektstreams (§6.2.4) und Strip-Layout nach §6.6; Nachbearbeitung kann diese nicht durchsetzen; PDF/R ist strukturell deutlich strenger als andere PDF/x-Standards und benötigt korrekt erzeugte Quellbytes; ValidatePdfR meldet erkennbare Dateiformatprobleme, ein TWAIN-Working-Group-PDF/R-Validator ergänzt vollständige Inhaltsprüfung - TPdf.AboutInfo-Zeichenkette aktualisiert, um die aktuelle Produktversion zu melden
Version 1.33.0
- PDF/X-Marker-Injektion (ISO 15930-Familie) hinzugefügt: TPdf.SaveAsPdfX erhebt das aktuelle Dokument durch Nachbearbeitung des Basis-PDFs mit einem Inkrement-Update zu einer PDF/X-1a:2001-, PDF/X-3:2002- oder PDF/X-4-konformen Datei. Die Injektion umfasst die dateiformatspezifischen Anforderungen, die sich per Nachbearbeitung anhängen lassen: einen XMP-Metadatenstream mit
pdfxid:GTS_PDFXVersionund für PDF/X-1a sowie PDF/X-3 auchpdfxid:GTS_PDFXConformancesamt passender pdfaExtension:schemas-Beschreibung, ein neu geschriebenes Document Information Dictionary mit/GTS_PDFXVersion,/GTS_PDFXConformanceund/Trapped, einen aktualisierten Katalog mit/OutputIntents [N 0 R]auf ein OutputIntent-Dictionary mit/S /GTS_PDFXund eingebettetem ICC-Profil sowie ein Trailer-/ID-Array - TPdf.SaveAsPdfXToStream ergänzt PDF/X-Ausgabe im Speicher;
TPdf.SaveAsPdfX(FileName)erzeugt standardmäßig PDF/X-4 mit integriertem sRGB IEC61966-2.1 OutputIntent (3144 Bytes, identisches Profil wie SaveAsPdfA) - TPdf.ValidatePdfX prüft PDF/X-Marker: XMP-pdfxid-Kennung und Übereinstimmung mit Info, pdfxid-Erweiterungsschema, /OutputIntents mit /DestOutputProfile, Title, Trailer /ID, Verschlüsselungsstatus und xmp:CreateDate / xmp:ModifyDate; TPdfXValidationResult liefert erkanntes Level und Probleme
- TPdf.PdfXConformance liefert das aktuelle Level (pxc1a, pxc3, pxc4, pxcNone oder pxcUnknown) ohne ValidatePdfX-Aufruf; der XMP-Versionsstring unterscheidet die drei Konformitätslevel
- Neue Typen in FPdfPdfx: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue und TPdfXSaveOptions;
TPdfXSaveOptions.Defaultwählt PDF/X-4 mit sRGB OutputIntent und/Trapped /False;Conformance, CMYK-IccProfileDatafür Druckworkflows undOutputCondition/OutputConditionIdentifier/RegistryNamefür ICC-Registereinträge (etwa FOGRA39, GRACoL2006_Coated1v2) können überschrieben werden - Inhaltslevel-Anforderungen (alle Schriften eingebettet, kein JavaScript, keine sichtbaren Annotationen, OPI-Verbot, Transparenzregeln für PDF/X-1a / PDF/X-3) bleiben in der Verantwortung des Autors. Mit callas pdfaPilot oder Ghent PDF Workgroup Output Suite für vollständige Prüfung kombinieren
- TPdf.AboutInfo-Zeichenkette aktualisiert, um die aktuelle Produktversion zu melden
Version 1.32.0
- PDF/E-1-Markerinjektion (ISO 24517-1:2008): TPdf.SaveAsPdfE überführt das aktuelle Dokument durch inkrementelle Nachbearbeitung in eine PDF/E-1-konforme Datei; ergänzt werden die nachbearbeitbaren Dateiformatmarker — XMP mit
pdfe:ISO_PDFEVersion = "PDF/E-1"und passendem pdfaExtension:schemas, neu geschriebenes Info mit/ISO_PDFEVersion (PDF/E-1)nach §5, die aus ISO 19005-1 §6.7 über §13.1 übernommenen Info-XMP-Brücken (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool) und Trailer-/IDnach §6.2 - TPdf.SaveAsPdfEToStream für PDF/E-Ausgabe im Speicher und Kurzform
TPdf.SaveAsPdfE(FileName)hinzugefügt - TPdf.ValidatePdfE prüft PDF/E-1-Marker: XMP pdfe:ISO_PDFEVersion und Übereinstimmung mit Info, pdfe-Erweiterungsschema, Info-/ISO_PDFEVersion, Trailer /ID und xmp:CreateDate / xmp:ModifyDate; das strukturierte Ergebnis liefert erkanntes Level und Probleme
- TPdf.PdfEConformance liefert das aktuelle Level (pec1, pecNone oder pecUnknown) ohne explizites ValidatePdfE
- Neue Typen, exportiert in der neuen Unit FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- Der PDF/x-Nachbearbeitungsweg schreibt erstmals das Info-Dictionary neu — mit derselben Objektnummer, sodass xref-Unterabschnitt und Trailer-/Info gültig bleiben; fehlt /Info, wird ein neues Dictionary erzeugt; PDFium erzeugt bei jedem SaveAs ein Info-Dictionary, daher ist Neuschreibung der Normalfall
- Inhaltsanforderungen wie Schrifteinbettung, ToUnicode-CMaps und verbotene XObjects / ExtGState-Schlüssel / XFA bleiben Aufgabe des Autors — SaveAsPdfE ergänzt Dateiformatmarker, verändert aber weder Seiteninhalt noch verbotene Funktionen
- TPdf.AboutInfo-Zeichenkette aktualisiert, um die aktuelle Produktversion zu melden
Version 1.31.0
- Unterstützung für das Einspeisen von PDF/UA-1-Markern (ISO 14289-1:2014) hinzugefügt: TPdf.SaveAsPdfUa erhebt das aktuelle Dokument durch Nachbearbeitung mit einem Inkrement-Update zu einer PDF/UA-1-konformen Datei. Die Injektion umfasst alle dateiformat-level Anforderungen, die per Nachbearbeitung durchsetzbar sind — XMP-Metadaten-Stream mit
pdfuaid:part = 1und passender pdfaExtension:schemas-Beschreibung, verpflichtendesdc:title, Katalog/MarkInfo << /Marked true /Suspects false >>und/ViewerPreferences << /DisplayDocTitle true >>(nur wenn die Quelle keines hat), Katalog/Lang(wenn der Aufrufer ein BCP 47-Tag liefert) und/ID-Array im Trailer - TPdf.SaveAsPdfUaToStream für PDF/UA-Ausgabe im Arbeitsspeicher hinzugefügt sowie eine Default-Options-Kurzform
TPdf.SaveAsPdfUa(FileName)für den häufigen Fall - TPdf.ValidatePdfUa hinzugefügt: prüft eine geöffnete PDF auf PDF/UA-1-Konformitätsmarker (StructTreeRoot-Existenz, /Lang, /MarkInfo /Marked true mit /Suspects = false, /ViewerPreferences /DisplayDocTitle true, XMP pdfuaid:part-Identifier, dc:title-Vorhandensein, Trailer /ID, Verschlüsselungsstatus) und liefert ein strukturiertes Ergebnis mit erkanntem Konformitätslevel und Problemmenge
- Eigenschaft TPdf.PdfUaConformance hinzugefügt: liefert das Konformitätslevel des geöffneten Dokuments (puc1, pucNone oder pucUnknown) ohne expliziten ValidatePdfUa-Aufruf
- Neue Typen, exportiert in der neuen Unit FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- Leere Felder in TPdfUaSaveOptions (Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language) werden automatisch über FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage befüllt
- Inhaltslevel-Anforderungen (vollständige StructTreeRoot-Auszeichnung, Figure-Alt-Text, ToUnicode-CMaps, Schrifteinbettung usw.) bleiben in der Verantwortung des Dokumentautors — SaveAsPdfUa fügt nur Dateiformat-Marker an. ValidatePdfUa meldet das Fehlen eines StructTreeRoot als
pvuaiMissingStructTreeRoot - TPdf.AboutInfo-Zeichenkette aktualisiert, um die aktuelle Produktversion zu melden
Version 1.30.0
- Die PDF/A-1b-Ausgabe erfüllt nun die Anforderungen von ISO 19005-1 (mit Cor.1:2007) an die Äquivalenz zwischen Document Information Dictionary und XMP: Jeder Eintrag im Info dictionary, den PDFium in das Basis-PDF schreibt, wird im XMP-Paket gespiegelt, einschließlich Title (dc:title), Author (dc:creator), Subject (gemäß Cor.1 als dc:description), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) und ModDate (xmp:ModifyDate). xmp:MetadataDate wird ebenfalls geschrieben
- Der Trailer eines PDF/A-Dokuments enthält nun stets ein /ID-Array (zwingende Anforderung in ISO 19005-1 6.1.3). Wenn TPdf.SaveAsPdfA ein Dokument verarbeitet, dessen Quelle bereits eine file identifier hat, werden die 16-Byte-IDs permanent und changing wiederverwendet; andernfalls wird eine deterministische 16-Byte-Fallback-ID aus den Quellbytes abgeleitet
- Das eingespeiste XMP enthält jetzt die in ISO 19005-1 6.7.8 (durch Cor.1 ersetzt) verlangte pdfaid Extension-Schema-Beschreibung — pdfaid gilt relativ zur XMP Specification 2004 als Extension-Schema, daher müssen alle konformen Dateien ihre property names, value types und categories im Container pdfaExtension:schemas deklarieren
- TPdfASaveOptions wurde um fünf optionale Felder erweitert: Producer, CreationDate, ModDate (PDF-Datums-Strings in der Form “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId und InstanceId (16-Byte-Strings für das /ID-Array im Trailer). TPdf.SaveAsPdfA / SaveAsPdfAToStream füllen fehlende Werte automatisch über FPDF_GetMetaText und FPDF_GetFileIdentifier, sodass bestehender Aufrufer-Code unverändert weiterläuft
- TPdf.ValidatePdfA / TPdf.PdfAConformance melden nun drei zusätzliche Probleme: pvaiMissingTrailerId (kein /ID im Trailer), pvaiMissingXmpDates (xmp:CreateDate oder xmp:ModifyDate fehlt) und pvaiMissingExtensionSchema (pdfaid Extension-Schema-Beschreibung fehlt)
- Nicht-ASCII-Zeichen in Title, Author, Subject, Keywords, Creator und Producer werden nun als UTF-8 in das XMP-Paket geschrieben (XMP Specification verlangt UTF-8). Mehrsprachige Metadaten bleiben dadurch beim Durchlauf von SaveAsPdfA erhalten
- TPdf.AboutInfo-Zeichenkette aktualisiert, um die aktuelle Produktversion zu melden
Version 1.29.0
- Die mitgelieferten PDFium-DLLs (Win32 und Win64, sowohl Standard- als auch V8-Builds) wurden auf den PDFium-Snapshot vom 2026-05-22 aktualisiert. Damit werden Korrekturen an den Absturzpfaden in FPDFText_SetText / FPDFText_SetCharcodes sowie diverse interne Härtungen aus dem PDFium-Projekt übernommen
- Das neue Speicher-Flag FPDF_SUBSET_NEW_FONTS von PDFium wurde in FPdfPageOps.pas freigegeben, sodass Aufrufer von FPDF_SaveAsCopy automatisches Subsetting eingebetteter Schriftdateien für neu hinzugefügte Textobjekte anfordern können. Die bestehenden Konstanten FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL und FPDF_REMOVE_SECURITY werden nun mit der PDFium-Bitshift-Form definiert (der bisherige numerische Wert 3 bleibt als FPDF_REMOVE_SECURITY_DEPRECATED erhalten, um die Binärkompatibilität zu wahren)
- FPDF_FONT_BACKEND_TYPE-Enum (FREETYPE / FONTATIONS) sowie das passende Feld m_FontLibraryType in FPDF_LIBRARY_CONFIG wurden in FPdfView.pas ergänzt, sodass Anwendungen, die PDFium mit dem Skia-Renderer initialisieren, beim Start das Schrift-Backend wählen können
- Die Signatur von TFPDFPage_InsertObject wurde an den PDFium-C-Export angepasst: Die C-Funktion liefert nun FPDF_BOOL (TRUE bei Erfolg, FALSE wenn page_object NULL ist oder die Ownership-Übergabe fehlschlägt) statt void. Bestehende PDFium Delphi Component-Aufrufer bleiben kompilierbar, da Delphi / FPC das Ignorieren des Funktionsrückgabewerts erlauben
- Die Zeichenkette TPdf.AboutInfo wurde korrigiert und meldet nun die aktuelle Produktversion (stand seit der reinen Dokumentationsversion 1.28.0 noch auf v1.27.0)
Version 1.28.0
- Die gesamte API-Referenz hat deutlich ausführlichere Seitendokumentation: jede Eigenschaft, Methode, jedes Ereignis und jede globale Funktion hat eine Description mit 3 Absätzen, Remarks-Liste, mehrzeiliges Delphi Example und erweitertes See Also — für 200+ zuvor knappe Seiten einschließlich aller TPdf-Zähler, Metadatengetter, Schrift-/Zeichenaccessors, Seiteneigenschaften, indizierter Records, Dokumentmethoden und der gesamten TPdfView-Zustands-/Anzeige-/Ereignisoberfläche
- Das Layout der Hilfe wurde an das Erscheinungsbild von losLab angepasst: h1/h2-Größen angeglichen, die Stile für das API-Navigationsraster im gemeinsamen StyleSheet zusammengeführt und die seitenbezogenen Inline-CSS-Überschreibungen in Navigation.html entfernt
- Die Dokumentation enthält nun ein Hilfsskript (Docs\Build-Expand-Entries.ps1), das die Einträgsseiten-Anreicherung aus einer einzigen Datentabelle regeneriert und so wiederholbare Wartung ermöglicht
Version 1.27.0
- PDF/A-1b-Erstellung hinzugefügt: TPdf.SaveAsPdfA speichert ein beliebiges geöffnetes Dokument als PDF/A-1b-konforme Datei, indem die Basis-PDF durch ein inkrementelles Update nachbearbeitet wird, das einen XMP-Metadatenstrom, einen sRGB-ICC-OutputIntent und einen aktualisierten Dokumentkatalog einfügt — alles ohne zusätzliche DLL-APIs. Funktioniert auf allen von PDFium Delphi Component unterstützten Plattformen
- TPdf.SaveAsPdfAToStream für PDF/A-Ausgabe in den Arbeitsspeicher hinzugefügt
- TPdf.ValidatePdfA hinzugefügt: überprüft ein geöffnetes PDF auf PDF/A-Konformität (XMP pdfaid-Marker, OutputIntent mit eingebettetem ICC-Profil, Verschlüsselung) und gibt ein strukturiertes Ergebnis mit dem erkannten Konformitätslevel und einer Menge konkret gefundener Probleme zurück
- Property TPdf.PdfAConformance hinzugefügt: liefert den Konformitätslevel des aktuell geöffneten Dokuments (pac1b, pac1a, pac2b, pac3b, pacNone oder pacUnknown) ohne expliziten Aufruf von ValidatePdfA
- Neue Typen exportiert: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (in neuer Unit FPdfPdfa.pas)
- SaveAsPdfA unterstützt ein benutzerdefiniertes ICC-Profil über TPdfASaveOptions.IccProfileData; bleibt es leer, wird automatisch das eingebaute sRGB IEC61966-2.1-Profil (HP/Microsoft, 3144 bytes) verwendet
- Die monolithische HTML-Referenz wurde durch ein restrukturiertes Web-Hilfesystem ersetzt: 302 individuelle API-Einträgsseiten (je eine pro Property, Methode, Event und globaler Funktion) für TPdf und TPdfView, jede mit vollständiger Beschreibung, Parametertabelle, Delphi-Code-Beispiel und See Also-Links
- Navigation.html hinzugefügt: ein umfassender einseitiger API-Navigationsindex, organisiert in sechs Abschnitten (TPdf Properties/Methoden/Events, TPdfView Properties/Methoden/Events, globale Funktionen) mit einem 5-spaltigen Flex-Grid für schnelles Überfliegen
- TPdf.html und TPdfView.html wurden als kompakte Komponenten-Übersichtsseiten neu aufgebaut, die die Typreferenz-Abschnitte (Types, Constants, Global Variables) beibehalten und für alle Member auf die einzelnen Einträgsseiten verweisen
- Volltextsuche mit Search.js hinzugefügt, mit inkrementellem clientseitigem Matching über alle 312 indizierten Seiten
- Alle Navigationsleisten der gesamten Site wurden auf Navigation.html aktualisiert
Version 1.26.0
- Demo/Lazarus/BatchExport hinzugefügt, die LCL-Portierung des Delphi-Demos BatchExport aus v1.14.0. Gleicher Funktionsumfang: Mehrdatei-PDF -> JPG-Export mit Fortschritt pro Datei (Gesamtfortschritt), Seitenfortschritt (aktueller Fortschritt), DPI- / Qualitäts- / Passworteingaben und kooperativ abbrechbarem Batch auf Basis von IPdfCancellationToken. Der Ausgabeordner wird nach erfolgreichem Abschluss im plattformeigenen Dateimanager geöffnet
Version 1.25.0
- Form XObject-Seitenwiederverwendung zu TPdf hinzugefügt und damit Workflows für Wasserzeichen, Template-Overlay und “eine Seite auf viele stempeln” ermöglicht: CreateXObjectFromPage erzeugt aus einer beliebigen Seite eines anderen Dokuments ein wiederverwendbares Handle; InsertFormObjectFromXObject fügt EINE Kopie der gekapselten Seite in die aktuelle Seite ein. Liefert das eingefügte FPDF_PAGEOBJECT zurück, so dass der Aufrufer es mit FPDFPageObj_SetMatrix und den TPdfMatrix-Hilfen aus v1.9.0 positionieren / skalieren / rotieren kann
- Die neue Pascal-Klasse TPdfXObject kapselt das FPDF_XOBJECT-Handle von PDFium und schließt es im Destruktor automatisch, wodurch die manuelle FPDF_CloseXObject-Zeremonie entfällt
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 147 Fälle erweitert, die C++Builder-Suite auf 123 Fälle — mit Abdeckung der Handle-Erzeugung und Page-Object-Insertion-Kontrakte
Version 1.24.0
- TPdf.RenderPageProgressive hinzugefügt — eine abbrechbare Variante von RenderPage, die PDFiums progressive Rendering-Schleife antreibt und zwischen Iterationen ein IPdfCancellationToken (v1.7.0) abfragt, so dass lange Renderings mit hoher DPI mitten in der Seite abgebrochen werden können, statt den Aufrufer bis zum Abschluss zu blockieren
- Gibt einen TPdfProgressiveStatus-Wert zurück: prsDone, prsCancelled oder prsFailed. Mit AToken = nil rendert die Methode ohne jegliche Pause bis zum Ende (keine Möglichkeit von prsCancelled)
- Verwendet denselben Zero-Copy-Schnellpfad aus v1.21.0 — PDFium rendert direkt in die DIB des Ziel-TBitmap. Der bisherige Legacy-Fallback gilt weiterhin, wenn die DIB nicht gekapselt werden kann
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 145 Fälle erweitert, die C++Builder-Suite auf 121 Fälle — mit Abdeckung von nil-Token (durchläuft komplett), bereits abgebrochenem Token (prsCancelled) und Pixel-Äquivalenz mit synchronem RenderPage bei aktivem Token
Version 1.23.0
- Sechs neue TPdfView-Methoden hinzugefügt, die PDFiums Textauswahl in Formular-Widgets und Undo/Redo für Anwendungen verfügbar machen: GetSelectedFormText liefert den aktuell ausgewählten Text innerhalb des fokussierten Formular-Widgets; SelectAllFormText wählt jedes Zeichen; FormUndo / FormRedo / FormCanUndo / FormCanRedo steuern den Edit-Verlauf des fokussierten Widgets. Die zugrundeliegenden PDFium-APIs waren bereits gebunden, hatten aber keinen High-Level-Einstiegspunkt. Alle sechs Methoden brechen sicher ab, wenn die View inaktiv ist oder das Dokument kein AcroForm-Widget fokussiert hat
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 142 Fälle erweitert, die C++Builder-Suite auf 119 Fälle — mit Abdeckung des Kontrakts “kein Formular / kein Fokus” für jede neue Methode
Version 1.22.0
- Seitenkompositions-Wrapper zu TPdf hinzugefügt: ImportPagesByIndex erwartet ein nullbasiertes Indexarray, um bestimmte Seiten aus einem Quelldokument zu kopieren; ImportNPagesToOne liefert ein brandneues TPdf, dessen Seiten N-up-Komposite dieses Dokuments sind; MovePages ordnet Seiten an Ort und Stelle um. Die zugrundeliegenden PDFium-APIs waren bereits gebunden, hatten aber keinen Pascal-freundlichen Einstiegspunkt
- ImportPagesByIndex akzeptiert ein leeres Array, um jede Quellseite zu importieren (entspricht der Übergabe von nil auf C-ABI-Ebene)
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 136 Fälle erweitert, die C++Builder-Suite auf 115 Fälle — mit Abdeckung von Subset-Import, Volldokument-Import, Seitenneuordnung und N-up-Komposit
Version 1.21.0
- Rendering-Leistung verbessert durch Umstellung von TPdf.RenderPage / TPdf.RenderTile (und der entsprechenden TPdfView-Helfer) auf einen Zero-Copy-Ausgabepfad. PDFium schreibt nun direkt in den DIB-Puffer des Ziel-TBitmap statt in einen internen Puffer, der anschließend zeilenweise kopiert wurde — das spart je Render eine Speicherkopie der Größe Breite x Höhe x 4 Bytes. Der Effekt ist bei hoher DPI am deutlichsten (Thumbnail-Paneele, Druckqualitäts-Export, Batch-Export)
- Der bisherige zeilenweise Pfad bleibt als Sicherheits-Fallback erhalten, für den unwahrscheinlichen Fall, dass die Ziel-DIB nicht gekapselt werden kann (extreme Dimensionen, ungewöhnlicher Stride, OOM). Das Verhalten ist Byte für Byte identisch — der Fallback ist nur langsamer
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 132 Fälle erweitert, die C++Builder-Suite auf 112 Fälle — mit Abdeckung der pf32bit-Konvertierung des aufruferseitigen Bitmaps, Dimensions-Round-Trip und einer Sanity-Prüfung für den Stride großer Bitmaps
Version 1.20.0
- Such-Ergebnishervorhebung zu TPdfView hinzugefügt: HighlightSearchText(Text, MatchCase, MatchWholeWord) durchsucht die aktuelle View-Seite, gibt die Anzahl der Treffer zurück und malt bei jedem Neuzeichnen eine HighlightColor-Maske über jeden Treffer. ClearHighlight entfernt die Hervorhebungen; das Wechseln der View auf eine andere Seite löscht sie automatisch, da Treffer seitenspezifisch sind
- HighlightColor ist standardmäßig clYellow und published, damit Anwendungen die Hervorhebung an ihre UI-Palette anpassen können
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 129 Fälle erweitert, die C++Builder-Suite auf 109 Fälle — mit Abdeckung von Standardfarbe, Farb-Round-Trip, “reale Fixture-Worttreffer” gegen den Text in sample.pdf und dem Kontrakt “fehlendes Wort liefert null Treffer”
Version 1.19.0
- Property FitMode zu TPdfView mit vier Werten hinzugefügt: pfmNone (manueller Zoom), pfmActualSize (100%), pfmFitPage (gesamte Seite passt in den Viewport) und pfmFitWidth (Seitenbreite entspricht der Viewport-Breite). Der aktive Fit-Modus wird bei Resize und beim Wechsel der aktuellen Seite automatisch erneut angewendet, sodass lange Dokumente mit gemischten Seitengrößen jederzeit perfekt eingepasst bleiben
- Das direkte Setzen von Zoom hebt den aktiven Fit-Modus auf (FitMode fällt zurück auf pfmNone) — entsprechend der gängigen Konvention von PDF-Viewern, bei der die Eingabe eines Zoomwerts Fit Page / Fit Width verlässt
- Der Standardwert ist pfmNone, so dass bestehende Anwendungen ihr Verhalten mit explizitem Zoom beibehalten
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 124 Fälle erweitert, die C++Builder-Suite auf 106 Fälle — mit Abdeckung von Standardwert, Modus-Round-Trip, fit-page erzeugt auf einem geladenen Dokument einen realen Zoom und manueller Zoom hebt den Fit-Modus auf
Version 1.18.0
- Property PageColor zu TPdfView hinzugefügt, die den gerenderten PDF-Seitenhintergrund von der Color des umgebenden Steuerelements entkoppelt. Standardwert ist clWhite, damit PDF-Seiten unabhängig vom Theme der Host-Anwendung in Papierweiß gerendert werden. Dark-Mode-Viewer können den Scrollbereich dunkel halten und gleichzeitig die eigentliche PDF-Seite weiß (oder in jeder von der Anwendung gewählten Farbe) belassen
- Verhaltensänderung: Anwendungen, die TPdfView.Color setzten, um die PDF-Seite umzufärben, sollten stattdessen PageColor setzen. Das Standardverhalten wird für den häufigen Fall (weiße Seiten auf themengefärbten Steuerelement-Hintergründen) ohne Code-Änderung besser
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 120 Fälle erweitert, die C++Builder-Suite auf 103 Fälle — mit Abdeckung von Standardwert und Farb-Round-Trip
Version 1.17.0
- Benutzerinput-Sperrschalter zu TPdfView hinzugefügt, damit Anwendungen, die den Viewer in Kiosks, Vorschaupaneelen oder schreibgeschützten Kontexten einbetten, Navigationsgesten ohne Subclassing deaktivieren können: AllowUserPageChange steuert die neuen Tastenkürzel PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling steuert die neuen Sprünge per Mausrad-hoch / Mausrad-runter; AllowUserTextSelection ist für den künftigen Pfad der Mauszug-Textauswahl reserviert. Alle drei sind standardmäßig True, sodass bestehende Anwendungen ohne Verhaltensänderung aktualisieren können
- Die Seiten-Navigation per Mausrad überspringt Ctrl+Rad, damit Anwendungen Ctrl+Rad weiterhin für Zoom reservieren können
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 118 Fälle erweitert, die C++Builder-Suite auf 101 Fälle — mit Abdeckung von Standardwerten und Schalter-Round-Trip
Version 1.16.2
- TPdfView-Regressionsabdeckung für Annotation-Linkklicks erweitert, wenn die Viewer-Seite von der zugehörigen TPdf-Seite abweicht — mit einem echten headless Mausklick-Pfad in Delphi, Lazarus und C++Builder
- Die Delphi- und Lazarus-Suites laufen nun mit je 114 Fällen, C++Builder mit 99 Fällen
Version 1.16.1
- Behoben: TPdfView-Linkklick-Behandlung verwendet nun bei automatischen Annotation- und Web-Link-Aktionen die aktuell vom Viewer angezeigte Seite, selbst wenn die zugehörige TPdf-Komponente auf einer anderen Seite steht
- TPdfThumbnailView gegen dangling Pdf-Referenzen abgesichert, wenn die verknüpfte TPdf-Komponente zerstört wird
- Lebenszyklus-Regressionsabdeckung für Thumbnail-Referenzen hinzugefügt; die Delphi- und Lazarus-Suites laufen nun mit je 113 Fällen, C++Builder mit 98 Fällen
- README, Testdokumentation, HTML-Help Such-/Indexinhalte und generierte C++-Paketausgaben mit den Integrations-Updates von v1.7.0 bis v1.16.0 synchronisiert
Version 1.16.0
- Neues Delphi-PrintDialog-Demo (Demo/Delphi/PrintDialog) hinzugefügt, das N-up-Druck (1 / 2 / 4 / 9 Seiten pro Blatt) mit Filterung gerader / ungerader Seiten, Graustufen-Rendering und optionalen 1-Pixel-Zellrahmen demonstriert. Es ist ein bewusst kleiner Begleiter zum bestehenden PrintPDF-Demo, das bereits Vorschau, Recent-Files, Zoom und Skalierung abdeckt
Version 1.15.0
- Neue Komponente TPdfThumbnailView (Unit FPdfThumbnail) hinzugefügt, die in einem scrollbaren Seitenpaneel ein Seiten-Thumbnail pro Zeile rendert — mit Hover- und Auswahl-Hervorhebung sowie Klick-Navigation. Vorgesehen für die Platzierung neben einem TPdfView, damit Endanwender lange Dokumente seitenweise durchblättern können
- Die Komponente ist auf der losLab-Palettenseite zusammen mit TPdf und TPdfView registriert; wichtige Properties: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor und das Event OnPageClick
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 112 Fälle erweitert, die C++Builder-Suite auf 97 Fälle — mit Abdeckung von Standardwerten, Thumbnail-Größen-Round-Trip, Klemmung extremer Werte, Farb-Round-Trip und Event-Handler-Zuweisung
Version 1.14.0
- Neues Delphi-BatchExport-Demo (Demo/Delphi/BatchExport) hinzugefügt, das zeigt, wie viele PDF-Dateien in einem Durchlauf nach JPG konvertiert werden — mit TPdf.LoadCustomDocument für streamendes Laden, IPdfCancellationToken für kooperative Abbrechbarkeit sowie Gesamt-Fortschritt pro Datei und Fortschrittsbalken pro Seite. Das Demo verwendet je eine TPdf-Instanz pro Datei (PDFium selbst ist nicht thread-sicher) und öffnet nach erfolgreichem Export den Ausgabeordner im Explorer
Version 1.13.0
- Async-Rendering-UI-Overlay zu TPdfView durch drei neue Properties hinzugefügt: AsyncRendering, LoadingText und LoadingColor. Wenn AsyncRendering True ist, zeichnet der Single-Page-Paint-Pfad einen kleinen “Loading...”-Indikator über die gerenderte Seite, sodass Anwendungen, die einen eigenen Worker für lange Renderings nutzen, eine einheitliche visuelle Affordanz teilen
- Standardwerte erhalten das bestehende Verhalten: AsyncRendering ist False, sodass Anwendungen, die sich nicht aktiv einklinken, keine visuelle Änderung bemerken
- Die Dokumentation stellt klar, dass PDFium selbst nicht thread-sicher ist — das tatsächliche Auslagern des Renderings auf einen Worker erfordert vom Aufrufer eine TPdf pro Worker; das anstehende Batch-Export-Demo demonstriert dieses Muster
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 106 Fälle erweitert, die C++Builder-Suite auf 93 Fälle — mit Abdeckung von Standardwerten und Round-Trip der drei Properties
Version 1.12.0
- Klickgesteuerte Linkbehandlung zu TPdfView hinzugefügt. Die neue Property LinkOptions steuert das automatische Verhalten für die vier PDF-Link-Aktionstypen: goto (Seitensprung), URI (ShellExecute), launch (ShellExecute) und embedded GotoR (reserviert). Standardmäßig sind loAutoGoto und loAutoOpenURI aktiviert; loAutoLaunch und loAutoEmbeddedGoto bleiben aus, damit ein versehentlicher Klick kein beliebiges Programm ausführen kann
- Die Events OnAnnotationLinkClick und OnWebLinkClick wurden hinzugefügt, feuern vor jeder automatischen Aktion und ermöglichen es Anwendungen, den Link zu prüfen, ihn als Handled zu markieren oder umzulenken (zum Beispiel auf eine Sicherheitsabfrage)
- Die Erkennung von Linkklicks läuft nur, wenn die Geste ein Klick und kein Ziehen ist — ein frischer MouseDown-Anker wird verwendet, damit Schwenkgesten weiterhin unverändert über den bestehenden Scrollpfad laufen
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 102 Fälle erweitert, die C++Builder-Suite auf 91 Fälle — mit Abdeckung von Standard-LinkOptions, Set-Round-Trip und Event-Handler-Zuweisung
Version 1.11.0
- Visuelle Aufwertung von TPdfView: Die Properties PageShadowSize, PageShadowColor und PageBorderColor malen optional einen Schlagschatten unter dem Seitenrechteck und einen Ein-Pixel-Rahmen darum. Die Standardwerte erhalten das vorherige flache Aussehen (PageShadowSize = 0; der Rahmen wird im Standard-clBlack gezeichnet, verschmilzt aber mit dem Standard-Weißhintergrund, bis Aufrufer die Farben ändern)
- Eine SmoothScroll-Property als Opt-in-Flag für eine künftige inkrementelle Scroll-Animation hinzugefügt; die Property macht heute Round-Trip und ist so verdrahtet, dass Anwendungen die Einstellung persistieren können, während die Renderseite weiterhin das bestehende sofortige Scrollverhalten verwendet
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 98 Fälle erweitert, die C++Builder-Suite auf 89 Fälle — mit Abdeckung von Standardwerten, Property-Round-Trip und der Klemmung negativer Schattenbreiten
Version 1.10.0
- Direktes Einfügen von Bildern durch neue Überladungen von TPdf.AddImage und TPdfView.AddImage hinzugefügt, die zusätzlich zum bestehenden TPicture-basierten AddPicture entweder einen Dateipfad oder ein TBitmap akzeptieren. AddImage(FileName) erkennt jedes Format, das bei den Grafik-Units von VCL oder LCL registriert ist (BMP, PNG über die PngImage-Unit, JPG usw.), und durchläuft dieselbe Pipeline wie AddPicture — das Verhalten ist identisch
- AddImage(TBitmap) umgeht den TPicture-Zwischenschritt und vereinfacht Aufrufer, die bereits aus Rendering- oder Batch-Generationsaufgaben über ein TBitmap verfügen
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 92 Fälle erweitert, die C++Builder-Suite auf 84 Fälle — mit Abdeckung von Bitmap-Einfügung, Page-Object-Grenzen, Ablehnung von nil-Bitmaps und BMP-Datei-Laden
Version 1.9.0
- High-Level-Unterstützung für Transformationsmatrizen über die neue Klasse TPdfMatrix in der Unit FPdfMatrix hinzugefügt. TPdfMatrix kapselt PDFiums FS_MATRIX mit einer OO-API für Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew und Multiply — geeignet zum Komponieren von Transformationen, bevor sie an FPDFPageObj_SetMatrix und ähnliche PDFium-APIs übergeben werden
- TPdfMatrix.Multiply nimmt die sechs Matrixelemente korrekt als Snapshot, bevor die neuen Zeilenwerte berechnet werden — und behebt damit ein latentes Problem, bei dem alternative Pascal-Implementierungen frühere Elemente während desselben Aufrufs überschreiben und für jede Komposition jenseits reiner Translation falsche Ergebnisse liefern
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 88 Fälle erweitert, die C++Builder-Suite auf 81 Fälle — mit Abdeckung von Identität, Reset, Translate / Scale / Flip, post-multiplikativer Kompositionsreihenfolge und dem Multiply-Regressionsfall
Version 1.8.0
- On-Demand-Stream-Laden über die neue Methode TPdf.LoadCustomDocument(AStream, AOwnsStream) und die Hilfsklasse TPdfStreamAdapter hinzugefügt, basierend auf PDFiums FPDF_LoadCustomDocument. PDFium liest nun Blöcke aus dem übergebenen TStream nur bei Bedarf, sodass sehr große oder entfernte PDFs keine vorab im Speicher gehaltene Kopie mehr benötigen
- Optionale Stream-Eigentumsübergabe hinzugefügt: bei AOwnsStream = True übernimmt TPdf den Lebenszyklus des TStream und gibt ihn beim Aufruf von UnloadDocument frei
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 79 Fälle erweitert, die C++Builder-Suite auf 75 Fälle — mit Abdeckung von Streaming-Laden via TFileStream, Cleanup eines eigenen Streams und dem Kontrakt, dass extern besessene Streams das Unload überleben
Version 1.7.0
- Kooperative asynchrone Abbruch-Primitiven in der neuen Unit FPdfAsync hinzugefügt, die IPdfCancellationToken / IPdfCancellationTokenSource sowie ein wiederverwendbares PdfNoCancellationToken-Singleton bereitstellen — damit langlaufende Rendering- und Export-Workflows saubere Cancel-from-UI-Semantik unterstützen können
- Einen leichtgewichtigen TPdfFuture<T>-Helfer hinzugefügt, der einen Worker in einem Hintergrundthread ausführt und die Hülle TPdfFutureResult<T> zurück an den Hauptthread postet, um Erfolg, Abbruch und Fehlerfälle voneinander zu unterscheiden
- Die Delphi- und Lazarus-Regressionssuites wurden auf je 76 Fälle erweitert, die C++Builder-Suite auf 73 Fälle — mit gemeinsamer Abdeckung von Abbruchzustand, idempotentem Cancel, Callback-Fan-Out und Registrierung nach erfolgtem Cancel
Version 1.6.10
- High-Level-Zugriff via TPdf.PrintPageRanges auf den Druck-Seitenbereich der PDF Viewer Preference hinzugefügt — gibt einbasierte Seitenbereiche an den Anwendungscode zurück
- TPdf.SetFormFieldFlags / SetFormFieldFlagsAt sowie passende TPdfView-Helfer hinzugefügt, damit Anwendungen AcroForm-Feld-Flags über die öffentliche API aktualisieren können — inklusive Abdeckung der Password- und Multi-Select-Flags
- PDFium-Binding-ABI-Abdeckung für die Windows-konformen FPDF_DWORD, FPDF_FILEACCESS-Callbacks und die V8 Embedder Slot-Felder gehärtet
Version 1.6.9
- Low-Level-Skia-Rendering-Bindings für die neu exportierten APIs FPDF_RenderPageSkia und FPDF_FFLDrawSkia in den mitgelieferten Standard- und V8-PDFium-DLLs hinzugefügt
- Die öffentliche Binding-Abdeckung erweitert: das Laden der Standard- und V8-DLL prüft nun zusätzlich zu den bestehenden V8/XFA-Capability-Probes auch die Skia-Render-Einstiegspunkte
Version 1.6.8
- TPdf.SetTextPositions und TPdfSingleArray hinzugefügt, um zeichenweise Positionen an bestehenden Textobjekten über die neu exportierte API FPDFText_SetPositions zu setzen
- FPDFText_SetPositions zu einem erforderlichen Binding für die aktuell mitgelieferten PDFium-DLLs erhoben, während gleichzeitig bestätigt wird, dass die Skia-Render-Einstiegspunkte weiterhin nicht verfügbar sind, da die DLLs sie nicht exportieren
- Die Regressionssuites in Delphi, C++Builder und Lazarus wurden auf je 65 Fälle erweitert — mit Abdeckung der Text-Positions-Änderung
Version 1.6.7
- High-Level-Zugriff von TPdf auf JavaScript name-tree-Aktionen auf Dokumentebene hinzugefügt — Aktionsnamen und Skripte werden über JavaScriptAction und JavaScriptActions zurückgegeben
- TPdf.FileIdentifier hinzugefügt, um die permanente und die wechselnde Trailer-ID als binäre TBytes ohne das PDFium-Terminierungsbyte zu lesen
- TPdf.PageBox, GetPageBox und SetPageBox für MediaBox, CropBox, BleedBox, TrimBox und ArtBox auf der aktuellen Seite hinzugefügt
- Bestätigt, dass die aktuell mitgelieferten PDFium-DLLs zur Laufzeit nur die Skia-Render-Einstiegspunkte nicht zur Verfügung stellen, da diese Exporte nicht vorhanden sind
- Die Regressionssuites in Delphi, C++Builder und Lazarus wurden auf je 64 Fälle erweitert — mit Abdeckung von Dokument-JavaScript, Trailer-ID und Page-Box
Version 1.6.6
- Laufzeit-Unterstützung für die mitgelieferte V8-fähige PDFium-DLL hinzugefügt. Setzt man EnableV8Engine vor dem Laden, wählt der Loader pdfium.v8.dll aus dem Baum DLLs\Win32 oder DLLs\Win64 und gibt die V8/XFA-spezifischen Bindings frei, sofern die geladene DLL diese bereitstellt
- V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags sowie Low-Level-Optional-Bindings für FPDF_BStr_*, FPDF_GetRecommendedV8Flags und FPDF_GetArrayBufferAllocatorSharedInstance hinzugefügt
- FPDFText_SetPositions als optionales Binding klassifiziert, damit PDFium Delphi Component auch mit PDFium-DLLs lädt, die diesen experimentellen Text-Positions-Setter nicht exportieren
- Die Regressionssuites in Delphi, C++Builder und Lazarus wurden auf je 61 Fälle erweitert — mit Abdeckung der Capability-Probes für Standard-DLL und V8-DLL