HotPDF Versionshinweise

Versionshistorie der HotPDF-Funktionen, Fehlerbehebungen, Kompatibilitätsupdates und Dokumentationsänderungen für Anwender

Hinweis: Es werden nur die neuesten 800 Änderungseinträge aufbewahrt

Last release

  • Aktuelle Version: 2.974.0; Veröffentlichungsdatum: 2026-10-11

Version 2.974.0

Added

  • Seitenannotationen über exakte Seite und Unicode-Namen entfernen, einschließlich Popup- und Antwortkaskaden, durch begrenzte native APIs, Windows-Transaktionen, JSON-Jobs und versionierte Callbacks mit authentifizierten Berechtigungen und Veröffentlichungs-Rollback

Version 2.973.0

Added

  • Binäre FDF-Annotationen mit bewahrten Appearance-Ressourcen, geteilten Objektgraphen und lokalen Action-Zielen über native APIs, Windows-Austausch und versionierte Callbacks austauschen

Version 2.972.0

Added

  • Annotation-Default-Appearances mit bewahrtem Textzustand, automatischem Fitting, Rich-Text-Spacing und Text-Clipping rendern, einschließlich Rendering-Modi 4 bis 7

Version 2.971.1

Fixed

  • Range-Check-Fehler im öffentlichen Shaped-Run-Cache auf FPC-3.3.1-Windows-Builds verhindern, indem explizite 32-Bit-modulare Hash-Multiplikation, exakte Cache-Key-Isolation und LRU-Eviction erhalten bleiben

Version 2.971.0

Added

  • Root-:scope matchen und statische Hover-, Active- und Focus-Pseudoklassen mit inaktivem Interaktionszustand zulassen, unter Bewahrung von Negation, logischen und relativen Selektoren, Support-Queries und gespeicherten FDF/XFDF-Appearances

Version 2.970.0

Added

  • Native Rich-Text-@supports-Gruppen und supports()-Importe mit unterstützten Deklarations- und Selektor-Queries auswerten, mit begrenzten verschachtelten Bedingungen, namespace-bewussten Sonden, Abbruch-Recovery und berechneten gespeicherten FDF/XFDF-Appearances

Version 2.969.0

Added

  • Endliche calc-, min-, max- und clamp-Ausdrücke, root-relative und explizite Viewport-Längen sowie finale Font-Zeilen- und Spacing-Metriken in nativer Rich-Text-Dekodierung, gespeicherten Feld-Appearances und Rich-FDF/XFDF-Importen auswerten

Fixed

  • Genaue minimale Medienabmessungen, Auflösung und initiale Fontgrößen konsistent über Compiler-Ziele hinweg zulassen und weiterhin Werte unter der unterstützten Untergrenze zurückweisen

Version 2.968.0

Added

  • Explizite Rich-Text-Farbschema-, Reduced-Motion-, Transparenz- und Daten-Präferenzen, Kontrast, erzwungene und invertierte Farben sowie Skriptverfügbarkeit auswerten, unter Bewahrung unbekannter weggelassener Präferenzen und berechneter gespeicherter Appearances

Version 2.967.0

Added

  • Vom Aufrufer gelieferte verlinkte und importierte Rich-Text-Stylesheets mit geteilten Preferred- oder Alternate-Titelmengen anwenden, mit begrenzter URI- und Dokumentbasis-Auflösung sowie transaktionaler nativer, Windows- und Linux-FDF/XFDF-Veröffentlichung

Version 2.966.0

Added

  • Native Rich-Text-Media-Queries mit expliziten Print/Screen-Profilen, verschachtelten Bedingungen und begrenzten Feature-Bereichen auswerten, wobei berechnete Styles in gespeicherten Appearances und transaktionalen FDF/XFDF-Importen erhalten bleiben

Version 2.965.0

Added

  • Native XFA-Formbäume transaktional erstellen, klonen und bearbeiten, unter Bewahrung überlebender Knotenidentitäten, Event-Rollback, unterstützter Empty-Merge-Vorkommen und gespeicherter Form-Packets, unabhängig von den erstellten Templates

Version 2.964.0

Added

  • Native Plain-, Rich-, Shaped- und Family-Appearances aus vollständigen OpenType-CFF2-Fonts bei Default-Variationskoordinaten erzeugen, unter Bewahrung von Glyphenidentität, Unicode, Breiten und Einbettungsberechtigungen in begrenzter statischer CID-keyed CFF-1-Ausgabe

Version 2.963.0

Added

  • CSS-Namespace-Deklarationen mit Geltungsbereich und qualifizierte Selektoren auf native Rich-Text-Felder und Windows-/Linux-Formtransaktionen anwenden, unter Bewahrung berechneter Appearances, begrenzter Namespace-Auflösung, exakter No-Op-Veröffentlichung und Checked-Build-Kompatibilität

Version 2.962.0

Added

  • Generierten Raw-Font-Annotationstext an Leerzeichen- und Bindestrichgrenzen über Style-Runs hinweg umbrechen, unter Bewahrung vollständiger kodierter Zeichen, harter Umbrüche, automatischer Größenbestimmung und begrenzten Abbruchs

Version 2.961.0

Added

  • Fehlende Annotation-Text-Appearances mit originalen Type1C-, CIDFontType0C- und reinen Type1-Fontprogrammen rendern, unter Bewahrung von Unicode-Mappings, automatischer Größenbestimmung, Spacing, Zeilenhöhe und begrenzten unveränderlichen Ressourcen

Version 2.960.0

Added

  • Standard-XFDF-Stamp-Normal-, Rollover- und Down-Form-Appearances mit eingebetteten Font- und Bildressourcen transportieren, mit begrenzten azyklischen Graphen, authentifizierten nativen Transaktionen und vorhandenen Windows-/Linux-Callbacks

Version 2.959.0

Added

  • Komplexe :not()-Listen, tolerante :is()- und :where()-Listen, verankerte :has()-Relationen und gefilterte :nth-child-Positionen auf native interne Rich-Text-Stylesheets anwenden, unter Bewahrung von Selektorspezifität, berechneten Werten, Fonts und transaktionalen FDF/XFDF-Appearances

Version 2.958.0

Added

  • Live native Data-DOM-Kindcollections über schreibgeschützte numerische Indizes in JavaScript und FormCalc ansprechen, unter Bewahrung der aktuellen Kindreihenfolge, beibehaltener Script-Objektreferenzen, unabhängiger Klone, gespeicherter Werte und PDF-Appearances

Fixed

  • Numerische Zuweisung, Löschung und Eigenschaftsdefinition sowohl auf aktuellen Collections als auch in beibehaltenen lexikalischen Skriptobjekten zurückweisen, mit begrenztem Event-Rollback und Retry

Version 2.957.0

Added

  • Attributselektoren, Sibling-Kombinatoren, strukturelle und positionale Pseudoklassen, geerbtes Sprachmatching und zusammengesetzte Negation auf native interne Rich-Text-Stylesheets anwenden, unter Bewahrung tatsächlicher berechneter Werte, Fonts, gespeicherter Appearances und transaktionaler FDF/XFDF-Importe

Version 2.956.1

Fixed

  • FormCalc-nodes-Kindlisten-Pfade über den tatsächlichen Event-Compiler auflösen, unter Bewahrung live Formular-/Eigenschafts-Collections, Data-DOM-Item-Zugriff, begrenztem Replay, gespeicherter nativer Werte und PDF-Appearances

Version 2.956.0

Added

  • Native Plain-, Rich- und Shaped-Feld-Appearances aus vollständigen OpenType-CFF-Fonts erzeugen, unter Bewahrung namensschlüsselter Glyphenidentitäten, tatsächlicher CID-keyed Charsets, Unicode-Mappings, Einbettungsberechtigungen und geteilter Font-Ressourcen; fehlende FreeText-Appearances mit eingebetteten OpenType-Defaults rendern

Fixed

  • CFF-Parsing und Glyphenmetriken begrenzen, Abbruch und unveränderliche Reader pro Style beibehalten und TrueType-Verhalten über sechs native Compiler-Ziele hinweg bewahren

Version 2.955.1

Security

  • X25519- und X448-Shared Secrets, die ausschließlich aus Nullen bestehen, nach kanonischer Byte-Serialisierung zurückweisen, einschließlich Low-Order-Eingaben mit nichtnullen schwachen Feld-Limbs, und das Agreement-Ergebnis bei leerem Secret mit einer frischen Diagnose auf false halten

Fixed

  • Portable SHA3/SHAKE-Konstanten und bewusste Modulo-2^64-Schlüsselvereinbarungsarithmetik bewahren, wenn Integer-Überlauf- und Range-Checks aktiviert sind, einschließlich Full-Width-P-256-, P-384- und P-521-Austauschen auf 32-Bit-Free Pascal

Version 2.955.0

Added

  • Live JavaScript-Formular-/Eigenschafts-Kindcollections mit length, indizierten Leseaktionen, item, namedItem, Iteration und unabhängigen Klonen hinzufügen; Besitzeridentität über Events, wiederholte Instanzänderungen und implizite Eigenschaftserstellung hinweg bewahren, mit gespeicherten nativen Werten und PDF-Appearances

Fixed

  • Beibehaltene Live-Listen an ihren aktuellen Event-Besitzer gebunden halten, entfernte Besitzer ohne Umleitung auf eine andere Instanz zurückweisen und native Werte, beibehaltenen Zustand und Journal-Rollback bei Collection-Allokations-, Operations- und Deadline-Fehlern bewahren

Version 2.954.0

Added

  • Interne XHTML-Stylesheets mit Typ-, Klassen- und ID-Selektoren, Nachfahren- und Kindkombinatoren, gruppierten Selektoren, Unicode-Bezeichner-Escapes, Spezifität, Importance und Quellreihenfolge auf native Rich-Text-Felder und FDF/XFDF-Importe anwenden

Fixed

  • Berechnete Styles in tatsächlichen gespeicherten Werten und Widget-Appearances bewahren, mit begrenztem Scanning und Matching, Abbruch, exakten committeten No-Op-Bytes und transaktionalem Callback-Rollback

Version 2.953.0

Added

  • Unabhängige XFA-Query-Knotencollections mit all-, classAll-, classIndex-, Clone- und Membership-Operationen hinzufügen, mit stabilen beibehaltenen Referenzen, begrenztem transaktionalem Replay und nativer saved-PDF-Verarbeitung

Fixed

  • Beibehaltene abgefragte Instanzmanager an den aktuellen Event-Graphen gebunden halten und gewöhnliche SOM-Pfade und Prädikate innerhalb der ursprünglichen Default-Stack- und Operationsgrenzen auswerten

Version 2.952.0

Added

  • Remote-GoToR-Annotation-Ziele über nativen, gewöhnlichen Windows- und versionierten Callback-XFDF-Austausch bewahren, einschließlich exakter Koordinaten, Unicode-Dateispezifikationen und optionalem Fensterverhalten

Fixed

  • Gewöhnliche Annotation-Importe geladener Dokumente gegen originale Verschlüsselungsberechtigungen, Signaturen und Feldsperren authentifizieren, während erlaubte Aufruferänderungen und unabhängige Quell-Lebensdauer bewahrt bleiben; Signatur-ByteRange-Integer ohne Single-Rundung lesen und geteilten RC4-Stringspeicher vor der Verschlüsselung abtrennen

Version 2.951.0

Added

  • Begrenzte Cloudy-Rahmen für Square-, Circle-, Polygon- und FreeText-Annotationen ohne normale Appearances rendern, unter Bewahrung von Breite, Dash, Opazität und Quellgraphen; unveränderliche generierte Font-Bytes über FreeText-Ansichten hinweg teilen, ohne wiederholte dekodierte-Byte-Verrechnung, während Parsing-Budgets und Abbruch erhalten bleiben

Version 2.950.0

Added

  • Native XFA-Data-DOM-Knoten mit begrenzter Eigentümerschaft, geerbten Namespaces, stabilen importierten Referenzen, Binding-Auffrischung und vollständigem Event-Rollback erstellen, klonen, umbenennen, einfügen und entfernen; UTF-8-Attribute und beibehaltene FormCalc-Referenzen durch gespeichertes XML und native PDF-Verbraucher bewahren

Version 2.949.0

Added

  • Den Unterschied zwischen keinen gewählten Auswahl-Optionen und einem gewählten leeren Exportwert über nativen, Windows- und Linux-XFDF-Austausch bewahren, mit exakter No-Op-Veröffentlichung, begrenzter Validierung und geprüftem verschlüsseltem Dokumentladen

Version 2.948.0

Fixed

  • Gefüllte Glyphenmasken mit erfasster fraktionaler Clip-Abdeckung rendern, während PDF-Pfade, Patterns, Alpha und Blend-Operatoren bewahrt werden, und die Raster-Arbeitsspeicherkapazität vor der Allokation prüfen

Version 2.947.1

Fixed

  • Explizite leere Default-XML-Namespace-Deklarationen während XFA-Parsing und -Serialisierung bewahren, sodass nicht qualifizierte Datenunterbäume nach Speichern und Neuladen keinen Vorfahren-Namespace erben

Version 2.947.0

Added

  • Abgeflachte und vertiefte rechteckige Annotation-Rahmen sowie gemessene Unicode- oder Rich-Line-Captions rendern, unter Bewahrung von Opazität, Endpunkt-Offsets, vorhandenen Appearances, begrenzten Font-Ressourcen und Annotation-Clipping

Version 2.946.3

Fixed

  • xfa.host.resetData über native Events anwenden, ohne es als Data-XML-Import zu missdeuten, unter Bewahrung von Template-Defaults, gebundenen Werten, wiederholten Scopes, ausstehenden Änderungen und transaktionalem Rollback

Version 2.946.2

Fixed

  • SHA-1-, SHA-256-, SHA-384- und SHA-512-Wortarithmetik mit aktivierten Compiler-Range- und Überlaufprüfungen korrigieren, unter Bewahrung gültiger Digests und AES-256-Passwortauthentifizierung ohne Änderung öffentlicher Schnittstellen

Version 2.946.1

Fixed

  • Vorhanden-leere XFA-Attribute sowie UTF-8-Namen, Werte, Namespaces und indizierte Queries durch native XML-Serialisierung, persistente Eigenschaftsdefaults, wiederholte Skriptevents und transaktionalen Rollback bewahren

Version 2.946.0

Added

  • Temporären Rich-Annotation-Text mit expliziten schreibgeschützten Preview/Print-Font-Berechtigungen und unveränderten Full-Font-Bytes rendern, unter Bewahrung editierbarer Einbettungs-Policies und vorhandener Screen-Appearances ohne implizite Medienplatzhalter

Version 2.945.0

Added

  • Lokale Annotation-Seiten- und benannte Ziele über nativen und Legacy-XFDF-Austausch bewahren, mit exakten begrenzten Dezimal-Tokens, qualifiziertem Adobe-XML, Duplikatattribut-Validierung und transaktionaler Windows-/Linux-Callback-Veröffentlichung

Version 2.944.0

Added

  • Live XFA-Choice-Anzeige- und Exportitems über JavaScript und FormCalc verwalten, unter Bewahrung überlebender Aliase, exakter Duplikat- oder Leer-Auswahlen, nativer Instanzlisten und gespeicherter nativer oder Legacy-PDF-Appearances bei begrenzten Mutationsgrenzen

Version 2.943.1

Fixed

  • Exakte geladene PDF-Bytes bewahren, wenn native gemischte Skalar- und typisierte Rich-Text-Transaktionen oder leere Batches keine Änderungen vornehmen, unter Beibehaltung ausstehender Graphänderungen, authentifizierter Signatur- und Verschlüsselungs-Policies, Ressourcengrenzen und atomarer Veröffentlichung

Version 2.943.0

Added

  • Gemappte Annotation-XFDF über Windows-Dateijobs und originale V1-Callbacks austauschen, mit authentifizierten Append-Transaktionen, begrenzten Binär- und Unicode-Daten, exakten No-Op-Bytes und atomarer Veröffentlichung

Version 2.942.0

Added

  • Unterstützte Annotationen ohne normale Appearances durch begrenzte temporäre Geometrie, Line Endings, Icons und Unicode-FreeText rendern, unter Beibehaltung von Quellressourcen, Rich-Text, View/Print-Flags und Abbruch

Version 2.941.1

Fixed

  • Native XFA-Choice-Auswahl-Eindeutigkeit mit begrenzter abbrechbarer Sortierung validieren, unter Bewahrung exakter case-sensitiver Exportwerte, ursprünglicher Auswahlreihenfolge und transaktionalen Fehlerverhaltens

Version 2.941.0

Added

  • Unabhängig kaskadiertes natives CSS und originale getippte Zeichen- und Wortabstände auf Shaped Runs, physische Zeilen, Fitting und gespeicherte Appearances anwenden, mit berechneter Punkt-Serialisierung, exakter Dezimalrundung und transaktionaler Windows-/Linux-JSON-Veröffentlichung

Version 2.940.0

Added

  • Achtzehn gemappte Annotationstypen über begrenzte native XFDF- und Linux-V1-JSON-Operationen austauschen, unter Bewahrung von Unicode-Rich-Inhalten, Callouts, transparenten Farben, binären Anhängen, Popup- und Weiterleitungs-Antwortlinks, authentifizierten Berechtigungen und transaktionaler Append-Veröffentlichung

Version 2.939.0

Added

  • Legacy-XFA-Combo- und Listenfelder mit exakten wiederholten Instanzexporten, Anzeigebezeichnungen, gewählten Indizes, Scrollpositionen und gestylten Unicode-Appearances erstellen, unter Bewahrung hoher Feld-Flags und Rollback pro Feld mit einer Supplied-Font-detached Choice-Factory und einem Metadata-Only-Modus

Version 2.938.0

Added

  • Die vier Standard-Farbintents über Graphics States, Forms, Bilder, Shadings, Patterns und Transparenzgruppen rendern, mit Bild-Overrides, relativem Fallback für unbekannte Namen und begrenztem abbrechbarem ICC-Transform-Caching

Version 2.937.0

Added

  • Unabhängige Legacy-XFA-Radiogruppen aus tatsächlichen wiederholten Instanz-Scopes erstellen, unter Bewahrung exakter Exporte, gewählter Zustände und gestylter Unicode-Captions mit Gruppen-Adoptions-Rollback und einer detached Supplied-Font-nativen Member-Appearance-API

Version 2.936.1

Added

  • Gültige PDF-Dictionarys und Trailer parsen, wenn arithmetische Überlaufprüfung aktiviert ist, indem die niedrigen 32 Bits der FNV-Hash-Multiplikation explizit behalten werden

Version 2.936.0

Added

  • Explizite typisierte JSON-Rich-Text-Zeilenhöhen an Windows- und Linux-gespeicherte Appearances binden, unter Bewahrung authored Runs, gelieferter Eltern-Metriken, begrenzter aggregierter Planung und transaktionaler Mixed-Field-Updates

Version 2.935.1

Added

  • Ergänzende Unicode-Zeichen zählen in portablen XFA-Passwort-Appearances genau einmal, Originalwerte bleiben erhalten, und aggregierte Glyph-Budgets werden durchgesetzt, bevor Masken mit skalargranularem Abbruch zugewiesen werden

Version 2.935.0

Added

  • Rich-Text-Zeilenhöhe, berechnete CSS-Längen, geerbte Faktoren und Font-Metriken des Elternelements bleiben über natives Layout, gespeicherte Appearances, Windows-Dateijobs und Callbacks sowie Linux-FDF/XFDF-JSON-Importe hinweg erhalten, mit begrenzter Metrik-Font-Planung

Version 2.934.0

Added

  • Echte Unicode-Legacy-XFA-Appearances für Text-, Zahlen-, Datums- und Passwortfelder entstehen mit wirksamer Font-Family und -Stil pro Instanz, editierbaren eingebetteten Font-Ressourcen, skalarer Passwortmaskierung und transaktionaler Ressourcenübernahme

Version 2.933.0

Added

  • Mehrdimensionale abgetastete kubische Farbfunktionen werden mit der bestehenden Vier-Knoten-Skalar-Konvention ausgewertet, mit linearem Fallback in der kurzen Dimension, begrenzter Tensor-Arbeit, Abbruch und unveränderter skalarer Interpolation

Version 2.932.0

Added

  • Signierte und unsignierte JPEG-2000-Komponenten werden bis 26 Bit mit gemischter Präzision, Subsampling und Opazität dekodiert, begrenzte Samples werden normalisiert und JPX-Bild-Deklarationen von BitsPerComponent werden vor dem Rendering ignoriert

Version 2.931.0

Added

  • Legacy-XFA-Checkbox-Exportzustände für An, Aus und Neutral bleiben erhalten, ebenso gestylte Unicode-Beschriftungen und native Appearance-Bundles; spezielle PDF-Namen werden konsistent kodiert und direkte Seitenressourcen nach abgebrochener Widget-Übernahme wiederhergestellt

Version 2.930.0

Added

  • Automatische Optional-Content-Usage-Anwendungen werden mit explizitem Zoom-, Sprach- und Benutzerkontext, persistenten nativen manuellen Auswahlen und begrenztem Linux-JSON-Operationszustand ausgewertet; ausgeliehene Rendering-Kontexte werden nach Dokumentänderungen für ungültig erklärt

Version 2.929.0

Added

  • Skalarer Text, Comb-Zellen, Choice-Labels und Button-Markierungen entstehen aus geordneten mitgelieferten regulären Font-Families, über native Setter, Windows-Jobs und versionierte Windows/Linux-Callbacks hinweg; gewöhnliche Skalar-Metadaten bleiben erhalten, und eine leere Choice-Auswahl lässt sich von einem ausgewählten leeren Export unterscheiden

Version 2.928.0

Added

  • ExtGState-Dash-Arrays und -Phasen werden mit begrenztem typisierten PDF-Array-Scanning gerendert, wobei Kommentare, strenge Operandenvalidierung, geerbte Strichgeometrie, Abbruch und gewöhnliche Text-Arrays erhalten bleiben

Version 2.927.0

Added

  • Originale Windows-Push-Buttons aus ApplyXFAAsAcroForm bekommen skalare und Rich-Beschriftungen mit den tatsächlich installierten Family-/Style-Programmen gemalt, mit persistenten Overrides pro Instanz und nativen Normal/Down/Rollover-Appearance-Bundles, dabei werden echte AcroForm-Font-Ressourcen registriert

Version 2.926.0

Added

  • Begrenzte Inline-CSS-Font-Shorthands werden in unabhängig kaskadierte Kandidaten für Größe, Gewicht, Kursiv und mitgelieferte Family aufgegliedert, wobei geerbte relative Größen, Reset bei ausgelassenem Stil, Important-Komponenten-Prioritäten und tatsächliche gespeicherte Font-Appearances erhalten bleiben

Version 2.925.0

Added

  • Geordnete, vom Aufrufer gelieferte Font-Families werden für vollständige gestylte Rich-Text-Grapheme über Windows-Dateijobs und V1-Callbacks ausgewählt, wobei CSS- und typisierte Kandidaten, echte Leerwert-Transaktionen und aggregierte Font-Budgets erhalten bleiben

Version 2.924.0

Added

  • Standard-Optional-Content-Gruppen und Membership-Ausdrücke des Dokuments werden über markierten Seiteninhalt, Form-XObjects und Annotationen hinweg gerendert, versteckter Grafik- und Textzustand bleibt erhalten, und explizite View- oder Print-Usage wird über das native Linux-V1-JSON-Interface offengelegt

Version 2.923.0

Added

  • Geordnete Rich-Text-Font-Kandidatenlisten bleiben über native Appearances und Linux-V1-JSON erhalten, und gemischte skalare sowie originale typisierte Runs werden mit präziser Ausgabe, mitgelieferten Style-Programmen und zweiphasiger Veröffentlichung an Windows-Dateijobs und unveränderte V1-Callbacks gebunden

Version 2.922.0

Added

  • Native Annotation-Sichtbarkeit für View oder Print wird nach den PDF-2.0-Invisible-Regeln gewählt, statische Appearances von RichMedia und Projection sowie implizite Text-Transformationen werden erkannt, und die begrenzte, abbrechbare atomare Windows-PNG-Ersetzung bleibt mit echten OS-Fehlerdiagnosen erhalten

Version 2.921.0

Added

  • Native XFA-Push-Buttons bekommen skalare und XHTML-Beschriftungen mit den wirklich mitgelieferten Family- und Style-Programmen gerendert, mit erhaltenen Inline-Trennern und gesetztem Padding, echten Normal/Down/Rollover-Appearances, Beschriftungs-Sichtbarkeit und persistenten Overrides bei Wiederholungsinstanzen

Version 2.920.1

Fixed

  • Erfolgreiche native PDF-Änderungen über die Linux-C-ABI bleiben mit ihrem committed Quell-Snapshot abgeglichen, sodass nachfolgende FDF- oder XFDF-Importe mit gleichen Werten die exakt veröffentlichten Formularwerte, typisierten Appearances, gezeichneten Texte und importierten Seiten bewahren, statt veraltete Eingabe-Bytes wiederherzustellen

Version 2.920.0

Added

  • Gemischte Skalarfelder und originale typisierte Rich-Text-Runs werden in einer unabhängigen atomaren Dokumenttransaktion gespeichert, präzise Appearance-Werte und mitgelieferte Font-Programme bleiben erhalten, authentifizierte Policies und aktuelle Graph-Bearbeitungen werden bewahrt, und echte Read-only-Appearance-No-Ops werden erkannt

Version 2.919.0

Added

  • Vollständige gestylte Unicode-Grapheme werden über explizit gelieferte Kandidaten-Font-Families aufgelöst, gesetzte Werte und präzise Appearance-Stile bleiben erhalten, der opt-in-fähige native Linux-JSON-Fallback wird über unveränderte V1-Callbacks offengelegt, und das tatsächliche aggregierte Font-Kontingent bleibt beim Laden konfigurierter Programme erhalten

Version 2.918.0

Added

  • Native XFA-Boolean-Beschriftungen werden aus wirksamem XHTML und mitgelieferten benannten Style-Fonts gerendert, Wiederholungsinstanz-Overlays und gespeichertes Runtime-XML bleiben erhalten, und automatische Beschriftungsreserven werden mit den finalen logischen Textzeilen-Ausmaßen gemessen

Version 2.917.0

Added

  • Echte benannte Family- und Style-Programme werden für Windows-FDF- und XFDF-Importe über verschachtelte Dateipfade oder vorhandene versionierte Font-Callbacks gewählt, und synchronisierte Random-Source-Lesevorgänge werden von der sequenziellen Transaktionsveröffentlichung isoliert

Version 2.916.0

Added

  • 182 eingebaute Legacy-CMaps werden mit begrenzten Ein-bis-Vier-Byte-Codes dekodiert und gerendert, mit exakten Writing-Modes für Eltern und Kinder, Unicode-Zuordnungen, deterministischer Wiederherstellung bei fehlerhaften Codes, abbrechbarer Vererbung und mitgelieferten Redistribution-Hinweisen

Version 2.915.0

Added

  • Ausgewählte native XFA-Listenoptionen bleiben über Font-Metrik-Auswahlfenster und persistierte Top-Indizes sichtbar, vollständige Options- und Wert-Arrays bleiben erhalten, und Font-Änderungen bei Wiederholungsinstanzen samt Event-Rollback bleiben mit begrenzter sichtbarer Glyph-Vorbereitung erhalten

Version 2.914.1

Fixed

  • Memory-Cache-Treffer im Vordergrund überlappen mit kooperativem Prefetch-Abbruch, nachdem die echte Speicherreservierung erworben wurde; die Operation-Cache-Telemetrie bleibt erhalten, und der Abbruch wird nach Warten auf Cache-Sperre oder Reservierung erneut geprüft, während strenge Miss-Ordnung und Thread-Joins erhalten bleiben

Version 2.914.0

Added

  • Native XFA-Boolean-Appearances entstehen mit sechs eigenen Markierungen, runden oder quadratischen Rahmen, Markierungs-Farben und -Größen, fünf Beschriftungsplatzierungen und gemeinsam eingebetteten Beschriftungs-Fonts; reversible Unicode-Export-Aliase und unterscheidbare zulässige Neutralzustände bleiben über Event-Ausführung und Neuladen des gespeicherten PDFs erhalten

Version 2.913.2

Fixed

  • Vollständige gedrehte Matrix-Barcodes werden vor getrennten Fragmenten dekodiert und exakte QR-Finder-Abweichungen werden vor dem Abtasten des vollen Gitters zurückgewiesen, mit strafferer Gruppierung, originalem Linearbalken-Verhalten, atomaren Scan-Budgets und unveränderter Zwei-Sekunden-Frist

Version 2.913.1

Added

  • Vorhandene implizite XFA-Werte werden über begrenzte Live-Datenkontexte aufgelöst, ohne Selector-Parsing zu wiederholen, das vom Script-Operationskontingent abgebucht wird; ursprüngliche Transaktionsfristen und explizites Binding-Verhalten bleiben erhalten

Version 2.913.0

Added

  • Konfigurierte native Rich-Font-Families werden über unveränderte Linux-V1-JSON-Callbacks für typisierte Füllungen und FDF- oder XFDF-Importe gewählt, tatsächlich benötigte Family- und Style-Programme werden mit Aggregat-Budgets geladen, und beide implementierten Rich-Profile werden ausgewiesen

Version 2.912.0

Added

  • Echte FDF- oder XFDF-Daten werden über Windows-Dateijobs und V1-Callbacks importiert und exportiert, mit unveränderlichem eigenem Input, Aufbereitung des aktuellen ungespeicherten Graphen, echten Vier-Font-Rich-Appearances, authentifizierten signierten AES-Policies und Context-Commit erst nach dem Erfolg beider Output-Callbacks

Version 2.911.0

Added

  • Native XFA-Rechtecke, Linien- und Bogen-Zeichnungen sowie Inline-PNG- oder JPEG-Bilder entstehen mit echter Sample-Dekodierung, Alphamasken, angepasstem Seitenverhältnis und gedrehter Platzierung, begrenzter Vorbereitung und transaktionaler Ownership unter Abbruch

Version 2.910.0

Added

  • NoZoom- und NoRotate-Annotation-Appearances werden um den transformierten Anker der oberen linken Rechteckecke gelegt, wobei UserUnit, angepasste Formulargeometrie, Opazität und der echte Seitenclip über Skalierung und Drehung erhalten bleiben

Version 2.909.0

Added

  • Tatsächlich mitgelieferte benannte TrueType-Families werden pro Rich-Run und begrenzter XHTML-font-family-Deklaration gewählt, Style-Metriken und Markierungs-Caches pro Family bleiben erhalten, und echte FDF- oder XFDF-Rich-Werte werden mit family-bewusstem kanonischem Vergleich importiert

Version 2.908.1

Fixed

  • Gültige Inline-Rich-Text-Deklarationen werden mit unabhängiger Important-Priorität, umgebenden berechneten font-size-Basen und expliziten geerbten Eigenschaften angewendet, wobei Grenzen von CSS-Kommentaren sowie quoted/function-Deklarationen erhalten bleiben

Version 2.908.0

Added

  • Echte native XFA-Comboboxen, Listenfelder, Mehrfachauswahlfelder, Checkboxen und strukturell geltende Radiogruppen entstehen direkt aus gespeicherten Runtime-Daten, mit gepaarten Display-/Export-Labels, Items pro Instanz, Zugriffs-Flags und unabhängigen nativen Appearance-Zuständen

Version 2.907.1

Fixed

  • Echte PDF-Hex-Escapes und UTF-8-Bytes werden in namenswertigen und geerbten Formularfeldern dekodiert, wobei Exportzustände von Buttons mit Leerzeichen, Zeichensetzung und Unicode über das native Neuladen gespeicherter Dokumente erhalten bleiben

Version 2.907.0

Added

  • Echte CID-keyed-CFF-Glyph-Identitäten und begrenzte notdef-Substitutionen werden über tatsächliche CID-to-GID-Font-Mappings gerendert, wobei unabhängige Textextraktion und Abbruchprüfungen durch das Parsing von escaped CMaps erhalten bleiben

Version 2.906.0

Added

  • Stilübergreifende Combining-Marks werden mit den tatsächlich gewählten Glyph-Grenzen und kanonischen Combining-Klassen positioniert, wenn Attachment-Anker fehlen, mit unabhängigen Font-Skalen, Same-Side-Stacking und tatsächlich aufgelösten Item-Richtungen für Doppelmarkierungen

Version 2.905.1

Fixed

  • Escaped Predictor-Parameter werden innerhalb des echten DecodeParms-Wörterbuchs aufgelöst und das echte Stream-Token wird nach ausgewogener äußerer Wörterbuch-Syntax lokalisiert, wobei binäre xref-Payloads mit Whitespace-Wert im normalen Windows-Laden erhalten bleiben

Version 2.905.0

Added

  • Native PDF-Seitenbäume, wiederholte editierbare Felder, Push-Buttons und statischer Unicode-Text entstehen direkt aus XDP und gespeicherten Runtime-Werten auf Linux und Windows, mit echten eingebetteten Appearances und begrenzter Kandidatenvorbereitung vor der Ausgabe an den Aufrufer

Version 2.904.2

Fixed

  • Echte äußere Cross-Reference-Stream-Wörterbücher werden gelesen, ohne verschachtelte Verschlüsselungseinstellungen zu verwechseln, escaped Eintragsnamen werden aufgelöst und direkte Encryption-Wörterbücher bleiben in normalen Windows-Inkrementalrevisionen erhalten

Version 2.904.1

Fixed

  • Vollständige Absatzrichtungs-Steuerzeichen und gepaarte Klammern bleiben durch automatisches eigenständiges Shaping und einfaches mehrzeiliges Feld-Umbruchverhalten erhalten, mit Joining-Kontexten pro physischer Zeile, unveränderlichem Absatz-Caching und begrenzter Gesamt-Glyph-Ausgabe

Version 2.904.0

Added

  • Die native XFA-Runtime für JavaScript, Event-Journal, Data DOM, XML, FormCalc und ICU-Locales läuft auf Linux mit eigenen Shared-Module-Leases und echten monotonen Uhren, während die bestehende Windows-Unicode-Initialisierung erhalten bleibt

Version 2.903.1

Fixed

  • Unicode-Shaping-Cluster, die nur aus Richtungssteuerung bestehen, behalten den Zeichenspacing-Vorschub null, während logische Steuerzeichen, Glyph-Identitäten und normale sichtbare Cluster- und Wortabstände erhalten bleiben

Version 2.903.0

Added

  • Richtungseinbettungen, Overrides, Isolates und paarige Klammer-Absatzkontexte bleiben über umbrochene Rich-Style-Zeilen erhalten, begrenzte aus Absätzen abgeleitete und zwischengespeicherte Physisch-Zeilen-Ordnungs-APIs werden offengelegt, und tatsächliche Zeilen-Items werden mit aufgelösten Levels und Skripten geshaped

Version 2.902.0

Added

  • Gestylte FDF- und XFDF-Daten werden über echte Linux-JSON-C-ABI-Callbacks importiert und exportiert, konfigurierte echte Font-Faces werden eingebettet, Signatur-Policies und exakte private Quellbytes bleiben bei No-Op-Importen erhalten, und der aktuelle Dokumentzustand wird erst veröffentlicht, wenn beide Callback-Outputs erfolgreich sind

Version 2.901.0

Added

  • Coons- und Tensor-Patch-Mesh-Shadings werden mit begrenzter kubischer Geometrie, Farbinterpolation im Quellraum, Fortsetzungskanten, Falten-Behandlung und transaktionalen Ressourcen- und Abbruchgrenzen gerendert

Version 2.900.0

Added

  • Namespace-bewusstes natives XFA-Data-DOM-XML wird transaktional geladen und gespeichert, geordnete Mixed-Content-Inhalte und Data-Binding-Identitäten bleiben erhalten, Host-Werte werden in linearer Zeit in Anführungszeichen gesetzt, und ein exaktes JavaScript-Modul-Lease pro Session bleibt durch begrenztes Engine-Replay erhalten

Version 2.899.0

Added

  • Gestylte Combining-Marks werden an echte GPOS-Basis-, Ligatur- und Mark-Anker gehängt, mit unabhängigen Font-Skalen; Glyph-Outlines mit negativem Ursprung bleiben innerhalb reicher Widget-Clips erhalten, und passende Zeilenausmaße werden für sichtbar gestapelte Marks reserviert

Version 2.898.0

Added

  • Begrenzter FDF- und XFDF-Rich-Text wird gelesen und geschrieben, native XHTML-Style-Spans werden in vier echte eingebettete Font-Stile dekodiert, und echte Appearances werden transaktional in signierte oder verschlüsselte PDFs importiert, einschließlich kanonischem Vergleich vorhandener Read-only-Rich-Werte

Version 2.897.0

Added

  • Ausgewählte Unicode-Style-Spans werden mit echtem umgebendem HarfBuzz-Kontext geshaped, native Paragraphen-Ordnungs- und Richtungs-APIs werden offengelegt, und typisierte Rich-Items werden in tatsächlich umbrochenen physischen Zeilen platziert, während logische Stile und Object-Ownership erhalten bleiben

Version 2.896.0

Added

  • Native XFA-Binding-SOM-Ausdrücke werden über wiederholte Daten-Scopes aufgelöst, mit begrenzter Nachfahren-Traversierung, escaped Namen, Unicode-Matching, Fehlblatt-Fallbacks pro Instanz und transaktionaler Runtime-Wertsynchronisierung

Version 2.895.1

Fixed

  • Statische native XFA-Event-Unterstützung wird einmal pro eigenem JavaScript-Engine kompiliert und vollständige kompakte dynamische Event-Argumente werden replayed, wobei Closures, aufgezeichnete Host-Antworten, Instanzisolation, ursprüngliche Journal-Budgets und Transaktionsfristen während des Rollbacks erhalten bleiben

Version 2.895.0

Added

  • Echte FDF- und XFDF-Bytes werden über vorhandene versionierte native Linux-JSON-Callbacks importiert und exportiert, Unicode-Feldwerte, AES-Sicherheit und authentifizierte Signatur-Policies bleiben erhalten, und das aktuelle Dokument wird nach fehlgeschlagener Ausgabe oder Ergebnisveröffentlichung zurückgerollt

Version 2.894.0

Fixed

  • Zu breiter typisierter Rich-Text wird an vollständigen Unicode-Graphem-Grenzen über Font- und Farbstile hinweg umbrochen, tatsächliche gestylte Bereiche werden vor der Zeilenzuweisung gemessen, und unteilbare übergroße Cluster, gemischte Punktgrößen und expliziter Zeichenspacing bleiben erhalten

Version 2.893.1

Security

  • Erforderliche signierte Adobe-CRL- und OCSP-Nachweise werden innerhalb echter RFC3161-Dokumentzeitstempel authentifiziert, bevor signaturpolitisch geschützte Formularaktualisierungen akzeptiert werden; die transaktionale Zurückweisung bei fehlenden, widerrufenen, abgelaufenen oder nicht vertrauenswürdigen Nachweisen bleibt erhalten

Version 2.893.0

Added

  • Begrenzte native FDF- und XFDF-Skalarfelddaten werden gelesen und geschrieben, und echte Unicode-, Choice- und Button-Appearances werden transaktional in unabhängig veröffentlichte PDFs importiert, wobei authentifizierte Signatur-Policies und AES-Verschlüsselung erhalten bleiben

Version 2.892.0

Added

  • Begrenzte Free-Form- und Lattice-Dreiecksmesh-Shadings werden mit echter Koordinaten-, Flag-, Funktions-, Farb- und Transparenz-Semantik gerendert, und hexadezimale Indexed-Paletten-Streams werden genau einmal dekodiert

Version 2.891.0

Added

  • Geordnete native XFA-XML-Kommentare und Processing Instructions bleiben über Event-Import, Serialisierung, Klonen und transaktionalen Rollback erhalten, werden aber von Skalar-Text, Rich-Text und SOM-Elementauswahl ausgeschlossen

Version 2.890.1

Fixed

  • Vorübergehend blockierte Windows-Sperren bei atomarer Veröffentlichung werden mit höchstens acht abbrechbaren Ersetzungsversuchen behoben, wobei exakte Ziele, vorbereitete Bytes, dauerhafte Betriebssystemfehler und eigene Staging-Aufräumarbeit erhalten bleiben

Version 2.890.0

Added

  • Zulässige Unicode-Wort-, Geschützte-Leerzeichen-, Interpunktions- und Zahlengruppen bleiben über typisierte Rich-Style-Runs erhalten, ganze Gruppen werden mit echten gestylten Font-Vorschüben passend gemacht, Grundlinien gemischter Größe bleiben erhalten, und CRLF wird über Stilnähte hinweg zusammengefasst

Version 2.889.0

Added

  • Materialisierte versteckte und unsichtbare XFA-Skalaraliase werden nach sichtbaren Feld-Commits synchronisiert, während native wiederholte Daten-Scopes, explizite Leerwerte und exakter transaktionaler Rollback erhalten bleiben

Version 2.888.0

Added

  • Vollständige Unicode-17-Eigenschaften und kontextuelles Line Breaking werden über die vorhandenen Dokument-APIs angewendet, portable Property-Abfragen werden roh oder LB1-aufgelöst offengelegt, etablierte Enum-Ordinals und Tailoring-Verträge bleiben erhalten, und weiche Trennstrich-Verbote werden beachtet

Version 2.887.0

Added

  • Persistentes natives XFA-exData-XML wird importiert und serialisiert, mit sofortigen Script-Lesevorgängen, Namespace- und Mixed-Content-Erhalt, bewahrten Wiederholungsinstanz-Identitäten, transaktionalem Rollback und echtem gerendertem gespeichertem XHTML

Version 2.886.0

Added

  • Eigenständige RFC3161-PDF-Dokumentzeitstempel werden erzeugt und authentifiziert, mit begrenztem Streaming, SHA256-, SHA384- oder SHA512-Imprints, vertrauenswürdiger TSA-Identität und Nonce-Bindung, erforderlichen ESIC-Erweiterungsdeklarationen und authentifizierten Zertifizierungs- oder Feldsperren-Ausnahmen

Version 2.885.0

Added

  • Standard-Zeilenumbruchmöglichkeiten aus Unicode 17 werden offengelegt und in echten nativen Rich-Feldern verbraucht, wobei Geschützte-Leerzeichen-, Bindestrich- und Interpunktionsgruppen sowie Unicode-Explizittrenner mit exakten originalen V- und RV-Werten erhalten bleiben

Version 2.884.0

Added

  • Portable Standard-Grenzen erweiterter Unicode-17-Grapheme werden offengelegt, übergroße Rich-Wörter werden an vollständigen Clustern umbrochen, echter Unicode-Appearance-Inhalt bleibt erhalten, und Breitenänderungen durch Joining-Formen werden nach Substring-Shaping korrigiert

Version 2.883.0

Added

  • Persistente native XFA-Bild- und geometrische Wert-Kinder entstehen, echte PNG-Alpha-, Bild-DPI- und Seitenverhältnis-Geometrie wird gerendert, wobei Wiederholungsinstanz-Isolation und transaktionaler Rollback erhalten bleiben; FPC-Bildpixel, die zuvor schwarz gerendert wurden, werden korrigiert

Version 2.882.0

Added

  • Echte Font-Ressourcen aus Child-Streams und PDF-Textparameter werden beim Rendern von Form, Type3 und Pattern geerbt, Textsicherungen des Graphics State bleiben erhalten, unsichtbarer Type3-Text wird beachtet, und unabhängige Annotation-Appearance-Standards werden zurückgesetzt

Version 2.881.0

Added

  • Standard-Detached-CAdES-Signaturen werden automatisch mit erforderlicher Signing-Certificate-Bindung authentifiziert, und echte hexadezimale oder escaped literale Contents-Strings werden konsistent gelesen — für Verifikation, erlaubte Formularaktualisierungen und Langzeitvalidierungsnachweise

Version 2.880.2

Fixed

  • Rich-Absatzausrichtung bleibt über leere anfängliche Runs, Inline-Stilwechsel und explizite Zeilenumbrüche erhalten, und angeforderte Rechteck- oder Kreisrahmen sowie gemessene hervorgehobene Zeilen werden gemalt, statt stillschweigend wegzufallen

Version 2.880.1

Fixed

  • Abbruch wird vor der Seitenrenderer-Allokation und Kontextinstallation sowie während der Initialisierung beachtet, ein aktiver Farbkontext des Aufrufers bleibt erhalten, wenn die Konstruktion anfänglich abgelehnt wird, und ausgeliehene Display-Listen werden freigegeben, ohne Teil-Bitmaps zu veröffentlichen

Version 2.880.0

Added

  • Echte native XFA-Skalar-Draw- und Beschriftungswerte werden nach der Script-Erstellung gerendert, explizit leere Werte und Wiederholungsinstanz-Isolation bleiben erhalten, und exakter Rollback bleibt gewahrt, wenn späteres natives Zeichnen sein Budget aufzehrt

Version 2.879.0

Added

  • Persistente native XFA-Skalarwert-Kinder entstehen mit sofortiger Feld-, Daten- und Shared-Alias-Synchronisierung, typisierter Formularpersistenz, Widget-Commits, Wiederholungsinstanz-Isolation und exaktem transaktionalem Rollback

Version 2.878.0

Added

  • Echte Windows-Signatur-Appearance-Profile mit eingebetteten Unicode-Fonts entstehen für zusammengeführte und separate Widgets, Rotations-, Verschlüsselungs- und Zertifizierungs-Workflows, und erforderliche AppearanceFilter werden gegen das tatsächlich erzeugte Profil durchgesetzt

Version 2.877.0

Added

  • Echte farbige und farblose PDF-Tiling- und Shading-Patterns werden mit geerbten Pattern-Ursprüngen, verschachtelten Zellen, Überlappung, Stroke- und Stencil-Farbaufträgen, Transparenz und begrenztem Abbruch gerendert, über native Linux- und Windows-Ziele hinweg

Version 2.876.1

Fixed

  • Vollständiges XFA-SOM-Binding und echte Auswahl der ausgegebenen Instanzdaten bleiben beim Anwenden von Fehlende-Instanz-Formular- und Template-Defaults erhalten, ohne Werte von einer anderen wiederholten Okkurrenz auszuleihen

Version 2.876.0

Added

  • Authentifizierte CRL- und OCSP-Nachweise werden in signierten Windows-Adobe-RevocationInfoArchival-Attributen eingebettet, tatsächliche Seed-Policies werden durchgesetzt, und vertrauenswürdiger Status, Antwortautorisierung und Frische werden vor dem Veröffentlichen von Signaturen validiert

Version 2.875.0

Added

  • Echte XFA-Feld-Defaults werden beim Lesen ohne erfundene Daten aufgelöst, explizit leere Instanzwerte bleiben erhalten, und Bearbeitungen schreiben garantiert unabhängige Instanzdaten, ohne gemeinsame Templates zu verändern

Version 2.874.0

Added

  • Native Rich-Text-Felder werden mit typisierten Unicode-Style-Runs bearbeitet, mit echten eingebetteten Regular-, Bold-, Italic- und Bold-Italic-Fonts, gemessenen Baselines gemischter Größe in Appearances, Dekorationen und synchronisierten V/RV-Werten über Widgets und verschlüsselte Ausgaben hinweg

Version 2.873.0

Added

  • Persistente XFA-UI-Choices pro Instanz entstehen durch native Scripts, und echte Text-, Passwort- und Choice-Widgets werden mit Mehrzeilen- und gemessenen Langwort-Appearances konsumiert

Version 2.872.0

Added

  • Echte Windows-DocMDP-Zertifizierungssignaturen mit P1-, P2- oder P3-Berechtigungen und authentifizierten Unicode-Legal-Attestierungen entstehen, erforderliche Seed-Policies und FieldMDP-Sperren werden beachtet, und Folgesignaturen werden nur dort erlaubt, wo die signierte Policy sie zulässt

Version 2.871.1

Fixed

  • XFA-Event-Körper laufen in ihrem eigenen lexikalischen und stricten Scope, während Feldaliase im äußeren Scope, der this-Wert des Events, explizite Returns und exakter Fehlschlag-Rollback erhalten bleiben

Version 2.871.0

Added

  • Fehlende XFA-Font-, Absatz-, Fill-, Farb-, Rahmen-, Kanten- und Eck-Eigenschaften entstehen durch echte native Event-Scripts, stabile Formular-Bindungen pro Instanz werden mit exaktem Rollback persistiert, und optionale Widget-Appearances werden nach wirksamen Stiländerungen neu erzeugt

Version 2.870.0

Added

  • Echte native Windows-Cairo-Ausgabe wird mit expliziten GDI-Standardfont-Outlines und korrekten Win32-OpenJPEG-Aufrufkonventionen gerendert, mit reproduzierbar gepinnten nativen Abhängigkeiten und unabhängiger Ausgabeabnahme

Version 2.869.0

Added

  • Windows-Dokumente werden mit echten synchronen RFC-3161-Transport-Callbacks über die C-ABI signiert, mit SHA256-, SHA384- oder SHA512-Imprints, authentifizierter TSA-Vertrauens- und CRL-Prüfung, erforderlichen Zeitstempel-Seed-Bedingungen und begrenzter transaktionaler Veröffentlichung

Version 2.868.0

Added

  • Maskierte Passwort- und literale Dateiauswahl-Feldappearances entstehen mit erhaltenen Unicode-Werten und AES-256-Policies, escaped ergänzendes Unicode wird durch die native JSON-ABI getragen, subnormale PDF-Dezimal-Quelltokens bleiben erhalten, und RGB-Prefetch-Puffer entstehen ohne Screen-DC

Version 2.867.0

Added

  • XFA-Rich-Text wird über Inline-Stile hinweg umbrochen, mit gemessenen Wortgrenzen, expliziten Zeilenumbrüchen, gemeinsamen Zeilengrundlinien und Ausrichtung, echten Blocksatz-Wortlücken und Fragment-Link-Geometrie, während native Wiederholungsinstanz-XDP-Persistenz erhalten bleibt

Version 2.866.1

Added

  • RFC-3161-Token von Rohsignaturen werden mit ihrem tatsächlich unterstützten SHA256-, SHA384- oder SHA512-Message-Imprint-Algorithmus authentifiziert, während der bestehende SHA256-Request-Standard und vollständige Token-Vertrauens- und Widerrufsprüfungen erhalten bleiben

Version 2.866.0

Added

  • XFA-Rich-Text-Runs gemischter Größe werden auf eine gemeinsame Grundlinie im gespeicherten PDF ausgerichtet, der Textposition-Modus des Aufrufers bleibt erhalten, und der größere benachbarte Absatzrand wird inklusive Leerabsatzübergängen angewendet

Version 2.865.0

Added

  • RFC-3161-Zeitstempel werden für explizite SHA256-, SHA384- und SHA512-Message-Imprints angefordert und authentifiziert, ohne den Imprint erneut zu hashen; strenge Digest-Längen, frische Nonces, begrenzter Transport, Vertrauensketten und Widerrufsvalidierung bleiben erhalten

Version 2.864.0

Fixed

  • Die ursprüngliche Barcode-Scan-Frist bleibt durch Priorisierung vollständiger linearer Raster und Quiet-Zone-Kandidatengruppen erhalten, und ungültige DataMatrix-Projektiv-Finderrahmen werden vor dem Abtasten der inneren Module zurückgewiesen, ohne Finder-Toleranzen zu ändern

Version 2.863.0

Added

  • Gültige geerbte Windows-Signatur-Seed- und Zertifikatsbedingungen werden beachtet, mit echter Digest- und CAdES-Auswahl, Unicode-Signaturinformationen, normalisierten indirekten Feldsperren, authentifizierten historischen Sperrberechtigungen, erlaubten Zweitsignaturen und verschlüsselten Formular-Policies

Version 2.862.0

Added

  • Echte native Funktions-, axiale und radiale PDF-Shadings werden mit begrenzter Geometrie- und Funktionsauswertung gerendert, mit geerbtem Clipping, Domain-, Matrix-, Extend- und BBox-Semantik, kalibrierten und speziellen Farben, Transparenz, Softmasks, Blending und Knockout-Gruppen

Version 2.861.0

Added

  • Echte native annotierte Vertragsprüfungs-PDFs und explizite Unicode-Hervorhebungen werden mit sichtbaren Normal-Appearances exportiert, Quellinhalt und inkrementelle Signaturrevisionen bleiben erhalten, authentifizierte P3-Annotation-Berechtigungen und verschlüsselte Nutzerrechte werden durchgesetzt, und begrenzte Outputs werden vor der Callback-Veröffentlichung vorbereitet

Version 2.860.0

Added

  • Native Linux-Signatur- und Verifikationsoptionen werden an echte Digest-Auswahl, Unicode-Signaturmetadaten, benannte Appearance-Profile, explizite Trust-Bytes, Zeitstempel-Transport-Identität und authentifizierte Widerrufsnachweise gebunden, mit begrenzter privater Vorbereitung vor der Veröffentlichung

Version 2.859.0

Added

  • Live-XFA-Font-, Absatz- und skalare Body-Overrides pro Instanz werden auf echtes Rich-Text-Zeichnen und -Messen angewendet, Inline-CSS-Präzedenz und explizit leerer Inhalt bleiben durch native XDP-Persistenz erhalten, und exakter transaktionaler Rollback bleibt gewahrt

Version 2.858.0

Added

  • Escaped PDF-Font-, Encoding-, Glyph-, Farb- und Ressourcennamen werden beim nativen Rendering und in der gemeinsamen Textextraktion genau einmal dekodiert, literale Hash-Ressourcenschlüssel bleiben erhalten, und äquivalente Namen bleiben mit echten Outlines und Glyph-Metriken abgeglichen

Version 2.857.0

Added

  • Native Dokumente werden nach Seiten- und Objektzahlen, Unicode-Text, normalisierten Strukturgraphen und tatsächlich gerenderten RGB- oder Luminanz-Pixeln verglichen, mit semantischer Stream-Äquivalenz, authentifizierten verschlüsselten Eingaben und begrenzter Vorbereitung vor der Callback-Veröffentlichung

Version 2.856.0

Added

  • Echte native Signatur-Appearance-Presets werden nach registriertem Profilnamen gewählt, unterschiedliche Approval-, Zertifizierungs- und Kompaktlayouts entstehen, authentifizierte Profilmetadaten und verschlüsselte Policies bleiben erhalten, und unbekannte Profile werden vor der Veröffentlichung abgelehnt

Version 2.855.0

Added

  • Native XFA-Property-Schema-Defaults werden angewendet, und explizit leere Werte, Stile pro Instanz sowie gebrochene Punktmaße für Font, Rahmen und Zeichnungen bleiben durch echte AcroForm- und abgeflachte PDF-Ausgaben erhalten

Version 2.854.0

Added

  • Native XFA-Property- und Attributobjekte werden offengelegt, mit persistenten Formular-Bindungen pro Instanz, synchronisierten Wert-/Datenschreibvorgängen und echten Font-, Rahmen-, Absatz- und UI-Layout-Effekten, wobei transaktionaler Rollback und scriptlose Fokus-Budgets erhalten bleiben

Version 2.853.0

Added

  • Echte Adobe-Widerrufsnachweise werden als authentifizierte CMS-Signed-Attribute eingebettet, vollständige Zertifikats- und Zeitstempelketten werden vor der Veröffentlichung gegen explizites Vertrauen und aktuelle CRL- oder OCSP-Nachweise validiert, und die erforderliche Signature-Seed-Widerrufseinbettung wird durchgesetzt

Version 2.852.0

Added

  • Authentifizierte Unicode-Legal-Attestierungen werden in Zertifizierungssignaturen geschrieben, nur für die Zertifizierung geltende Legal-Seed-Anforderungen werden beachtet, bestehende Legal-Statistiken und Katalogberechtigungen bleiben erhalten, und verschlüsselte String-Policies bleiben erhalten

Version 2.851.0

Added

  • Physische Lab-ICC-Quellfarben und begrenzte XYZ-Kompatibilitätseingaben werden in Pfaden, Text, gepackten Bildern und Indexed-Paletten gerendert, kalibrierte und ICC-Alternative-Tints bleiben über RGB- oder CMYK-Gruppen erhalten, und eingebettete JPX-Profile werden mit separater oder zugeordneter Alpha angewendet

Version 2.850.0

Added

  • Kompatible Dokumente mit fehlenden Fonts werden in durchsuchbaren Text und Vektor-PDF/A-4 konvertiert, mit expliziter begrenzter Ghostscript-Font-Einbettung, echter veraPDF-Validierung und atomarer Veröffentlichung; native Unicode-TrueType-Fonts werden distributionsübergreifend konsistent gewählt

Version 2.849.0

Added

  • Eingebettete einfache Type1- und Type1C-Fonts werden mit exakten deklarierten oder eingebauten Adobe-Glyph-Encodings gerendert, die ToUnicode-Extraktion bleibt von den angezeigten Outlines getrennt, und validierter neutraler Stroke-Adjustment- und relativ kolorimetrischer Graphics State wird akzeptiert

Version 2.848.0

Added

  • Vollständige XFA-Nachfahrenpfad-Suffixe werden innerhalb jedes Wildcard-Kontexts aufgelöst, lokale Okkurrenzgrenzen bleiben erhalten, und Prädikate laufen im aktuellen Event-Scope mit exaktem transaktionalem Rollback

Version 2.847.0

Added

  • Geerbte native Signatur-Seed- und Zertifikatsbedingungen werden durchgesetzt, mit echten Issuer-Ketten, Subject- und Key-Usage-Policies, wählbaren CMS-Digests, verschlüsselten Unicode-Signaturmetadaten und Transforms für gesperrte Dokumente

Version 2.846.0

Added

  • Native XFA-Datasets und Datenknoten werden offengelegt, mit bidirektionalen Formular-Bindungen, dynamischer Instanzdaten-Spiegelung, stabilen gehaltenen Referenzen, unabhängigen ungebundenen Formularwerten und transaktionalem Script-Replay

Version 2.845.0

Added

  • Authentifizierte FieldMDP-Referenzen werden aus vorhandenen oder geerbten Signaturfeldsperren erzeugt, verschlüsselte Unicode-Feldnamen und Zertifizierungsreferenzen bleiben erhalten, und Sperrberechtigungsstufen werden angewendet, ohne ursprüngliche signierte Policies zu schwächen

Version 2.844.0

Added

  • Separation- und DeviceN-Alternative-Tints werden mit begrenzten Vektorfunktionen, gepackten Bildern und CMYK-Gruppen-Blending gerendert, None-Knockout-Geometrie bleibt erhalten, und All-Registraturfarben werden konsistent abgebildet

Version 2.843.0

Added

  • Dynamische XFA-SOM-Pfade werden mit abgeleiteten und relativen Okkurrenzen aufgelöst, mit bereichsbezogenen Prädikaten, Klassen- und Nachfahren-Selektoren, Wildcard-Sammlungen und transaktionalen Script-Objekt-Property-Zuweisungen

Version 2.842.0

Added

  • Nativer semantischer Vertragsvergleich zweier Dokumente über C-ABI und Pascal wird über einen gemeinsamen portablen Kern bereitgestellt, mit Quell-Glyph-Geometrie, verschlüsselten und verschachtelten Inhaltseingaben, vorbereiteter JSON- oder HTML-Review-Ausgabe und stabiler nebenläufiger Sperrordnung

Version 2.841.0

Added

  • Originale CMS- und CAdES-Revisionen werden vor nativen Formularaktualisierungen authentifiziert, originale DocMDP- und FieldMDP-Berechtigungen sowie gesperrte Felder werden durchgesetzt, signierte Inhalte und Ressourcen bleiben erhalten, und Push-Button-Beschriftungsmetadaten werden atomar synchronisiert

Version 2.840.0

Added

  • Kalibrierte CalGray-, CalRGB- und Lab-Quellfarben, kalibriertes Gruppen- und Seiten-Blending, Indexed-Basen, 16-Bit-Bildsamples und XYZ-Luminanz-Softmasks werden mit begrenzter Konvertierung und sicherer Gamma-Auswertung gerendert

Version 2.839.0

Added

  • FormCalc-Wertkopieren und stabile Knotenreferenzen werden implementiert, mit Zuweisung per Referenz, Rebinding und Null-Ablösung, numerischer Identitätsgleichheit, gehaltenen Handles und transaktionalem Rollback

Version 2.838.0

Added

  • Zur Laufzeit erzeugte FormCalc-Eval-Programme laufen mit isolierten Berechnungs-Scopes, verschachtelter Auswertung, Unicode-Quelle, begrenzten Kompilierungswiederholungen und transaktionalem Host-Antwort-Replay

Version 2.837.0

Added

  • Eingebettete Unicode-Appearances entstehen durch natives Linux-JSON-Formularausfüllen für Text-, Choice- und Multiselect-Felder, Checkbox- und Radio-Zustände sowie Push-Button-Beschriftungen, wobei transaktionale Veröffentlichung und Verschlüsselung erhalten bleiben

Version 2.836.0

Added

  • Synchroner RFC-3161-Zeitstempeltransport wird über einen kompatiblen erweiterten nativen Signierungsoperations-Record bereitgestellt, mit begrenzten Antworten, gemeinsamem Abbruch und expliziter TSA-Vertrauens- und Widerrufsvalidierung

Version 2.835.0

Added

  • Transaktionaler XFA-Host-Zustand, Seiten- und Lifecycle-Flags, Fokuswechsel pro Instanz, Validierung ausstehender Bearbeitungen und Reset-Operationen laufen mit stabiler Identität und lexikalischem Zustands-Replay

Version 2.834.0

Added

  • CAdES-Signaturzertifikat-Identifikatoren werden gegen den tatsächlichen Unterzeichner validiert, unabhängig von optionalem Zertifikatsvertrauen, und eingebettete Encoding-CMap-Streams werden über den nativen Font-Adapter aufgelöst

Version 2.833.0

Added

  • Vertikale Identity-V- und Unicode-vordefinierte CMaps werden mit echten W2/DW2-Ursprüngen, Matrizen, Textbewegung und Clipping gerendert, und eingebettete Encoding-CMap-Streams werden korrekt dekodiert

Version 2.832.0

Added

  • Signieren läuft über die native Linux-Callback-ABI mit PEM- oder begrenzten PFX-Identitäten, neuen Unicode-Appearance-Feldern und Zertifizierung, und das vorbereitete signierte Dokument bleibt als aktueller Kontext nach erfolgreicher Veröffentlichung erhalten

Version 2.831.0

Fixed

  • Signatur-Seed-, Sperr- und Read-only-Bedingungen werden konsistent auf kodierte PDF-Namen angewendet, semantische Duplikatschlüssel werden abgelehnt, und geerbte Policy-Wörterbücher werden validiert

Version 2.830.0

Added

  • Fortgeschrittene XFA-Zahlen-, Kalender-, Text- und zusammengesetzte Picture-Clauses laufen durch echte Formular-Events, wobei Eingabegenauigkeit, Locale-Semantik und transaktionales Script-Replay erhalten bleiben

Version 2.829.0

Added

  • Native Seitenressourcengraphen und transformierte Annotation-Appearances werden in einfache oder verschlüsselte Dokumente importiert, und kompatible Eingaben werden in durchsuchbaren Text und Vektor-PDF/A-4 konvertiert, mit echter Validierung vor der atomaren Veröffentlichung

Version 2.828.0

Added

  • Vierkomponentige CMYK- und ICC-Transparenzgruppen sowie Seitengruppen werden mit allen Blend-Modes, verschachtelter Knockout-Geometrie und gemeinsamen Farbprofil-Budgets gerendert

Version 2.827.0

Added

  • Locale-bewusste XFA-Datums-, Zeit-, Zahlen- und Text-Pictures laufen mit eingebetteten Locale-Sets, begrenzten transaktionalen Locale-Abfragen und geschützter JavaScript-IEEE-Arithmetik

Version 2.826.0

Added

  • Unicode-Array-wertige Choice-Auswahlen werden gelesen und geschrieben, sortierte Optionsindizes werden gepflegt, und passende Appearances entstehen für sichtbare und gescrollte Listenfeld-Auswahlen

Version 2.825.0

Added

  • Verschlüsselte Dokumente werden über Windows-JSON- und C-ABI-Jobs signiert, während originale Revisionen, AES-Sicherheitseinstellungen, Dokument-IDs und Signaturberechtigungen erhalten bleiben

Version 2.824.0

Added

  • Native Linux-HTML-Dokumente entstehen, sichtbarer oder passender durchsuchbarer Unicode-Text wird eingefügt, begrenzte abbrechbare Tesseract-OCR läuft, und unabhängig validierte Raster-PDF/A-4-Ausgaben werden über Pascal- und Callback-APIs erstellt
  • Alpha/Luminosity-Masken aus dem Graphics State, begrenzte Transferfunktionen, additive Transparenz und Seitengruppen, Knockout-Formen sowie erweiterte JPEG-2000-Samples mit eingebetteter Farbe und Alpha werden gerendert
  • Mitgelieferte Zertifikats-, OCSP- und CRL-Nachweise werden vor inkrementeller DSS/VRI-Veröffentlichung validiert, während bestehende Signaturen und AES-Verschlüsselung erhalten bleiben
  • Explizite typisierte XFA-Host- und FormCalc-Transport-Callbacks laufen mit begrenzten Requests, aufgezeichneten Antworten und transaktionalem Replay

Fixed

  • Unicode-Werte und Ausnahmediagnosen, die die Free-Pascal-QuickJS-API zurückgibt, bleiben erhalten

Version 2.823.0

Added

  • Validierte RFC-3161-Zeitstempel werden in Headless-CMS-Signaturen eingebettet, mit Message-Imprint-, Nonce-, TSA-Autorisierungs-, Vertrauens- und Prüfung mitgelieferter Widerrufsnachweise; Zieldateien bleiben erhalten, wenn ein erforderlicher Zeitstempel fehlschlägt
  • XFA-Script-Objekt-Lexikalzustand, verschachtelte Closures und unabhängige Wiederholungsinstanz-Module bleiben mit deterministischem, begrenztem transaktionalem Replay erhalten
  • Expliziter Zeichen- und Wortabstand wird auf gemessene und erzeugte Headless-Unicode-Text-Appearances angewendet

Fixed

  • Die spezifikationskorrekte At-Quell-/Suchargument-Reihenfolge von FormCalc wird verwendet, und bei leerem Suchstring wird die erste Position zurückgegeben

Version 2.822.0

Added

  • Allgemeine QuickJS- und kompilierte FormCalc-XFA-Events laufen mit Live-Wiederholungsinstanz-DOM-Operationen, transaktionaler Standard-Formularpaket-Persistenz, automatischem Initialize/Calculate/Validate/Ready-Lifecycle, begrenzter Ausführung und Abbruch

Fixed

  • Spezifikationskorrekte XFA-Finanzfunktionsparameter und Cashflow-Formeln, gregorianische Datumsursprünge und negatives Restwertverhalten werden angewendet, wobei doppelte Genauigkeit über Delphi und Free Pascal hinweg erhalten bleibt

Version 2.821.0

Added

  • Native Headless-Dokumentworkflows werden um eine versionierte Linux-C-ABI erweitert, mit echten Callback-basierten Text-/Formular-/Render-/Signieroperationen, begrenztem Abbruch und Fehlschlag-Rollback, Multiline-/Comb-/Rotated-/Choice-/Button-Appearances mit HarfBuzz/FriBidi-Shaping, PFX-Identitäten, neuen sichtbaren Signaturfeldern und DocMDP-Zertifizierung
  • Begrenzte Bildmasken, Softmasks, Indexed/ICC-Farben, PDF-Blend-Modes, isolierte RGB-Transparenzgruppen, Type3-Glyphen und Text-Clipping werden gerendert, und JPEG-, JPEG-2000-, CCITT-, JBIG2- und RunLength-Bildstreams werden über den authentifizierten nativen Dokumentpfad dekodiert

Version 2.820.0

Added

  • Unterstützte native Headless-Einzelzeilen-Unicode-AcroForm-Felder werden mit echten eingebetteten TrueType-Appearances gefüllt, mit exakten Glyphenbreiten und CIDToGID/ToUnicode-Mappings, transaktionalen Multi-Widget-Updates, erhaltener AES-Sicherheit, kontrollierter Font-Einbettung und begrenztem atomaren Speichern auf Linux und Windows

Version 2.819.0

Added

  • Unterstützte PDF-Pfade, horizontaler Text, Bilder, Forms und vorhandene Annotation-Appearances werden unter Linux mit nativen Cairo/FreeType-CPU-Surfaces nach PNG gerendert, begrenzte Arbeit und Abbruch werden durchgesetzt, Quellen bleiben erhalten, und PNG-Dateien werden atomar veröffentlicht

Fixed

  • Kanonische Adobe-AFM-Vorschübe werden für die zwölf Standard Helvetica/Times/Courier-Stile verwendet, wenn PDF-Breiten fehlen; das verhindert kumulative Textpositions-Drift durch Ersatz-Font-Metriken, während explizite und eingebettete Font-Breiten erhalten bleiben

Version 2.818.0

Added

  • Echte native Headless-Inkremental-CMS/CAdES-PDF-Signaturen werden auf Linux und Windows veröffentlicht, unter Nutzung vorhandener unsignierter Felder und expliziter PEM-Credentials; frühere Revisionen und AES-256-Sicherheit bleiben erhalten, exakt signierte Bytes werden verifiziert, und vorhandene Ziele werden durch begrenzte atomare Veröffentlichung geschützt

Version 2.817.0

Added

  • Begrenzte JSON- und C-ABI-Dokumentjobs werden vollendet, mit validiertem inkrementellem PFX-Signieren, vorhandenen Signaturfeldern, Zweidokumentenvergleich, sechs nativen Vergleichsmodi und zweiseitiger Vertragsprüfung als JSON/HTML/annotiertes PDF, einschließlich kooperativem Abbruch, Ressourcengrenzen und atomarer Dateiveröffentlichung

Version 2.816.0

Added

  • Native Headless-PDF-Signaturen werden mit exakter ByteRange/Contents-Bindung und Streaming-OpenSSL 3 verifiziert, echte Detached-CMS/CAdES-Signaturen werden aus expliziten PEM-Credentials erzeugt, und Zertifikatsvertrauen wird auf Linux und Windows getrennt von der Integrität berichtet

Version 2.815.0

Added

  • Der begrenzte XFA-Instance-Presentation-Helper wird für bedingte Events, explizites wiederholtes Binding, unabhängige Instanzpräsenz und -zugriff, stabile persistierte Identität, transaktionales Reflow, Host-Canvas-Zeichnen und Accessibility-Aufzeichnungen verwendet

Version 2.814.0

Added

  • Native Headless-AES-256-R5/R6-Dokumente lassen sich auf Linux und Windows öffnen, Owner-/User-Berechtigungen werden authentifiziert, verschlüsselte komprimierte Objekte werden dekodiert, und verschlüsselte inkrementelle Formularwerte werden mit exakter Quellpräfix-Erhaltung und begrenzter atomarer Ausgabe gespeichert

Version 2.813.0

Added

  • Text lässt sich in begrenzten Seitenrechtecken über Grundlinien und ausgewählte gemeinsame Form-Aufrufe hinweg neu anordnen, Fonts und Breite lassen sich ändern, konservative Kollisionsberichte lassen sich einsehen, und versiegelte Vorschauen werden mit transaktionalem Commit oder Rollback genutzt

Fixed

  • Bearbeitungen geladener Dokumente bleiben über wiederholtes Speichern nach der Objektserialisierung erhalten, einschließlich Stream-zu-Datei-Speicherung und Wiederholungsversuchen nach einer Ausgabestörung

Version 2.812.0

Added

  • Kompatible geladene Dokumente werden zu PDF/A-4 konvertiert, während ursprünglicher Text, Vektoren, Bilder und eingebettete Ressourcen erhalten bleiben; sichtbare Annotation-/Widget-Appearances werden komponiert, durchsuchbare OCR bleibt oder wird ergänzt, explizite Verluste werden berichtet, und die Erhaltung wird vor der atomaren Dateiveröffentlichung validiert

Version 2.811.0

Added

  • Cross-Reference-Streams, hybride Referenzabschnitte und komprimierte Objektstreams werden über die native Headless-Dokument-API geladen, begrenzte Member-Indizes und Revisionsrangfolge werden validiert, exakte breite numerische Quellwerte bleiben erhalten, und quellenerhaltende unabhängige Inkrementalausgaben werden auf Linux und Windows gespeichert

Version 2.810.0

Added

  • Scan-Ausrichtung, Schräglage mit kontinuierlichem Winkel, Schatten, Rahmen und explizite Perspektiv-Quadrilaterale werden mit begrenzter umkehrbarer Geometrie korrigiert, vertrauenswürdige Tesseract-Orientierungsnachweise fließen ein, und OCR-Wörter, Grundlinien, Seiten-Quadrilaterale und semantisches Layout werden für editierbare strukturierte Ausgaben auf den Originalscan zurückgemappt

Version 2.809.0

Added

  • Lokale Tesseract- und RapidOCR-CLI- oder DLL-Engines lassen sich in JSON- und C-ABI-OCR-Jobs konfigurieren, durchsuchbarer Unicode-Text und Scan-Pixel bleiben erhalten, unterstützte Adapter werden gefunden, explizite Einstellungen werden validiert, und Rendering-/Erkennungsbudgets werden mit atomarer Ausgabe und Rollback bei fehlgeschlagener Veröffentlichung durchgesetzt

Version 2.808.0

Added

  • Classic-xref-PDFs lassen sich in nativen Linux-Konsolenanwendungen laden, Unicode-Seiten- und verschachtelter Form-Text mit geerbten Ressourcen wird extrahiert, AcroForm-Textwerte lassen sich prüfen und ausfüllen, und quellenerhaltende Inkrementalausgaben werden mit typisierten Diagnosen, Abbruch, Ressourcenbudgets und atomarer Ersetzung veröffentlicht

Version 2.807.0

Added

  • Mehrere getrennte native Barcodes lassen sich in einem Raster lokalisieren, wiederholte Payloads bleiben an unterschiedlichen Positionen erhalten, gedrehte und projektive ECC-200-DataMatrix-Symbole mit Vier-Ecken-Geometrie werden dekodiert, und aggregierte Scan-Budgets werden mit Abbruch und atomarer Ergebnisveröffentlichung durchgesetzt

Version 2.806.0

Added

  • Vertragsabsätze und Wort- oder Satzänderungen lassen sich mit Insert-, Delete-, Replace- und Move-Aufzeichnungen vergleichen, mit Seitenangaben auf beiden Vergleichsseiten, Erhalt wiederholter Klauseln, expliziten Boilerplate-Ausschlüssen, HTML-Prüfung mit begrenztem Umfang und quellengeprüfter annotierter PDF-Ausgabe

Version 2.805.0

Added

  • Geschäftsvorlagen aus HTML lassen sich mit verschachtelten Flex-/Grid-Panels, umbrechenden Zeilen, Grid-Spaltenspannen sowie Bildern und Formularelementen in Parallelboxen importieren; explizit mitgelieferte Font-Face-Ressourcen bleiben beim verzögerten Einbetten erhalten, dazu kommt ein separates Cache-Budget für dekodierte Bilder

Version 2.804.0

Added

  • Der gemeinsame PDF-Objektkern, Direct File I/O, Content- und Font-Dekodierung, Kompression, Kryptografie und der Writer-Kern liegen als nativer Linux-Code mit POSIX-Mapping und -Synchronisierung vor; die Windows-APIs bleiben erhalten und klassische xref-Einträge werden korrekt serialisiert

Version 2.803.0

Added

  • Versionierte Rechnungsprofil- und Länderregel-Ebenen lassen sich registrieren und explizite CII-XML- oder hybride Rechnungen validieren, wobei die Berichte den Prüfungsumfang ausweisen; die offiziellen XRechnung-3.0.2- und französischen CTC-Rechnungsregeln laufen über eine explizit konfigurierte Saxon-Engine, mit Auswahl veröffentlichter Profile und Fail-closed-Diagnostik

Version 2.802.0

Added

  • Typisierte Tabellen lassen sich über native APIs, JSON-Jobs und die C ABI in Office-unabhängige XLSX-Arbeitsmappen exportieren; Werttypen, Währungs- und Prozentformate, verbundene Zellen, exakte große Ganzzahlen und optionale Quellmetadaten bleiben erhalten, mit begrenztem Staging und fehlersicherer Veröffentlichung

Version 2.801.0

Added

  • JSON-Jobs und die C ABI können ausgewählte geladene Seiten als semantisches HTML, XHTML, XML oder JSON exportieren und typisierte Tabellen als CSV oder JSON, mit nativen Optionen, begrenztem Staging, Abbruchunterstützung, Kompatibilität mit Signaturfeldern, Erhalt des Quellzustands und atomarer Dateiveröffentlichung

Version 2.800.2

Fixed

  • Die Caches geladener Formularbeziehungen werden vor dem Graph-Rollback für ungültig erklärt, damit Signaturjobs und fehlgeschlagene Dokumentbearbeitungen das Originaldokument sicher abfragbar und weiterverwendbar lassen

Version 2.800.1

Fixed

  • Das geordnete parallele Rendern nimmt Speicherreservierungen jetzt in Eingabereihenfolge an, sodass spätere Seiten das Budget nicht mehr aufzehren können, während die Auslieferung auf eine frühere Seite wartet; Abbruch und begrenzte Ausgabe bleiben unter Delphi und FPC erhalten

Version 2.800.0

Changed

  • SVG-Text, geladene FreeText-Appearances und geladene Textersetzungen bewahren jetzt die Shaping-Features des Dokuments, Auto-Shaping-Flags für Skripte sowie GSUB-Skript- und Sprachauswahlen; dabei werden die OpenType-Daten der jeweils gewählten Schrift genutzt und Unicode-Zuordnungen bleiben über Schriftwechsel hinweg erhalten

Version 2.799.0

Changed

  • SVG-Vektorimporte behalten jetzt geerbte Dash-Arrays, Dash-Offsets und Miter-Limits für einfarbige und Verlaufsstriche, während das native Rendering Dash-Muster mit Phase und mit Länge null erhält

Version 2.798.0

Changed

  • Formatierter Unicode-Text behält fette und kursive Schriften jetzt auch über das Fallback-Layout hinweg; die stilbewussten Überladungen von ResolveFontForCodePoint und AnalyzeUnresolvedGlyphs halten Preflight und Ausgabe konsistent, und FPC-XML-Zeichenreferenzen erhalten Unicode-Skalare, statt den Text zu korrumpieren

Version 2.797.0

Fixed

  • SVG-Importe komponieren Objekt- und Gruppenopazität jetzt über isolierte Vektor-Transparenz-Forms, erhalten unabhängige Füll- und Strich-Alpha und bewahren verschachteltes Ressourcen-, Clip-, Masken- und Link-Verhalten innerhalb expliziter Budgets

Version 2.796.0

Added

  • Die ressourcenbegrenzte PDF/A-4-Rasterarchivierung lässt sich über JSON-Jobs und die C ABI nutzen, mit expliziter Bestätigung des Informationsverlusts, strukturierten Budgetfehlern, kooperativem Abbruch, Wiederherstellung des Quellzustands und atomarer Dateiausgabe

Version 2.795.0

Added

  • Geladene PDFs lassen sich jetzt zu validierten PDF/A-4-Rasterdokumenten normalisieren, mit striktem nativem Rendering, verifizierter sRGB-Farbe, begrenzter Dekodierung und begrenzten Rasterressourcen, Abbruchunterstützung, Schutz der Quellaliase und atomarer Dateiveröffentlichung; der Konvertierungsbericht nennt die gezielt entfernten interaktiven und angehängten Inhalte

Version 2.794.0

Changed

  • Der HTML5-Import nutzt jetzt gemessene Textzeilen mit gemischter Laufrichtung, Seitenumbruch mit Witwen- und Waisenkontrolle, optionale Silbentrennung, begrenzte Flex- und Grid-Layouts sowie beobachtbare CSS-Diagnostik; native FPC-Bitmaps synchronisieren direktes GDI-Zeichnen mit den LCL-Image-Caches

Version 2.793.0

Changed

  • Dynamic XFA unterstützt jetzt begrenzte Ereignisse zum Hinzufügen und Entfernen von Instance-Managern sowie Template-Presence-Events, mit Layout-Neubindung, Erhalt des Bearbeitungszustands, atomarem Rollback, Ressourcengrenzen und persistenter XDP-Ausgabe

Version 2.792.0

Changed

  • Der SVG-Import unterstützt jetzt eingebettete Unicode-Schriften mit Metrikermittlung, PNG/JPEG-Ressourcen, Verlaufsstriche sowie echte Alpha- und Luminosity-Softmasks; zugleich wurden das Gruppen-Alpha im nativen Rendering und das Compositing der FPC-Bitmap-Oberflächen korrigiert

Version 2.791.0

Changed

  • Die Textersetzung in geladenen Unicode-Dokumenten lässt sich jetzt vorab ansehen, mit eingebetteten Schriften, Umbruch- und Breitenrichtlinien, Diagnostik pro Treffer, Erkennung veralteter Pläne, begrenzten Ressourcen, atomaren Commits sowie Preview- und Apply-Operationen per JSON und C ABI

Version 2.790.0

Changed

  • Die Glyphendarstellung unterstützt jetzt die standardmäßigen CFF-Type-2-Stack- und Transient-Array-Operationen, und beim Font-Subsetting bleiben die arithmetisch abgeleiteten Abhängigkeiten lokaler und globaler Subroutinen erhalten

Version 2.789.0

Changed

  • Die eingebaute Barcode-Dekodierung versteht jetzt Code 128, EAN/UPC, perspektivbewusste QR-Wiederherstellung, Data Matrix ECC 200 und PDF417 mit Reed-Solomon-Korrektur und begrenzter Payload-Dekodierung

Version 2.788.0

Changed

  • Windows FPC unterstützt jetzt natives TIFF, JPEG/JPX, ICC-Konvertierung, JBIG2 und Zopfli über eine ABI-validierte Codec-Bridge und nutzt echte Worker-Threads für das Rendern von Seiten, geordneten Seiten, Kacheln, Bändern und JPEG-2000-Kacheln mit Budgets, geordneten Callbacks, Abbruch und deterministischen Pixeln

Version 2.787.0

Changed

  • Die C ABI und der JSON-Jobprozessor teilen sich jetzt schemaversionierte Dokumentoperationen für Fähigkeiten, Rendering, Unicode-Text und Formulare, OCR-Ebenen, Schwärzung und PFX-Signierung, mit expliziten Ressourcenbudgets, Rollback bei Callback-Fehlern und atomaren Dateiausgaben; mehrseitige Callback-Eingaben werden korrekt geladen

Version 2.786.0

Changed

  • Die Bearbeitung geladener FreeText-Annotationen baut eingebettete Unicode- und Rich-Text-Appearances jetzt atomar neu auf, mit Umbruch, Ausrichtung, Opazität, Rotation, Callouts, Insets und expliziten Overflow-Richtlinien; umgeschriebene Stream-Payloads werden vor der Änderung gesichert, damit ein Transaktions-Rollback den Originaltext wiederherstellt

Version 2.785.0

Added

  • Das SearchableOCR-Konsolenbeispiel bietet neben RapidOCR jetzt eingebaute OCR sowie Tesseract-Engines per DLL oder CLI, erzeugt eine dreiseitige Scanprobe und stellt Seitenauswahl, Konfidenzfilterung, Erkennungsbudgets und detaillierte Konvertierungsstatistiken bereit

Version 2.784.0

Changed

  • FDF- und XFDF-Stapelimporte rollen nach einem Importfehler jetzt frühere Feld- und Annotationsaktualisierungen zurück, erhalten vom Aufrufer gestellte Transaktionen und entfernen die Ergebnis-Metadaten fehlgeschlagener Austauschvorgänge

Version 2.782.0

Added

  • Der lokale Tesseract-OCR-Adapter akzeptiert über THPDFTesseractOptions konfigurierbare Seitensegmentierung, Erkennungs-Engine-Modi, Pixelgrenzen und Timeouts für Einzeilen-, Einzelwort-, Sparse-Text- und Vertikalblock-Erkennung

Fixed

  • Der native Tesseract-Adapter nutzt bei überwiegend vertikalen Grundlinien die Querausdehnung der Textbox, damit vertikale Wortlängen die Textgrößen durchsuchbarer PDFs nicht mehr aufblähen

Version 2.781.0

Changed

  • Die Demo-Sammlungen für Delphi und C++Builder enthalten jetzt einen mehrseitigen Barcode-Feldführer mit Geschäftsetiketten und ein vollständiges Navigationshandbuch mit hierarchischen Lesezeichen, benannten Zielen und funktionierenden Links zu Begleitdokumenten; die minimalen PDF/A-Rezepte wandern nach Miscellaneous, und redundante eigenständige Outline- und Metadaten-Projekte wurden eingestellt

Version 2.780.1

Fixed

  • Die Showcase-Annotationsseite trennt die Beschriftungen der Inhaltsvorschau von den Live-FreeText- und Stamp-Appearances, damit in PDF-Readern keine Labels mehr überlappen und die Beispiele auch dann erkennbar bleiben, wenn Annotations-Appearances ausgeblendet sind

Version 2.780.0

Changed

  • Die Demo-Kataloge priorisieren jetzt vollständige Workflows und sortieren siebzehn minimale, spezialisierte oder veraltete Beispiele in Miscellaneous-Unterordner; die redundanten Projekte ImageCompression und AddDelPages wurden entfernt, ihre Funktionalität bleibt in den Hauptdemos und Regressionssuiten erhalten

Version 2.779.0

Added

  • Die Showcase-Demos für Delphi und C++Builder öffnen jetzt ein zehnkapiteliges Dokumentenstudio mit eingebetteter Vorschau, Suchhervorhebung, personalisierten Deckblättern, Review-Wasserzeichen auf Knopfdruck, verifiziertem Seitenexport und AES-256-R6-geschützten Kopien, die Änderungen bewahren; beide nutzen dieselbe Dokumenten-Engine und unterstützen einen Generierungsbefehl ohne Fenster

Version 2.778.1

Removed

  • Die redundanten GUI-Demos TestNumeric für Delphi und C++Builder wurden eingestellt, da automatisierte numerische Regressionstests jetzt Bruchteil-Seitenabmessungen und Zeichnungs-Operanden nach dem Sichern und erneuten Laden unkomprimierter und Flate-komprimierter PDFs verifizieren, mit persistenter Abdeckung numerischer Arrays

Version 2.778.0

Changed

  • Die Seiten- und Kundenbericht-Demos zeigen jetzt praxistaugliche Workflows: PageOperations bearbeitet echte PDFs über Extract-, Delete-, Move-, Insert- und Append-Befehle mit Reload-Verifikation, während DBTable die Tabellen-Engine für umbrechende Zeilen, wiederholte Kopfzeilen und automatischen Seitenumbruch mit einer datenbankfreien Standardprobe nutzt

Version 2.777.1

Fixed

  • Die OCR weist fehlerhaftes UTF-8, nicht unterstützte Steuerzeichen und inkompatible Ausgaben nativer Erkennungsmodelle zurück, bevor Text veröffentlicht wird, und rechnet verworfene Erkennungsergebnisse ein, wenn seitenübergreifende Wortgrenzen durchgesetzt werden

Version 2.777.0

Fixed

  • Die eingebaute OCR akzeptiert leere oder nicht erkennbare Seiten als erfolgreiche leere Ergebnisse, damit Stapel gescannter Dokumente weiterlaufen können, erhält die Bitmap-Pixel unter Windows FPC und prüft Abbruch und Zeitlimits während der gesamten Bildanalyse
  • Die Winkelklassifikation des nativen RapidOCR erhält die Seitenverhältnisse kurzer Zeilen und dreht Textausschnitte erst bei einer hinreichend sicheren 180-Grad-Vorhersage
  • Der lokale Python-RapidOCR-Adapter erhält erkannte Zeilenabstände und Interpunktion, statt einzelne Zeichen auszugeben, die ungewollte Leerzeichen einsammeln können, und der Tesseract-DLL-Adapter weist C1-Steuerzeichen vor der Textausgabe zurück

Version 2.776.0

Added

  • Textebenen gescannter PDFs können markierte HotPDF-OCR-Streams nach dem Speichern und erneuten Laden atomar ersetzen, behalten bestehende Ebenen bei fehlgeschlagener oder leerer Erkennung bei, melden die ersetzten Seiten, und ein natives mehrsprachiges RapidOCR-Konsolenbeispiel konvertiert, ohne bestehende Dateien zu überschreiben

Fixed

  • Benachbarte lateinische und kyrillische OCR-Wörter mit Wortabstand in derselben Zeile erhalten explizite Unicode-Leerzeichen für stabile Phrasensuche und Kopieren, während benachbarte CJK-Wörter ungetrennt bleiben
  • Das JPEG-Scan-Rendering unter Windows FPC behält beim Konvertieren in das OCR-Bitmap-Format die dekodierten Pixel und verhindert so leere Erkennungseingaben durch einen Wechsel des LCL-Pixelformats

Version 2.775.0

Added

  • Natives RapidOCR erhält lokale Modellvoreinstellungen für Chinesisch (vereinfacht und traditionell), Englisch, Französisch, Deutsch, Spanisch, Portugiesisch, Italienisch, Niederländisch, Türkisch, Japanisch, Koreanisch, Russisch, Arabisch und Hindi, mit passenden Zeichenwörterbüchern, geprüfter Modellinstallation, horizontaler Leserichtung und mehrsprachiger Unicode-Ausgabe in Delphi, C++Builder und Windows FPC/Lazarus

Fixed

  • Lokale Prozess-OCR-Adapter wiederholen die Bereinigung temporärer Ausgaben, wenn Diagnosedateien nach dem Beenden des Workers kurzzeitig gesperrt bleiben

Version 2.774.0

Added

  • Ein nativer RapidOCR-DLL-Adapter hält lokale ONNX-Modelle im Prozess, erkennt Bitmap-Snapshots ohne Python, unterstützt optionale Winkelklassifikation und durchsuchbare Unicode-PDFs und prüft Ausgabebudgets mit kooperativem Abbruch in Delphi-, C++Builder- und Windows-FPC/Lazarus-Builds

Version 2.773.0

Added

  • Der lokale RapidOCR-Adapter erhält eine explizite ONNX-Modellkonfiguration, optionale Winkelklassifikation, lokale Zeichenwörterbücher und Schriften, CPU-Thread-Steuerung, Offline-Preflight und Erkennungsbudgets für durchsuchbare Unicode-PDFs in Delphi-, C++Builder- und FPC/Lazarus-Builds

Version 2.772.1

Fixed

  • Tesseract-DLL- und CLI-Adapter funktionieren jetzt in Windows-FPC/Lazarus-Win32- und Win64-Builds, erhalten Unicode-OCR-Wörter und lesen aktuelle LCL-Bildpixel für durchsuchbare PDF-Textebenen

Version 2.772.0

Added

  • Ein optionaler nativer Tesseract-DLL-Adapter ergänzt mehrsprachige OCR mit konfigurierbaren Seitensegmentierungs- und Engine-Modi, Unicode-Wörtern, Konfidenzwerten, Wortgrenzen und Grundlinien sowie kooperativem Abbruch, Erkennungsfristen und Ausgabebudgets für durchsuchbare gescannte PDFs

Version 2.771.1

Changed

  • Die eingebaute OCR erkennt normalen, fetten, kursiven und fett kursiven ASCII-Text auf hellen oder überwiegend dunklen Hintergründen, akzeptiert verblasste Schrift mit ausreichendem Graustufenkontrast und lässt Wörter mit unsicheren behaltenen Glyphen aus, statt Zeichen stillschweigend zu verwerfen

Version 2.770.175

Fixed

  • LoadedDocInspector und SignatureValidator liefern für nicht lesbare PDFs einen Fehler-Exit-Code und weisen ungültige Befehlsargumente zurück, statt eine erfolgreiche leere Untersuchung zu melden

Version 2.770.174

Fixed

  • LoadedImageExport prüft jedes Bildziel, bevor irgendeine Seite exportiert wird, sodass Pfad-Aliase weder die Eingabe-PDF noch eine andere ausgewählte Seite überschreiben können, und weist nicht unterstützte Formatnamen zurück

Version 2.770.173

Fixed

  • Der Platten-Cache gerendeter Seiten überspringt verknüpfte Dokumentordner bei Wiederherstellung, Nachschlagen, Speichern, Invalidieren und Verwerfen und schont so Dateien außerhalb des Caches

Version 2.770.172

Fixed

  • JSON-Jobs weisen fehlerhafte Syntax, Inhalt nach dem eigentlichen Dokument, Zahlen außerhalb des endlichen Double-Bereichs und zu tiefe Verschachtelung zurück, bevor irgendeine Operation läuft, und geben beim Fehlschlag bereits geparste Werte frei

Version 2.770.171

Fixed

  • PreflightCLI prüft den kompletten Report-Ausgabeplan, bevor geschrieben wird, schützt Eingabe-PDFs vor Datei-Aliasen und weist widersprüchliche Report-Ziele zurück; rekursive Scans überspringen verknüpfte Unterordner, um Zyklen zu vermeiden

Version 2.770.170

Fixed

  • CopyPage prüft vor dem Export die Datei-Identitäten, weist widersprüchliche Ausgabe-Aliase zurück und legt automatisch benannte Ausgaben neben endungslosen Eingaben auch in Ordnern mit Punkten im Namen ab

Version 2.770.169

Fixed

  • JSON-Job-Werte erhalten maskierte Nullzeichen, serialisieren endliche Zahlen außerhalb des vorzeichenbehafteten 64-Bit-Bereichs ohne Ganzzahlüberlauf und liefern Standardwerte für Ganzzahlparameter außerhalb des Bereichs, ohne die Locale des Prozesses zu ändern

Version 2.770.168

Fixed

  • Die Fehlerbehandlung des Simple-Object-Parsers endet jetzt bei vereinzelten schließenden Klammern in Array-Körpern ohne umschließende Klammern und bewahrt gültige Zahlen und Wörterbuchschlüssel direkt nach fehlerhaften Trennzeichen

Version 2.770.167

Fixed

  • HotPDFCLI weist Ausgabepfade zurück, die über Aliase auf Eingabedateien zeigen, und prüft alle erzeugten Pfade, bevor der Batch-Export startet, sodass Befehle ihre Quelldaten nicht mehr kürzen oder überschreiben

Version 2.770.166

Fixed

  • Das ExtractText-Beispiel schützt seine Eingabe-PDF, wenn eine Ausgabe über eine Directory Junction oder einen Hardlink führt, und LoadedImageExport meldet Fehler bei nicht lesbaren Dokumenten oder unvollständigen Seitenexporten

Version 2.770.165

Fixed

  • Direkte Dateilesevorgänge invalidieren nach einem E/A-Fehler unvollständige Cache-Nachfüllungen und begrenzen Read-ahead-Bereiche nahe dem Grenzwert für vorzeichenbehaftete 64-Bit-Offsets auf sichere Weise

Version 2.770.164

Fixed

  • Die RunLength-Dekodierung reserviert nur so viel Speicher wie die dekodierten Daten brauchen und prüft fehlerhafte Läufe, bevor Ausgabespeicher reserviert wird, sodass Streams mit frühem Ende keinen übermäßigen Speicherbedarf mehr auslösen

Version 2.770.163

Fixed

  • Die Delphi- und C++Builder-Beispiele finden mitgelieferte Bilder, Metafiles, Farbprofile und optionale Signatur-Fixtures sowohl in den Projektordnern als auch in verschachtelten Build-Ausgabeverzeichnissen

Version 2.770.162

Fixed

  • Die HugeFileBenchmark-Beispiele weisen generierte PDF-Pfade, die einem der Eingabedokumente entsprechen, zurück, bevor eine Benchmark-Stapelverarbeitung startet
  • Das C++Builder-Beispiel erhält relative Eingabe-Unterordner für erzeugte PDFs, sodass rekursive Eingaben mit gleichem Namen nicht dieselbe Ausgabedatei teilen
  • Fehlgeschlagene Operationen, Verletzungen des Speicherlimits und ungültiges Laden von null Seiten liefern jetzt einen Exit-Code ungleich null, während der Benchmark-Report erhalten bleibt

Version 2.770.161

Fixed

  • Die Preflight-CLIs für Delphi und C++Builder weisen Report- und Aggregat-Ausgabepfade zurück, die einer Eingabe-PDF entsprechen, sodass Reports keine Quelldokumente mehr überschreiben

Version 2.770.160

Fixed

  • Das ASN.1-Parsing weist High-Tag-Number-Kodierungen zurück, die den unterstützten 32-Bit-Tag-Bereich überschreiten, statt eine umlaufende Tag-Nummer zu akzeptieren

Version 2.770.159

Fixed

  • Die Preflight-CLI für C++Builder erhält relative Unterordner für rekursive Reports und Dashboard-Links, sodass PDFs mit gleichem Namen sich nicht mehr gegenseitig überschreiben
  • Die Preflight-Dashboards für Delphi und C++Builder kodieren Report-Links korrekt für Sonderzeichen und nicht-ASCII-Ordnernamen
  • Fehler der Standardvalidierung unter C++Builder liefern jetzt Exit-Code 3 und erscheinen im Dashboard für jedes Report-Format als ungültig, auch bei Eingaben, die sich nicht laden lassen

Version 2.770.158

Fixed

  • Das PDF-Merge-Beispiel für C++Builder löst relative Eingabepfade vom Programmverzeichnis auf und verhindert, dass Dateidialoge das Arbeitsverzeichnis ändern
  • Jedes erzeugte Lesezeichen zielt jetzt auf die erste Seite, die aus seinem eigenen Eingabedokument kopiert wurde

Version 2.770.157

Fixed

  • Der Objekt-Parser normalisiert nicht maskierte CR- und CRLF-Zeilenenden in PDF-Literal-Strings zu LF und erhält dabei maskierte Wagenrückläufe und Zeilenfortsetzungen

Version 2.770.156

Fixed

  • Die LZW-Stream-Kompression meldet bei leerer Eingabe die tatsächlich geschriebene Bytezahl
  • LZW-Kompression und -Dekompression laufen mit InitialCodeSize 2 korrekt durch, und die Kompression weist Literale außerhalb des reduzierten Alphabets zurück, bevor sie Ausgabe schreibt

Version 2.770.155

Fixed

  • In Win64-Builds löst das Importieren von SVG- oder XPS-Pfaddaten mit einer Zahl nahe am Exponenten 100, etwa 1e-100 oder 5e99, keinen Gleitkommaüberlauf mehr aus, wenn die Anwendung Gleitkomma-Ausnahmen demaskiert
  • Solche Zahlen werden jetzt mit ihrem tatsächlichen Wert gelesen, sodass eine lange Mantisse mit großem negativem Exponenten korrekt importiert wird

Version 2.770.154

Fixed

  • DecodeLoadedPageBarcodes meldet jetzt korrekte Barcode-Grenzen auf Seiten, deren CropBox von der MediaBox abweicht, wenn kein Dekodierbereich gesetzt ist; bisher waren die Positionen um den Crop-Box-Versatz verschoben oder gegen die falsche Seitenhöhe skaliert
  • Gesichtsergebnisse von DetectLoadedRedactionFindings (mit aktivierter Gesichtserkennung) treffen jetzt auf solchen Seiten auf die erkannten Gesichter, statt von ihnen versetzt zu sein
  • Beide Funktionen rendern den sichtbaren Seitenbereich (die auf die MediaBox beschnittene CropBox) und bilden jetzt erkannte Positionen durch denselben Bereich zurück; die an einen eigenen IHPDFFaceDetector übergebene Page Box entspricht nun der Bitmap, die er erhält
  • Barcode-Dekodierung mit explizitem Bereich sowie Seiten ohne CropBox oder mit CropBox gleich MediaBox bleiben unverändert

Version 2.770.153

Fixed

  • ApplyLoadedOCRTextLayer platziert die unsichtbare Textebene jetzt korrekt auf Seiten, deren CropBox von der MediaBox abweicht; bisher war der durchsuchbare Text um den Crop-Box-Versatz verschoben oder gegen die falsche Seitenhöhe skaliert, sodass Markierungen und Suchtreffer nicht auf den sichtbaren Wörtern lagen
  • Das OCR-Raster wird aus dem sichtbaren Seitenbereich (der auf die MediaBox beschnittenen CropBox) gerendert, und erkannte Wortpositionen werden jetzt durch denselben Bereich zurückgebildet
  • Die Page Box, die in THPDFOCRRequest an eine eigene IHPDFOCREngine übergeben wird, ist jetzt der gerenderte sichtbare Bereich und entspricht der Bitmap, die sie erhält
  • Seiten ohne CropBox oder mit CropBox gleich MediaBox bleiben unverändert

Version 2.770.152

Fixed

  • GetLoadedInvoiceSummary liefert den Namen des Käufers (BT-44) jetzt als dekodierten Text, sodass Namen mit nicht-ASCII-Buchstaben wie "Müller & Söhne" nicht mehr als rohe UTF-8-Bytes mit intakt belassenem XML-Escape zurückkommen
  • Der Käufername wird jetzt immer direkt aus der Käufer-Handelspartei gelesen, passend zum Verkäufernamen und den übrigen Summary-Feldern
  • ValidateVisualXmlConsistency profitiert ebenfalls: Ein Käufername mit Akzentbuchstaben oder maskierten Zeichen wird jetzt so mit dem sichtbaren Seitentext verglichen, wie er geschrieben ist

Version 2.770.151

Fixed

  • THPDFTable hält Zeilen, die durch einen RowSpan zusammengebunden sind, jetzt auf einer Seite zusammen: Passt die Gruppe nicht in den restlichen Platz, wandert die ganze Gruppe samt wiederholtem Kopf auf die nächste Seite
  • Eine Zelle, die sich über mehrere Zeilen erstreckt, läuft nicht mehr über den unteren Rand hinaus, während ihre Zeilen auf der nächsten Seite fortgesetzt werden
  • Eine Zeilenspan-Gruppe, die höher als eine ganze Seite ist, wird weiterhin Zeile für Zeile geteilt, wobei sich erstreckende Zellen am unteren Rand jeder Seite abgeschnitten werden
  • TotalHeightRendered bildet die verschobene Gruppe auf der letzten Seite ab

Version 2.770.150

Fixed

  • THPDFTable-Zellen mit ColSpan oder RowSpan von null oder weniger werden jetzt als einzelne Zellen gezeichnet, so wie das Tabellengitter sie bereits platziert hat, statt nachfolgende Zellen in falsche Spalten zu schieben
  • Negative Spans führen nicht mehr dazu, dass die Tabelle über ihr Gitter hinaus liest; Spans, die über die letzte Spalte oder Zeile hinauslaufen, werden auch beim Messen und Zeichnen an der Tabellengrenze abgeschnitten
  • Eine Zelle, deren erstes Wort breiter als die Spalte ist, beginnt nicht mehr mit einer leeren Zeile, sodass ihre Zeile nicht höher ist, als der umbrochene Text braucht

Version 2.770.149

Security

  • XFA-Formulare, die in ihrem DOCTYPE eine interne Entität deklarieren, können den Speicher nicht mehr durch vielfaches Referenzieren einer großen Entität zum Explodieren bringen: Der für interne Entitäten eingesetzte Text ist auf 16 MB pro Dokument begrenzt
  • Ein einzelner interner Entitätswert länger als 1 MB wird zurückgewiesen
  • Dokumente, die eine der beiden Grenzen überschreiten, laden nicht mehr und werfen eine EHPDFXFAError, statt auf Gigabytes von Text anzuschwellen; gewöhnliche Entitätsnutzung bleibt unberührt
  • Auch Text mit vielen Entitäts- oder Zeichenreferenzen wird in linearer Zeit dekodiert

Version 2.770.148

Fixed

  • RecalculateLoadedFormFieldsIncremental behandelt jetzt jedes als geändert übergebene Feld gleich, unabhängig davon, in welcher Reihenfolge die Namen gelistet sind
  • Ein berechnetes Feld, das direkt zusammen mit einem seiner Quellfelder geschrieben wurde, behält den geschriebenen Wert, statt nur dann neu berechnet zu werden, wenn es nach dieser Quelle gelistet ist
  • Felder, die von den geänderten Feldern abhängen, werden weiterhin genau einmal in Berechnungsreihenfolge neu berechnet

Version 2.770.147

Fixed

  • GS1-128-Barcodes mit Startcode A (THPDFBarcode-Typ 20) kodieren ihre Daten jetzt im Code Set A, wie es Code 128 A tut
  • Kleinbuchstaben in solchen Barcodes werden jetzt mit einem SHIFT zum Code Set B geschrieben statt mit einem Set-B-Codewort, das Scanner als Steuerzeichen in Set A lesen
  • Gescannte GS1-128-A-Symbole mit Kleinbuchstabentext liefern daher den Originaltext zurück

Version 2.770.146

Fixed

  • EAN-2- und EAN-5-Add-on-Barcodes (THPDFBarcode-Typen 18 und 19) hängen bei aktiviertem Checksum keine berechnete Ziffer mehr an Text an
  • Mehrfaches Zeichnen eines solchen Barcodes erzeugt jetzt jedes Mal dasselbe Symbol, statt den Text bei jedem Durchlauf um eine Ziffer wachsen zu lassen und das Balkenmuster zu verändern
  • Die Add-on-Symbole tragen per Definition kein Prüfzeichen, daher wird Checksum für sie ignoriert; das Paritätsmuster wird weiterhin wie bisher aus dem Wert abgeleitet

Version 2.770.145

Fixed

  • Der XFDF-Export dekodiert Formularfeldwerte und Annotationstext jetzt als PDF-Text-Strings (ISO 32000-1 7.9.2.2): UTF-16BE-Werte, Hex-Strings und PDFDocEncoding-Zeichen wie das Aufzählungszeichen werden als tatsächlicher Unicode-Text geschrieben statt als Hex-Ziffern oder Codepage-Müll
  • In XFDF exportierte Annotation-Inhalte, Autor, Betreff, Status und Overlay-Text behalten nicht-lateinische Zeichen, etwa chinesische oder kyrillische Kommentare
  • Rich Text (/RC, /RV), der mit einer XML-Deklaration beginnt, wird jetzt ohne sie eingebettet, damit das exportierte XFDF wohlgeformtes XML bleibt
  • Der XFDF-Import wandelt Text nicht mehr über die ANSI-Codepage des Systems: Werte, die PDFDocEncoding darstellen kann, werden als solche gespeichert, alles andere als UTF-16BE-Text-String — für Formularfelder wie für Annotationstext
  • Exportierte XFDF-Dateien bringen Zeichen außerhalb der ANSI-Codepage jetzt per ImportLoadedFormFromXFDF und ImportLoadedAnnotationsFromXFDF unverändert durch, ohne in Fragezeichen zu verwandeln

Version 2.770.144

Fixed

  • Namen und anderer Text in der Rechnungszusammenfassung werden jetzt aus dem UTF-8-Rechnungs-XML dekodiert, sodass ein Verkäufer wie "Müller GmbH" nicht mehr als entstellte Multibyte-Zeichen zurückkommt
  • Maskierte Markup-Zeichen und Zeichenreferenzen werden aufgelöst, sodass "A & B" im XML als "A & B" gemeldet wird
  • ValidateVisualXmlConsistency meldet einen Verkäufernamen mit Akzentbuchstaben oder kaufmännischem Und nicht mehr als fehlend im sichtbaren Seitentext, wenn er dort gedruckt ist
  • Summary-Text kommt in der ANSI-Codepage des Systems zurück, da die Felder des Summary-Records ANSI-Strings sind; Zeichen, die die Codepage nicht darstellen kann, werden zu Fragezeichen

Version 2.770.143

Fixed

  • GetLoadedInvoiceSummary meldet die Netto-Summe auf Rechnungsebene (BT-106) jetzt aus der monetären Kopfsummierung statt aus dem Betrag der ersten Position
  • Steuersumme, Gesamtsumme und fälliger Betrag werden ebenfalls aus der Kopfsummierung gelesen, auch für ZUGFeRD-1.0-Rechnungen
  • Das Ausstellungsdatum (BT-2) kommt jetzt als schlichter Datumswert zurück, etwa 20260305, ohne das verschachtelte DateTimeString-Markup
  • HPDFFacturXXMLElementText liefert jetzt die Zeichendaten des gesamten Elements ohne Kind-Tags und passt nicht mehr auf Elemente, deren Name lediglich mit dem angefragten Namen beginnt

Version 2.770.142

Fixed

  • Der XFDF-Export schreibt Zeichen außerhalb der Basic Multilingual Plane, etwa Emoji oder seltene CJK-Ideografien, jetzt als gültiges Vier-Byte-UTF-8, statt jede Surrogate-Hälfte einzeln zu kodieren, sodass strenge XML-Reader die Datei akzeptieren
  • Der XFDF-Import dekodiert Zeichenreferenzen oberhalb von U+FFFF, etwa 😀, jetzt zum vollständigen Zeichen, statt es auf ein unpassendes BMP-Zeichen zu kürzen
  • Zeichenreferenzen, die keinen Unicode-Scalar-Value benennen, und ungepaarte Surrogates beim Export werden jetzt zu U+FFFD, statt den Text zu korrumpieren
  • Von früheren Versionen geschriebene XFDF-Dateien importieren weiterhin korrekt

Version 2.770.141

Fixed

  • Feldwerte und Annotationstext mit Backslashes, etwa Windows-Pfade wie C:\Data\2024\001, überstehen XFDF-Export und -Import jetzt unverändert, statt dass Ziffernfolgen zu Steuerzeichen umgewandelt werden
  • Würde ein Backslash beim Zurücklesen als Escape gelesen, schreibt ihn der XFDF-Export jetzt als Oktal-Escape \134, wie in einem PDF-Literal-String (ISO 19444-1 5.8.2)
  • Der XFDF-Import dekodiert nur die Oktal-Escapes, die das Format für Steuerzeichen und Backslashes vorsieht; andere Backslash-Folgen aus Fremd-Dateien bleiben wörtlich erhalten
  • Auch SVG-Text, der durch denselben leichtgewichtigen XML-Reader läuft, verliert keine Backslash-Folgen mehr

Version 2.770.140

Fixed

  • Der dauerhafte Cache gerendeter Seiten, den RenderCacheFolder einschaltet, funktioniert jetzt für Dokumente, die mit LoadFromFile, LoadFromStream und LoadFromRandomAccessSource geöffnet wurden; bisher wurde die Plattenebene bei gewöhnlichen Ladevorgängen übersprungen, sodass keine Seite je in den Ordner geschrieben oder aus ihm gelesen wurde
  • Aus Dateien geladene Dokumente werden an ihrer Größe, ihrem Zeitpunkt der letzten Änderung sowie führenden und abschließenden Bytes erkannt, sodass das erneute Öffnen einer unveränderten Datei ihre Seiten aus dem Cache liest, ohne die ganze Datei zu hashen
  • Aus Streams oder Random-Access-Quellen geladene Dokumente werden über den SHA-256 ihres Inhalts identifiziert; setzen Sie RenderCacheFolder vor dem Laden, damit diese Dokumente die Plattenebene nutzen
  • Ein nach dem Laden bearbeitetes Dokument liest oder schreibt für den Rest dieses Ladevorgangs keine Platteneinträge mehr, sodass bearbeitete Seiten nie als Cache-Seiten der Originaldatei ausgeliefert oder gespeichert werden
  • Platteneinträge hängen jetzt auch vom Page-Render-Backend und dem ICC-Proofing-Workflow ab, sodass ein anderes Backend oder Ausgabeprofil keine mit anderen Einstellungen gerenderten Seiten wiederverwendet; verschlüsselte Dokumente landen nie im Platten-Cache

Version 2.770.139

Fixed

  • Das Importieren großer XFDF-Dateien skaliert nicht mehr mit dem Quadrat der Dateigröße: Eine Datei mit tausenden Feldern oder Annotationen parst jetzt in Millisekunden statt in Sekunden oder Minuten
  • Feldwerte mit vielen Zeilenumbrüchen oder anderen Zeichenreferenzen werden in linearer Zeit dekodiert
  • Der Spitzenspeicherbedarf beim XFDF-Parsing wächst nicht mehr mit Elementanzahl mal Dateigröße
  • SVG-Eingaben, die durch denselben leichtgewichtigen XML-Reader laufen, profitieren von derselben Beschleunigung

Version 2.770.138

Fixed

  • Wenn DecodeLoadedPageBarcodes eine um 90 oder 270 Grad gedrehte Seite erneut versucht, wird das Raster jetzt im Uhrzeigersinn gedreht an den Dekodierer übergeben, wie AttemptRotationDegrees es dokumentiert
  • Symbole, die nur in diesen Wiederholungsversuchen gefunden werden, werden jetzt an ihrer realen Position auf der Seite gemeldet statt an der punktgespiegelten
  • Die für solche Symbole gemeldete Ausrichtung entspricht jetzt ihrer Leserichtung auf der Seite, statt um 180 Grad daneben zu liegen
  • Eigene Barcode-Dekodierer, die auf den dokumentierten Uhrzeigersinn-Dreh setzen, erhalten jetzt korrekt gedrehte Raster

Version 2.770.137

Fixed

  • Das Kopieren von Seiten zwischen Dokumenten (CopyPageFromDocument, CopyPageByPhysicalIndex, Seitenimport und Merge-Methoden) verwandelt Text-Strings, die "<<" und ">>" oder "[" und "]" enthalten, nicht mehr in Wörterbücher oder Arrays; ein Annotation-Kommentar wie "Read <<this>> [now]" wurde bisher als kaputtes Wörterbuch kopiert
  • Hex-Strings, etwa Annotationsnamen und Bezeichner, werden in Hexadezimalform kopiert, statt sie als Literal-Strings ihrer Hex-Ziffern zu schreiben

Version 2.770.136

Fixed

  • Auf neuen Seiten erzeugte Annotationen (AddStampAnnotation, AddTextAnnotation und die übrigen THPDFPage-Annotationsmethoden) schreiben /Rect jetzt mit der unteren linken Ecke zuerst, [llx lly urx ury]; mehrere davon schrieben die obere Kante vor die untere, etwa [395 712 575 652] — das akzeptieren Viewer, aber PDF/A-Validatoren und einige Verarbeitungswerkzeuge weisen es zurück oder lesen es falsch

Version 2.770.135

Changed

  • THotPDF.RenderCacheFolder ist jetzt ein String (UnicodeString in Delphi 2009 und später, UnicodeString in C++Builder) statt eines AnsiString, sodass ein Cache-Ordner, dessen Pfad Zeichen außerhalb der Systemcodepage enthält, etwa ein chinesischer Benutzername auf einem englischen Windows, unverändert verwendet wird, statt in Fragezeichen überführt zu werden
  • Code, der der Eigenschaft einen AnsiString zuweist, kompiliert weiter; der Wert wird bei der Zuweisung nach Unicode konvertiert

Version 2.770.134

Fixed

  • SetOptionalContentGroupUsage mit der Kategorie Zoom schreibt den Zoom-Bereich jetzt als die Zahlen /min und /max, wie die PDF-Spezifikation sie definiert; der gesamte Wert wurde bisher als Text-String unter /Min geschrieben, was Viewer ignorieren, sodass der Zoom-Bereich der Ebene wirkungslos blieb
  • Der Zoom-Wert ist die minimale Vergrößerung, optional gefolgt vom Maximum, getrennt durch ein Leerzeichen (etwa '0.5 4'); ein Wert, der nicht mit einer Zahl beginnt, löst jetzt eine Ausnahme aus

Version 2.770.133

Fixed

  • Das Subsetting eingebetteter CFF/OpenType-Schriften verwirft keine Subroutinen mehr, die Glyphen noch verwenden; Glyphen mit mehr als acht Hints, hstemhm-Hints oder Counter-Masks wurden falsch gescannt, sodass eine verwendete Subroutine durch eine leere ersetzt und die Glyphe mit fehlenden oder kaputten Konturen gerendert werden konnte

Version 2.770.132

Fixed

  • RegisterNChannelColorSpace (die Überladung mit Spot-Farbstoff-Definitionen) schreibt Farbstoffnamen mit Leerzeichen oder Trennzeichen, etwa "PANTONE 185 C", jetzt korrekt als Schlüssel der Wörterbücher /Colorants, /Solidities und /DotGain; der rohe Name zerstörte die Dateisyntax
  • AddPDFX6ExternalOutputIntentSpotData schreibt seine Solidity- und Spektraldaten-Farbstoffschlüssel auf dieselbe Weise

Version 2.770.131

Fixed

  • Die mit EnableXMPMetadata geschriebenen XMP-Metadaten tragen Title, Author, Subject und Keywords jetzt als gültiges UTF-8, wenn sie Text in der Systemcodepage enthalten (etwa Akzent- oder chinesische Zeichen, zugewiesen als AnsiString); die rohen Codepage-Bytes machten das Paket zu ungültigem XML, das PDF/A-Validatoren und XMP-Reader zurückweisen
  • Steuerzeichen, die XML 1.0 nicht erlaubt, bleiben aus diesen XMP-Werten außen vor

Version 2.770.130

Fixed

  • JBIG2-Bilder, die mit JBIG2Options.AccumulateGlobalsAcrossPages geschrieben wurden, dekodieren wieder korrekt, wenn eine spätere Seite Symbole hinzufügt, die frühere Seiten nicht nutzten; solche Seiten verwiesen weiterhin auf den Globals-Stream der ersten Seite, dem die neuen Symbole fehlen, sodass Viewer sie verstümmelt oder gar nicht zeigten
  • Immer wenn eine Seite Symbole hinzufügt, wird ein Globals-Stream geschrieben, der das ganze Wörterbuch bis zu dieser Seite enthält, und von da an verwendet; Seiten ohne neue Symbole teilen sich weiterhin den neuesten

Version 2.770.129

Fixed

  • Das Speichern eines geladenen Dokuments, dessen Objekte eine von 0 verschiedene Generierungsnummer haben, schreibt jetzt konsistente Objektnummern: Ein vollständiges Neuschreiben (SaveLoadedDocument und verwandte Methoden) schreibt jedes Objekt, jede Referenz und jeden Cross-Reference-Eintrag mit Generierung 0; bisher behielten Objektköpfe und Trailer die alte Generierung, während Referenzen und die Cross-Reference-Tabelle 0 verwendeten
  • Inkrementelle Updates (SaveIncrementalUpdate und verwandte Methoden) verweisen jetzt mit ihrer echten Generierungsnummer auf bestehende Objekte; Referenzen wurden stets mit Generierung 0 geschrieben und zeigten damit auf Objekte, die nicht existieren, wenn das Original eine andere Generierung verwendete

Version 2.770.128

Fixed

  • THPDFPage.TextOutHTML mit MaxWidth verliert beim Zeilenumbruch keine Formatierung mehr: Wanden mehrere unterschiedlich formatierte Runs gemeinsam in die nächste Zeile, wurden sie zu einem Run verschmolzen, der mit der beim Umbruch aktiven Formatierung gezeichnet wurde — Farbe, Fett/Kursiv, Schrift, Größe, Sub-/Superscript-Offset und Link gingen verloren. Jeder Run behält jetzt seine eigene Formatierung in der neuen Zeile

Version 2.770.127

Fixed

  • InvalidateRenderedPageCache verwirft jetzt auch die von parallelem Rendering geteilten Type-3-Glyphen- und Halftone-Einträge; nach einer Invalidierung des ganzen Dokuments konnte das nächste parallele Rendering Glyphen wiederverwenden, die für den früheren Inhalt gecacht waren
  • PreflightLoadedPAdES leert den gemeinsamen Rendering-Cache nicht mehr als Nebeneffekt der Prüfung des PAdES-Levels einer Signatur, sodass Renderings nach einem Preflight ihre gecachten Glyphen behalten

Version 2.770.126

Fixed

  • Die Revisions- und Änderungsanalyse signierter Dokumente meldet Feldnamen jetzt korrekt, wenn der Name Klammern enthält oder mit einer endet, etwa "Total (net)"; das letzte Zeichen wurde abgeschnitten
  • Feldnamen, die mit Oktal-Escapes oder einer Backslash-Zeilenfortsetzung geschrieben wurden, werden ebenfalls dekodiert

Version 2.770.125

Fixed

  • SplitPDFToFiles öffnet jede Ausgabedatei beim Schreiben nicht mehr im Standard-PDF-Viewer; die intern erzeugten Dokumente haben AutoLaunch jetzt abgeschaltet

Version 2.770.124

Fixed

  • GetLoadedTrailerID liefert jetzt die permanente Datei-ID des Dokuments aus dem /ID-Array im Trailer, als Hexadezimaltext; sie suchte /ID im Dokumentkatalog, wo es nie liegt, und meldete daher für praktisch jede Datei keine ID

Version 2.770.123

Fixed

  • SetLoadedOpenActionPage schreibt jetzt ein Ziel, das die angefragte Seite benennt; die Seitenreferenz wurde als 0 0 R geschrieben, sodass Viewer das Dokument nicht an dieser Seite öffnen konnten
  • Das Ziel behält die aktuelle Ansichtsposition (null für left und top) statt 0 0 zu erzwingen, was zur unteren linken Ecke der Seite sprang

Version 2.770.122

Fixed

  • SetLoadedViewerPreferences schreibt HideToolbar, HideMenubar, FitWindow und DisplayDocTitle jetzt als Booleans; sie wurden als die Namen /true und /false geschrieben, die Viewer nicht als Booleans behandeln, sodass die Einstellungen wirkungslos blieben

Version 2.770.121

Fixed

  • CheckLoadedSignatureSeedValue erzwingt jetzt den /Reasons-Seed-Wert eines Signaturfelds, wenn die /Ff-Flags des Felds ihn als erforderlich markieren (Bit 4, Wert 8); ein nicht gelisteter Grund kam bisher durch
  • Gründe werden exakt verglichen, wie Text-Strings in PDF; "approved" genügt einem Seed-Wert, der "Approved" listet, nicht mehr

Version 2.770.120

Fixed

  • Mehrfaches Stempeln einer geladenen Seite mit StampLoadedPageText oder StampLoadedPageShape gibt jedem Stempel jetzt seine eigene Opazität und jedem Textstempel seine eigene Standardschrift; der zweite und weitere Stempel wiederverwendeten bisher Transparenz und Schrift des ersten Stempels auf der Seite
  • Ein Stempel mit derselben Opazität und Schrift wie ein früherer teilt weiterhin seine Ressourcen, sodass wiederholte identische Stempel die Seitenressourcen nicht anwachsen lassen

Version 2.770.119

Fixed

  • ExtractLoadedPageStructureText folgt jetzt Strukturelementen, deren /K-Eintrag eine schlichte Marked-Content-Nummer ist (etwa /K 3 oder /K [0 1]), der häufigsten Form in getagten PDFs; solche Elemente wurden ignoriert, sodass die Methode für viele getagte Dokumente keine Strukturreihenfolge meldete oder ihren Text in Zeichnungsreihenfolge zurückgab
  • Die Methode liest keinen ungültigen Katalogeintrag mehr, wenn ein Dokument kein brauchbares Root-Objekt hat

Version 2.770.118

Fixed

  • StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage und FlattenLoadedAnnotations zerstören keine Seiten mehr, die ihre Ressourcen vom übergeordneten /Pages-Knoten erben; sie gaben solchen Seiten ein neues, leeres /Resources-Wörterbuch, das die geerbten Schriften und Bilder versteckte, sodass der ursprüngliche Text und die Bilder der Seite nicht mehr dargestellt wurden
  • Die Seite erhält jetzt ihre eigene Kopie der geerbten Ressourcen, bevor die neue Schrift, das Bild oder das Form hinzukommt

Version 2.770.117

Fixed

  • ComposeLoadedPagesNUp, ImposeLoadedPagesNUp, ImposeLoadedPagesBooklet und die Seiten-Stitching-Methoden übernehmen jetzt Ressourcen, die eine Quellseite von ihrem übergeordneten /Pages-Knoten erbt; solche Seiten wurden ohne ihre Schriften und Bilder platziert, sodass ihr Text und ihre Bilder auf dem zusammengesetzten Blatt fehlten oder falsch waren

Version 2.770.116

Fixed

  • SaveIncrementalUpdateAuthenticated kann jetzt in die Datei zurückschreiben, aus der das inkrementelle Update gestartet wurde; das akzeptierte Update konnte das Ziel nicht ersetzen, weil das Dokument die Quelle noch offen hielt, und der Aufruf schlug stets mit einem Zugriffsverweigerungs-Fehler beim Commit fehl
  • Wie bei einem In-place-SaveIncrementalUpdate wird die Quelle vor dem Ersetzen freigegeben, bei Fehlschlag des Ersetzens wieder geöffnet, und BeginIncrementalUpdate muss erneut aufgerufen werden, bevor ein weiteres inkrementelles Speichern möglich ist

Version 2.770.115

Fixed

  • RepairPDFUA2Structure braucht bei Strukturbäumen, deren Elemente von mehr als einem Elternteil gelistet werden (oder die einen Zyklus bilden), nicht mehr exponentielle Zeit; die Reparatur der Sprachvererbung, die Reparatur der Überschriftenreihenfolge und der Marked-Content-Scan hinter der Alternative-Text-Reparatur laufen jetzt je einmal durch jedes Strukturelement. Ein konstruierter Baum aus 24 Elementen, die jeweils das nächste doppelt listen, brauchte bisher etwa 40 Sekunden

Version 2.770.114

Fixed

  • HPDFPaginateTable fügt nicht mehr Seiten hinzu, bis der Speicher platzt, wenn eine unteilbare Zeile nicht unter die wiederholten Kopfzeilen passt; auf einer Seite, die nur wiederholte Kopfzeilen enthält, wird die Zeile jetzt geteilt (oder, wenn die Kopfzeilen die Seite füllen, platziert und mit Überlauf zugelassen)
  • HPDFLayoutFootnotes und HPDFLayoutEndnotes laufen nicht mehr endlos, wenn der Separator auf einer Seite keinen Platz lässt oder die minimale Fragmenthöhe einer Note auf einer leeren Seite nicht erreichbar ist; die Note wird stattdessen auf dieser Seite platziert

Version 2.770.113

Fixed

  • HPDFBalanceColumns hängt nicht mehr, wenn ein teilbares Element eine Zeile hat, die höher als die Spaltenhöhe ist; es sprang ewig zur nächsten Spalte weiter. Eine solche Zeile wird jetzt allein am Kopf einer leeren Spalte platziert, mit Überlauf, und das Layout läuft weiter

Version 2.770.112

Fixed

  • Mit dem Standard-Security-Handler Revision 4 (RC4- oder AES-128-Crypt-Filter) verschlüsselte Dokumente öffnen wieder, wenn ihr Encryption-Dictionary den optionalen /Length-Eintrag auf oberster Ebene auslässt; das Laden schlug bisher mit "Unsupported legacy Standard security handler V=4 R=4 Length=40" fehl
  • Für solche Dokumente wird jeder /Length-Wert auf oberster Ebene akzeptiert, da der Datei-Schlüssel stets 128 Bit lang ist

Version 2.770.111

Fixed

  • ProcessObjectStreamsForDecompression und ExtractRawObjectFromStream vertrauen nicht mehr der deklarierten /N-Zahl eines Object-Streams: Eine Zahl über zehn Millionen wird zurückgewiesen, und die Zahl wird auf die Objektnummern-Paare begrenzt, die der Stream-Header tatsächlich aufnehmen kann, sodass eine konstruierte Datei sie nicht mehr dazu bringen kann, Millionen leerer Einträge zu allokieren oder durchzulaufen

Version 2.770.110

Fixed

  • Die Direct-File-API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 und verwandte Methoden) liest /Root, /Info, /Encrypt, /Prev und /XRefStm einer klassischen Cross-Reference-Sektion jetzt nur aus dem Trailer-Dictionary dieser Sektion selbst; bei inkrementell aktualisierten Dateien konnte sie ein /Prev aus den Objekten einer späteren Revision (etwa einem Outline-Eintrag) oder einem Trailer aufgreifen und scheitern oder die falsche Revision lesen
  • Eine /Prev-Kette, die zu einer bereits gelesenen Sektion zurückschleift, stoppt jetzt, statt dieselben Sektionen erneut zu lesen

Version 2.770.109

Security

  • ApplyLoadedRedactions entfernt jetzt den Text unter einem Schwärzungsbereich auch auf Seiten, deren Inhalt über mehrere Streams verteilt ist; wenn ein Stream mit einem Operator endete und der nächste mit einem begann (etwa ET gefolgt von BT), wurden der Text nach der Nahtstelle falschen Operanden zugeordnet und blieb in der gespeicherten Datei lesbar, obwohl der Bereich übermalt war
  • Content-Streams ohne Daten werden konsequent übersprungen, sodass die übrigen Streams zum auf der Seite lokalisierten Text passen

Version 2.770.108

Changed

  • GetLoadedOCGCount, GetLoadedOCGName, GetLoadedOCGVisibility und SetLoadedOCGVisibility verwenden jetzt denselben Index: die Position der Optional Content Group im /OCGs-Array der /OCProperties des Dokuments. Count und Name nutzten die Position im /ON-Array der Standardkonfiguration, Visibility die Position in /OFF und der Setter /OCGs, sodass ein Index drei verschiedene Gruppen bezeichnen konnte; Dokumente ohne /OCGs fallen weiterhin auf das /ON-Array zurück
  • GetLoadedOCGVisibility meldet eine Gruppe jetzt als versteckt, wenn sie in /OFF gelistet ist, oder wenn sie in keinem der Arrays steht und der /BaseState der Standardkonfiguration /OFF ist

Fixed

  • SetLoadedOCGVisibility legt dasselbe Referenzobjekt nicht mehr in beide /OCGs und /ON oder /OFF (es wurde zweimal freigegeben, wenn das Dokument freigegeben wurde) und verliert die entfernten Einträge nicht mehr

Version 2.770.107

Fixed

  • CopyLoadedPage lässt die Seiten-Dictionarys von Quelle und Ziel nicht mehr dieselben /Contents- und /Resources-Eintragsobjekte teilen; die geteilten Objekte wurden zweimal freigegeben, wenn das Dokument freigegeben oder der Zieleintrag ersetzt wurde, was den Speicher korrumpieren konnte
  • Die Zielseite erhält jetzt ihre eigene Referenz auf Quellinhalt und Ressourcen (direkte Werte werden kopiert), und ihr Eintrag im Cache gerendeter Seiten wird aufgefrischt

Version 2.770.106

Fixed

  • Das Laden einer beschädigten PDF verliert nicht mehr für jedes nicht lesbare Stream-Objekt Speicher, etwa für einen Stream ohne /Length-Eintrag und ohne endstream-Schlüsselwort oder einen, dessen Dictionary oder Daten sich nicht laden lassen; wiederholtes Öffnen solcher Dateien ließ den Prozess unbegrenzt wachsen

Version 2.770.105

Fixed

  • Zahlen mit leerem Bruchteil wie "21." (von der PDF-Spezifikation erlaubt) lassen das Laden nicht mehr fehlschlagen; eine so geschriebene indirekte Stream-/Length ließ bisher den ganzen Stream fallen und die Seite blieb leer
  • Zahlen mit führendem Plus, leerem Ganzzahlteil wie ".5" oder Ganzzahlteil jenseits des 32-Bit-Bereichs werden ebenfalls korrekt gelesen

Version 2.770.104

Fixed

  • PDFmerge-Demo: Mit aktivierten Lesezeichen öffnet jedes Lesezeichen pro Quelle jetzt die erste zusammengeführte Seite dieser Quelle; bisher zeigte jedes Lesezeichen auf die erste Seite der zusammengeführten Datei
  • PDFmerge-Demo: Die Standard-Beispieleingaben und der Ausgabename sowie relative Namen, die ins Formular getippt werden, beziehen sich auf den Demo-Ordner; das Hinzufügen von Dateien oder die Ausgabewahl in einem Dialog ändert das aktuelle Verzeichnis nicht mehr und beschädigt die relativen Einträge nicht

Version 2.770.103

Fixed

  • TextOut-Demo: Die erzeugte TextOut.pdf nutzt jetzt wirklich komprimierte Content-Streams, wie die Demo-Kommentare versprechen; sie setzt Compression auf cmFlateDecode, statt sich auf das BeginDoc-Argument zu verlassen, das die Kompression nicht steuert

Version 2.770.102

Fixed

  • Mit AlphaBlend in ein Enhanced Metafile gezeichnete Bilder behalten ihre aufgezeichnete Opazität, wenn das Metafile mit THPDFEmfPatcher.RenderEmfDirect konvertiert wird; sie wurden bisher mit Opazität null gemischt und verschwanden
  • Auch das aufgezeichnete Alpha-Format wird beachtet, sodass Bilder ohne Alphakanal mit ihrer konstanten Opazität gemischt werden statt zu fehlschlagen
  • Bitmap-Records, deren Header oder Pixeldaten aus dem Record herauszeigen oder deren Pixeldaten kürzer sind als die deklarierte Bitmap, werden jetzt übersprungen, statt über das Record hinaus zu lesen
  • Bitmaps mit mehr als 32768 Pixeln je Seite oder 64 Megapixeln insgesamt werden übersprungen, statt vollständig reserviert zu werden

Version 2.770.101

Fixed

  • StitchLoadedPage, StitchLoadedPageSideBySide und StitchLoadedPageSideBySideEx zeichnen die Quellseite jetzt über ein Form XObject, das den Inhalt, die Page Box und die Ressourcen der Seite trägt; das Seiten-Dictionary selbst wurde als XObject registriert, was Viewer nicht zeichnen können, sodass die zusammengefügte Seite nicht erschien
  • Das Zusammenfügen mehrerer Seiten auf dasselbe Ziel erhält jede zusammengefügte Seite: Jede bekommt ihren eigenen XObject-Namen, statt sich alle einen Namen zu teilen, der die vorherige Seite ersetzte

Version 2.770.100

Fixed

  • Form XObjects werden beim Rendern jetzt auf ihre /BBox beschnitten, wie ISO 32000-1 es verlangt; Inhalt, den ein Form außerhalb seiner Bounding Box zeichnet, erscheint nicht mehr auf der Seite
  • Form XObjects, die tiefer als vier Ebenen verschachtelt sind, werden jetzt gezeichnet; sie wurden bisher fallengelassen, als würden sie rekursieren. Verschachtelung ist bis zu 32 Ebenen erlaubt
  • Ein Form XObject, das sich selbst zeichnet, direkt oder über andere Forms, wird erkannt, und der wiederholte Aufruf wird übersprungen, mit einem Rekursionseintrag in den Render-Diagnosedaten

Version 2.770.99

Fixed

  • PDFOptimize-Demo: Die Reihe kleiner Rechtecke auf jeder Textseite wird jetzt mit einem Strichoperator gezeichnet, sodass die Balken sichtbar sind und der Content-Stream jeden Pfad mit einem Zeichenoperator abschließt, wie ISO 32000-1 8.5.2 es verlangt; die gemeldeten Größen der Text-PDFs ändern sich dadurch geringfügig

Version 2.770.98

Fixed

  • Literal-Strings mit ausgewogenen Klammern ohne Backslashes, etwa /Title (Report (draft) v2), werden beim Laden eines Dokuments jetzt vollständig gelesen; der String endete bisher an der ersten schließenden Klammer und der Rest des Dictionarys wurde falsch gelesen
  • Maskierte Klammern funktionieren weiterhin wie bisher

Version 2.770.97

Fixed

  • Das Laden verwechselt ein Dictionary-Objekt nicht mehr mit einem Stream, wenn einer seiner String- oder Namenswerte die Buchstaben "stream" am Zeilenende enthält, etwa ein Info-Dictionary mit /Title (Livestream); das Objekt wurde als Stream gelesen und seine Einträge gingen verloren
  • Das stream-Schlüsselwort wird jetzt nur als eigenes Token erkannt, nach dem schließenden >> des Dictionarys und am Zeilenende, wie die PDF-Spezifikation Stream-Objekte festlegt

Version 2.770.96

Fixed

  • Stamp-Demo: PNG- und BMP-Dateien aus der Bildauswahl lassen sich jetzt als Bildstempel verwenden; bisher funktionierte nur JPEG, andere Dateien schlugen mit einem Invalid-Bitmap-Fehler fehl
  • Stamp-Demo: Die Gummistempel-Annotation landet wie vorgesehen im oberen rechten Bereich jeder Seite, unter einem Bildstempel in der oberen Ecke, statt in der unteren rechten Ecke, wo sie sich mit einem Bildstempel unten rechts überschnitt
  • Stamp-Demo: Die Standardpfade für Eingabe, Ausgabe und Bild beziehen sich auf den Demo-Ordner, und die Dateiauswahl in einem Dialog ändert das aktuelle Verzeichnis nicht mehr, sodass relative Namen weiterhin auf dieselben Dateien zeigen

Version 2.770.95

Fixed

  • Zeitstempel-Anfragen mit einer Policy-OID (HPDFRFC3161BuildRequest, und Signieren mit einer Policy der Zeitstempelautorität) kodieren die angefragte Policy jetzt als schlichte Objekt-ID, wie RFC 3161 es vorschreibt
  • Die Policy wurde bisher in ein Context-Tag gepackt, das RFC 3161 für Anfrage-Erweiterungen reserviert, sodass eine strenge Zeitstempelautorität die Anfrage zurückwies oder die Policy ignorierte
  • Anfragen ohne Policy-OID bleiben unverändert

Version 2.770.94

Fixed

  • ViewerPref-Demo: Ein nicht gesetztes Initial Zoom bedeutet jetzt wirklich "None (Default)"; die erzeugte PDF öffnet nicht mehr auf die Seitenhöhe eingepasst — das war der Komponentenstandard, den die Demo nicht zurücksetzte

Version 2.770.93

Fixed

  • FileAttach-Demo: Die Annotationen auf Seitenebene für Anlagen werden jetzt erzeugt, wenn die Demo aus einem Ordner läuft, dessen Name Zeichen außerhalb der ANSI-Codepage des Systems trägt; die angehängte Datei wird unter ihrem schlichten Dateinamen statt eines absoluten Pfads übergeben

Version 2.770.92

Fixed

  • HTMLText-Demo: Ein Ausgabepfad mit Zeichen außerhalb der ANSI-Codepage des Systems (etwa ein griechischer oder kyrillischer Ordnername) wird jetzt korrekt geschrieben statt zu fehlschlagen
  • HTMLText-Demo: Die erzeugte PDF öffnet nicht mehr automatisch in einem externen Reader, passend zu den übrigen Konsolen-Demos

Version 2.770.91

Fixed

  • Der SVG- und XPS-Pfadimport löst bei Zahlen mit hunderten Stellen oder langen Zahlen kombiniert mit einem großen Exponenten keine EOverflow-Ausnahme mehr aus; solche Werte werden wie jede andere Zahl außerhalb des Bereichs zurückgewiesen
  • Betrifft SVG-Bilder über die SVG-Import-APIs platzierte und XPS-Pfadgeometrie auf Compilern, deren Gleitkomma-Ausnahmen nicht maskiert sind
  • Gewöhnliche Zahlen, inklusive langer Mantissen mit negativen Exponenten, werden wie bisher gelesen

Version 2.770.90

Fixed

  • EmfDraw-Demo: Eine fehlgeschlagene Konvertierung (etwa ein fehlendes Eingabe-Metafile) endet jetzt mit Exit-Code 1 statt 0, sodass Skripte und Build-Schritte, die die Demo ausführen, den Fehler erkennen

Version 2.770.89

Fixed

  • CJKAnnotations-Demo: Ist Arial Unicode MS nicht installiert, weicht die Demo jetzt tatsächlich auf Microsoft YaHei aus; sie prüft die installierten Schriften, statt auf eine Ausnahme zu warten, die eine fehlende Schrift nie auslöste, sodass der CJK-Text nicht mehr in einer Ersatzschrift ohne CJK-Abdeckung landet

Version 2.770.88

Fixed

  • Content-Streams, die mehr als 32 q-Operatoren verschachteln, verlieren den umgebenden Grafikzustand nicht mehr: Tiefere Saves wurden ignoriert, während das zugehörige Q dennoch restaurierte, sodass Text und Grafiken nach dem verschachtelten Block den Zustand von vor einem äußeren q verwendeten
  • Betrifft die Textextraktion über das Content-Device-Interface und den SVG-Export solcher Seiten
  • Gespeicherte Zustände wachsen jetzt mit der Verschachtelungstiefe; sehr tiefes Verschachteln wird weiterhin korrekt gepaart

Version 2.770.87

Fixed

  • ImageDemo: Das Lesezeichen "Image zoom" springt jetzt zur Überschrift IMAGE ZOOM statt zu einem Punkt nahe der Unterkante der ersten Seite

Version 2.770.86

Security

  • Das Öffnen einer für ein Empfängerzertifikat mit elliptischem Kurvenschlüssel verschlüsselten PDF (ECDH-Schlüsselvereinbarung) überschreibt das rohe Shared Secret und die Zwischenpuffer der Schlüsselableitung jetzt, sobald sie nicht mehr gebraucht werden — auch beim Wiederholungsversuch mit der alternativen Byte-Reihenfolge und auf jedem vorzeitigen Fehlerpfad
  • Das Signieren mit einem Zertifikat aus dem Windows-Zertifikatspeicher lässt crypt32.dll und advapi32.dll nicht mehr geladen, wenn eine benötigte CryptoAPI-Funktion nicht gefunden wird

Version 2.770.85

Security

  • Die Konturerzeugung für eine Type-1-Glyphe, deren Charstring sbw mit zu wenigen Operanden verwendet, liest nicht mehr vor dem unteren Ende des Operandenstapels; der fehlerhafte Operator wird ignoriert
  • Ein Type-1-Charstring, der mit dem Escape-Byte eines Operators mit zwei Bytes endet, liest nicht mehr über sein Ende hinaus

Version 2.770.84

Fixed

  • Die Bytelänge der Zeichencodes in einem CMap-Codespace-Bereich stammt jetzt aus der Länge seiner Hex-Strings, wie ISO 32000-1 9.7.6.2 es vorschreibt; ein Bereich wie <0000> <00FF> galt als ein Byte breit, weil seine Obergrenze in ein Byte passt, was Zweibyte-Codes beim Rendern und bei der Textextraktion zerchnitt
  • Codespace-Bereiche, die aus eingebauten CMaps geladen werden, tragen ihre Codelänge ebenfalls mit sich

Version 2.770.83

Fixed

  • Beim Einbetten einer Teilmenge einer installierten TrueType-Schrift bleiben jetzt alle Bestandteile zusammengesetzter Glyphen erhalten (akzentuierte Buchstaben und Ähnliches), deren Komponenten eine Skalierung oder eine 2x2-Transformation tragen; die Komponente nach einer solchen Transformation wurde falsch gelesen, sodass sie aus der Teilmenge verschwinden oder ihre Glyphenreferenz über die Bytes der Transformation geschrieben werden konnte
  • Zusammengesetzte Glyphen, deren Komponenten sich zyklisch aufeinander beziehen, hinter die Glyphenzahl der Schrift verweisen oder auf eine leere Glyphe zeigen, bringen das Schrift-Subsetting nicht mehr zum Absturz oder zum Hängen
  • In einer Teilmenge werden die Komponentenreferenzen einer in einer anderen verschachtelten zusammengesetzten Glyphe einmal statt zweimal neu nummeriert

Version 2.770.82

Fixed

  • Reelle Zahlen in CFF-Font-Wörterbüchern (FontMatrix, FontBBox, Blue-Werte und Ähnliches) werden jetzt korrekt gelesen, wenn ein Byte neben einer Ziffer ein Vorzeichen, einen Dezimalpunkt oder einen Exponenten trägt; die Ziffer im selben Byte fiel bisher weg, aus -2.25 wurde so -0.5
  • Diese Werte werden unabhängig von den Windows-Regionaleinstellungen mit Punkt als Dezimaltrennzeichen geparst; auf Systemen mit Dezimalkomma schlug das bisher mit einem Konvertierungsfehler fehl

Version 2.770.81

Fixed

  • Die Textextraktion und ToUnicode-Nachschlageaktionen liefern für Codes in einem beginbfrange-Arrayeintrag, der auf einen anderen Arrayeintrag mit Mehrzeichen-Zielen folgt, nicht mehr eine veraltete Mehrzeichen-Zeichenkette zurück; solche Codes werden jetzt auf ihr eigenes einzelnes Zeichen abgebildet

Version 2.770.80

Fixed

  • Die Instanziierung einer variablen TrueType-Schrift mit gewählten Achsenwerten (etwa über SetVariableFontAxis) verzerrt Glyphen nicht mehr, deren gvar-Daten nach einer weiteren Tuple eine sparse Tuple enthalten; die sparse Tuple setzte bei den Deltas der vorigen Tuple an und verschob deren Punkte damit ein zweites Mal
  • Punkte, die eine sparse Tuple auslässt, werden jetzt nur aus den von ihr gelisteten Punkten interpoliert, wie die OpenType-gvar-Regeln es verlangen

Version 2.770.79

Security

  • AddTiffFromFile weist eine TIFF-Seite ab, deren Breite mal Höhe ein Raster von mehr als 2 GB erfordert, und löst eine Ausnahme aus, statt einen Puffer mit überlaufener Größe zu allokieren und den Dekoder über sein Ende hinaus schreiben zu lassen (Heap-Überlauf)
  • Eine TIFF-Seite mit Breite oder Höhe null wird auf dieselbe Weise abgewiesen
  • Hohe TIFF-Seiten (1200 Zeilen und mehr) melden jetzt einen Allokierungsfehler, statt in einen nil-Puffer zu dekodieren

Version 2.770.78

Fixed

  • Glyphen von Type-3-Schriften folgen jetzt der horizontalen Skalierung (Tz): Ein Lauf mit 200 % horizontaler Skalierung wird doppelt so breit gezeichnet statt in seiner natürlichen Breite
  • Glyphen von Type-3-Schriften folgen jetzt der Hoch-/Tiefstellung (Ts), sodass hoch- und tiefgestellter Text in Type-3-Schriften angehoben oder abgesenkt wird, statt auf der Grundlinie zu bleiben
  • Die Glyphenvorschübe wurden bereits skaliert; die Glyphenformen passen jetzt dazu

Version 2.770.77

Fixed

  • RFC-3161-Zeitstempelanfragen, die HPDFRFC3161BuildRequest baut, kodieren die Nonce immer als minimalen DER INTEGER; begann die zufällige Nonce mit einem Null-Byte, trug die Anfrage eine überzählige führende Null, die strenge Zeitstempelserver als fehlerhaft zurückweisen
  • Die zurückgegebene Nonce behält die angeforderte Länge, sodass Aufrufer, die sie mit der Zeitstempelantwort vergleichen, nicht betroffen sind
  • Verschlüsselte PDF-2.0-Dateien (AES-256-GCM), deren Object-Streams zu leerem Inhalt entschlüsseln, laden nicht mehr mit einem GCM-Authentifizierungsfehler; ein leerer Object-Stream mit gültigem Authentication-Tag wird jetzt akzeptiert, ein manipulierter Tag weiterhin abgelehnt

Version 2.770.76

Fixed

  • Hyperlink-Demo: Link-Beschriftungen und URLs mit Zeichen außerhalb der ANSI-Codepage des Systems (etwa griechischer, kyrillischer oder akzentuierter Text) werden nicht mehr in Fragezeichen verwandelt; Beschriftungen werden als Unicode-Text gezeichnet, über den ein URI-Link gelegt wird
  • Hyperlink-Demo: Nicht-ASCII-Zeichen in einer URL werden vor dem Speichern in der Link-Aktion als UTF-8 percent-encoded, sodass Reader die beabsichtigte Adresse öffnen

Version 2.770.75

Fixed

  • CalRGB-Farben mit Komponenten außerhalb 0..1 lösen beim Rendern keine Gleitkomma-Ausnahme (EInvalidOp) mehr aus; die Komponenten werden auf ihren gültigen Bereich begrenzt, bevor das Gamma angewandt wird
  • Solche Farben rendern jetzt als die nächstliegende Farbe im gültigen Bereich statt als undefinierte — auf Compilern, deren Gleitkomma-Ausnahmen maskiert sind

Version 2.770.74

Fixed

  • Direct-File-API-Rewrites (etwa DADirectEncryptFileAES256 und DADirectDecryptFileAES256), die gleichzeitig auf mehreren Threads laufen, beschädigen sich gegenseitig nicht mehr die Ausgabe; die gemeinsame Byte-Range-Kopie nutzte einen prozessweiten Puffer

Version 2.770.73

Fixed

  • Der gemeinsame Sperr-Cache von THPDFSignatureValidationBatch findet jetzt OCSP-Antworten für Signaturzertifikate, deren Seriennummer ihr höchstes Bit gesetzt hat; solche Antworten wurden unter einer Seriennummer ohne führendes Null-Byte gespeichert und mit ihr gesucht, sodass jede spätere Signatur den Cache verfehlte
  • Von einem delegierten Responder signierte OCSP-Antworten oder solche, die den Responder per Schlüssel identifizieren, werden jetzt unter dem Zertifikatsaussteller gespeichert und können von späteren Signaturen im Batch wiederverwendet werden; bisher landeten sie unter dem Responder-Namen oder gar nicht im Cache
  • Signaturen, die sich auf Nachweise stützen, die eine frühere Signatur desselben Batchs im Cache abgelegt hat, kommen in diesen Fällen jetzt zu einem vertrauenswürdigen Ergebnis statt zu einem unbekannten Sperrstatus

Version 2.770.72

Fixed

  • Das Auffinden einer eingebetteten Datei über den Namen (GetLoadedEmbeddedFileSpec, ExtractEmbeddedFileBytes, SaveLoadedEmbeddedFileToDisk und verwandte Methoden) überläuft den Stapel nicht mehr, wenn der /EmbeddedFiles-Namensbaum des Dokuments Knoten enthält, die einander oder sich selbst als /Kids listen
  • Jeder Namensbaum-Knoten wird einmal durchsucht, sodass Namen, die über einen gemeinsam genutzten Knoten erreichbar sind, weiterhin gefunden werden

Version 2.770.71

Fixed

  • PageSizes-Demo: Die Seiten in den chinesischen Formaten 8K und 16K geben ihre vollständige Beschreibung jetzt auf jedem System aus; die chinesischen Formatnamen sind in Pinyin angegeben, weil die Beschreibungen in Arial gezeichnet werden, das keine CJK-Glyphen hat, und Nicht-ASCII-Text auf Nicht-CJK-Codepages zu Fragezeichen wurde

Version 2.770.70

Fixed

  • Axiale Schattierungen (Typ 2) überdecken jetzt den gesamten gefärbten Bereich, wenn die Schattierungsachse weit von ihm entfernt liegt — etwa ein Verlauf, der mit /Extend [true true] außerhalb der Seitenkante definiert ist; solche Bereiche blieben bisher ungefärbt
  • Betrifft den sh-Operator und Schattierungsmuster, die als Füll- oder Strichfarbe dienen

Version 2.770.69

Fixed

  • Navigation-Demo: Die benannten Ziele chapter-1 und chapter-2 öffnen ihre Seiten jetzt oben, 60 Punkte unter der Oberkante, statt zum unteren Seitenrand zu scrollen; Zielkoordinaten liegen im standardmäßigen PDF-Benutzerraum mit Ursprung unten links

Version 2.770.68

Fixed

  • Die Textextraktion aus einer PDF mit eingebetteter TrueType-Schrift bleibt nicht mehr minutenlang hängen, wenn die cmap der Schrift abgeschnitten ist, aber Tausende Segmente oder Gruppen behauptet; die Tabellenlänge wird jetzt geprüft, bevor Segmente und Gruppen gelesen werden
  • Beim Aufbau der Glyphen-zu-Unicode-Zuordnung für eine eingebettete TrueType-Schrift wird jede cmap-Untertabelle einmal pro Segment oder Gruppe durchlaufen, statt alle 65.535 BMP-Codepunkte einzeln nachzuschlagen — das beschleunigt auch die Extraktion mit großen CJK-Schriften
  • Glyphen-Nachschlagen über eine abgeschnittene Format-4- oder Format-12-cmap-Untertabelle stoppen am Ende der Schriftdaten, statt Segmente zu durchsuchen, die nicht vorhanden sind

Version 2.770.67

Fixed

  • Exponentialfunktionen (Typ 2) und Stitching-Funktionen (Typ 3) beachten jetzt eine /Domain mit nur einer Eingabe wie [0 0.5]; sie wurde bisher ignoriert und durch [0 1] ersetzt, sodass Eingaben auf das falsche Intervall begrenzt wurden
  • Eine Exponentialfunktion ohne /C1 verwendet jetzt den Standardwert [1.0]; Separation-Farben und Schattierungen, die so definiert waren, wurden bisher schwarz gerendert
  • Exponentialfunktionen werten C0 + x^N (C1 - C0) jetzt mit der Eingabe selbst aus, statt sie in 0..1 umzuskalieren — das entspricht ISO 32000-1 für Domains außer [0 1]
  • Ausgaben von Exponentialfunktionen werden nur dann auf /Range begrenzt, wenn es vorhanden ist; Spotfarben mit einem Lab-Alternativfarbraum (L* bis 100) wurden auf 0..1 begrenzt und fast schwarz gerendert
  • Eine Exponentialfunktion, deren Eingabe außerhalb der Werte liegt, für die sie definiert ist, wird zurückgewiesen, statt eine Gleitkomma-Ausnahme auszulösen

Version 2.770.66

Fixed

  • PKCS#12-/PFX-Dateien, die von Tools ohne Kennwort exportiert wurden, die ihre Schlüssel aus einem Kennwort der Länge null ableiten, öffnen jetzt mit leerem Kennwort in HPDFParsePFX, HPDFParsePFXByLocalKeyID, HPDFEnumeratePFXIdentities und den PFX-Signaturmethoden; bisher schlugen sie mit einem Authentifizierungsfehler fehl
  • Bei leerem Kennwort wird zuerst die Standardkodierung von RFC 7292 versucht und an zweiter Stelle die Variante mit Länge null — sowohl bei der Integritätsprüfung als auch bei der Schlüsselentschlüsselung —, sodass Dateien, die bisher öffneten, sich weiterhin genauso öffnen

Version 2.770.65

Fixed

  • Der Seitenkopf der C++Builder-DBTable-Demo lautet jetzt "Page 1" statt "Page1"
  • Ein Fehler beim Schreiben der Tabelle in der C++Builder-DBTable-Demo schließt jetzt das halb fertige Dokument, sodass der nächste Klick von einem sauberen Zustand startet

Version 2.770.64

Fixed

  • Die C++Builder-Konsolen-Demos AnnotationInteraction, FormFields, CanvasDraw, EmfDraw, FormXObject, GraphicDraw, ImageDemo, ImageMask, LineGraphicsState und RtLTextOut wechseln beim Start ohne Argumente in den Programmordner — wie die Delphi-Demos —, sodass ihre Eingabedateien gefunden und ihre PDFs dorthin geschrieben werden, auch wenn sie aus einem anderen Verzeichnis gestartet werden
  • Die C++Builder-Graphic-Demos senden keine Schließen-Nachricht mehr an jedes Fenster, dessen Titel den Namen ihrer Ausgabe-PDF enthält, wodurch fremde Fenster geschlossen werden konnten
  • Die C++Builder-ImageMask-Demo arbeitet jetzt wie die Delphi-Version: Sie prüft, dass Mask.bmp und Image.jpg existieren, komprimiert ihre Ausgabe, öffnet keinen Betrachter und meldet Fehler, statt mit einer unbehandelten Ausnahme zu enden
  • Die C++Builder-EmfDraw-Demo meldet einen Fehler — etwa eine fehlende Sample.emf — und gibt einen Exit-Code ungleich null zurück, statt mit einer unbehandelten Ausnahme zu enden
  • Die C++Builder-AddDelPages-Demo löst relative Eingabe- und Ausgabedateinamen gegen den Programmordner auf, wie die Delphi-Version

Version 2.770.63

Fixed

  • Die C++Builder-FileAttach-Demo schreibt FileAttach.pdf neben die ausführbare Datei — den Namen, den die Delphi-Version und das Readme verwenden —, statt Output.pdf ins Arbeitsverzeichnis, und legt ihren FileAttach.txt-Anhang im selben Ordner ab

Version 2.770.62

Fixed

  • Die Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 und die anderen direkten Rewrite-Methoden) liest Cross-Reference-Stream-Offsets jenseits von 2 GiB jetzt korrekt; solche Offsets wurden abgeschnitten und dadurch negativ, sodass Objekte im oberen Teil einer großen Datei nicht gefunden werden konnten
  • /Prev- und /XRefStm-Offsets jenseits von 2 GiB im Trailer oder Cross-Reference-Stream werden verfolgt, statt als 0 gelesen zu werden — ältere Revisionen und hybride Cross-Reference-Abschnitte großer Dateien werden nicht mehr übersprungen
  • Dasselbe gilt beim Laden einer großen Datei und beim Inspizieren ihrer Revisionen
  • Die neuen Hilfsfunktionen HPDFDirectReadUIntBE64 und HPDFFindNameInt64 geben den vollen 64-Bit-Wert zurück

Version 2.770.61

Fixed

  • Ein Cross-Reference-Stream, dessen /W-Feldbreiten negativ oder größer als 8 Bytes sind, wird jetzt abgelehnt statt dekodiert; das Laden fällt aufs Durchsuchen der Datei nach ihren Objekten zurück
  • Die Direct-File-API-Methoden (etwa DADirectEncryptFileAES256) lesen auf so einer Datei keinen Speicher mehr außerhalb der dekodierten Tabelle und können nicht mehr abstürzen; sie weisen sie stattdessen zurück

Version 2.770.60

Fixed

  • Textextraktion, Suche und Glyphenpositionen lesen den "-Text-Operator jetzt korrekt: Sein erster Operand ist der Wortabstand, sein zweiter der Zeichenabstand; beide waren bisher vertauscht
  • Zeilen, die mit " und von null verschiedenem Wort- oder Zeichenabstand geschrieben werden, melden keine verschobenen Glyphenpositionen mehr, die Wörter im extrahierten Seitentext zusammenziehen oder trennen und Suchtreffer falsch platzieren konnten
  • Das Seiten-Rendering war nicht betroffen

Version 2.770.59

Fixed

  • Table-Demo: Die Zeilen unter dem "Group A"-Rowspan zeigen ihren Eintrag und ihre Notiz jetzt in den Spalten Item und Notes; bisher war der Notiztext um eine Spalte verschoben und fiel weg
  • Table-Demo: Die erzeugte PDF wird nicht mehr automatisch in einem externen Reader geöffnet — im Einklang mit den anderen Konsolen-Demos —, und Ausgabepfade außerhalb der ANSI-Codepage des Systems bleiben unverändert

Version 2.770.58

Fixed

  • Das Dekomprimieren von Flate-Daten in einen Stream verliert den Dekoder-Zustand nicht mehr (rund 40 KB pro Vorgang), wenn der Quell- oder Zielstream mittendrin eine Ausnahme auslöst — etwa wenn ein Schreibvorgang fehlschlägt oder ein Stream seine Größengrenze erreicht
  • Das Komprimieren einer Zeichenkette verliert ihren temporären Puffer nicht mehr, wenn die Komprimierung eine Ausnahme auslöst
  • Erfolgreiche Komprimierung und Dekomprimierung verhalten sich genau wie bisher

Version 2.770.57

Fixed

  • Zertifikate, deren Namenseinschränkungs-Erweiterung nicht als critical markiert ist, werden bei der Validierung von Signaturzertifikaten nicht mehr als unlesbar zurückgewiesen; ein CA-Zertifikat dieser Art ließ bisher jede Kette durch es scheitern
  • Die Einschränkungen eines solchen Zertifikats werden jetzt wie critical-Einschränkungen auf den Rest der Kette angewandt — Signaturernamen außerhalb der erlaubten Teilbäume werden weiterhin als Verletzung von Namenseinschränkungen gemeldet

Version 2.770.56

Fixed

  • PostScript-Rechenfunktionen (Typ 4) mit tief verschachtelten if- oder ifelse-Prozeduren überlaufen den Stapel beim Rendern nicht mehr; eine solche Funktion gilt als unbrauchbar, und die Farbe fällt zurück wie bei jeder anderen ungültigen Funktion
  • Die Verschachtelung ist auf 64 Ebenen begrenzt — weit darüber hinaus, was echte Rechenprogramme nutzen; gewöhnliche Type-4-Tint-Transformationen und Schattierungen rendern wie bisher
  • Die Auswertung von Rechenfunktionen braucht pro Verschachtelungsebene weniger Stapel

Version 2.770.55

Fixed

  • E-Invoice-Demo: Das extrahierte Factur-X-/ZUGFeRD-XML wird als UTF-8 dekodiert, sodass akzentuierte und andere Nicht-ASCII-Zeichen in Namen und Adressen im XML-Bereich nicht mehr verstümmelt erscheinen
  • E-Invoice-Demo: Ab Delphi XE2 entscheidet das kombinierte E-Rechnungsurteil jetzt über den Geschäftsregelschritt — ein Fehlschlag der Regeldatei oder -Engine lässt die Validierung scheitern, statt still durchzugehen
  • E-Invoice-Demo: Eine Abweichung zwischen sichtbarem Text und XML aus der heuristischen Konsistenzprüfung wird als Warnung gemeldet und lässt die Gesamtvalidierung nicht mehr allein scheitern

Version 2.770.54

Security

  • Die CMS-Signaturprüfung (HPDFVerifyCMSSignature, HPDFVerifyCMSSignatureEx und geladene PDF-Signaturen) meldet jetzt eine fehlerhafte Signatur, wenn die signierten Attribute das Content-Type-Attribut vermissen lassen oder einen anderen Content-Type nennen als den signierten Inhalt — wie RFC 5652 es verlangt; solche Signaturen galten bisher als gültig, sodass für einen Content-Type erstellte signierte Attribute als Signatur eines anderen ausgeben werden konnten
  • Signaturen mit wiederholtem Content-Type-Attribut werden wie bisher abgelehnt
  • Gegensignaturen, die per Definition kein Content-Type-Attribut tragen, und RFC-3161-Zeitstempeltoken prüfen weiterhin wie bisher

Version 2.770.53

Fixed

  • Ein zweiter Klick auf den Knopf der C++Builder-Annotations-Demo schreibt das bisherige Dokument nicht mehr erneut heraus, bevor das neue gestartet wird
  • Ein Fehler beim Bauen der PDF in der C++Builder-Annotations-Demo schließt jetzt das halb fertige Dokument, sodass der nächste Klick von einem sauberen Zustand startet

Version 2.770.52

Fixed

  • Mehrere Dokumente oder THotPDF-Instanzen in einem Prozess, die denselben Datenträger-Render-Cache-Ordner nutzen, teilen sich jetzt einen einzigen Cache-Index; bisher führte jede Instanz ihren eigenen Index und überschrieb die der anderen bei jedem Speichern, wodurch die Reihenfolge zuletzt genutzter Einträge verloren ging
  • Die Grenzen für Dokumentanzahl und Gesamtgröße des Datenträger-Render-Cache gelten über alle Instanzen hinweg, die sich einen Ordner teilen — der Ordner wächst nicht mehr über sein Budget hinaus, wenn mehrere Betrachter oder Render-Threads ihn gleichzeitig nutzen
  • Derselbe Ordner wird erkannt, unabhängig von Groß-/Kleinschreibung oder einem abschließenden Pfadtrenner

Version 2.770.51

Fixed

  • Das Resampling einer Bitmap mit dem bikubischen oder dem Lanczos3-Kernel funktioniert jetzt für jedes Quell-Pixelformat; eine 32-Bit-, 8-Bit- oder 1-Bit-Quelle wurde bisher gelesen, als enthielte sie 3-Byte-Pixel, was ihre Farbkanäle verdrehte oder über das Zeilenende hinauslas
  • Solche Quellen werden zuerst nach 24 Bit konvertiert, sodass das neu berechnete Bild dieselben Farben wie die Quelle hat; das Ergebnis bleibt wie bisher eine 24-Bit-Bitmap
  • 24-Bit-Quellen und der Halbton-Kernel sind nicht betroffen

Version 2.770.50

Fixed

  • PreflightCLI-Demo: -d auf einer einzelnen PDF schreibt den Dashboard-Index jetzt auch dann, wenn die Datei den Preflight nicht besteht
  • PreflightCLI-Demo: Dateien, die während des Preflights einen Fehler auslösen, werden im Dashboard-Index als fehlgeschlagen aufgeführt, und der Exit-Code spiegelt jede fehlgeschlagene Datei wider
  • PreflightCLI-Demo: Mit -r werden Berichte für gleichnamige PDFs in verschiedenen Unterverzeichnissen in passende Unterordner geschrieben, statt sich gegenseitig zu überschreiben — sowohl mit -o als auch im Dashboard
  • PreflightCLI-Demo: -f json und -f csv liefern dasselbe Schema mit oder ohne --profile / --preset / --aggregate, einschließlich der CSV-Spec-Spalte
  • PreflightReport-Demo: Mit einem Profil erzeugte CSV-Berichte füllen die Spec-Spalte jetzt wie Berichte ohne Profil

Version 2.770.49

Fixed

  • Die C++Builder-LargeFile-Demo erzeugt jetzt den Benchmark-Eingabesatz, den ihr Readme beschreibt — wie die Delphi-Version: LargeFile-Text.pdf, LargeFile-Image.pdf, LargeFile-Mixed.pdf und die AES-256-verschlüsselte LargeFile-Encrypted.pdf in einem BenchmarkInputs-Ordner neben der ausführbaren Datei; bisher schrieb sie nur eine einzige 200-seitige LargeFile.pdf
  • Die C++Builder-LargeFile-Demo akzeptiert die Optionen --output-dir, --scale (small, default, large, huge) und --pages und gibt den HugeFileBenchmark-Befehl für den erzeugten Ordner aus

Version 2.770.48

Fixed

  • Die C++Builder-Outlines-Demo schreibt Outlines.pdf neben die ausführbare Datei — die Datei, die das Readme nennt —, statt Output.pdf ins Arbeitsverzeichnis, und meldet, wohin sie gespeichert wurde, statt einen Betrachter zu öffnen
  • Die C++Builder-Outlines-Demo baut jetzt dasselbe 10-seitige Dokument mit Arial-Seitenbeschriftungen wie die Delphi-Version; die Beschriftungen am unteren Seitenrand bei y = 830 wurden an der Seitenkante abgeschnitten, und die "Bottom"-Lesezeichen der letzten Seite wiesen unter sie
  • Ein Fehler beim Schreiben der PDF in der C++Builder-Outlines-Demo hindert die Demo nicht mehr daran, ein weiteres Dokument zu erstellen

Version 2.770.47

Fixed

  • Der persistente Datenträger-Render-Cache funktioniert jetzt unter Ordnern, deren Namen Zeichen außerhalb der ANSI-Codepage des Systems enthalten (etwa einen Benutzerprofilordner mit nicht lateinischen Zeichen); bisher schlug dort jeder Seiten-Schreibvorgang fehl, und der Cache erzielte nie einen Treffer
  • THPDFDiskPageCache nimmt seinen Wurzelordner als Unicode-String entgegen und hält alle Cache-Pfade in Unicode, einschließlich des atomaren Austauschs von Seitendateien und Cache-Index

Version 2.770.46

Fixed

  • Bereichs- und Kachel-Rendering (RenderLoadedPageRegionToBitmap, RenderLoadedPageTiles, progressives Bereichs-Rendering) lässt eine Kachel nicht mehr leer, wenn ihr einziger Inhalt von einem Form-XObject stammt, das abseits des Ursprungs platziert ist; ein Form zählt jetzt als Abdeckung seiner /BBox, wie sie von seiner /Matrix und der aktuellen Transformation platziert wird
  • Mit TD, T*, ' oder " platzierter Text landet bei der Entscheidung, welche Kacheln ihn enthalten, jetzt in der richtigen Zeile — spätere Zeilen eines Absatzes werden nicht mehr aus den Kacheln aussortiert, in denen sie erscheinen
  • Td-Offsets werden mit der Textmatrix skaliert und vom Zeilenanfang aus gemessen — passend dazu, wie der Text tatsächlich gezeichnet wird
  • Zeichenabstand, Wortabstand, horizontale Skalierung und Hoch-/Tiefstellung fließen in die Schätzung ein, wo ein Textlauf endet, und Glyphen werden nicht mehr als schmaler als ein em angenommen

Version 2.770.45

Fixed

  • Die C++Builder-MemStream-Demo schreibt MemStream.pdf neben die ausführbare Datei — den Namen, den die Delphi-Version verwendet —, statt Memory.pdf ins Arbeitsverzeichnis
  • Die C++Builder-MemStream-Demo lädt die im Speicher gehaltene PDF jetzt mit LoadFromStream neu und prüft vor dem Speichern, dass sie eine Seite hat
  • Ein Fehler beim Schreiben der PDF in der C++Builder-MemStream-Demo hindert die Demo nicht mehr daran, ein weiteres Dokument zu erstellen

Version 2.770.44

Fixed

  • Die C++Builder-HelloWorld-Demo sendet beim Start keine Schließen-Nachricht mehr an jedes Fenster, dessen Titel HelloWorld.pdf enthält, wodurch fremde Fenster geschlossen werden konnten — etwa ein Editor oder ein Dateimanager
  • Die C++Builder-HelloWorld-Demo schreibt HelloWorld.pdf neben die ausführbare Datei und öffnet sie nur, wenn --open übergeben wird; wie die Delphi-Version akzeptiert sie einen Ausgabedateinamen oder --output <file>

Version 2.770.43

Fixed

  • Beim Laden einer PDF, deren Seitenbaum Zwischen-/Pages-Knoten hat, gehen die Seiten unterhalb dieser Knoten nicht mehr verloren; solche Dokumente meldeten bisher nur die direkt unter der Baumwurzel gelisteten Seiten
  • Die Seiten behalten ihre Reihenfolge im Seitenbaum, sodass Seitenindizes, Seitenboxen und Inhalt dem entsprechen, was andere Betrachter zeigen
  • Eine Seite, deren /Type als indirektes Objekt gespeichert ist, wird in diesem Ordnungsschritt als Seite erkannt

Version 2.770.42

Fixed

  • Das Laden einer PDF, deren Seitenbaum auf sich selbst verweist (ein /Pages-Knoten, der unter seinen eigenen /Kids gelistet ist, oder zwei Knoten, die einander listen), stürzt nicht mehr mit einem Stapelüberlauf ab; jeder Seitenbaumknoten wird einmal durchlaufen, und absurd tiefe Bäume werden abgeschnitten
  • Ein Seitenbaumknoten, dessen /Kids-Array oder /Type-Name als indirektes Objekt gespeichert ist, lädt jetzt seine Seiten, statt zu scheitern oder ungültigen Speicher zu lesen

Version 2.770.41

Fixed

  • THPDFPage.LastAnnotation gibt jetzt den Link zurück, den AddGoToLink, AddURILink, AddNamedDestinationLink, AddGoToRLink, AddLaunchLink, AddStructureDestinationLink und AddGoToRStructureDestinationLink anlegen
  • Der Aufruf von SetAnnotationFlags, SetAnnotationBorderStyle oder AddPopupAnnotationFor mit LastAnnotation direkt nach dem Anlegen eines Links wirkt nicht mehr stillschweigend ins Leere oder verändert stattdessen die zuvor erstellte Annotation

Version 2.770.40

Fixed

  • Job-JSON, das an THPDFJobProcessor.Execute, HPDFDocRunJob und HPDFDocRunJobWithCallbacks übergeben wird, wird durchgehend als UTF-8 gelesen: \uXXXX-Escapes fallen nicht mehr in die ANSI-Codepage zusammen, und escaped Surrogatpaare wie 😀 ergeben das beabsichtigte Zeichen statt zweier kaputter
  • Ein- und Ausgabedateinamen in Merge-, Split-, Optimier-, Verschlüsselungs- und Validierungs-Jobs behalten Zeichen außerhalb der Systemcodepage — ob als rohes UTF-8 oder als \u-Escapes geschrieben —, sodass solche Dateien unter ihren echten Namen gefunden und geschrieben werden
  • Ein fehlerhaftes \u-Escape mit weniger als vier Hexziffern wird verworfen, ohne die folgenden Zeichen oder das schließende Anführungszeichen zu verschlucken
  • Ein UTF-8-Byte-Order-Mark am Anfang des Jobtexts wird ignoriert

Version 2.770.39

Fixed

  • Vom Aufrufer gelieferte Objektbezeichner beim Bauen von Signaturen und Zeitstempelanfragen (Signature Policy, Commitment Type, Claimed Role, Timestamp Policy und ähnliche OIDs) werden jetzt korrekt kodiert, wenn der erste Arc 2 ist und der zweite Arc 48 oder größer; der kombinierte erste Wert wurde bisher auf ein einziges Byte gestutzt, was einen anderen, falschen Bezeichner ergab
  • Ein Objektbezeichner-Arc, der zu groß zum Darstellen ist, wird jetzt mit einem Fehler zurückgewiesen, statt stillschweigend auf einen anderen Wert überzulaufen

Version 2.770.38

Fixed

  • HugeFileBenchmark-Demo: Mit --recursive --keep-output überschreiben PDFs, die in verschiedenen Unterverzeichnissen denselben Dateinamen tragen, nicht mehr gegenseitig ihre erzeugten Dateien; das Arbeitsverzeichnis spiegelt jetzt den Eingabeordnerbaum

Version 2.770.37

Security

  • Das Rendern einer PDF mit einer eingebetteten TrueType-Schrift, deren zusammengesetzte Glyphen viele Komponenten listen, die jeweils wieder zusammengesetzt sind, bringt den Renderer oder den Text-zu-Pfad-Export nicht mehr zum Hängen; eine Glyphe expandiert jetzt auf höchstens 1024 Komponenten über alle Verschachtelungsebenen
  • Eine Komponente einer zusammengesetzten Glyphe, die auf ihre eigene Glyphe zurückverweist, wird übersprungen, statt bis zur Verschachtelungsgrenze expandiert zu werden

Version 2.770.36

Fixed

  • Eine Stitching-Funktion (Typ 3), die direkt oder über andere Funktionen auf sich selbst verweist, rekursiert nicht mehr, bis der Stapel überläuft; sie gilt als unbrauchbare Funktion
  • Betrifft Separation- und DeviceN-Tint-Transformationen, Schattierungsfunktionen und Transferfunktionen in fehlerhaften oder feindseligen PDFs, die mit RenderLoadedPageToBitmap und den anderen Renderpfaden gerendert werden
  • Die Funktionsverschachtelung ist auf 16 Ebenen begrenzt; legitime Dokumente verschachteln weit weniger tief

Version 2.770.35

Fixed

  • Die C++Builder-PageOperations-Demo fährt jetzt denselben Workflow wie die Delphi-Version: Sie fügt zusätzlich eine leere Seite mit eigenem Format über InsertLoadedBlankPage ein und gibt den Text der Seiten 1-3 über ExtractLoadedPagesText aus
  • Die umsortierten und extrahierten Dateien der C++Builder-PageOperations-Demo enthalten jetzt dieselben Seiten wie die der Delphi-Version: Die letzte Seite wandert auf Seite 2, extrahiert werden die Seiten 2 und 5

Version 2.770.34

Fixed

  • Die C++Builder-Hyperlink-Demo macht auf einer neuen Seite weiter, wenn die Linkliste auf eine Seite nicht passt; Links unterhalb der Unterkante der ersten Seite wurden außerhalb der Seite geschrieben
  • Add, Remove und Make PDF in der C++Builder-Hyperlink-Demo sind deaktiviert, solange die PDF geschrieben wird — die Linkliste kann sich nicht mehr ändern und das Dokument nicht ein zweites Mal gestartet werden, während die Generierung läuft

Version 2.770.33

Fixed

  • Die C++Builder-Stamp-Demo platziert das Text-Wasserzeichen und die Rubber-Stamp-Annotation jetzt relativ zur Größe jeder Seite; auf Querformat- und anderen Nicht-A4-Seiten fiel die Stempel-Annotation aus der Seite heraus, und das Wasserzeichen rückte aus der Mitte

Version 2.770.32

Fixed

  • Jeder Knopf der C++Builder-ViewerPref-Demo startet jetzt mit einem frischen Dokument; Lesrichtung, Anfangszoom und andere Betrachtereinstellungen eines früheren Klicks blieben wirksam — Create PDF schrieb nach Test Direction beispielsweise weiterhin Rechts-nach-links-Text mit Einstellungen, die nicht mehr gewählt waren
  • Die C++Builder-PDF_INFO-Demo schreibt PDFInfo.pdf neben die ausführbare Datei — den Dateinamen, den die Delphi-Version und das Readme verwenden

Version 2.770.30

Security

  • Die Zertifikatspfadvalidierung (HPDFValidateCMSCertificatePath, die Online-Variante und Signatur-Batches) lässt sich nicht mehr durch eine Signatur aufhalten, die viele Zertifikate mit gemeinsamem Namen und Schlüssel einbettet; ein solches Set brachte die Pfadsuche bisher dazu, jede mögliche Reihenfolge zu versuchen — faktoriell wachsend, was eine Validierung stundenlang beschäftigen konnte
  • Jede Ausstellersignatur in einer Kandidatenkette wird pro Validierung einmal geprüft und ihr Ergebnis wiederverwendet, statt für jeden durch sie führenden Pfad erneut geprüft zu werden
  • Die Pfadsuche ist auf eine feste Arbeitsmenge begrenzt; bei Erreichen der Grenze meldet die Validierung, dass kein gültiger Pfad einen Vertrauensanker erreicht, während gewöhnliche Ketten weit darunter bleiben

Version 2.770.29

Fixed

  • ImportLoadedInterchangeFromFDF gleicht beim Lesen von Annotationen und dem FDF-Status jetzt ganze Schlüsselnamen ab: /T hält nicht mehr bei /Type oder /Text an, /F nicht mehr bei /FreeText und /Status nicht mehr bei einem längeren Schlüssel mit demselben Anfang — importierte Annotationen behalten so Autor und Flags
  • Schlüssel verschachtelter Wörterbücher innerhalb einer importierten Annotation und schlüsselähnlicher Text in Strings werden nicht mehr für Einträge der Annotation selbst gehalten
  • Literal-Strings in importierten FDF-Annotationen und im Status dekodieren alle von ISO 32000-1 definierten Escapes: \t, \b, \f, oktale \ddd und Backslash-Zeilenfortführungen — zusätzlich zu \n, \r und maskierten Klammern

Version 2.770.28

Fixed

  • In Builds mit Delphi-Versionen vor XE2, die den mitgelieferten PNG-Reader nutzen, liest das Laden einer PNG-Datei mit einem komprimierten Text-Chunk (zTXt) nicht mehr über einen internen Puffer hinaus; Text über 256 Bytes kam beschädigt und viel zu lang heraus, und große Chunks konnten abstürzen
  • Die Komprimierungsmethode eines komprimierten Text-Chunks wird jetzt aus dem richtigen Byte gelesen — Chunks mit nicht unterstützter Methode werden ignoriert, statt dekodiert zu werden, als wären sie Deflate-Daten
  • Abgeschnittener oder fehlerhafter komprimierter Text birgt nicht mehr das Risiko einer endlosen Dekodierungsschleife
  • Builds mit Delphi XE2 und später nutzen den System-PNG-Reader und sind nicht betroffen

Version 2.770.27

Changed

  • Die C++Builder-SearchAndSelect-Demo arbeitet jetzt wie die Delphi-Version: Sie erzeugt eine Beispiel-PDF, lädt sie, findet den Suchbegriff über SearchLoadedDocumentText und setzt mit AddLoadedHighlightAnnotation über jeden Treffer eine Hervorhebungs-Annotation
  • Die C++Builder-SearchAndSelect-Demo akzeptiert eine Eingabe-PDF, einen Suchbegriff, eine Ausgabedatei und die Optionen --case-sensitive und --whole-word und prüft die gespeicherte Kopie auf die neuen Annotationen

Fixed

  • Die Hervorhebungen der C++Builder-SearchAndSelect-Demo überdecken jetzt die gefundenen Wörter; sie wurden eine Zeile zu hoch platziert, weil die Textposition als Grundlinie statt als Oberkante des Texts genommen wurde

Version 2.770.26

Fixed

  • Die C++Builder-DigiPrint-Demo startet jetzt auf Systemen, deren Dezimaltrennzeichen der Punkt ist; die Komma-Dezimalzahlen in demo.xml wurden mit der System-Locale geparst und lösten beim Erzeugen des Formulars einen Fehler aus
  • Die DigiPrint-Demo liest demo.xml und ihre beiden JPEG-Icons aus dem Programmordner und schreibt demo.pdf dorthin, und das Projekt legt die ausführbare Datei jetzt im Demo-Ordner neben diese Dateien
  • Die Fußzeilen-Seitenicons der DigiPrint-Demo werden innerhalb der Fußzeilenzeile gezeichnet statt unter der unteren Seitenlinie, und Titel, Jahr und Fußzeilentext nutzen die Schriftgrößen des Berichtsstils
  • Ein mehrfacher Klick auf den DigiPrint-Knopf verschiebt den linken Rand nicht mehr mit jedem Klick weiter nach rechts
  • Ein Fehler beim Bauen der PDF in der DigiPrint-Demo — etwa eine fehlende Bilddatei — hindert die Demo nicht mehr daran, ein weiteres Dokument zu erstellen

Version 2.770.25

Fixed

  • Showcase-Demo: Kopfbänder, der Cover-Hintergrund, die Verlaufsflächen und der Akzent der Rückseite richten sich jetzt nach den Formen, die sie füllen; Verlaufskoordinaten sind im standardmäßigen PDF-Benutzerraum angegeben (Ursprung unten links), sodass die Farben nicht mehr verschoben oder gespiegelt sind
  • Showcase-Demo: Save Copy wechselt die Arbeitsdatei nicht mehr — Regenerate und Open External nutzen weiterhin die Hauptgalerie statt der zuletzt geschriebenen Kopie
  • Showcase-Demo: Schlägt das Generieren der Galerie fehl, wird der Betrachter neu gebunden und zeigt weiter die zuletzt geladene Galerie, statt leer zu bleiben
  • Showcase-Demo: Ausgabepfade mit Zeichen außerhalb der ANSI-Codepage des Systems werden unverändert durchgereicht

Version 2.770.24

Fixed

  • Beim Laden eines JPEG-2000-Bildes mit vier Komponenten (RGB plus Alpha oder YCC plus Alpha) in ein TJpeg2000Bitmap landen Rot, Grün, Blau und Alpha jetzt in den richtigen Bytes der 32-Bit-Bitmap; bisher waren die Farbkanäle um ein Byte verschoben, und der Alphakanal überschrieb einen davon
  • Das behebt auch einen Roundtrip einer 32-Bit-TJpeg2000Bitmap durch SaveToStream und LoadFromStream, der mit vertauschten Farben zurückkam
  • Farbbilder mit drei Komponenten, Graustufenbilder und CMYK-Bilder mit vier Komponenten laden wie bisher

Version 2.770.23

Security

  • Eine Textzeichenkette, deren Wert mit << beginnt und mit >> endet (etwa ein Titel, ein Autor, ein Formularfeldwert oder Annotationstext wie "<<URGENT>>"), wird jetzt immer als String gespeichert; er wurde bisher wörtlich herausgeschrieben, was die Dateisyntax zerbrach und gestaltetem Text erlaubte, ein Wörterbuch wie eine Aktion ins gespeicherte Dokument einzuschleusen
  • Gilt für neue Dokumente und für geladene Dokumente, die mit SaveLoadedDocument und verwandten Methoden gespeichert werden

Version 2.770.22

Fixed

  • Die C++Builder-Barcodes-Demo schreibt Barcodes.pdf neben die ausführbare Datei statt ins aktuelle Arbeitsverzeichnis und akzeptiert einen optionalen Ausgabedateinamen als einziges Argument
  • Die C++Builder-Barcodes-Demo öffnet nach dem Ablauf keinen PDF-Betrachter mehr und komprimiert wie die Delphi-Version ihren Seiteninhalt und öffnet mit an die Höhe angepasstem Zoom
  • Fehler in der C++Builder-Barcodes-Demo werden mit ihrem Meldungstext gemeldet; die Konsole zeigte bisher eine Speicheradresse

Version 2.770.21

Fixed

  • Ein Aufruf von hpdf_document_destroy in der stabilen C-ABI gibt das Dokument nicht mehr frei, während ein anderer Aufruf desselben Handles noch läuft (aus einem anderen Thread oder aus einem Lese-, Schreib-, Fortschritts- oder Abbruch-Callback heraus)
  • Das Handle wird ungültig, sobald hpdf_document_destroy zurückkehrt; das Dokument selbst wird freigegeben, wenn der letzte laufende Aufruf darauf endet
  • Aufrufe, die ein Handle parallel zu seiner Zerstörung nachschlagen, erhalten HPDF_STATUS_INVALID_HANDLE, statt freigegebenen Speicher anzufassen

Version 2.770.20

Security

  • Das Shaping von Text mit einer TrueType-/OpenType-Schrift, deren GSUB-kontextuelle Lookups sich selbst referenzieren, überläuft den Stapel nicht mehr und stürzt ab; die Verschachtelungstiefe summiert sich jetzt tatsächlich über die Ebenen
  • Eine kontextuelle Regel, die viele verschachtelte Lookups auslöst, kann sie nicht mehr zu einer nahezu endlosen Schleife vervielfachen: Jeder Top-Level-Treffer führt höchstens 1024 verschachtelte Lookups aus

Fixed

  • Eine verkettete kontextuelle Substitution (GSUB-Lookup Typ 6), die von einem anderen kontextuellen Lookup erreicht wird, wird jetzt angewandt; sie wurde mit dem gewöhnlichen kontextuellen Layout gelesen und traf nie zu, weshalb manche Ligaturen und kontextuellen Formen fehlten
  • Eine umgekehrte verkettete Substitution (GSUB-Lookup Typ 8), auf die eine kontextuelle Regel verweist, wird übersprungen, wie die OpenType-Spezifikation es verlangt, statt als kontextuelle Untertabelle missverstanden zu werden

Version 2.770.19

Fixed

  • RenderLoadedPageToDC löst keine Zugriffsverletzung mehr aus, wenn die Seite ein Bild-XObject oder ein Inline-Bild enthält; die Bilder werden in den Gerätekontext des Aufrufers gezeichnet
  • GetLoadedPageMetafile scheitert auf Seiten mit Bildern nicht mehr, und die Bilder werden in der zurückgegebenen Metadatei aufgezeichnet
  • Das Beschneiden von Bildern gegen die sichtbare Fläche nutzt jetzt die an RenderLoadedPageToDC übergebene Größe, wenn der Gerätekontext keinen Clip-Bereich hat

Version 2.770.18

Fixed

  • JBIG2-Halbtonbereiche mit aktiviertem Grid-Skipping verwerfen keine Rasterzellen mehr, die links von oder oberhalb des Bereichs beginnen, ihn aber noch überlappen; solche Zellen galten als weit außen liegend, ihre Grauwerte wurden übersprungen, und die übrigen Zellen des Bereichs wurden aus dem Takt dekodiert
  • Negative Rasterkoordinaten, die keine ganzen Pixel sind, werden jetzt in Richtung minus unendlich gerundet, wie die JBIG2-Spezifikation es verlangt — teilweise sichtbare Zellen landen auf dem richtigen Pixel
  • Halbtonbereiche, deren Raster vollständig bei nicht negativen Koordinaten liegt, sind nicht betroffen

Version 2.770.17

Fixed

  • OCSP-Antworten, deren Responder per Schlüssel-Hash in der Standardform von RFC 6960 identifiziert ist (ein explizites [2]-Tag um den Schlüssel-Hash), werden wieder akzeptiert; die Zertifikatspfadvalidierung warf sie bisher weg, sodass der Sperrstatus für jeden Responder unbekannt blieb, der sich per Schlüssel benennt
  • Sowohl direkte Responder (die ausstellende CA) als auch delegierte OCSP-Signaturzertifikate, die per Schlüssel identifiziert werden, werden gefunden, und die ältere implizit getaggte Form funktioniert weiterhin
  • HPDFDescribeValidationEvidence indiziert OCSP-Deskriptoren jetzt nach dem DN des in jeder Antwort genannten Zertifikatsausstellers, aufgelöst aus dem Issuer-Name-Hash der Antwort, statt nach dem Responder-DN; Antworten delegierter Responder und per Schlüssel identifizierte Antworten liefern jetzt Deskriptoren, die eine Suche nach dem Zertifikatsaussteller findet
  • Eine HPDFDescribeValidationEvidence-Überladung hinzugefügt, die die CMS-Signatur und zusätzliche Ausstellerzertifikate entgegennimmt — für Antworten, die den Responder per Schlüssel identifizieren und kein Zertifikat einbetten

Version 2.770.16

Fixed

  • Viewer-Demo: Das Formular löst beim Start keine Zugriffsverletzung mehr aus; die Statusleiste existiert jetzt, bevor der Betrachter an das Dokument gebunden wird und beginnt, Seitenwechsel zu melden
  • Viewer-Demo: Enter im Suchfeld aktiviert jetzt den ersten Treffer, statt direkt zum zweiten zu springen
  • Viewer-Demo: Lesezeichen ohne auflösbare Zielseite werden ohne den sinnlosen Anhang "(p0)" aufgeführt, und ein Klick darauf löst keinen Bereichsfehler mehr aus

Version 2.770.15

Fixed

  • Der Entschlüsselungsschritt der C++Builder-Security-Demo öffnet das verschlüsselte Beispiel jetzt wirklich mit dem Benutzerkennwort "user"; das Kennwortargument wurde als Flag für die automatische Entschlüsselung genommen, sodass das Beispiel ohne sein Kennwort geladen wurde und Security-Decrypted.pdf keine entschlüsselte Kopie war

Version 2.770.14

Fixed

  • Ein mit W oder W* gesetzter Clipping-Pfad greift jetzt, wie ISO 32000-1 es verlangt, nachdem der Pfad gezeichnet wurde, statt davor
  • Das Stroke eines Pfads, der auch den Zuschnitt setzt (re W S), zeichnet jetzt die volle Linienbreite; die äußere Hälfte des Strichs wurde vom eigenen Zuschnitt des Pfads weggeschnitten
  • Fill-and-Stroke mit einem Even-Odd-Zuschnitt (W* B) füllt jetzt mit der eigenen Füllregel des Zeichenoperators; der Even-Odd-Zuschnitt stanzte bisher Löcher in die Füllung
  • B* und b* füllen jetzt immer mit der Even-Odd-Regel, unabhängig von der Füllregel, die von einer früheren Operation übrig blieb

Version 2.770.13

Fixed

  • JBIG2-Halbtonbereiche, deren Graustufen-Ebenen MMR-kodiert sind, dekodieren jetzt; bisher kamen die Ebenen invertiert heraus, es wurde nur jede achte Spalte gelesen, und das Ende jeder Ebene wurde am falschen Byte verortet, sodass die folgenden Ebenen von der falschen Position dekodiert wurden
  • Die End-of-Block-Markierung nach jeder MMR-Ebene wird erkannt, ob sie direkt auf die letzte Zeile folgt oder nach Byte-Auffüllung, und jede Ebene beginnt jetzt an der darauffolgenden Bytegrenze
  • Arithmetisch kodierte Halbtonbereiche sind nicht betroffen
  • Gilt für PDF-Bilder mit dem JBIG2Decode-Filter, die mit dem eingebauten Dekoder geladen, extrahiert oder gerendert werden

Version 2.770.12

Fixed

  • JSON, das der Job-Prozessor (THPDFJobProcessor.Execute, HPDFDocRunJob, HPDFDocRunJobWithCallbacks) und der Dokumentvergleich erzeugen, maskiert Anführungszeichen und Backslashes jetzt als \" und \; die bisherigen Formen \x22 / \x5C sind kein gültiges JSON und brachten Standardparser dazu, Ergebnisse mit einem Anführungszeichen oder einem Windows-Pfad zurückzuweisen
  • Steuerzeichen werden als \uXXXX-Escapes geschrieben, und die Ausgabe ist immer wohlgeformtes UTF-8: Bytes, die kein gültiges UTF-8 ergeben, werden durch U+FFFD ersetzt, statt ins Ergebnis kopiert zu werden
  • Fehlermeldungen in Job-Ergebnissen und im Vergleichsfehlerobjekt werden als UTF-8 kodiert — nicht englischer Ausnahmetext und Dateinamen kommen nicht mehr in der ANSI-Codepage an

Version 2.770.11

Fixed

  • RedactLoadedRect, StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage und FlattenLoadedAnnotations werfen den vorhandenen Inhalt einer Seite nicht mehr weg, wenn ihr /Contents ein Array von Streams ist; die neuen Operatoren werden als zusätzlicher Stream am Ende des Arrays hinzugefügt — bei einer Unterlage am Anfang
  • Unterlagen-Stempel auf einer Seite, deren Inhalt über mehrere Streams verteilt ist, bewahren jeden Originalstream
  • Seiten, deren einzelner Content-Stream einen anderen Filter als schlichtes FlateDecode nutzt (ASCIIHex, ASCII85, LZW, RunLength, Filterketten oder Flate mit Predictor), werden dekodiert, bevor neue Operatoren angehängt werden — der Stempel, das Schwärzungsrechteck oder die eingeblendete finale Darstellung wird tatsächlich gezeichnet, und der Originalinhalt bleibt lesbar
  • Lässt sich der Content-Stream einer Seite gar nicht dekodieren, bleibt er unangetastet, und die neuen Operatoren werden in einen separaten Stream geschrieben, statt an die kodierten Bytes angehängt zu werden

Version 2.770.10

Security

  • Das Rendern einer PDF, deren eingebettete CFF-Schrift (FontFile3, Type1C oder CIDFontType0C) einen INDEX-Offset von 0x80000000 oder mehr speichert, liest keinen Speicher mehr außerhalb der Schriftdaten; solche Offsets galten als negativ und passierten die Grenzprüfungen
  • Eingebettete TrueType-Schriften erhalten für Glyphenpositionen und Tabellenlängen ab 0x80000000 dieselbe Behandlung: Die Glyphe oder die Schrift wird übersprungen, statt von der falschen Stelle gelesen zu werden
  • Eine CFF-Glyphe, deren Subroutinen sich vielfach gegenseitig aufrufen, bringt das Rendering oder den Text-zu-Pfad-Export nicht mehr zum Hängen; jede Glyphe hat jetzt ein festes Budget von Charstring-Operationen, weit über dem, was echte Schriften nutzen

Version 2.770.9

Fixed

  • JBIG2-Bilder, deren Textbereiche Huffman-Kodierung zusammen mit Symbol-Refinement im 13-Pixel-Template nutzen, dekodieren jetzt; die Adaptive-Pixel-Bytes des Refinements im Bereichsheader wurden übersprungen, sodass die Instanzenanzahl und jedes folgende Feld am falschen Offset gelesen wurden und das Bild abgelehnt wurde
  • Textbereiche mit arithmetischer Kodierung oder mit dem 10-Pixel-Refinement-Template sind nicht betroffen und dekodieren exakt wie bisher
  • Gilt für PDF-Bilder mit dem JBIG2Decode-Filter, die mit dem eingebauten Dekoder geladen, extrahiert oder gerendert werden

Version 2.770.8

Security

  • Mit aktivierter Codec-Isolierung wird die Größe eines dekodierten Bildes, das der isolierte Codec-Worker zurückgibt, jetzt gegen das konfigurierte Ausgabelimit und den vom Hostprozess allokierten gemeinsamen Speicher geprüft — statt gegen ein Kapazitätsfeld, das der Worker selbst überschreiben kann
  • Ein kompromittierter oder fehlerhafter Worker kann den Host nicht mehr dazu bringen, über das Ende des gemeinsamen Speicherblocks hinaus zu kopieren; eine solche Antwort wird als Protokollfehler zurückgewiesen, und das Bild wird nicht aus ihr gezeichnet
  • Die Antwort des Workers wird einmal kopiert und aus dieser Kopie validiert — ihr Header kann sich zwischen den Prüfungen und dem Pixelkopieren nicht mehr ändern

Version 2.770.7

Fixed

  • OCSP-Anfragen für die laufende Sperrprüfung (HPDFCollectCMSRevocationRequests und die Online-Zertifikatspfadvalidierung) kodieren den SHA-256-Algorithmusbezeichner der CertID jetzt korrekt; bisher wurden die ersten beiden Objektbezeichner-Arcs als einzelne Bytes geschrieben, wodurch der Hash-Algorithmus ungültig war
  • OCSP-Responder, die fehlerhafte Anfragen zurückweisen, beantworten diese Anfragen jetzt mit einem normalen Status statt eines Fehlers — Online-Sperrprüfungen fallen wegen der Anfragekodierung nicht mehr auf Offline-Nachweise zurück

Version 2.770.6

Fixed

  • Beim Rendern einer Type-3-Schrift wird jedes Vorkommen einer Glyphe gezeichnet; bisher wurde eine Glyphe, die im selben Textlauf wiederholt wurde oder sonst irgendwo auf der Seite mit gleicher Größe und Ausrichtung auftauchte, nur beim ersten Mal gezeichnet und danach leer gelassen
  • Betrifft RenderLoadedPageToBitmap, RenderLoadedPageToDC, Seitenmetadateien und die Bildexportpfade — mit oder ohne den gemeinsamen Render-Cache
  • Wiederholte Type-3-Glyphen nutzen weiterhin den Glyphen-Cache, sodass die Korrektur die Glyphenprozedur nicht für jedes Vorkommen neu liest

Version 2.770.5

Fixed

  • Die stabile C-ABI gibt die Eingabequelle nicht mehr doppelt frei, wenn hpdf_document_load_from_io während des Parsens des Dokuments scheitert — etwa wenn der Lese-Callback einen Fehler meldet oder der Vorgang mittendrin abgebrochen wird; ein solches Laden konnte den Heap beschädigen oder den Hostprozess zum Absturz bringen
  • Ein fehlgeschlagenes Laden gibt jetzt den Callback- oder Abbruchstatus zurück statt eines internen Fehlers, und dasselbe Dokument-Handle kann danach erneut geladen werden
  • Das Laden eines neuen Dokuments in ein bestehendes Handle gibt die bisherige Eingabequelle erst frei, wenn das neue Laden übernommen hat

Version 2.770.4

Fixed

  • Barcode-Ergebnisse von DecodeLoadedPageBarcodes auf Seiten mit /Rotate 90 oder /Rotate 270 melden die Grenzen jetzt an der wahren Position des Symbols statt an einer über die Seite gespiegelten
  • Die gemeldete Barcode-Ausrichtung auf diesen Seiten entspricht jetzt der Richtung, in der das Symbol im Seitenraum tatsächlich lesbar ist
  • Der von ApplyLoadedOCRTextLayer auf viertelgedrehten Seiten platzierte unsichtbare Text liegt jetzt über den erkannten Wörtern — Auswahl und Suche heben die richtige Stelle hervor
  • Gesichtsbefunde der Schwärzungserkennung auf viertelgedrehten Seiten werden ebenfalls auf den richtigen Seitenbereich zurückgemappt
  • Unrotierte und auf dem Kopf stehende Seiten sind nicht betroffen

Version 2.770.3

Fixed

  • In 32-Bit-Builds stürzt das Laden oder Schreiben eines mit PixarLog komprimierten TIFF-Bildes nicht mehr mit einem Stapelüberlauf ab; die Auswahl des Codecs baut seine Companding-Tabellen auf, die einen endlos rekursiven Exponenten-Helper trafen
  • SGILog-(LogLuv)-TIFF-Bilder in 32-Bit-Builds laufen über dieselben korrigierten Mathe-Helper
  • Der 32-Bit-Abwärtsrundungs-Helper der TIFF-Codecs rundet negative Werte jetzt in Richtung minus unendlich und akzeptiert große Beträge ohne Überlauffehler — passend zu den 64-Bit-Builds

Version 2.770.2

Changed

  • Beim Rendern wird ein Bild, das auf höchstens die Hälfte seiner Pixelgröße gezeichnet wird, direkt nach dem Dekodieren durch Flächenmittelung exakt auf die gezeichnete Größe verkleinert, statt in voller Größe vorgehalten und beim Zeichnen gestreckt zu werden
  • Das verkleinerte Bild passt in den Dekodierbild-Cache: Eine Transparenzgruppe, die zweimal gezeichnet wird — auf Schwarz und auf Weiß, um ihre Deckkraft zurückzugewinnen —, dekodiert ein solches Bild jetzt einmal statt einmal pro Durchgang; dasselbe gilt beim erneuten Rendern derselben Seite
  • Ein Bild mit Softmask wird in gezeichneter Größe Pixel für Pixel mit seiner Maske kombiniert, wobei die Maske ebenfalls verkleinert wird; das erspart den Aufbau und das Premultiplizieren einer vollformatgroßen Kopie eines großen Bilds samt Maske, und die Maskenkante wird nicht mehr per Nearest-Neighbor abgetastet
  • Auf einer Beispielseite mit einem 4229 x 4629 großen maskierten Bild, das in einer solchen Gruppe auf etwa ein Viertel seiner Größe gezeichnet wird, dauerte das Rendern etwa 1,8 Sekunden statt 4,5
  • Stencil-Bildmasken behalten ihre volle Auflösung, und die öffentlichen Bereichsdekomethoden geben weiterhin die Größen zurück, die sie dokumentieren

Version 2.770.1

Fixed

  • In 64-Bit-Builds schlug das Rendern einer Seite mit einer Transparenzgruppe mit einem Listenindexfehler fehl, sobald die Gruppe keine eigene Softmask setzte — eine Regression der Version 2.769.3; solche Seiten rendern wieder

Version 2.770.0

Added

  • Die neue Eigenschaft RenderColorimetricLuminosityMasks legt fest, wie eine Luminositäts-Softmask Farbe in Maskenwerte umsetzt, wenn ihre Gruppe einen CIE-basierten Mischraum hat (CalGray, CalRGB, Lab oder ICCBased)
  • Bei true wird CIE Y verwendet, wie ISO 32000-1 11.5.3 es beschreibt; unter beiden Einstellungen gerenderte Bitmaps werden getrennt gecacht

Changed

  • Standardmäßig gewichtet eine Luminositätsmaske die aufgelöste Farbe ihrer Gruppe jetzt wie DeviceRGB, egal welcher Mischraum — so wie gängige PDF-Betrachter. CIE Y wird auf linearer Skala gemessen, sodass ein Mittelgrau in einer ICC- oder kalibrierten Gruppe bisher nur etwa ein Fünftel maskierte und Schlagschatten sowie Ausblendungen viel heller herauskamen als in anderen Betrachtern
  • Die /BC-Hintergrundfarbe einer Maske folgt derselben Einstellung wie die Farbe innerhalb der Maskengruppe
  • Masken, deren Gruppe einen Gerätefarbraum nutzt, rendern wie bisher

Version 2.769.3

Fixed

  • Eine Transparenzgruppe, die mit einem anderen Mischmodus als Normal gemalt wird — etwa die Multiply-Schlagschatten, die Design-Tools exportieren —, mischt jetzt ihre eigene Farbe und Deckkraft mit dem Hintergrund (ISO 32000-1 11.3.6 und 11.4.8). Wo die Gruppe teilweise transparent war, enthielten ihre Pixel den Hintergrund bereits, der dann mit sich selbst gemischt wurde: Ein Multiply-Schatten kam zu dunkel heraus und im Farbton des Hintergrunds
  • Der Inhalt einer Transparenzgruppe startet mit dem Mischmodus Normal, da sich der Mischmodus auf die Gruppe als Ganzes bezieht (11.6.6). Bisher behielt er den Modus, mit dem die Gruppe gemalt wurde — eine isolierte Gruppe multiplizierte so ihren Inhalt in ihren leeren Anfang und malte schwarz
  • Eine Softmask, die im selben Grafikzustand wie ein Mischmodus gesetzt ist, zeichnet ihre Maskengruppe mit Normal-Mischung (11.6.5.2); der Mischmodus machte eine weiße Maskengruppe schwarz und verdeckte, was die Maske hätte zeigen sollen
  • Um die Deckkraft einer nicht isolierten Gruppe zu finden, wird die Gruppe zweimal gezeichnet — auf Schwarz und auf Weiß —, wenn ihre eigenen Grafikzustände normal mischen; solche Seiten rendern etwas langsamer

Version 2.769.2

Changed

  • Ein Bild mit Softmask wird in der Größe dekodiert, in der es gezeichnet wird — wie ein Bild ohne Maske schon bisher —, und seine Maske wird ebenfalls in dieser Größe dekodiert; eine JPEG-Maske läuft durch den JPEG-Dekoder mit reduzierter Größe, statt vollständig dekodiert zu werden
  • Bild und Maske werden stets als Ganzes dekodiert, sodass die Maske nicht gegen das Bild verrutschen kann, und das Clipping hält das Gezeichnete auf den sichtbaren Teil beschränkt
  • Auf einer Seite mit einem 4229 x 4629 großen Schattenbild und einer 2114 x 2314 großen JPEG-Maske, die etwa 1000 Pixel breit gezeichnet wird, dauerte das Rendern mit 72 dpi 1,6 statt 3,7 Sekunden
  • DecodeLoadedImageRegionAtResolution gibt ein ganzes Bild eines Formats ohne Bereichsdekoder als dekodiert zurück, ohne es noch einmal zu kopieren

Version 2.769.1

Changed

  • Softmasks werden schneller aufgebaut: Der Maskenaufbau hält keine zweite Kopie der ganzen Seite mehr zum Vergleich bereit — Seiten mit vielen Masken, etwa den Verläufen und Schlagschatten, die Design-Tools exportieren, zahlten das einmal pro Maske
  • Luminositätsmasken über einem kalibrierten oder ICC-basierten Mischraum schlagen die sRGB-Kurve nach, statt sie für jeden Kanal jedes Pixels zu berechnen, und grauer Maskeninhalt — der Normalfall — wird über eine einzige Tabelle konvertiert
  • Eine 1125 x 1600 große Seite mit etwa zwanzig Softmasks rendert rund ein Fünftel schneller; die gerenderten Pixel bleiben unverändert

Version 2.769.0

Changed

  • Das Setzen von Width oder Height einer Seite versteckt Fehler nicht mehr: Ein Fehlschlag löst jetzt eine Ausnahme aus, statt die Größe stillschweigend unangewendet zu lassen, und das Setzen der Größe einer Seite, deren Canvas bereits geschlossen ist, löst den neuen EHPDFPageClosedError mit einer Meldung aus, die den Grund nennt
  • Nach einem solchen Fehlschlag bleibt die Seite nicht mehr in einem Zustand, in dem spätere Größenänderungen nur ihre MediaBox aktualisieren, nicht aber die zum Zeichnen genutzte Seitengröße

Fixed

  • Die Größenänderung einer Seite einer geladenen PDF überschreibt keine anderen Objekte mehr: Eine MediaBox, deren Zahlen einzelne Objekte sind, oder ein von mehreren Seiten geteiltes MediaBox-Array wird für die umzustellende Seite kopiert, sodass andere Seiten ihre Größe behalten
  • Bei der Größenänderung einer geladenen Seite, deren MediaBox weniger als vier Zahlen hat, wird jetzt eine vollständige MediaBox mit der neuen Größe geschrieben; die neue Größe wurde bisher ignoriert

Version 2.768.20

Fixed

  • Die Textextraktion betritt kein Form-XObject mehr, das sich selbst zeichnet — direkt oder über andere Formen; eine solche Form wurde auf jeder Verschachtelungsebene erneut gelesen, wodurch ihr Text bis zu zwölfmal wiederholt wurde, und eine, die sich zweimal selbst zeichnete, brauchte 4.096 Durchläufe
  • Text eines Form-XObjects, der außerhalb der umschließenden Box der Form liegt, die ihn zuschneidet, gehört nicht mehr zum Seitentext

Version 2.768.19

Changed

  • Große Dokumente laden wieder schneller: Der Seitendurchlauf durchsucht nicht mehr alle geladenen Objekte für jede Seite, und die Verschlüsselungsprüfung von LoadFromFile mit AutoDecrypt liest die Datei durch denselben Puffer wie das Laden. Die 56 MB große PDF Reference 1.7 lädt in etwa 8 Sekunden statt 22

Version 2.768.18

Fixed

  • Das Seiten-Rendering findet jetzt installierte Schriften, die Windows unter lokalisiertem Namen meldet — etwa Microsoft YaHei auf chinesischem Windows oder Yu Mincho auf japanischem Windows; Text in solchen Schriften wurde in einer Ersatzschrift gezeichnet, wenn die PDF sie nicht einbettete
  • Schriftnamen ohne Leerzeichen passen jetzt zu Windows-Familien, die manche Wörter zusammenziehen — etwa MicrosoftYaHei für Microsoft YaHei, MicrosoftJhengHei für Microsoft JhengHei und MSPGothic für MS PGothic; sie wurden bisher mit einem Leerzeichen vor jedem Großbuchstaben gesucht und nie gefunden
  • Der Renderer merkt sich, welche Schriftnamen installiert sind, sodass Dokumente mit vielen nicht installierten Schriften nicht mehr auf jeder Seite Windows für jeden Namen abfragen

Version 2.768.17

Changed

  • Große Dokumente laden viel schneller: Die Vorgangs-Telemetrie nimmt den Speicher innerhalb eines Vorgangs jetzt höchstens einmal alle 10 ms auf, statt bei jedem Objekt, das der Parser liest — eine Messung, die jeden Block des Speichermanagers durchlief. Die 1.236-seitige PDF Reference 1.6 lädt in etwa 2,5 Sekunden statt 30, die 56 MB große PDF Reference 1.7 in etwa 22 Sekunden statt über vier Minuten
  • Die Verlangsamung wuchs mit der Größe des eigenen Heaps der Anwendung, sodass Anwendungen mit viel Speicher am meisten profitieren
  • UpdateOperationTelemetrySample erhält einen optionalen Force-Parameter, der unabhängig vom Intervall eine Messung nimmt; das Ende jedes Vorgangs nimmt weiterhin eine

Version 2.768.16

Fixed

  • Das Laden einer leeren Datei hängt nicht mehr; LoadFromFile lief bisher endlos in einer Schleife, die vom Dateianfang rückwärts las
  • Eine Datei, in der keine Seite zu finden ist — etwa eine leere Datei, Klartext oder Zufallsbytes —, lädt nicht mehr als eine oder drei aus ihrer Größe erratene leere Seiten; LoadFromFile gibt jetzt 0 zurück oder löst eine Ausnahme aus, wie bei anderen unlesbaren Dateien
  • Eine verschlüsselte Datei, deren Seiten in verschlüsselten Object-Streams liegen, löst beim Laden ohne Kennwort jetzt eine Ausnahme aus, die sagt, dass das Kennwort benötigt wird, statt als leere Seite zu laden — laden Sie sie mit der Kennwort-Überladung

Version 2.768.15

Fixed

  • Seitentext wiederholt keine Zeichen mehr, die erneut über sich selbst gemalt werden — wie in überdruckten Logos und bei mit doppeltem Zeichnen mit kleinem Versatz gefälschtem Fett; solcher Text wurde zweimal extrahiert (etwa "Bold wordsBold words"), und Suchen danach konnten fehlschlagen
  • Die Text-, Spalten-, Layout- und semantische Textextraktion lesen ein solches Zeichen jeweils einmal; die Glyphenliste meldet weiterhin jede gemalte Glyphe

Version 2.768.14

Fixed

  • Glyphennamen der vollständigen Adobe Glyph List lösen sich jetzt in Textextraktion und Rendering auf — darunter die Ligaturen fi, fl, ff, ffi und ffl sowie die Afii-Namen, die ältere kyrillische, hebräische und arabische Schriften verwenden; eine Schriftkodierung, die solche Glyphen benannte, lieferte die falschen Zeichen — etwa wurde "defined" als "deÞned" extrahiert

Version 2.768.13

Changed

  • LoadFromFile liest Dateien unter LocalFileMappingThreshold (standardmäßig 8 MB) und jede Datei, wenn Mapping aus- oder nicht verfügbar ist, über einen 64-KB-Lesepuffer; Dateien mit vielen Objekten und einer klassischen Cross-Reference-Tabelle laden deutlich schneller — etwa das 912-seitige PostScript Language Reference Manual in rund 1 Sekunde statt nahezu 3 Minuten

Version 2.768.12

Fixed

  • Die Textextraktion platziert jetzt die Glyphen von CID-keyed-Schriftarten (Typ 0), deren /W-Breitenarray nicht nach CID geordnet ist; die meisten Glyphen erhielten bisher die volle Standard-em-Breite, sodass Zeilen über die Seitenkante hinausliefen und ihre Enden aus extrahiertem Text und Suche fielen

Version 2.768.11

Fixed

  • Akzentuierte Buchstaben eingebetteter CFF-Schriften (Type 1C), die aus einem Grundbuchstaben und einem Akzent aufgebaut sind — wie in vielen aus Type 1 konvertierten Schriften —, rendern jetzt; Buchstaben wie ü und é blieben leer, sodass Wörter wie "München" eine Lücke zeigten
  • Dieselben Buchstaben sind jetzt vollständig im SVG-Export mit eingebetteten Schriften

Version 2.768.10

Fixed

  • Zusammengesetzte Glyphen eingebetteter TrueType-Schriften platzieren jeden Bestandteil jetzt an seinem eigenen Offset: Akzentuierte Buchstaben wie é und Å verloren ihren Akzent, und typografische doppelte Anführungszeichen erschienen als einfaches Anführungszeichen mit einer Lücke dahinter
  • Dieselben Glyphen sind jetzt vollständig im SVG-Export mit eingebetteten Schriften

Version 2.768.9

Fixed

  • Bilder mit /Interpolate false werden jetzt gemittelt, wenn sie kleiner als ihre eigene Auflösung gezeichnet werden; sie wurden mit einem Pixel von mehreren abgetastet, sodass als Bilder eingefügte Diagramme ausgefranste, dunkle Achsenbeschriftungen und abgerissene dünne Linien zeigten, wo andere Betrachter sie glatt zeigen
  • Vergrößerte Bilder mit /Interpolate false behalten ihre harten Pixelkanten wie bisher

Version 2.768.8

Fixed

  • Text, der mit einem schmaleren Stroke als einem Pixel gezeichnet wird — wie Dokumente es für Fake-Bold nutzen —, rendert jetzt in dieser Breite; der Stroke war bisher ein ganzes Pixel breit, sodass solche Überschriften verschmiert aussahen und viel schwerer wirkten als in anderen Betrachtern
  • Kleine Glyphen eingebetteter und installierter Schriften bekommen in den Text-Rendering-Modi 1 und 2 nach der Füllung einen Stroke mit Antialiasing in der Strokefarbe

Version 2.768.7

Fixed

  • Der Aufruf von ProcessObjectStreamsForDecompression auf einem geladenen Dokument verwirft die beim Laden gelesenen Object-Streams nicht mehr: Komprimierte Objekte bleiben danach für ExtractRawObjectFromStream und ExtractObjectFromStream verfügbar — vorher war keines lesbar
  • Wenn die Methode die Datei selbst durchsucht — etwa bei einem Dokument mit klassischer Cross-Reference-Tabelle —, findet sie jetzt einen Object-Stream, der direkt auf einen anderen Stream folgt, und liest seine Objektanzahl und Offsets aus seinem eigenen Wörterbuch
  • ExtractRawObjectFromStream dekodiert einen Object-Stream erneut, wenn der Object-Stream-Cache ihn freigegeben hat, statt ein leeres Ergebnis zurückzugeben

Version 2.768.6

Fixed

  • Die Stamp-Demo lässt sich jetzt erfolgreich für Win64 bauen

Version 2.768.5

Fixed

  • Auf chinesischen, japanischen und koreanischen Windows-Editionen laden Dokumente mit Cross-Reference-Streams, deren Wörterbücher binäre Zeichenketten halten — etwa die Prüfsummen angehängter Dateien —, jetzt in Sekundenbruchteilen; ein 4-MB-Portfolio mit neun angehängten PDF-Dateien brauchte bisher zwei Minuten zum Öffnen
  • Der Parser sucht seine Schlüsselwörter jetzt in den rohen Bytes der Datei statt in über die Windows-Codepage konvertiertem Text, sodass binäre Daten neben einem Schlüsselwort ihn nicht mehr verbergen oder verschieben können

Version 2.768.4

Fixed

  • Inhalte innerhalb eines Form-XObjects werden jetzt mit der Deckkraft, der Softmask und dem Mischmodus gerendert, die das XObject für sich setzt; bisher wurde alles darin voll deckend gezeichnet, sodass halbtransparente Wasserzeichen und Stempel deckend herauskamen
  • Ein Form-XObject mit eigener Deckkraft wird wie bisher weiterhin einmal als Ganzes composited

Version 2.768.3

Fixed

  • Der Seitentext umfasst jetzt auch Text, den die Seite über Form-XObjects zeichnet — etwa Kopf- und Fußzeilen, Wasserzeichen und Stempel; bisher wurde nur Text im eigenen Content der Seite zurückgegeben
  • Formtext erscheint dort, wo das Form-XObject gezeichnet wird, wird über seine Matrix platziert und in seinen eigenen Schriften gelesen; ineinander verschachtelte Form-XObjects werden ebenfalls verfolgt
  • Das gilt für einfachen, Layout-, Spalten- und semantischen Seitentext; die Glyphen-Extraktion liefert weiterhin nur die Glyphen des eigenen Seiteninhalts, deren Positionen in diesen Inhalt zeigen

Version 2.768.2

Fixed

  • EncryptFile und DecryptFile mit AES-256 beschädigen eingebettete Schriftdateien nicht mehr, deren Wörterbuch /Length1 vor /Length listet, wie Ghostscript und andere Tools sie schreiben; solche Schriften wurden als einzelnes Byte verschlüsselt, was die Ausgabe unlesbar machte
  • Streams, deren Länge in einem komprimierten Object-Stream steht, behalten alle ihre Daten durch AES-256-Verschlüsselung und -Entschlüsselung; bisher konnte das letzte Byte eines solchen Streams verloren gehen

Version 2.768.1

Fixed

  • Dokumente, deren Stream-Längen in komprimierten Object-Streams stehen, wie Ghostscript sie schreibt, laden jetzt vollständig; bisher wurde jeder Seiteninhalt-Stream einer solchen Datei verworfen, sodass die Seiten leer gerendert wurden und keinen Text lieferten
  • Ein Stream, dessen Länge auf ein Objekt verweist, das nicht existiert oder gar keine Länge hat, wird jetzt bis zu seiner Endmarkierung gelesen, statt verworfen zu werden

Version 2.768.0

Added

  • BuildLoadedPageSVG und SaveLoadedPageAsSVG nehmen einen optionalen Parameter EmbedFonts; er ist standardmäßig aus, und bestehende Aufrufe exportieren genau wie bisher
  • Mit EmbedFonts auf True wird Text in Schriften, deren TrueType- oder CFF-Programm im PDF eingebettet ist, aus den eigenen Glyphenumrissen der Schrift gezeichnet, sodass das SVG auf Systemen ohne diese Schriften genauso aussieht
  • Jeder Glyphenumriss wird einmal geschrieben und überall dort wiederverwendet, wo das Zeichen auftaucht — das hält die Dateigröße auf textreichen Seiten klein
  • Der Text bleibt im SVG als transparenter Text über den Umrissen liegen und lässt sich weiterhin auswählen, durchsuchen und mit Screenreadern lesen
  • Gefüllter, gestrichelter und gefüllt-gestrichelter Text, Linienbreiten, gedrehter oder skalierter Text und als Clipping-Pfad genutzter Text kommen heraus wie in der gerenderten Seite
  • Nicht eingebettete Schriften, Type-1-Schriftprogramme und vertikaler CJK-Text bleiben gewöhnlicher SVG-Text

Version 2.767.4

Fixed

  • Umrandeter und gefüllt-umrandeter Text (Text-Rendermodi 1 und 2) in nicht eingebetteten Schriften beachtet beim Rendern jetzt die Linienbreite; bisher kam jede Kontur 1 Pixel breit heraus, egal wie breit die Linie war
  • Solche Konturen werden jetzt — wie gefüllter Text bereits — aus den exakten Glyphenformen der installierten Schrift an ihren exakten Positionen gezeichnet
  • Zeichen, die der installierten Schrift fehlen und die Windows aus einer Fallback-Schrift nimmt, behalten beim Umranden ebenfalls die Linienbreite

Version 2.767.3

Fixed

  • Text in nicht eingebetteten Schriften wird jetzt mit den Zeichen gezeichnet, die seine Kodierung nennt. Die Zeichencodes gingen unverändert an die installierte Schrift, und die liest sie in ihrem eigenen Zeichensatz, sodass jeder /Differences-Eintrag und die Codes, an denen sich StandardEncoding oder MacRomanEncoding vom Windows-Zeichensatz unterscheiden, die falschen Zeichen zeichneten — etwa gerade statt geschweifter Anführungszeichen in Typ-1-Schriften ohne Encoding
  • Auf chinesischen, japanischen und koreanischen Windows-Editionen erschienen akzentuierte Buchstaben, geschweifte Anführungszeichen, das Copyright-Zeichen und andere Zeichen oberhalb von Code 127 in nicht eingebetteten Schriften seit Version 2.766.83 als Fragezeichen; sie werden wieder im Zeichensatz der installierten Schrift gelesen
  • Symbol-Schriften behalten ihre eigene Codezuordnung

Version 2.767.2

Fixed

  • Große Glyphen eingebetteter Schriften werden jetzt ebenfalls mit Antialiasing gerendert. Glyphen über 64 Pixel — etwa Überschriften und Titel bei Druckauflösungen — wurden ohne gefüllt und zeigten gezackte Kanten; bis 256 Pixel werden sie jetzt geglättet, während größerer Text installierter Schriften weiterhin über die geglättete Textausgabe des Systems läuft

Version 2.767.1

Fixed

  • Layout-, Spalten- und semantische Textextraktion messen die Seite jetzt in Seiteneinheiten. Sie verglichen Positionen mit der an Tf gegebenen Schriftgröße und mit Vorschüben im Textraum — die in den vielen Dokumenten, die Text über die Textmatrix dimensionieren, nur ein Bruchteil der realen Abstände sind; deshalb verteilte der Layouttext jeden Buchstaben über mehrere Spalten, der Spaltentext verlor alle Wortabstände und der semantische Text setzte fast jedes Wort in eine eigene Zeile
  • Alle drei geben jetzt nur den Text innerhalb der sichtbaren Box zurück und trennen Wörter, die ein Dokument durch Verschieben der Textposition auseinanderzieht — wie der einfache Seitentext
  • Der Layouttext hält die Buchstaben eines Worts zusammen, wo breite Buchstaben wie m oder W bisher ein Leerzeichen ins Wort drückten
  • Semantischer Text setzt nach jeder Zeile einer einspaltigen Seite keine Leerzeile mehr: Eine Folge vollbreiter Zeilen bildet eine Zone, und ein Zonenwechsel trennt Zeilen nur noch, wenn sie um mehr als einen Zeilenabstand auseinanderliegen
  • Die Hilfeseiten dieser Methoden beschreiben, was sie zurückgeben, und die Spaltenmethode zeigt ihre vollständige Syntax

Version 2.767.0

Added

  • LoadFromFile und LoadFromStream haben Überladungen mit einem AutoDecrypt-Parameter. Bei AutoDecrypt True öffnet sich ein Dokument, das mit leerem Benutzerkennwort verschlüsselt ist — wie Dokumente, die nur Drucken, Kopieren oder Bearbeiten einschränken —, entschlüsselt im Speicher so, wie Betrachter es öffnen; sein Text lässt sich extrahieren, seine Seiten rendern und exportieren, ohne ein Kennwort anzugeben
  • Dokumente, die ein Kennwort brauchen, und unverschlüsselte Dokumente laden genau so, wie die einfachen Überladungen sie laden; ob das leere Kennwort das Dokument öffnet, wird vor dem Laden aus ein paar kleinen Bereichen der Datei geprüft
  • Wie bei den Kennwort-Überladungen ist ein so geöffnetes Dokument im Speicher nicht mehr verschlüsselt, und das Speichern schreibt eine unverschlüsselte Kopie

Version 2.766.83

Changed

  • Kleiner Text in nicht eingebetteten Schriften — etwa den Standard-14-Schriften und installierten Office- und chinesischen Schriften — wird jetzt aus den ungehinteten Glyphenumrissen an seiner exakten Position gerendert, mit demselben Antialiasing wie eingebettete Schriften. Die bisherige Systemtextausgabe setzte jedes Glyph auf ein ganzes Pixel und passte seine Form am Pixelraster an, wodurch kleiner Text ungleichmäßig gesperrt war und fleckig aussah; gerenderte Seiten treffen die Formen und Abstände anderer Betrachter jetzt deutlich genauer
  • Glyphen, die der installierten Schrift fehlen, und große Glyphen werden weiterhin über die Systemtextausgabe gezeichnet, die fehlende Zeichen aus verknüpften Schriften nehmen kann

Fixed

  • Kleine Glyphen eingebetteter Schriften werden schneller gezeichnet, weil die Bitmaps hinter ihrem Antialiasing wiederverwendet werden, statt für jedes Glyph neu erzeugt zu werden

Version 2.766.82

Fixed

  • Text, der in gerenderten Seiten mit installierten Schriften gezeichnet wird, nutzt jetzt Graustufen-Antialiasing. Er folgte bisher der ClearType-Einstellung des Systems, sodass schwarzer Text in gerenderten Bitmaps rote und blaue Säume trug, die von der Maschine abhingen und in gespeicherten, gedruckten oder skalierten Bildern erhalten blieben

Version 2.766.81

Fixed

  • Kleiner Text in eingebetteten CFF- und OpenType-CFF-Schriften wird jetzt mit Antialiasing gerendert, wie TrueType-Text bereits. Diese Glyphen wurden ohne Kantenglättung gefüllt, sodass bei kleinen Größen und normalen Bildschirmauflösungen Stämme schmaler als ein Pixel verschwanden und Fließtext in Fragmente zerfiel; in Schriften wie Helvetica Neue gesetzte Formulare und Dokumente sind bei 72 DPI jetzt lesbar

Version 2.766.80

Changed

  • Die Seitentextextraktion gibt nur den Text zurück, den die Seite zeigt. Glyphen außerhalb des sichtbaren Bereichs — der CropBox innerhalb der MediaBox — bleiben außen vor, sodass Druckmarken, Beschnittzeilen und anderer Inhalt außerhalb der zugeschnittenen Seite nicht mehr im extrahierten Text auftauchen. Die Glyphen-Extraktion liefert weiterhin jedes Glyph mit seiner Position

Version 2.766.79

Fixed

  • Die Seitentextextraktion bricht in Text, der über die Textmatrix dimensioniert wird, nicht mehr an einem erhöhten hochgestellten Zeichen oder einer leicht verschobenen Grundlinie um. Eine neue Zeile begann, sobald sich der Text um die Hälfte der an Tf gegebenen Schriftgröße nach oben oder unten bewegte — in solchen Dokumenten oft 1, also reichte ein Sprung von einem halben Punkt
  • Gedrehter Text — etwa am Seitenrand hochlaufende Beschriftungen oder diagonale Wasserzeichen — setzt nicht mehr jedes Zeichen in eine eigene Zeile. Zeilen werden jetzt über die Bewegung quer zur Textrichtung unterschieden, verglichen mit der halben Höhe des Texts auf der Seite

Version 2.766.78

Fixed

  • Wenn der SVG-Export für eine nicht installierte Schrift auf eine generische Schriftfamilie ausweicht, nennt er jetzt zuerst einen verbreiteten Schnitt dieser Art: Times New Roman vor serif, Arial vor sans-serif und Courier New vor monospace. Den Schnitt für eine nackte generische Familie wählt der Browser nach seinen eigenen Spracheinstellungen, und chinesische oder japanische Browser wählten CJK-Schriften, deren breite lateinische Buchstaben sich an den aus dem PDF übernommenen Positionen überlappten

Version 2.766.77

Fixed

  • Der SVG-Export nennt jetzt installierte chinesische Schriftfamilien für Schriften, die unter ihren legacy-GB2312-Namen bekannt sind, etwa KaiTi_GB2312 oder seine chinesische Schreibweise. Windows-Anwendungen erreichen diese Schriften über die Font-Substitutes des Systems, Browser nicht, weshalb solcher Text in der Standardschrift des Browsers erschien
  • Eine Schrift, die nur einsprachig benannt ist, erhält zusätzlich den anderen Namen der installierten Familie — etwa SimHei zusammen mit seinem chinesischen Namen — und eine zur Stilrichtung passende generische Familie

Version 2.766.76

Added

  • THPDFGlyphRecord hat GlyphEndX und GlyphEndY — das Ende der eigenen Glyphenbreite entlang der Grundlinie im Seitenraum, ohne Zeichen- und Wortabstand

Fixed

  • Die Seitentextextraktion trennt jetzt Wörter, die ein Dokument durch Verschieben der Textposition auseinanderhält, statt ein Leerzeichen auszugeben. Viele Producer schreiben [(PDF)-240(Reference)] oder setzen jedes Wort mit seinem eigenen Positionierungsoperator; solche Wörter liefen bisher als PDFReference zusammen
  • Ergänzt wird ein Leerzeichen, wo die Lücke nach der eigenen Glyphenbreite 0,15 der Texthöhe überschreitet — gemessen in Seiteneinheiten, damit über die Textmatrix dimensionierter Text genauso behandelt wird wie über die Schriftgröße dimensionierter
  • Kerning, leicht gelockerte Laufweite, durch Positionsjustierungen ausgeglichene Straffung des Zeichenabstands, überdruckter Text und echte Leerzeichen bleiben, wie sie sind; zwischen zwei chinesischen, japanischen oder koreanischen Zeichen wird nie ein Leerzeichen ergänzt, so weit sie der Blocksatz auch auseinanderzieht

Version 2.766.75

Fixed

  • Textextraktion, SVG-Export und Rendern erkennen jetzt die Glyphennamen der Symbol-Schrift, etwa copyrightsans, registerserif, trademarksans und die Teile großer runder und geschweifter Klammern (parenlefttp, braceex, integralex, ...). Subgesetzte Symbol-Schriften kodieren diese Namen üblicherweise um, und die Zeichen kamen als rohe Steuerzeichen heraus
  • Alle ITC-Zapf-Dingbats-Glyphennamen (a1 bis a206) werden ebenfalls erkannt, sodass Häkchen, Kreuze, Pfeile und eingekreiste Zahlen, die eine Schrift über diese Namen wählt — wie Formularfelder und Aufzählungen es oft tun —, als ihre Unicode-Zeichen extrahiert werden
  • Beim Nachschlagen eines Glyphennamens für ein Zeichen wird weiterhin der gebräuchliche Name wie arrowright oder spade einem ZapfDingbats-Namen vorgezogen

Version 2.766.74

Fixed

  • HPDFExtractGlyphsViaDevice schlägt nicht mehr mit einer invaliden Pointer-Operation fehl. Das von der Funktion erzeugte Textextraktions-Device ist referenzgezählt und wurde zusätzlich explizit freigegeben, sodass jeder Aufruf damit endete, das Device ein zweites Mal freizugeben

Version 2.766.73

Fixed

  • Die Textextraktion stellt den Textzustand bei Q jetzt so wieder her, wie es die Spezifikation verlangt (ISO 32000-1 9.3.1). Bisher wurde nur die Transformation wiederhergestellt, weshalb eine innerhalb von q ... Q gesetzte Schrift, ein Zeichenabstand oder ein Leading für den nachfolgenden Text in Kraft blieb
  • Nutzte die innerhalb von q ... Q gewählte Schrift Zweibyte-Codes und die Schrift außerhalb Einbyte-Codes, wurde der Text nach Q als Zweibyte-Codes dekodiert und ging verloren. Word und ähnliche Producer schreiben Seiten auf diese Weise; typisch verloren gehen dabei Inhaltsverzeichnis-Punktlinien und lateinische Wörter zwischen chinesischen Textpassagen
  • Die Korrektur greift sowohl an der Seitentext-API als auch an der device-basierten Textextraktionsschnittstelle

Version 2.766.72

Fixed

  • Text nach RestoreState hat jetzt immer seine Schrift gewählt. Die Seite überspringt eine Schriftwahl, die die zuletzt geschriebene wiederholt, berücksichtigte aber nicht, dass RestoreState (der Q-Operator) den Leser auf die Schrift vor SaveState zurücksetzt. Nach RestoreState in der innerhalb des Paars gewählten Schrift gezeigter Text kam ohne Schrift oder mit der falschen heraus; Betrachter konnten ihn verwerfen, und die Textextraktion konnte ihn nicht lesen
  • Zeichenabstand, Wortabstand, horizontale Skalierung und Leading folgen SaveState und RestoreState auf dieselbe Weise; ein nach RestoreState erneut gesetzter Wert wird dann ausgeschrieben, statt übersprungen zu werden, während der Leser längst zum früheren Wert zurückgekehrt ist
  • Die Wahl einer Typ-3-Schrift führt nicht mehr dazu, dass die nächste Wahl der vorherigen Schrift übersprungen wird
  • Betroffen waren nach PDF konvertierte XPS-Dokumente, denn jeder Glyphenlauf wird innerhalb seines eigenen gesicherten Grafikzustands gezeichnet

Version 2.766.71

Fixed

  • Textextraktion und SVG-Export lasen die Codes einer einfachen Schrift (Typ 1, TrueType oder Typ 3) als zwei Bytes, wenn ihre /ToUnicode-CMap einen Zweibyte-Codespace deklarierte, wie manche Producer es für jede Schrift schreiben. Codes einfacher Schriften sind immer ein Byte lang (ISO 32000-1 9.6.6); jedes Zeichenpaar galt so als ein unbekannter Code, und der Großteil des Texts verschwand — übrig blieben nur Ketten einzelner Zeichen

Version 2.766.70

Fixed

  • Der SVG-Export verschob Text um die Operanden von Td, TD, T*, ' und " in Seiteneinheiten statt im Textraum (ISO 32000-1 9.4.2). Text, dessen Größe aus der Textmatrix stammt — mit 1 Tf und einer skalierten Tm, wie Textverarbeitungen ihn oft schreiben —, stapelte seine Zeilen übereinander nahe der ersten Grundlinie; jetzt wird er wie im PDF gesetzt
  • Dieselbe Korrektur gilt für den Content-Device-Textextraktor THPDFTextExtractDevice

Version 2.766.69

Fixed

  • Der Seitenrenderer reichte Schriftnamen mit #xx-Escapes samt Escapes an Windows durch; nicht eingebettete Schriften mit solchen Namen — häufig bei CJK-Schriften wie KaiTi_GB2312 in chinesischen Schriftzeichen — trafen keine installierte Schrift und wurden in einem Ersatzschnitt gezeichnet. Die Escapes werden jetzt dekodiert; UTF-8-Namen behalten ihre Zeichen, andere Bytes werden in der Systemcodepage gelesen

Version 2.766.68

Fixed

  • Der SVG-Export schrieb Schriftnamen mit #xx-Escapes als die Escapes selbst, sodass als UTF-8-Bytes gespeicherte CJK-Schriftnamen (etwa der KaiTi_GB2312-Name in chinesischen Schriftzeichen) als #e6#a5#b7... bei font-family ankamen und nie eine installierte Schrift trafen. Die Escapes werden jetzt dekodiert; ein gültiges UTF-8 ergebender Name bleibt erhalten, Bytes anderer Kodierungen werden wie bisher verworfen

Version 2.766.67

Fixed

  • Der SVG-Export stellte den Textzustand bei Q nicht wieder her: Schrift, Größe, Abstände, Skalierung, Leading, Anhebung und Rendermodus aus q ... Q schleppten sich in den nachfolgenden Text. Seiten, die eine Überschrift mit 2 Tr innerhalb eines gesicherten Zustands betonen, zeichneten den gesamten folgenden Fließtext gestrichelt und dick. Der Textzustand wird jetzt mit dem Rest des Grafikzustands gesichert und wiederhergestellt (ISO 32000-1 9.3.1)

Version 2.766.66

Fixed

  • Der SVG-Export strich Text in den Strich-Rendermodi (1, 2, 5 und 6) ohne Strichbreite, sodass SVGs Vorgabe von einer Textspace-Einheit galt; Text, den PDF-Producer mit dünnem Strich betonen — etwa 2 Tr 0.25 w —, kam viel zu dick heraus. Die Linienbreite wird jetzt vom User-Space in den Raum des Textelements umgerechnet, eine Breite von null ergibt eine 1-Pixel-Linie, und die Linienverbindung bleibt erhalten

Version 2.766.65

Fixed

  • Dokumente, deren Trailer /Encrypt als direktes Wörterbuch statt als Referenz enthält — wie manche PDF-Writer sie erzeugen —, wurden als unverschlüsselt geladen: Selbst mit dem richtigen Kennwort blieben ihre Seiten leer gerendert, Textextraktion und SVG-Export lieferten nichts, und SaveLoadedDocument schrieb eine beschädigte Datei, die /Encrypt fallen ließ, aber die verschlüsselten Streams behielt. Solche Dokumente öffnen, entschlüsseln und speichern sich jetzt wie Dokumente mit indirektem Verschlüsselungs-Wörterbuch
  • Der Cross-Reference-Loader schnitt einen Trailer am ersten >> ab, wodurch Einträge nach einem verschachtelten Wörterbuch im Trailer verloren gingen; er liest den Trailer jetzt bis zum passenden schließenden Begrenzer

Version 2.766.64

Fixed

  • Rendern, SVG-Export, Viewer und Druck zeigten die ganze /MediaBox einer geladenen Seite. Eine Seite wird über ihre /CropBox angezeigt und gedruckt, beschnitten auf die /MediaBox (ISO 32000-1 14.11.2); Seiten mit CropBox kamen deshalb zu groß, versetzt und mit eigentlich verborgenem Inhalt heraus
  • RenderLoadedPageToBitmap, die Tile-, Band-, Metafile- und Device-Context-Renderer, BuildLoadedPageSVG, die Seitengeometrie, Highlights und Regions-Snapshots des Viewers sowie der Druck decken jetzt die sichtbare Box ab; Seiten ohne /CropBox bleiben unverändert

Added

  • THotPDF.GetLoadedPageVisibleBox gibt die sichtbare Box einer geladenen Seite zurück — ihre /CropBox, beschnitten auf die /MediaBox
  • THPDFPageDisplayList.CropBox liefert dieselbe Box für eine kompilierte Display-Liste

Version 2.766.63

Fixed

  • Die eingebaute Glyphenliste wurde nur bis zu einem 13 Einträge unter der Tabelle liegenden Zähler durchsucht, sodass die zuletzt sortierten Glyphennamen (y, z, zero, zeta, yen, ydieresis, zcaron und andere) nie gefunden wurden. Die Textextraktion ignorierte /Differences-Einträge einer Schrift, die sie nannten, und der Seitenrenderer zeichnete y, z und 0 eingebetteter CFF-Schriften mit WinAnsiEncoding oder MacRomanEncoding in einer Ersatzsystemschrift
  • Bei der Suche nach dem Glyphennamen eines Akzents wie U+0060 kam der Kapitälchen-Name aus MacExpertEncoding (Gravesmall) statt grave zurück, sodass diese Akzente auch in eingebetteten CFF-Schriften fehlten

Version 2.766.62

Fixed

  • Der Seitenrenderer behandelte Linienbreite und Strichellängen als Geräte-Pixel statt als User-Space-Einheiten (ISO 32000-1 8.4.3.2 und 8.4.3.6); Linien behielten bei jeder Auflösung dieselbe Pixelbreite und ignorierten jede Skalierung durch cm. Über macOS Quartz exportierte Folien, deren Formen mit einer EMU-Breite unter 1/12700-Skalierung gestrichelt werden, waren vollständig in der Strichfarbe bedeckt
  • Strichbreite und Strichel folgen jetzt der Skalierung der CTM, die beim Zeichnen des Pfads gilt — auch bei Text in einem Strich-Rendermodus

Version 2.766.61

Fixed

  • Der SVG-Export ließ Typ-1-Funktions-Shadings (ISO 32000-1 8.7.4.5.2) aus, ob mit sh gemalt oder in einem Shading-Pattern genutzt; jetzt tastet er die Shading-Funktion über ihre /Domain in ein eingebettetes PNG-Bild ab, das über die /Matrix des Shadings platziert, auf seine /BBox beschnitten und von der Hintergrundfarbe des Patterns unterlegt wird

Version 2.766.60

Fixed

  • Der Seitenrenderer malte die /Background-Farbe eines mit dem sh-Operator gezeigten Mesh-Shadings, die PDF ignoriert (ISO 32000-1 8.7.4.5.1); das ganze Beschneidungsgebiet um das Mesh nahm diese Farbe an
  • Die Hintergrundfarbe von Funktions-, Axial- und Radial-Shading-Patterns wurde vom Seitenrenderer nicht gemalt; sie füllt jetzt die Fläche des Patterns vor dem Shading und erscheint deshalb überall dort, wo das Shading nicht reicht
  • Der SVG-Export malt die Hintergrundfarbe von Shading-Patterns jetzt genauso und ignoriert sie wie der Renderer bei sh

Version 2.766.59

Fixed

  • Der Seitenrenderer ignorierte die /BBox von Funktions-, Axial- und Radial-Shadings (ISO 32000-1 8.7.4.5.1); ein mit sh gemaltes oder in einem Shading-Pattern genutztes erweitertes Shading bedeckte das ganze Beschneidungsgebiet, statt an seiner Box zu enden. Mesh-Shadings beachteten sie bereits

Version 2.766.58

Fixed

  • Der SVG-Export schrieb Text in Typ-3-Schriften als SVG-Text in einer installierten Schrift, sodass Seiten, die ihre Texte oder Symbole über Glyphenprozeduren zeichnen, die falschen Formen zeigten; jetzt zeichnet er die Prozedur jedes Glyphs, platziert über die /FontMatrix der Schrift, die Schriftgröße und die Textmatrix (ISO 32000-1 9.6.5)
  • Typ-3-Glyphen, die mit d1 beginnen, werden in der aktuellen Füllfarbe gemalt, und Glyphen, die eigene Farben setzen, behalten sie

Version 2.766.57

Fixed

  • Textextraktion und SVG-Export nahmen die /Widths einer Typ-3-Schrift als Tausendstel Em, obwohl sie im Glyphenraum liegen und durch die /FontMatrix der Schrift skaliert werden (ISO 32000-1 9.6.5); Glyphen einer Schrift mit der Matrix [0.01 0 0 0.01 0 0] lagen nur ein Zehntel ihres Vorschubs auseinander, wodurch auch Wörter im extrahierten Text zusammenwuchsen

Version 2.766.56

Fixed

  • Beim Rendern einer geladenen Seite wurde jede Typ-0-Schrift gelesen, als nutzte sie Identity-H — zwei Bytes pro Code, jeder Code ein eigener CID. Mit den vordefinierten UCS2- und UTF16-CMaps der chinesischen, japanischen und koreanischen Collections kodierte Schriften, etwa UniGB-UCS2-H, oder mit einer eingebetteten CMap bilden ihre Codes jetzt auf CIDs ab, sodass /W-Breiten und eingebettete Glyphen am richtigen CID nachgeschlagen werden; zuvor lagen etwa Kleinbuchstaben in einem STSong-Light-Text ein ganzes Em auseinander
  • Codes werden über die Codespace-Bereiche der CMap gelesen, sodass Einbyte- und Vierbyte-Codes (Surrogate-Paare) ganz gelesen werden, und Namen mit der Endung -V wählen vertikalen Satz

Version 2.766.55

Fixed

  • Beim Rendern einer geladenen Seite wurden nicht eingebettete Schriften mit einem Stilanteil oder einer PostScript-Schreibweise im Namen — etwa TimesNewRoman,Bold, TimesNewRomanPS-BoldMT, Arial,BoldItalic oder SegoeUI-Semibold — in einem Ersatzschnitt gezeichnet; der Familienanteil des Namens wird jetzt unter den installierten Schriften nachgeschlagen, auch mit Leerzeichen zwischen seinen Wörtern (Times New Roman, Segoe UI), und der Stil kommt aus dem Namen und dem Font-Deskriptor

Version 2.766.54

Fixed

  • Standardschriften ohne /Widths-Array, was ISO 32000-1 9.6.2.2 für die Standard-14-Schriften erlaubt, wurden beim Rendern einer geladenen Seite, ihrem SVG-Export oder ihrer Textextraktion mit festem halbem Em-Vorschub gesetzt, wodurch die Buchstaben zusammenrückten; die Familien Helvetica, Times und Courier — auch unter den Namen Arial, TimesNewRoman und CourierNew — nehmen ihre Breiten jetzt von der installierten Arial, Times New Roman und Courier New, die ihre Metriken teilen
  • Eine Standardschrift vom Typ 1 ohne /Encoding dekodiert jetzt über ihre implizierte StandardEncoding, sodass etwa Code 39 als rechtes einfaches Anführungszeichen gelesen wird

Version 2.766.53

Fixed

  • Das Rendern einer geladenen Seite ignorierte das /Widths-Array einer Schrift, solange es ein indirektes Objekt war, wie viele Producer es schreiben, und setzte den Text mit festem halbem Em-Vorschub; solcher Text wird jetzt nach seinen Breiten gesperrt
  • Als indirekte Objekte gegebene Font-Deskriptoren werden beim Rendern jetzt gelesen, sodass die Flags ForceBold und Italic sowie der Italic-Winkel nicht eingebetteter Schriften greifen
  • Das SmallCap-Flag macht Text nicht mehr fett: Fett folgt jetzt dem ForceBold-Flag (ISO 32000-1 Tabelle 123)

Version 2.766.52

Fixed

  • Das Rendern einer geladenen Seite beschneidet jetzt auf Text in den Rendermodi 4 bis 7 (ISO 32000-1 9.3.6): Die Glyphen werden am Ende des Textobjekts Teil des Clipping-Pfads, bis der Grafikzustand wiederhergestellt wird. Bisher wurde Text im Modus 7 ignoriert, und ein durch die Buchstaben scheinen sollendes Shading oder Bild bedeckte die ganze Fläche, während die Modi 4 bis 6 den Text ohne Beschneidung malten
  • Clip-Text stammt aus denselben Glyphenumrissen wie gemalter Text — eingebettete Schriften und Typ-3-Glyphen eingeschlossen

Version 2.766.51

Fixed

  • Der SVG-Export beschneidet jetzt auf Text in den Rendermodi 4 bis 7 (ISO 32000-1 9.3.6): Die Glyphen werden vom Ende des Textobjekts bis zum Ende des Grafikzustands zu einem SVG-Clipping-Pfad, sodass ein durch Text gezeichnetes Shading oder Bild nur innerhalb der Buchstaben erscheint
  • Text im Rendermodus 7 geht nicht mehr verloren, ohne dass etwas beschnitten wird, und die Modi 4 bis 6 füllen oder streichen den Text weiterhin wie die Modi 0 bis 2

Version 2.766.50

Fixed

  • Axiale, radiale und funktionsbasierte Shadings, deren /Function ein Array von Funktionen mit je einem Ausgang ist — einen pro Farbkomponente (ISO 32000-1 8.7.4.5.1) —, wurden beim Rendern einer geladenen Seite nicht gezeichnet; jetzt werden sie gezeichnet, mit den Funktionen des Arrays direkt oder als indirekte Objekte angegeben
  • Der SVG-Export schreibt solche axialen und radialen Shadings als Gradienten, auch wenn sie einen Pfad über ein Shading-Pattern füllen

Version 2.766.49

Fixed

  • Der SVG-Export schrieb fetten und kursiven Text im regulären Schnitt: Text erhält jetzt font-weight="bold" und font-style="italic" aus dem Stilanteil des Schriftnamens — etwa Arial-BoldMT, Helvetica-Oblique oder MinionPro-It — sowie aus Gewicht, Flags und Italic-Winkel des Font-Deskriptors
  • Schriften außerhalb der Standard-14-Familien wurden mit ihrem Stilanteil im Familiennamen geschrieben (SegoeUI-Semibold), was keine installierte Schrift trifft; die Familie wird jetzt allein und mit Leerzeichen zwischen ihren Wörtern genannt (SegoeUI, Segoe UI), gefolgt von einer generischen Familie aus den Deskriptor-Flags oder dem Namen

Version 2.766.48

Fixed

  • Der SVG-Export zeichnete den Inhalt von Form-XObjects in Schwarz statt in den Füll- und Strichfarben, die an der Stelle gelten, wo das Form-XObject gemalt wird (ISO 32000-1 8.10.1); ein Q im Form-XObject stellt diese Farben jetzt ebenfalls wieder her
  • Content-Devices können verschachtelten Inhalt über das neue Interface IHPDFContentInheritedColorDevice mit den Farben des Aufrufers starten

Version 2.766.47

Added

  • Der SVG-Export füllt Pfade mit einem Tiling-Pattern jetzt über ein SVG-<pattern>, das die Pattern-Zelle im XStep- und YStep-Abstand wiederholt, beschnitten auf die /BBox der Zelle; bisher wurden solche Pfade schwarz gefüllt oder behielten die vorherige Farbe
  • Ungefärbte Tiling-Patterns (PaintType 2) malen die Zelle in der Farbe, die mit dem Pattern mitgegeben wird, etwa den Komponenten in /CS0 cs 0 0 1 /P1 scn
  • Mit einem Shading-Pattern gefüllte Pfade bekommen das axiale, radiale oder Mesh-Shading des Patterns, beschnitten auf den Pfad
  • Die Pattern-Matrix wird im Raum der Seite oder des Form-XObjects angewendet, das das Pattern nutzt (ISO 32000-1 8.7.2); Patterns skalieren und verschieben sich also nicht mit der aktuellen Transformationsmatrix, und Q holt ein mit q gesichertes Pattern zurück
  • Content-Devices können Pattern-Wahlen über das neue Interface IHPDFContentPatternDevice empfangen

Version 2.766.46

Added

  • Bilder mit einem Color-Key-/Mask-Array (ISO 32000-1 8.9.6.4) werden beim Rendern einer geladenen Seite jetzt maskiert: Pixel, deren Komponenten sämtlich in den Schlüsselbereichen liegen, bleiben unbezeichnet, sodass die Seite durchscheint
  • Der SVG-Export wendet dieselben Color-Key-Masken an und schreibt solche Bilder als PNG-Bilder mit Alphakanal
  • Der Schlüssel wird mit den Samples verglichen, wie sie gespeichert sind; ein Indexed-Bild maskiert also über den Palettenindex, selbst wenn zwei Einträge eine Farbe teilen, und Bilder mit 1, 2 und 4 Bits pro Komponente sind abgedeckt
  • Die neue Methode DecodeLoadedImageColorKeyMask gibt die Maske eines geladenen Bilds als Schwarz-Weiß-Bitmap zurück; sie deckt Flate-, LZW- und ungefilterte Bilder ab, da verlustbehaftete Codecs exakte Sample-Werte nicht bewahren

Version 2.766.45

Changed

  • CompressDocument und CompressLoadedDocument lassen jeden Object-Stream bis zu 250 Objekte statt 100 halten; weniger, größere Container komprimieren besser und brauchen weniger Wörterbücher
  • Geladene PDFs, die bereits kompakt mit Object-Streams geschrieben wurden, kommen jetzt etwa auf die Größe des Originals — die meisten leicht kleiner — statt leicht größer
  • Ein über ConfigureAdaptiveObjectStreamPacking gesetztes Limit bleibt erhalten, CompressDocument stellt das Limit bei EndDoc wieder her, und einfache Object-Stream-Speicherungen behalten 100 Objekte pro Container

Version 2.766.44

Changed

  • Der Cross-Reference-Stream von Dateien mit Object-Streams verwendet die kleinste Feldbreite, die jede Spalte braucht; Offsets in Dateien unter 16 MB belegen damit 3 Bytes statt 4 (ISO 32000-1 7.5.8.2), und ihr Wörterbuch wird kompakt geschrieben
  • Dateien mit einem Cross-Reference-Stream, aber ohne Object-Streams, bleiben unverändert

Version 2.766.43

Changed

  • Unverschlüsselte Dateien mit Object-Streams packen den Dokumentkatalog und das Dokumentinformations-Wörterbuch jetzt ebenfalls in Object-Streams, wo sie komprimiert liegen; ISO 32000-1 7.5.7 nimmt nur das Verschlüsselungs-Wörterbuch davon aus
  • Verschlüsselte Dateien behalten beide Wörterbücher wie bisher auf der obersten Ebene

Version 2.766.42

Changed

  • Dateien mit Object-Streams — auch solche aus CompressDocument und CompressLoadedDocument — schreiben Wörterbücher und Arrays jetzt kompakt und lassen die Leerzeichen und Zeilenumbrüche weg, die die PDF-Syntax nicht braucht (ISO 32000-1 7.2.2); am meisten gewinnen Stream-Wörterbücher, die nicht in Object-Streams passen und unkomprimiert bleiben
  • Signatur-Wörterbücher und das Verschlüsselungs-Wörterbuch behalten ihr Layout mit Zwischenräumen, sodass das Signieren eines mit Object-Streams geschriebenen Dokuments wie bisher funktioniert
  • Dateien ohne Object-Streams bleiben byte für byte unverändert

Version 2.766.41

Fixed

  • PDF-Dateien mit Object-Streams beginnen nicht mehr doppelt mit der %PDF--Kopfzeile und der Binärkommentar-Zeile; betroffen war jedes Speichern mit UseObjectStreams, CompressDocument oder CompressLoadedDocument
  • Betrachter tolerierten die doppelte Kopfzeile, strenge Validatoren konnten sie aber bemängeln, und sie kostete 15 Bytes pro Datei

Version 2.766.40

Fixed

  • Geladene PDFs, die in einem Object-Stream eine nackte Zahl halten — viele Producer speichern so Stream-Längen —, lassen sich jetzt bearbeiten und speichern; bisher brach jede Änderung das Speichern mit "Cannot rewrite compressed object N: the source member could not be loaded" ab
  • Eine solche Zahl wird jetzt als Zahl gelesen; bisher suchte der Parser hinter dem Ende des Members nach einer indirekten Referenz und gab auf, sodass sich das Member überhaupt nicht laden ließ
  • Das Speichern ohne Änderungen war nicht betroffen, denn eine unveränderte Datei wird so, wie sie ist, kopiert

Version 2.766.39

Fixed

  • Stempel-Annotationen in PDF/A-2- und neueren sowie in PDF/X-6-Dokumenten zeigten nur ihren Rahmen, ohne den Stempelnamen wie APPROVED oder CONFIDENTIAL
  • Der Name wird jetzt in der aktuellen Schrift der Seite gezeichnet — eingebettet zusammen mit dem Seitentext —, in Großbuchstaben und in der Farbe der Annotation, zentriert im Rechteck
  • Lange Namen wie NOTFORPUBLICRELEASE werden kleiner gesetzt, damit sie in die Rechteckbreite passen
  • Die Dokumente bestehen weiterhin die PDF/A-Validierung; Stempel in anderen Dokumenten werden wie bisher geschrieben

Version 2.766.38

Added

  • Neue CompressLoadedDocument-Überladung mit Optionen, die ein geladenes PDF so klein wie möglich macht, ohne sein Aussehen zu verändern: Sie verwirft ungenutzte Seitenressourcen, führt identische Schriften und Formulare zusammen, subsettet die eingebetteten Schriften, komprimiert Streams mit Flate neu und schreibt beim nächsten Speichern Object-Streams
  • Jeder Schritt ist verlustfrei, und Bilder werden weder neu abgetastet noch neu komprimiert; ein dreiseitiges Dokument mit vollständig eingebetteten Arial- und SimSun-Schriften schrumpft von rund 10 MB auf rund 20 KB, und drei weitere Beispiel-PDFs verloren 15–50 % ihrer Größe
  • Dokumente mit Signaturfeldern werden standardmäßig abgelehnt und unverändert gelassen, weil jeder Schritt signierte Bytes neu schreibt; AllowSignatureInvalidation komprimiert sie trotzdem
  • SubsetLoadedFonts erhält eine Option CompactTrueTypeSubsets (standardmäßig aus), die kompakte Subsets der TrueType-Schriften baut, die über CIDFontType2-Schriften mit Identity-CID-Mapping verwendet werden; Color-Fonts und Schriften mit einem /CIDSet behalten das normale Subset
  • Das parameterlose CompressLoadedDocument behält sein bisheriges Verhalten, nur ungefilterte Streams neu zu komprimieren

Version 2.766.37

Added

  • Neue Eigenschaft CompressDocument (standardmäßig aus): ein einziger Schalter, der das nächste Dokument so klein wie möglich schreibt, ohne sein Aussehen zu verändern
  • Dafür schaltet sie Flate-Komprimierung auf höchster Stufe ein, einen Cross-Reference-Stream mit Object-Streams (ISO 32000-1 7.5.7 und 7.5.8), Schrift-Subsetting und kompakte Schrift-Subsets; ein dreiseitiges Dokument mit gemischtem englischen und chinesischen Text schrumpft von rund 10 MB auf rund 20 KB
  • Object-Streams brauchen PDF 1.5, darum wird eine ältere Version auf 1.5 angehoben, solange die Version nicht festgelegt ist; die PDF/A-1-Ausgabe behält ihre klassische Cross-Reference-Tabelle
  • Eigene Einstellungen bleiben unangetastet: Nach EndDoc lesen sich Compression, CompressionLevel, UseXRefStream, UseObjectStreams, die Schrift-Subsetting-Optionen und die Version genau so zurück, wie sie gesetzt wurden
  • Bilder werden weder neu abgetastet noch neu komprimiert

Version 2.766.36

Added

  • Neue Eigenschaft CompactFontSubsetting (standardmäßig aus): Schrift-Subsets nummerieren die behaltenen Glyphen neu, sodass die eingebettete Schrift keinen Eintrag mehr für jede Glyphe der Quellschrift trägt; ein expliziter /CIDToGIDMap-Stream bildet die Glyphencodes der Seite auf die neu nummerierten Glyphen ab (ISO 32000-1 9.7.4.2)
  • CJK-Schriften schrumpfen am stärksten: Zwei chinesische Zeichen in SimSun belegen rund 3 KB Schriftdaten statt rund 25 KB, und ein Microsoft-YaHei-Dokument fällt von 114 KB auf 6 KB
  • Gilt für TrueType-Schriften, die als Type-0-Schriften geschrieben werden, wenn EnableFontSubsetting an ist, und für die über RegisterUnicodeTTF registrierte Schrift, die bisher nur unter PDF/A kompakte Subsets bekam
  • Seiteninhalt, Glyphenbreiten und Textextraktion bleiben unverändert; OpenType-CFF-Schriften behalten das normale Subset, und eine Schrift, die sich nicht kompaktieren lässt, fällt darauf zurück

Version 2.766.35

Fixed

  • Text mit explizitem Advance pro Zeichen verrutscht nach einem Zeichen außerhalb der Basic Multilingual Plane — einem Musiksymbol oder einem Emoji — nicht mehr, wenn die registrierte Unicode-Schrift es abdeckt. Bisher übernahm jedes folgende Zeichen den Advance seines Nachbarn; jetzt rückt das Zeichen um die Summe seiner beiden Einträge vor
  • Blocksatz-Unicode-Textboxen mit solchen Zeichen schließen wieder bündig am Boxrand ab, und die Unterstreichung oder Durchstreichung dieses Texts ist so lang wie der Text

Version 2.766.34

Added

  • Der SVG-Export zeichnet Bildmasken (/ImageMask), eingeschlossen Inline-Masken, jetzt als Schablonen in der aktuellen Füllfarbe: Die nicht gemalten Teile bleiben transparent, statt als Schwarz-Weiß-Bild zu erscheinen
  • Bilder mit einer /SMask-Soft-Mask oder einer expliziten /Mask-Schablone werden als PNG-Bilder mit Alphakanal exportiert, sodass ihre ausmaskierten Teile nicht mehr verdecken, was dahinterliegt
  • /Decode [1 0] an einer Maske oder Bildmaske wird beachtet, und eine Maske, die feiner ist als ihr Bild, behält ihre Details

Version 2.766.33

Fixed

  • Das Seitenrendering beachtet jetzt die explizite /Mask-Schablone eines Bildes: Die von der Maske abgedeckten Teile bleiben unbezeichnet, statt dass das ganze Bild gezeichnet wird — auch bei gedrehten oder gespiegelten Bildern
  • Ein /Decode [1 0]-Array an der Maske kehrt um, welche Teile erhalten bleiben
  • Soft-Masks und Masken, die feiner sind als ihr Bild, werden in der Auflösung der Maske angewendet, sodass eine detaillierte 1-Bit-Maske auf einem Foto in niedriger Auflösung ihre Kanten behält

Version 2.766.32

Fixed

  • Das Seitenrendering zeichnet Bilder jetzt über die vollständige Transformationsmatrix: Um eine Vierteldrehung oder um jeden anderen Winkel gedrehte Bilder, gespiegelte Bilder und jedes Bild auf einer Seite mit /Rotate werden nicht mehr aufrecht und ungespiegelt in ihre Bounding-Box gezeichnet
  • Bildmasken (/ImageMask true) werden jetzt als Schablonen in der aktuellen Füllfarbe gemalt, beim Verkleinern mit geglätteten Kanten, statt als graues Bild zu erscheinen
  • Bildmasken mit /Decode [1 0] malen jetzt die Samples mit dem Wert 1, wie PDF es vorschreibt
  • Inline-Bildmasken (BI /IM true) werden wieder gezeichnet, und ihr /D-Array wird beachtet
  • Bilder mit Soft-Mask behalten ihre Maske beim Drehen und Spiegeln

Version 2.766.31

Added

  • Der SVG-Export konvertiert jetzt Farben, die mit k/K (DeviceCMYK) und mit cs/sc/scn in einem beliebigen benannten Farbraum gesetzt wurden: ICCBased-, kalibrierte, Lab-, Indexed-, Separation- und DeviceN-Farben kommen heraus, wie der Seitenrenderer sie zeigt, statt in Schwarz
  • Die Auswahl eines Farbraums mit cs/CS setzt jetzt seine Anfangsfarbe, etwa volle Tönung für eine Spotfarbe, und das Wiederherstellen des Graphics State mit Q holt eine so gesetzte Farbe zurück
  • Farbräume, die ICC-Profile, Lookup-Tables oder Tönungsfunktionen per Referenz ansprechen, werden beim SVG-Export über das exportierte Dokument aufgelöst
  • Die Pfadaufzählung meldet jetzt CMYK-Füll- und Strichfarben, statt die vorherige Farbe beizubehalten

Version 2.766.30

Fixed

  • THPDFEmfPatcher.RenderEmfDirect zeichnet die Bitmaps eines Enhanced Metafile bei jeder Resolution in derselben Größe und Position. Bei einer Resolution anders als 72 kamen sie um den Faktor 72 / Resolution skaliert heraus

Version 2.766.29

Added

  • Der SVG-Export wendet jetzt W- und W*-Clipping-Pfade an: Jeder wird zu einem SVG-Clip-Pfad, der alles abdeckt, was danach gezeichnet wird, bis der Graphics State wiederhergestellt wird; Bilder, Shadings und Pfade, die ein PDF beschneidet, erscheinen nicht mehr in voller Größe
  • Form-XObjects werden im SVG-Export auf ihre /BBox beschnitten, axiale und radiale Shadings ebenfalls auf ihre /BBox
  • Even-Odd-Clipping (W*) behält seine Fill-Regel, und ein Pfad, der zusammen mit W gefüllt wird, wird gezeichnet, bevor der neue Clip greift — wie PDF es vorschreibt

Version 2.766.28

Fixed

  • Mit DrawChart gezeichnete Charts behalten ihr Layout bei jeder Resolution. Ihre Ränder, Titel, Achsenbeschriftungen und Linienbreiten sind Point-Werte und schrumpften bisher mit der Resolution
  • Die Standardschrift einer neuen Seite — und einer Seite, die wieder aktuell gemacht wird — beträgt 12 Points bei jeder Resolution statt 12 Zeicheneinheiten
  • Das Layout-Diagnose-Overlay behält seine Linienbreite und Beschriftungsgröße bei jeder Resolution

Version 2.766.27

Fixed

  • DrawInlineImage und DrawFormXObject bemessen Bild oder Form in Zeicheneinheiten, genauso wie ihre Position. Bei einer Resolution anders als 72 galten Breite und Höhe als Points, sodass das Objekt zu groß herauskam

Version 2.766.26

Fixed

  • Eine Seite, die über CurrentPageNumber wieder aktuell wird, zeichnet weiter in den Einheiten, in denen sie layoutet wurde. Bei einer Resolution anders als 72 schaltete sie auf Points um, sodass alles, was danach auf ihr gezeichnet wurde, in falscher Größe und Position herauskam
  • Die Seite behält beim erneuten Besuch auch ihre eigene Seiten-Resolution

Version 2.766.25

Fixed

  • Mit ShowImage platzierte Bilder behalten ihre Größe auf einer über Width und Height bemessenen Seite, wenn die Dokument-Resolution nicht 72 ist. Bei einer Resolution von 144 kamen sie halb so groß und verschoben heraus
  • ExtTextOut setzt jedes Zeichen auf einer solchen Seite an die angegebenen Advances statt an die Hälfte davon
  • Eingebettete Glyphen-Runs behalten auf einer solchen Seite ihre Glyphen-Offsets und Advances

Version 2.766.24

Added

  • Der SVG-Export beachtet jetzt den /Extend-Eintrag axialer und radialer Shadings: Ein nicht erweitertes Ende — der Standard — bleibt wie in PDF unbezeichnet, statt seine Endfarbe über den ganzen Clip zu verteilen
  • Bei radialen Shadings bleibt dadurch auch das Innere des Startkreises leer, sofern der Start nicht erweitert ist

Version 2.766.23

Fixed

  • Das Flattening der Seitenrotation dreht Annotation-Appearance-Streams jetzt mit der Seite, sodass eingebackene oder geglättete Annotationen genauso aussehen wie auf der gedrehten Seite, statt seitlich in ihr gedrehtes Rechteck gequetscht zu werden
  • Die Widget-Rotation (/MK /R) wird um die Seitendrehung korrigiert, sodass Formularfeld-Appearances, die nach dem Flattening neu erzeugt werden, ihre Ausrichtung behalten
  • Annotationen mit dem NoRotate-Flag bleiben nach dem Flattening aufrecht und behalten ihre Größe, verankert an ihrer linken oberen Ecke — so zeigen sie Betrachter auch auf einer gedrehten Seite

Version 2.766.22

Fixed

  • Das Flattening der Seitenrotation dreht bei einem getaggten PDF ein Annotationsrechteck nicht mehr doppelt, wenn der Strukturbaum vor dem Seitenbaum erreicht wird
  • Das Flattening der Seitenrotation dreht die Bounding-Box von Form-XObjects, die auf der Seite verwendet werden, nicht mehr mit; ihre Geometrie lebt im Formraum, und die Seitendrehung wirkt über die Content-Transformation bereits auf sie
  • Layout-Bounding-Boxen von Strukturelementen, die zu einer anderen Seite gehören, bleiben beim Glätten einer einzelnen Seite unverändert

Version 2.766.21

Fixed

  • Beim Lesen der Bleed-, Trim- oder Art-Box einer geladenen Seite wird kein /BleedBox-, /TrimBox- oder /ArtBox-Eintrag mehr übernommen, der an einem übergeordneten /Pages-Knoten steht; diese Boxen sind in PDF nicht vererbbar, darum meldet eine Seite ohne eigenen Eintrag jetzt ihre CropBox, wie die Spezifikation es verlangt
  • Das Flattening der Seitenrotation kopiert eine solche übergeordnete Bleed-, Trim- oder Art-Box nicht mehr auf die Seite

Version 2.766.20

Fixed

  • Text, der auf dem Seiten-Canvas gezeichnet wird oder in einem mit ShowMetafile platzierten Metafile, behält seine Größe, wenn die Dokument-Resolution nicht 72 ist. Bei einer Resolution von 144 kam er halb so groß heraus, während der Rest der Zeichnung korrekt war
  • Der Seiten-Canvas und ShowMetafile zeichnen in der richtigen Größe auf einer über Width und Height bemessenen Seite, die in Points zeichnet. Bei einer Resolution von 144 kam die Zeichnung doppelt so groß heraus
  • Der Seiten-Canvas und ShowMetafile beachten jetzt auch eine an der Seite selbst gesetzte Seiten-Resolution, statt die Zeichnung um sie zu verkleinern

Version 2.766.19

Fixed

  • Blocksatz-Unicode-Textboxen enden jetzt am Boxrand, wenn Zeichenabstand gesetzt ist. Jedes Zeichen bekam den Abstand zusätzlich zu seiner Blocksatz-Position, sodass jede Zeile um Abstand mal Zeichenanzahl über den rechten Rand hinauslief
  • Blocksatz-Unicode-Textboxen mit horizontaler Skalierung füllen wieder die ganze Boxbreite, statt um den Skalierungsfaktor davor anzuhalten
  • Wortabstand zählt jetzt zur natürlichen Breite einer Blocksatzzeile, derselben Breite, an der die Zeile umbrochen wurde
  • Text mit explizitem Advance pro Zeichen landet an diesen Positionen, egal welcher Zeichenabstand oder welche horizontale Skalierung gerade gilt

Version 2.766.18

Fixed

  • Das Flattening der Seitenrotation dreht Seiten mit /Rotate 90 und /Rotate 270 jetzt im Uhrzeigersinn, sodass die geglättete Seite exakt wie das gedrehte Original aussieht statt relativ zu ihm auf dem Kopf zu stehen
  • Annotationen, Link-Ziele und Strukturgeometrie wandern auf dieselbe Weise mit der Seite mit
  • Beim Glätten einer Seite ohne CropBox wird keine CropBox mehr ergänzt, die die Seite auf ein Quadrat zusammengeschnitten hätte; gedreht werden nur die Seitenboxen, die eine Seite tatsächlich hat

Version 2.766.17

Fixed

  • Font-Fallback-Ketten finden Schriften wie SimSun und Microsoft YaHei jetzt auch auf Windows-Systemen, die sie unter lokalisiertem Namen melden, sodass gemischter CJK-Text in WideTextOutBox, WideTextOutBoxEx und TextOutWithFallback in der Fallback-Schrift gesetzt wird, statt leere Kästchen zu zeigen
  • Text, dessen eigene Schrift eine dieser Schriften ist, wird nicht mehr in Fallback-Runs aufgeteilt und von der Diagnostik für unaufgelöste Glyphen nicht mehr als unaufgelöst gemeldet
  • Eine Schrift kann in einer Kette unter jedem Familiennamen genannt werden, den sie trägt, in jeder Sprache; eine Schrift, die Windows nur durch eine andere ersetzt, wird weiterhin übersprungen

Version 2.766.16

Fixed

  • Die N-up-Zusammensetzung setzt Seiten mit /Rotate 90 und /Rotate 270 jetzt im Uhrzeigersinn gedreht in ihre Zellen; vorher wurden sie andersherum gedreht und aus der Zelle geschoben, oft vom Blatt herunter
  • Seiten mit /Rotate 180 werden jetzt auf dem Blatt gedreht, statt aufrecht zusammengesetzt zu werden
  • Die N-up-Zusammensetzung beachtet jetzt Seitenboxen und /Rotate, die vom Seitenbaum geerbt sind; solche Seiten werden nicht mehr übersprungen oder ungedreht zusammengesetzt
  • Leerseiten, die in ein geladenes Dokument eingefügt werden — auch die zusammengesetzten N-up-Blätter —, werden nicht mehr durch ein vom Seitenbaum geerbtes /Rotate oder /CropBox gedreht oder beschnitten

Version 2.766.15

Fixed

  • HPDFTokenizeContentStreamAppend kann ein Token-Array jetzt wiederverwenden, nachdem sein Count auf null zurückgesetzt wurde: Tokens aus dem früheren Durchlauf werden zuerst freigegeben, sodass ihre Strings nicht mehr leaken und ihre Array-Elemente oder Inline-Bilddaten nicht mehr in den neuen Tokens auftauchen
  • Hängt man viele kleine Content-Streams an ein Token-Array an, wächst das Array jetzt mindestens auf das Doppelte, statt bei jedem Anhängen neu alloziert und verschoben zu werden — das machte Seiten aus Tausenden kleiner Streams beim Kompilieren langsam

Version 2.766.14

Fixed

  • Seiten mit /Rotate 90 oder /Rotate 270 werden jetzt im Uhrzeigersinn gedreht gerendert, wie die PDF-Spezifikation es definiert, statt über die Diagonale gespiegelt; vorher landete die linke obere Ecke einer um 90 Grad gedrehten Seite unten rechts
  • Die Korrektur deckt Seiten- und Region-Rendering, Bitmap-, Metafile- und Band-PNG-/TIFF-Export sowie das SIMD-Rendering-Backend ab
  • Die Koordinatenkonvertierungen Seite-zu-Ansicht und Ansicht-zu-Seite des Viewers sowie seine Such- und Highlight-Overlays folgen derselben Drehung im Uhrzeigersinn, sodass Treffer und Hit-Tests mit der gerenderten Seite übereinstimmen

Version 2.766.13

Fixed

  • Der SVG-Seitenexport schreibt Text jetzt als UTF-8, wie das Dokument es deklariert; akzentuierte und CJK-Zeichen überleben damit, statt zu Fragezeichen oder Bytes zu werden, die die Datei unlesbar machen; Steuerzeichen, die XML nicht erlaubt, werden zu U+FFFD
  • Text nach dem ersten Run einer Zeile und Text nach einer TJ-Kerning-Korrektur wird jetzt richtig platziert, wenn die Textmatrix den Text skaliert oder dreht — so setzen viele PDF-Producer die Schriftgröße
  • Textanhebung und horizontale Skalierung folgen jetzt einer skalierten oder gedrehten Textmatrix, und TJ-Korrekturen respektieren die horizontale Skalierung
  • Text mit Render-Modi 4 bis 6 (Zeichnen und Clipping) wird exportiert statt verworfen, unsichtbarer Text bewegt weiterhin die Textposition, und Konturtext behält seine Strichdeckkraft
  • Wortabstand wird nicht mehr auf Zweibyte-Codes angewendet, die zufällig 32 ergeben, und Folgen von Leerzeichen bleiben erhalten, sodass jedes Zeichen an seiner eigenen Position bleibt
  • Ligatur-Glyphen exportieren alle Zeichen, für die sie stehen, und Schriften mit gemischten Ein- und Zweibyte-Codes werden Code für Code gelesen
  • Seiten, deren /MediaBox nicht im Ursprung beginnt, landen jetzt auf der SVG-Canvas, statt über ihren Rand hinaus verschoben zu werden

Version 2.766.12

Fixed

  • Zeichnungen auf THPDFPage.Canvas und Metafiles, die als Vektorgrafik mit ShowMetafile an Position und Maßstab abgespielt werden, verlieren beim Setzen eines Clip-Bereichs nicht mehr einen Teil ihrer linken und oberen Kanten. Jeder Clip-Bereich wurde an diesen beiden Seiten um eine Einheit nach innen verschoben, sodass ein Rand oder eine Füllung an der linken oder oberen Kante dünner ausfiel als dieselbe an der rechten oder unteren
  • Clip-Bereiche decken sich jetzt mit denselben Bereichen, wenn sie gefüllt werden, und umfassen bei jeder THotPDF.Resolution dieselbe Fläche

Version 2.766.11

Fixed

  • Unter- und Durchstreichungen von Unicode-Text, der mit TextOut, UnicodeTextOut, RtLTextOut und ExtTextOut gezeichnet wird, spannen sich jetzt exakt über den Text. Bisher wurden sie am in die Systemcodepage konvertierten Text gemessen, sodass Runs mit kyrillischen, hebräischen, griechischen, CJK- oder anderen Buchstaben außerhalb dieser Codepage Striche bekamen, die vor dem Text aufhörten oder über ihn hinausliefen
  • Die Striche folgen jetzt auch dem Zeichenabstand, dem Wortabstand, der horizontalen Skalierung und den an ExtTextOut übergebenen Verschiebungen

Version 2.766.10

Fixed

  • Die Report- und Grid-Export-Add-ons (FastReport, QuickReport, ReportBuilder, DevExpress und DBGrid) überschreiben sich gegenseitig nicht mehr, wenn mehrere Exporte gleichzeitig laufen, etwa auf einem Server. Ihre temporäre Datei wurde nach einem Timer benannt, der sich nur alle 10 bis 16 ms ändert, sodass zusammen gestartete Exporte dieselbe Datei schrieben

Version 2.766.9

Fixed

  • TextWidth misst Text jetzt so, wie er gezeichnet wird, wenn Zeichenabstand, Wortabstand oder horizontale Skalierung gesetzt ist. Der Zeichenabstand wurde bisher nicht mit der horizontalen Skalierung skaliert, negativer Wortabstand ignoriert und ein abschließendes Leerzeichen ohne Wortabstand behandelt; Absatzfortsetzung, Link-Rechtecke und zentrierter oder rechtsbündiger Text saßen darum neben dem gezeichneten Text
  • TextWidth und GetWideTextWidth liefern für denselben Text dieselbe Breite

Version 2.766.8

Fixed

  • Das ReportBuilder-Device (TppHotPDFDevice) zeichnet nativen Text jetzt innerhalb seiner Textbox. Der Text wurde platziert, als wäre seine Position die Baseline, sodass jedes Textobjekt eine Zeile zu tief begann und seine letzte Zeile aus der Box lief
  • Zentrierter und rechtsbündiger nativer Text wird mit den Unicode-Breiten gemessen, mit denen er gezeichnet wird, sodass Text mit Buchstaben außerhalb der Systemcodepage — etwa Chinesisch auf einem westlichen System — korrekt ausgerichtet wird

Version 2.766.7

Fixed

  • Der FastReport-Export setzt Memo-Text jetzt innerhalb seines Memos ab. Der Text wurde platziert, als wäre seine Position die Baseline, sodass der Text eines jeden Memos eine Schriftgröße zu tief begann und unten ausgerichteter Text unterhalb des Memos gezeichnet wurde, wo das Clipping ihn versteckte
  • Obere, mittlere und untere vertikale Ausrichtung messen alle ab der Oberkante der ersten Zeile — bei schlichten wie bei HTML-getaggten Memos

Version 2.766.6

Fixed

  • Der FastReport-Exportfilter (TfrxHotPDFExport) kompiliert wieder. Die NotEmbeddedFonts-Property las ein Feld eines anderen Typs, und der native Picture-Export verwendete eine Clipped-Property, die TfrxPictureView nicht hat
  • Der native Picture-Export beschneidet jedes Bild jetzt auf seinen View, wie FastReport es tut, sodass ein Bild, das größer als sein View ist, nicht mehr auf Nachbarobjekte übergreift
  • Ein zentriertes Bild behält Rahmen und Clip an den View-Grenzen; zentriert wird nur das Bild selbst. Bisher wanderte der Rahmen mit dem Bild mit

Version 2.766.5

Fixed

  • Das DBGrid-Add-on misst Zelltext jetzt mit den Unicode-Textbreiten, mit denen er gezeichnet wird, bevor er auf eine Spaltenbreite gekürzt wird. Text mit Buchstaben außerhalb der Systemcodepage — etwa Chinesisch auf einem westlichen System — wurde als Fragezeichen gemessen und lief über die Zelle hinaus; Doppelbyte-Text auf chinesischen, japanischen oder koreanischen Systemen wurde deutlich zu früh gekürzt, lange bevor die Zelle voll war
  • Beim Kürzen bleibt nie eine halbe Hälfte eines Surrogate-Paars vor dem ... stehen

Version 2.766.4

Fixed

  • Das DBGrid-Add-on (TDBGridHotPDFExport und DBGridHotPDFExportToFile/ToStream) zeichnet Zelltext jetzt innerhalb seiner Zellen. Der Text wurde platziert, als wäre seine Position die Baseline, sodass der Text jeder Zeile auf der Unterkante der Zelle saß und von der Gitterlinie der nächsten Zeile abgeschnitten wurde
  • Header-Text wird in der Header-Zeile zentriert, und der Titel berührt nicht mehr die Oberkante der Tabelle

Version 2.766.3

Fixed

  • GetLoadedPDFVersionString liefert jetzt %PDF-1.7 und dergleichen auf Systemen, deren Locale ein Dezimalkomma schreibt; dort kam bisher %PDF-1,7 heraus
  • Das pdfVersion-Feld von GetLoadedDocumentReport ist auf dieselbe Weise korrigiert

Version 2.766.2

Fixed

  • Der HTML-Import (RenderHTML und RenderHTML5) liefert bei jeder THotPDF.Resolution dieselbe Seite. CSS-Längen und die Margin-, BaseFontSize-, ListIndent- und BlockSpacing-Werte des Importers sind Points, aber bei Resolution 144 kamen Text, Ränder, Listen und Tabellen halb so groß heraus
  • Text und Grafiken, die man vor und nach dem Import zeichnet, verwenden weiterhin 1/Resolution Zoll
  • Dokumente mit der Standard-Resolution 72 kommen exakt wie bisher heraus

Version 2.766.1

Fixed

  • XFA-Formulare, die mit ApplyXFAAsAcroForm oder FlattenLoadedXFA geglättet werden, behalten Positionen, Größen und Schriftgrößen aus der Vorlage bei jeder THotPDF.Resolution. Bei Resolution 144 kam das ganze Formular halb so groß in der linken oberen Ecke der Seite heraus
  • Text und Grafiken, die man vor und nach dem Glätten zeichnet, verwenden weiterhin 1/Resolution Zoll
  • Dokumente mit der Standard-Resolution 72 kommen exakt wie bisher heraus

Version 2.766.0

Added

  • THPDFPage.UserWidth und THPDFPage.UserHeight liefern die Seitengröße in den Einheiten, in denen man zeichnet — 1/Resolution Zoll —, damit Layout-Code sie mit Koordinaten, Rändern und TextWidth bei jeder THotPDF.Resolution vergleichen kann. Width und Height liefern weiterhin Points, und bestehender Code liest dieselben Werte wie bisher

Fixed

  • Bei einer THotPDF.Resolution anders als 72 brechen Absätze jetzt an der realen Fläche zwischen ihren Rändern um und wechseln am unteren Rand auf die nächste Seite. Bisher maßen sie die Seite in Points, sodass bei 144 ein Absatz mit breiten Rändern nach jedem Zeichen umbrechen und auf viel zu viele Seiten laufen konnte
  • Ein Absatz, der auf einer neuen Seite weiterläuft, behält bei jeder Resolution dieselbe Seitengröße, dieselben Koordinaten und dieselbe Schriftgröße. Bei 144 schaltete die Fortsetzungsseite auf Point-Koordinaten um, und ihr Text kam halb so groß heraus
  • THPDFTable beginnt erst dann eine neue Seite, wenn eine Zeile den unteren Rand erreicht; bei 144 landete bei einer Tabelle in der unteren Seitenhälfte jede Zeile auf einer eigenen Seite
  • Der HTML-Import setzt Text bei jeder Resolution über die ganze Seitenbreite statt nur über die linke Hälfte
  • Auf der Seite zentriert gezeichnete Metafiles und Metafile-Clip-Bereiche, die die ganze Seite abdecken, nutzen bei jeder Resolution die volle Seite
  • Die Layout-Diagnostik für Seitenebenen und geschriebene Seiten meldet die Seitengröße in Zeicheneinheiten
  • Dokumente mit der Standard-Resolution 72 kommen exakt wie bisher heraus

Version 2.765.52

Fixed

  • AES-256-Passwörter mit Nicht-ASCII-Zeichen funktionieren jetzt auch in anderen PDF-Readern. HotPDF hashte das Passwort in der Codepage des Systems, während ISO 32000-2 es als UTF-8 definiert; andere Reader wiesen daher ein chinesisches oder akzentuiertes Passwort zurück. Sowohl Revision 5 als auch Revision 6 sind korrigiert
  • AES-256-Passwörter über 127 Bytes werden jetzt auf 127 Bytes gekürzt, wie der Standard es definiert, sodass Reader, die sich daran halten, sie akzeptieren
  • HotPDF öffnet jetzt AES-256-Dateien anderer Producer, deren Passwort Nicht-ASCII-Zeichen hat
  • Dateien, die frühere Versionen mit solchen Passwörtern verschlüsselt haben, öffnen weiterhin mit demselben Passwort in HotPDF

Version 2.765.51

Fixed

  • ANSI-Text, der nach Unicode-Text in derselben Schrift geschrieben wird, erscheint nicht mehr als leere Kästchen. Wenn eine Seite Unicode-Text mit TextOut zeichnete und danach TextBox oder TextOutBoxEx im selben Schriftschnitt verwendete (etwa Arial in einer anderen Größe), landete der ANSI-Text in der Unicode-Schrift, und Betrachter fanden seine Glyphen nicht; er erhält jetzt seine eigene Schriftressource und wird korrekt angezeigt und extrahiert
  • Seiten, die nur ANSI-Text oder nur Unicode-Text verwenden, produzieren dieselbe Ausgabe wie bisher

Version 2.765.50

Fixed

  • Mit AES-256 Revision 6 verschlüsselte Dokumente (UseAES256R6 und PDF 2.0 AES-256) öffnen jetzt in anderen PDF-Readern. Der Passwort-Hash wurde in jeder Runde mit dem Salt berechnet und auf der Owner-Seite ohne den User-Eintrag, sodass qpdf, MuPDF und andere Reader beide Passwörter zurückwiesen; HotPDF akzeptierte nur seine eigenen Dateien
  • HotPDF öffnet Revision-6-Dateien anderer Producer jetzt mit deren User- oder Owner-Passwort, statt ein falsches Passwort zu melden
  • Das AES-256-R6-Beispiel der Security-Demo öffnet in anderen Readern

Version 2.765.49

Fixed

  • Blocksatz-Unicode-Textboxen sperren ihre Buchstaben nicht mehr auseinander und laufen nicht mehr über den rechten Boxrand hinaus. Bei einer namentlich gewählten Schrift wie Arial kam jede Blocksatzzeile etwa doppelt so breit wie die Box heraus und überlappte, was danebenlag; jede Blocksatzzeile endet jetzt am Boxrand
  • Text mit explizitem Advance pro Zeichen landet in denselben Fällen jetzt an der gewünschten Stelle, statt dass jedes Zeichen um eine zusätzliche Zeichenbreite nach rechts geschoben wird

Version 2.765.48

Changed

  • Die Demos HelloWorld, CJKAnnotations, TextOut und RtLTextOut für Delphi und C++Builder betten jetzt nur die Glyphen ein, die sie verwenden. Bisher betteten sie ganze Systemschriften wie Arial Unicode MS ein, sodass ein einseitiges Hello-World bei rund 15 MB und das Rechts-nach-links-Beispiel bei rund 30 MB herauskam; dieselben Seiten liegen jetzt zwischen 80 KB und 650 KB und sehen genauso aus

Version 2.765.47

Fixed

  • Rechts-nach-links-Text kommt in einigen Schriften nicht mehr mit falsch sortierten Buchstaben heraus. Hebräisch in Arial Unicode MS hatte in vielen Wörtern vertauschte Nachbarbuchstaben, und Arabisch in Microsoft Sans Serif wurde gar nicht umgekehrt, weil die Glyphennummern dieser Schriften beim visuellen Ordnen der Zeile für Akzentzeichen gehalten wurden
  • Die hebräischen Zeilen der RtLTextOut-Demo lesen sich jetzt korrekt

Version 2.765.46

Fixed

  • GetWideTextWidth berücksichtigt jetzt den Zeichen- und Wortabstand, mit dem der Text gezeichnet wird, wie TextWidth. Umgebrochener und zentrierter Unicode-Text mit gesetztem Abstand wurde zu schmal gemessen
  • TextOutHTML zeigt jetzt den mit SetWordSpacing gesetzten Wortabstand: Es setzt jeden Run auf seine gemessene Breite, was den Abstand bisher ausließ. Das CSS-word-spacing und letter-spacing des HTML-Imports laufen durch dasselbe Layout

Version 2.765.45

Fixed

  • SetWordSpacing funktioniert jetzt mit eingebetteten Schriften. Text in einer eingebetteten Schrift wird mit Zweibyte-Zeichencodes geschrieben, und PDF wendet Wortabstand nur auf den Einbyte-Leerzeichencode an; der Abstand wurde darum stillschweigend ignoriert, wann immer FontEmbedding an war oder der Text eine Unicode-Schrift brauchte
  • Der Abstand wird nach jedem Leerzeichen als Korrektur der Textposition ergänzt, die jeder PDF-Viewer beachtet; Text ohne Wortabstand wird exakt wie bisher geschrieben
  • Die Wortabstand-Zeile der TextOut-Demo zeigt jetzt den zusätzlichen Abstand

Version 2.765.44

Fixed

  • Die AnnotationInteraction-Demos für Delphi und C++Builder setzen jede Link-Beschriftung jetzt innerhalb ihres Link-Rechtecks ab. Der Text begann zu tief, sodass der Rechteckrahmen durch ihn lief, und er war breiter als das Rechteck

Version 2.765.43

Fixed

  • Durchgestrichener Text (fsStrikeOut) wird jetzt durch die Mitte der Kleinbuchstaben gestrichen. Die Linie lag eine halbe Zeile unter der Baseline, unter der Unterstreichung, sodass gestrichener Text doppelt unterstrichen aussah; betroffen war auch <s> in TextOutHTML
  • Gedrehter Text bekommt seine Unterstreichung jetzt unter der Baseline statt am oberen Rand der Buchstaben entlang, und seine Durchstreichung durch die Buchstaben
  • Durchstreichlinien sind auf jedem Textpfad so dick wie Unterstreichungen; der Unicode- und der schlichte Latein-Pfad zeichneten eine deutlich dünnere Linie

Version 2.765.42

Fixed

  • Die HTMLText-Demo erzeugt jetzt eine einzelne Seite mit allen fünf Beispielen darauf. Sie fügte eine zweite Seite hinter die anfangs vorhandene ein, ließ die erste leer und begann nahe der Unterkante der Seite zu schreiben, sodass das Entity-Beispiel und der umgebrochene Absatz von der Seite fielen

Version 2.765.41

Fixed

  • Die Layer-Demos für Delphi und C++Builder zeigen jetzt den Text ihrer Ebenen. Der Text der sichtbaren Ebene wurde in der Farbe des Rechtecks dahinter gezeichnet und war nicht zu sehen, und der Text der verborgenen Ebene war fast weiß
  • Die Beschriftung der Patterns-Demos wird in Schwarz gezeichnet, statt mit dem Kachelmuster gefüllt zu werden, was sie in Musterfragmente zerriss
  • Die Beschriftung der AlphaTransparency-Demos wird nicht mehr halbtransparent grün mit dem Multiply-Blend-Modus gezeichnet; die transparenten Formen behalten ihre Transparenz jetzt für sich

Version 2.765.40

Fixed

  • Die GraphicDraw-Demos für Delphi und C++Builder zeichnen die Tangentenlinien ihrer Kurvenbeispiele jetzt korrekt. Die erste Kontrollpunktlinie der linken Kurve endete vor dem beschrifteten Punkt, und die rechte Kurve zeigte einen kurzen horizontalen Strich statt der Linien von ihrem Startpunkt über ihren Kontrollpunkt zu ihrem Endpunkt
  • Die Abschnittsüberschriften der Rechteck- und Ellipsenseiten sind wieder schwarz, statt die Farbe der zuletzt gezeichneten Form anzunehmen

Version 2.765.39

Fixed

  • Text und Formen, die nach PrintHyperlink gezeichnet werden, behalten die vorher gesetzten Farben. Eine graue Farbe kam als andere Farbe zurück (Weiß wurde blau), und in CMYK oder über einen Farbraum gesetzte Farben kehrten als ältere RGB-Farbe zurück
  • Die Hyperlink-Farbe gilt jetzt nur für den Linktext, egal welchen Farbraum die Seite verwendete

Version 2.765.38

Fixed

  • TextOutOutline zeichnet die Glyphenkonturen jetzt in Schriftgröße bei jeder Resolution. Bei einer Resolution anders als 72 wurden die Konturen zusätzlich verkleinert, etwa auf die halbe Größe bei 144
  • Konturen von Schriften mit weniger als 1000 Einheiten pro Em, etwa SimHei, werden nicht mehr mehrfach zu groß gezeichnet

Version 2.765.37

Fixed

  • Die CJKUnicode-Demos für Delphi und C++Builder zeigen ihre koreanische Zeile jetzt auch auf Systemen ohne Arial Unicode MS. Bisher zeichneten sie sie mit der ersten gefundenen chinesischen Schrift, die kein Hangul hat, sodass die Zeile leer blieb; jetzt weicht sie auf Malgun Gothic aus, wenn die gewählte Schrift kein Koreanisch darstellen kann

Version 2.765.36

Fixed

  • Chinesischer und japanischer Text in Schriften wie SimHei häuft seine Zeichen nicht mehr übereinander. Wenn dieselbe Schrift für einen zweiten Text-Run verwendet wurde, bekamen viele Ideographen Breiten von wenigen Einheiten statt eines vollen Em
  • Die betroffenen Schriften speichern weniger Advance-Breiten als Glyphen; die Glyphen nach der letzten gespeicherten Breite verwenden jetzt diese Breite, wie das TrueType-Format es verlangt

Version 2.765.35

Fixed

  • Unicode-Text in Schriften, deren Entwurfsraster weniger als 1000 Einheiten pro Em hat — SimHei und SimSun mit 256 —, wird jetzt korrekt gesperrt. Die in das PDF geschriebenen Glyphenbreiten waren rund viermal zu groß, sodass Betrachter breite Lücken nach Leerzeichen und anderen neu verwendeten Zeichen ließen

Version 2.765.34

Fixed

  • Das Szenario mit gescannten Bildern der PDFOptimize-Demo komprimiert jetzt eine echte Textseite. Sein 1-Bit-Testbild kam vollständig schwarz heraus, sodass CCITT G4 und JBIG2 auf einem einfarbigen Rechteck verglichen wurden
  • Die Bildszenarien der PDFOptimize-Demo betten jetzt nur die Glyphen ihres Seitenlabels ein, sodass die gemeldeten Größen den Unterschied zwischen den Bildkomprimierungsverfahren zeigen, statt von einer komplett eingebetteten Schrift dominiert zu werden

Version 2.765.33

Fixed

  • Die E-Invoice-Demo legt die sichtbare Rechnungsseite jetzt von oben an: Der Titel steht am oberen Seitenrand, Rechnung, Beteiligte und Beträge folgen darunter. Bisher wurde die Seite in umgekehrter Reihenfolge gezeichnet, mit dem Titel nahe der Unterkante und der Fußzeilen-Notiz oben

Version 2.765.32

Fixed

  • Streng verlustfrei kodierte JBIG2-Bilder (Lossless mit LossyLevel = 0) behalten jetzt jedes Pixel. Das standardmäßige Entfernen winziger schwarzer Punkte als Scan-Rauschen ignorierte diese Einstellungen, sodass die Sätze und die i- und j-Punkte in kleinem Text aus Bildern verschwanden, die verlustfrei sein sollten
  • Die scanfreundlichen Voreinstellungen (LossyLevel = 5 mit RemoveIsolatedBlackPixels) entfernen Störpixel weiterhin wie bisher

Version 2.765.31

Fixed

  • Der Export geladener Seiten nach PNG oder TIFF schlägt bei Auflösungen, bei denen ein Render-Band keine ganze Zahl von Points ergibt, nicht mehr mit "received too many rows" fehl — etwa bei den Standard-150 DPI von SaveLoadedPagesAsImages mit einer Letter-Seite. Rundung machte jedes Band um eine Pixelzeile höher als geplant, sodass die Bänder auf mehr Zeilen kamen als das Bild hat

Version 2.765.30

Fixed

  • TextWidth, TextHeight, GetWideTextWidth und GetWideCharAdvances antworten jetzt in den Seiteneinheiten der Resolution, den Einheiten, in denen Text gezeichnet wird. Bei einer Resolution anders als 72 antworteten sie in Points, sodass gemessener Text nicht zu den Koordinaten passte, an denen er platziert wurde
  • Bei einer Resolution anders als 72 beginnt mit TextOut gezeichneter Text jetzt bei seinem Y statt zu hoch, und Unter- und Durchstreichungen decken den ganzen Text in richtigem Abstand und Dicke, statt nur eines Bruchteils davon
  • Bei jeder Resolution zentrieren TextBox, TextOutBoxEx und WideTextOutBoxEx ihre Zeilen und richten sie rechtsbündig anhand der echten Textbreite aus, Tabellenzellen und Absätze brechen Text an ihr um, und die formatierten Runs von TextOutHTML überlappen nicht mehr
  • Ein Font-Fallback-Run innerhalb von WideTextOutBoxEx behält bei jeder Resolution die Schriftgröße, statt zu schrumpfen
  • Ausgabe bei Resolution 72 ist unverändert

Version 2.765.29

Fixed

  • Wenn Windows die World-Transform eines EMF-Metafiles nicht selbst anwenden kann, kombiniert HotPDF die Transformationen selbst. Der vertikale Offset einer kombinierten Transformation verwendete den falschen Term, sodass Inhalt in solchen Metafiles nach oben oder unten verschoben sein konnte

Version 2.765.28

Fixed

  • Das Anzeigen eines EMF-Metafiles gibt keine Diagnosezeilen wie [WMF_DEBUG] EMR_POLYGON16 record found mehr auf die Standardausgabe von Konsolenanwendungen aus. Die Metafile-Ablaufverfolgung war im Release-Build eingeschaltet geblieben

Version 2.765.27

Fixed

  • Text in EMF-Metafiles, die mit ShowMetafile angezeigt werden, sitzt jetzt auf der Höhe, auf der Windows ihn zeichnet. Oben ausgerichteter Text — der Standard von TCanvas.TextOut — wurde eine Zeilenhöhe zu hoch gezeichnet, und unten ausgerichteter Text war ebenfalls zu hoch
  • An der Baseline ausgerichteter und gedrehter Metafile-Text ist unverändert

Version 2.765.26

Fixed

  • ShowMetafile mit Position und Maßstab zeichnet das Metafile jetzt mit seiner linken oberen Ecke am angegebenen Punkt und im angeforderten Maßstab. Bisher ignorierte es diese Argumente und zeichnete das Metafile immer in natürlicher Größe an der linken oberen Ecke der Seite
  • ShowMetafile ohne Position ist unverändert

Version 2.765.25

Fixed

  • AngleArc-Zeichnungen in EMF-Metafiles, die mit ShowMetafile angezeigt werden, zeichnen jetzt den von ihnen beschriebenen Bogen in beiden Richtungen, gefolgt von Linien, die vom Ende des Bogens weiterlaufen. Stattdessen wurde ein Vollkreis gezeichnet, dessen Größe jedes Mal falsch war, wenn das Metafile einen Offset hatte

Version 2.765.24

Fixed

  • Freitext-Annotationen mit schlichtem ASCII-Inhalt zeigen ihren Text jetzt auch unter PDF/A und PDF/X. Ihre Appearance zeichnete bisher nur Rahmen und Füllung, weil die in der Standard-Appearance der Annotation genannte Helvetica dort nicht un-eingebettet verwendet werden darf
  • Der Text wird mit 12 Points in der aktuellen Schrift der Seite gezeichnet, die zusammen mit dem Seitentext eingebettet wird, auf die Annotationsbox umgebrochen und nach der gewählten Ausrichtung ausgerichtet — wie es für Nicht-ASCII-Inhalte schon geschah
  • Außerhalb von PDF/A und PDF/X werden Freitext-Annotationen mit reinem ASCII-Inhalt exakt wie bisher geschrieben

Version 2.765.23

Fixed

  • Mit aktiviertem AutoShapeArabic verbinden TextOut und UnicodeTextOut arabische, persische und Urdu-Buchstaben jetzt zu ihren Anfangs-, Mittel- und Endformen sowie Ligaturen, wie RtLTextOut es bereits tat. Bisher erschien jeder Buchstabe in seiner isolierten Form
  • Dasselbe gilt für AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam, AutoShapeHanifiRohingya und die Neuanordnung hebräischer Punkte (sfHebrewReorder in ShapingFeatures)
  • Mit diesen Optionen konnte Text, dessen Glyphennummern zufällig in arabische oder hebräische Zeichenbereiche fielen, mit den falschen Glyphen angezeigt werden; das passiert nicht mehr
  • Freitext-Annotationen in der Seitenschrift werden genauso geformt wie Seitentext
  • Ausgabe mit ausgeschalteten Optionen ist unverändert

Version 2.765.22

Fixed

  • Gekrümmte Formen beachten jetzt Resolution-Werte anders als 72. Ellipse, Circle, Arc, DrawArc, Pie, DrawPie, Chord und ArcTo wurden an falscher Stelle und in falscher Größe gezeichnet, während gerade Linien, Rechtecke und abgerundete Rechtecke korrekt waren
  • Ausgabe bei der Standard-Resolution 72 ist unverändert

Version 2.765.21

Fixed

  • Mit Pie oder DrawPie gezeichnete Kuchenstücke sind jetzt einzelne geschlossene Formen, sodass ihre Kontur dort, wo die geraden Kanten auf den Bogen treffen, echte Ecken bekommt statt zweier loser Linienenden
  • Chords in EMF-Metafiles, die mit ShowMetafile angezeigt werden, schließen jetzt entlang der geraden Linie zwischen den Enden ihres Bogens. Die Linie lief bisher zu einem Punkt weit weg von der Form

Version 2.765.20

Fixed

  • DrawArc und DrawPie zeichnen jetzt den Teil der Ellipse, den ihre Dokumentation beschreibt: gegen den Uhrzeigersinn vom Start- zum Endpunkt, wie die Windows-GDI-Aufrufe Arc und Pie. Bisher zeichneten sie den anderen Teil, sodass aus einem Viertelbogen drei Viertel wurden
  • Kuchenstücke, Chords und ArcTo-Bögen in EMF-Metafiles, die mit ShowMetafile angezeigt werden, passen jetzt für beide Bogendrehrichtungen zu dem Bild, das Windows zeichnet. Bisher zeigten sie das gegenüberliegende Ellipsenteil; schlichte Bögen waren bereits korrekt
  • Die winkelbasierten Methoden Arc, Pie, Chord und ArcTo sind unverändert

Version 2.765.19

Fixed

  • Mit RectangleRotate gezeichnete gedrehte Rechtecke sind jetzt geschlossene Formen, wie die aus Rectangle. Beim Umranden fehlte bisher die vierte Seite, sodass ein nur umrandetes gedrehtes Rechteck drei Kanten zeigte
  • Gefüllte gedrehte Rechtecke sowie die Unter- und Durchstreichbalken gedrehten Texts sehen aus wie bisher

Version 2.765.18

Fixed

  • Negative Zahlen, die in erzeugte PDFs geschrieben werden, werden jetzt korrekt gerundet. Werte wie -50 wurden bisher als -49,99 geschrieben, sodass negative Koordinaten, Offsets und Positionen im Seiteninhalt, in Annotationsrechtecken und ähnlichen Einträgen um bis zu 0,01 Einheiten danebengeraten konnten
  • Negative Werte werden jetzt von null weg gerundet und spiegeln damit exakt die positiven Werte; ein negativer Wert, der auf null rundet, wird als 0 geschrieben
  • Ausgabe für null und positive Zahlen ist unverändert

Version 2.765.17

Fixed

  • Freitext-Annotationen mit chinesischem, japanischem, koreanischem, arabischem, kyrillischem oder anderem Nicht-ASCII-Inhalt zeigen ihren Text jetzt in jedem Viewer. Bisher verließen sie sich darauf, dass der Viewer den Text in Helvetica zeichnet — diese Schrift kann nur westliche Zeichen darstellen, sodass Viewer wie Poppler nur die ASCII-Interpunktion zeigten
  • Diese Annotationen tragen jetzt ihre eigene Appearance (ISO 32000-1 12.5.5): Der Text wird in der aktuellen Schrift der Seite gezeichnet, zusammen mit dem Seitentext eingebettet und gesubsetted, auf die Annotationsbox umgebrochen (zwischen Wörtern, bei Text ohne Leerzeichen zwischen Zeichen), nach der gewählten Ausrichtung ausgerichtet und über denselben Rahmen und dieselbe Füllung wie bisher gesetzt
  • Die Appearance wird auch unter PDF/A geschrieben, wo die eingebettete Schrift das Dokument konform hält und der Annotationstext jetzt sichtbar ist statt einer leeren Box
  • Freitext-Annotationen mit reinem ASCII-Inhalt werden exakt wie bisher geschrieben

Version 2.765.16

Fixed

  • Leerseiten, die mit InsertLoadedBlankPage in geladene Dokumente eingefügt werden, tragen jetzt das Resource-Wörterbuch, das jede Seite braucht (ISO 32000-1 Tabelle 30); Validatoren wie qpdf melden den Seitenbaum nicht mehr als beschädigt, und der Seite lässt sich später Inhalt hinzufügen

Version 2.765.15

Fixed

  • In der Table-Demo erstreckt sich der Zwischensummen-Betrag jetzt wie vorgesehen über die Spalten Qty und Price; es wurde der falsche Zellenindex verwendet, wodurch die Spalte Qty als leere Zelle übrig blieb

Version 2.765.14

Fixed

  • Bilder in Zellen von THPDFTable werden jetzt innerhalb ihrer Zelle gezeichnet und beachten die vertikale Ausrichtung; vorher lagen sie eine Bildhöhe zu tief, unterhalb der Zelle und außerhalb der Tabelle

Version 2.765.13

Fixed

  • Unicode-Textbreiten (GetWideTextWidth und das Blocksatz-Maß) passen jetzt zur Schrift; bei Schriften wie Arial fielen sie etwa doppelt so groß aus
  • Tabellen, umgebrochener Text und rechtsbündiger, zentrierter oder im Blocksatz gesetzter Text, der auf diesen Breiten aufbaut, werden wieder korrekt layoutet: kurzer Zelltext bricht nicht mehr um, rechtsbündige Werte erreichen den Zellenrand, und HTML-Text in Tabellenzellen zeigt keine großen Lücken zwischen den Wörtern mehr

Version 2.765.12

Fixed

  • Formulare mit Checkboxen oder Radio-Buttons listen die ZapfDingbats-Schrift (/ZaDb) jetzt in den Standard-Ressourcen des Formulars. Betrachter, die diese Felder selbst zeichnen (der Standard, wenn AutoFormAppearances aus ist), schlagen die Schrift dort nach, um das Häkchen zu zeichnen; bisher meldeten Poppler-basierte Betrachter eine unbekannte Schrift und zeigten kein Zeichen

Version 2.765.11

Fixed

  • In der CJKAnnotations-Demo steht das erste Notiz-Symbol jeder Sprachzeile jetzt auf einer Höhe mit den anderen Symbolen dieser Zeile; es lag 5 Points höher

Version 2.765.10

Fixed

  • Schriften, die unter ihrem englischen Namen angefordert werden, werden jetzt auch auf Windows-Systemen in anderen Sprachen gefunden. Eine Anfrage nach SimSun, Microsoft YaHei oder MS Gothic auf chinesischem, japanischem oder koreanischem Windows galt als fehlende Schrift, weil Windows den Namen in der Systemsprache meldet, und der Text wurde stillschweigend in Arial Unicode MS gesetzt

Version 2.765.9

Fixed

  • Schriften, die Windows in TrueType-Sammlungen (.ttc) vorhält, etwa SimSun, Microsoft YaHei und MS Gothic, werden jetzt als gültige eigenständige Schriften eingebettet. Bisher zeigte jede Tabelle der eingebetteten Schrift auf die falschen Daten, Betrachter wiesen sie zurück und fielen auf eine Systemschrift zurück, und auf Rechnern ohne diese Schrift zeigte der Text falsche Glyphen
  • Betroffen waren auch Dokumente, deren angeforderte Schrift fehlte und die Windows auf eine Sammlungs-Schrift abbildete, etwa Unicode-Text mit Arial Unicode MS auf Systemen, auf denen nur SimSun verfügbar war

Version 2.765.8

Fixed

  • Quelldateien, die Nicht-ASCII-Text enthalten, werden wieder als UTF-8 mit Byte-Order-Mark gespeichert. Ohne dieses liest Delphi eine Quelldatei in der Codepage des bauenden Rechners, sodass auf chinesischem, japanischem, koreanischem und anderem nicht-westlichem Windows der CJK-, arabische, hebräische und akzentuierte Text der Demos in den erzeugten PDFs als Zeichensalat herauskam und die Fehlermeldungen der Library falsche Zeichen zeigten
  • Die Demos CJKAnnotations, Annotations, HelloWorld, RtLTextOut, PageSizes, TextOut, Showcase und ViewerPref liefern wieder den beabsichtigten Text, egal wo sie kompiliert werden

Version 2.765.7

Fixed

  • Dokumentinformationen, die als UTF-8 übergeben werden (Title, Author, Subject, Keywords, Artikel-Thread-Titel und SetLoadedDocumentInfo mit der SetLoadedTitle-Familie), werden jetzt als Unicode gespeichert, sodass Betrachter akzentuierten und CJK-Text korrekt anzeigen und die Dokumentinformation mit den XMP-Metadaten übereinstimmt
  • Text in der Codepage des Systems (etwa ein chinesischer Titel auf einem chinesischen Windows-System) wird ebenfalls korrekt gespeichert, da Bytes, die kein gültiges UTF-8 ergeben, in dieser Codepage gelesen werden

Version 2.765.6

Fixed

  • Die anfängliche Ansicht neuer Dokumente (InitialZoom) schreibt jetzt vollständige Fit-Width- und Fit-Height-Destinations; der Operand, den ISO 32000-1 Tabelle 151 verlangt, fehlte, sodass Betrachter wie Poppler für jedes mit der Standardeinstellung erzeugte Dokument ein zu kurzes Destination-Array meldeten

Version 2.765.5

Fixed

  • Seitenbezeichnungen, die nicht auf der ersten Seite beginnen, decken jetzt auch die Seiten vor dem ersten Bereich ab, die schlichte Nummern behalten; der Seitenbezeichnungs-Baum muss die erste Seite einschließen (ISO 32000-1 12.4.2), ohne das konnten Betrachter falsche Bezeichnungen zeigen
  • SetLoadedPageLabel hält die Bereiche jetzt in Seitenreihenfolge und ersetzt einen Bereich, der auf derselben Seite beginnt, sodass Betrachter die beabsichtigten Bezeichnungen zeigen; bisher wurden neue Bereiche ungeordnet angehängt und konnten sich wiederholen
  • SetLoadedPageLabel verwirft die vorhandenen Bezeichnungen von Dokumenten, die sie in einem separaten Objekt ablegen, nicht mehr, und aktualisiert auch Bezeichnungs-Bäume, die auf mehrere Nodes verteilt sind
  • Seitenbezeichnungs-Präfixe, die als UTF-8 übergeben werden, werden jetzt als Unicode gespeichert

Version 2.765.4

Fixed

  • Link-Beschreibungen, die als UTF-8 übergeben werden (AddURILink, AddGoToLink, AddGoToRLink, AddLaunchLink, AddNamedDestinationLink und die Struktur-Destination-Links), werden jetzt als Unicode geschrieben, sodass Screenreader und Betrachter akzentuierten und CJK-Text statt Zeichensalat zeigen
  • Dasselbe gilt für Text und Autor von Annotationen, die mit den AddLoaded...Annotation-Methoden zu geladenen Dokumenten hinzugefügt werden, passend zu Annotationen, die in neuen Dokumenten erzeugt werden

Version 2.765.3

Fixed

  • AddGoToLink kann jetzt auf eine Seite verweisen, die in einem neuen Dokument erst später hinzugefügt wird, sodass ein Inhaltsverzeichnis auf der ersten Seite vorwärts verlinken kann; solche Links wurden bisher kommentarlos verworfen
  • Ein Link, dessen Zielseite nie hinzugefügt wird, behält seine Fläche, hat aber keine Action mehr, statt auf eine fehlende Seite zu zeigen

Version 2.765.2

Fixed

  • SetLoadedOutlineOpen öffnet und schließt Lesezeichen in geladenen Dokumenten jetzt tatsächlich; bisher schrieb es einen Schlüssel, den Betrachter ignorieren, und das Lesezeichen behielt seinen Zustand
  • AddLoadedOutline, SetLoadedOutlineURI und SetLoadedOutlineDestination wirken jetzt auf das angeforderte Lesezeichen; bei jedem Index über 0 änderten sie das falsche Lesezeichen oder taten nichts
  • Beim Hinzufügen eines Lesezeichens zu einem geladenen Dokument werden jetzt die Zählungen sichtbarer Elemente seines Parents, seiner Vorfahren und der Gliederung aktualisiert, sodass Betrachter keine falschen Aufklapp-Zustände oder Elementtotals mehr zeigen
  • Setzt man einen Web-Link auf ein geladenes Lesezeichen, wird jetzt seine Seiten-Destination entfernt, und setzt man eine Destination, verschwindet seine Action, denn ein Lesezeichen darf nur eines von beiden tragen
  • Lesezeichen-Titel, die als UTF-8 an AddLoadedOutline und SetLoadedOutlineTitle übergeben werden, werden jetzt als Unicode gespeichert statt als Zeichensalat-Bytes

Version 2.765.1

Fixed

  • Lesezeichen in neuen Dokumenten erfassen jetzt, wie viele Einträge sichtbar sind, wie ISO 32000-1 12.3.3 es verlangt: bisher zählten die Gliederung und jedes offene Lesezeichen alle verschachtelten Einträge, auch die in geschlossenen Lesezeichen
  • Setzt man Opened auf einem Lesezeichen, nachdem seine Kinder hinzugefügt wurden, öffnet es der Betrachter jetzt; vorher erreichte die Änderung nie die Datei
  • Weist man einem bestehenden Lesezeichen Title zu, ändert das jetzt den im Dokument gezeigten Titel
  • Lesezeichen-Titel mit Nicht-ASCII-Text, die als UTF-8 übergeben werden, werden jetzt als Unicode geschrieben, sodass akzentuierte und CJK-Titel korrekt erscheinen statt als Zeichensalat
  • Lesezeichen tragen jetzt die Parent-Referenz, die die Spezifikation verlangt

Version 2.765.0

Added

  • HPDFTokenizeContentStreamAppend tokenisiert einen Content-Stream direkt in ein bestehendes Token-Array, sodass Aufrufer, die mehrere Streams kombinieren, pro Stream kein temporäres Array mehr brauchen

Changed

  • Beim Kompilieren einer Seite fürs Rendering wird nicht mehr für jede Zahl und jeden Operator ihres Content-Streams Speicher alloziert, und der Seiteninhalt wird direkt in die Display-Liste der Seite tokenisiert statt dorthin kopiert zu werden
  • Paralleles Seiten-Rendering skaliert auf einem kalten Dokument deutlich besser: Auf einem 128-Seiten-Vektortestdokument werden 4 Worker jetzt etwa 3- bis 3,5-mal schneller fertig als 1 Worker (zuvor etwa Faktor 1,4 in 32-Bit- und Faktor 1,7 in 64-Bit-Builds)
  • Single-Threaded-Seitenkompilierung und -Rendering ist auf diesem Dokument ebenfalls rund 35 % schneller; Tokens, Display-Listen und gerenderte Ausgabe bleiben unverändert

Version 2.764.7

Changed

  • Beim Rendern von Inhalten, die den Grafikzustand häufig sichern und wiederherstellen (q/Q), wird nicht mehr für jedes Save Speicher alloziert — das ließ die Worker-Threads des parallelen Seiten-Renderings im Speichermanager aufeinander warten
  • Kaltes paralleles Rendern eines 128-Seiten-Vektortestdokuments ist mit 4 Workern etwa 7–10 % schneller und auf einem Worker etwa 5 % schneller; die gerenderte Ausgabe bleibt unverändert

Version 2.764.6

Fixed

  • Paralleles Seiten-Rendering fällt nicht mehr auf jeweils eine Seite zurück, wenn die Seiten bereits zuvor gerendert wurden und ihre Display-Listen noch im Cache liegen
  • Bisher hielt jede auf das Zeichnen wartende Seite ihre Speicherreservierung, während nur eine Seite nach der anderen gezeichnet wurde, sodass die anderen Worker am gemeinsamen Speicherbudget hängen blieben; sobald so viele Seiten warten wie Worker vorhanden sind, werden sie jetzt parallel gezeichnet
  • Die erste Seite kommt weiterhin früh, und der von einem Batch reservierte Speicher bleibt jetzt proportional zur Worker-Anzahl, statt das gesamte Budget zu füllen

Version 2.764.5

Fixed

  • SetStructureClassMapEntry kann ein Attribut-Wörterbuch jetzt unter mehreren Klassennamen oder erneut unter demselben Namen registrieren, ohne es freizugeben
  • Bisher gab das Entfernen oder Ersetzen eines dieser Einträge das gemeinsam genutzte Wörterbuch frei, sodass die verbleibenden /ClassMap-Einträge auf freigegebenen Speicher zeigten und das Speichern des Dokuments Müll schreiben oder eine Zugriffsverletzung auslösen konnte
  • Ein direkt erzeugtes Attribut-Wörterbuch wird bei der Registrierung jetzt zu einem indirekten Objekt, und jeder /ClassMap-Eintrag verweist darauf; das Dokument besitzt das Wörterbuch, Aufrufer dürfen es nicht freigeben

Version 2.764.4

Fixed

  • RemoveUnusedLoadedPageResources schreibt nicht mehr in eine Ressourcen-Tabelle nach deren Entfernung, wenn die /Font-, /XObject- oder andere Ressourcen-Tabelle einer Seite direkt in /Resources steht und jeder ihrer Einträge ungenutzt ist
  • Bisher ging dieser Schreibzugriff auf freigegebenen Speicher, was meist unbemerkt blieb, aber später in der Session den Speicher korrumpieren oder eine Zugriffsverletzung auslösen konnte
  • Geleerte Ressourcen-Tabellen werden weiterhin aus /Resources entfernt, und die gespeicherte Ausgabe bleibt unverändert

Version 2.764.3

Fixed

  • Beim Öffnen einer mit Public-Key (Zertifikat) verschlüsselten PDF mit PubSecKeyMaterial, ob per LoadFromFile oder BeginIncrementalUpdate, werden die Recipient-Envelopes nicht mehr aus bereits freigegebenem Speicher gelesen, während der Datei-Schlüssel wiederhergestellt wird
  • Der Fehler hing davon ab, wie der Speicher zufällig wiederverwendet wurde: Das Dokument öffnete meistens, konnte aber abgelehnt werden, als wäre kein Schlüsselmaterial zugewiesen worden, oder entpackte die falschen Bytes
  • Dokumente mit mehreren Recipients, der Recipient-Auswahl-Callback und zusätzliche mit AddPubSecKeyMaterial registrierte Schlüsselmaterialien nutzen alle dieselbe korrigierte Envelope-Liste

Version 2.764.2

Fixed

  • Die für geladene Formulare erzeugten Feld-Appearances — von AddLoadedTextField und den anderen AddLoaded*-Feldmethoden, EnsureLoadedFieldAppearanceStream oder FlattenFormFields — halten jetzt ihre eigene Referenz auf die /DR-Schrift des AcroForms, statt sich den /DR-Eintrag zu teilen
  • Das Ersetzen oder Löschen des /DR-Wörterbuchs des AcroForms oder das Entfernen des letzten Formularfelds (wodurch auch das AcroForm entfernt wird) lässt diese Appearances nicht mehr auf freigegebene Schriftobjekte zeigen
  • Bisher konnte das anschließende Freigeben des Dokuments auf eine versteckte Zugriffsverletzung stoßen, die den Rest des Dokuments nicht mehr freigab oder den Speicher korrumpierte, meist in 64-Bit-Builds
  • Eine Schrift, die direkt in /DR geschrieben wird, wird beim ersten Einsatz durch eine Appearance zu einem indirekten Objekt, sodass die Feld-Appearance und /DR in der gespeicherten Datei auf dasselbe Schriftobjekt verweisen

Version 2.764.1

Fixed

  • Ruft man ProcessObjectStreamsForDecompression nach LoadFromFile auf, liest das nicht mehr den Dateistream, den das Laden bereits geschlossen hatte; stattdessen wird die geladene Datei erneut durchsucht, sodass Object-Stream-Member für ExtractObjectFromStream verfügbar bleiben
  • Der Fehler hing davon ab, wie der Speicher gerade angeordnet war: meistens blieb er unbemerkt, konnte aber eine Zugriffsverletzung auslösen oder fremden Speicher durchsuchen, am häufigsten in 64-Bit-Builds
  • FindAllObjectStreams, ScanAndLoadReferencedObjects und ForceLoadMissingReferencedObjects tun außerhalb eines Ladevorgangs nichts mehr, statt den geschlossenen Stream anzufassen

Version 2.764.0

Changed

  • Eine THotPDF-Instanz, zum Beispiel eine Komponente, die auf ein Formular gezogen wurde, kann jetzt beliebig viele Dokumente nacheinander schreiben: BeginDoc nach EndDoc startet ein neues, unabhängiges Dokument, statt eine Exception auszulösen
  • EndDoc verwirft alles, was für das geschriebene Dokument registriert wurde, einschließlich seiner Bilder, Schriften, Formularfelder, Outlines, Dokument-JavaScript, benannter Ziele, Seitenbezeichnungen, ICC-Profile und Output-Intents, und das nächste BeginDoc gibt seine Seiten und Objekte frei, sodass nichts davon in die nächste Datei gelangt; mit aktiviertem ReproducibleOutput ist ein zweites Dokument einer wiederverwendeten Instanz byte für byte identisch mit demselben Dokument einer neuen Instanz
  • Registrierungen, die zwischen EndDoc und dem nächsten BeginDoc gemacht werden, etwa AddPDFAOutputIntent oder über Names hinzugefügte Skripte, gehören zum nächsten Dokument und werden nicht mehr von BeginDoc verworfen
  • Eigenschaftseinstellungen wie FileName, Compression, PDFACompliance, Author und Title werden zusammen mit Seitenebenen und Font-Fallback-Ketten ins nächste Dokument übernommen; eine für ein Dokument automatisch angehobene PDF-Version kehrt zum Wert der Eigenschaft Version zurück
  • Das geschriebene Dokument bleibt nach EndDoc verfügbar, bis das nächste BeginDoc kommt, sodass ValidatePDFUA2Structure, CurrentPageNumber, PagesCount und die Layout-Diagnosen weiterhin damit arbeiten
  • Da die Passwörter gelöscht werden, sobald ein geschütztes Dokument verschlüsselt wurde, löst BeginDoc eine Exception aus, wenn ActivateProtection noch aktiv ist und kein neues Passwort gesetzt wurde, statt die nächste Datei mit leeren Passwörtern zu schützen
  • Auch das Starten eines neuen Dokuments nach dem Neuschreiben eines geladenen auf derselben Instanz ergibt eine saubere Datei

Version 2.763.1

Fixed

  • Die Konvertierung eines EPUB oder der Import von HTML mit dem HTML5-Profil riskiert keine Zugriffsverletzung mehr, wenn ein Absatz nicht auf die aktuelle Seite passt; der Absatz wird jetzt immer auf die neue Seite gezeichnet
  • Dieselbe Korrektur deckt Absätze, Listeneinträge und horizontale Trennlinien im kompakten Block-Renderer ab, den HPDFRenderHTMLDocument verwendet
  • Der Fehler hing davon ab, wie der Speicher gerade angeordnet war, trat daher nur gelegentlich auf, meist in 64-Bit-Builds, und konnte eine Konvertierung ohne Ausgabe zurücklassen oder deren Inhalt korrumpieren

Version 2.762.1

Fixed

  • Ruft man BeginDoc auf einer THotPDF-Instanz erneut auf, die bereits ein neues Dokument geschrieben hat, endet das nicht mehr in einer Zugriffsverletzung; stattdessen wird eine Exception ausgelöst, die eine neue Instanz verlangt, denn die Instanz enthält noch die Objekte, Bilder, Schriften und Formularfelder des fertigen Dokuments
  • Hätte der Absturz nicht stattgefunden, hätte das zweite Dokument die Objekte des ersten übernommen, mitsamt dessen Inhalt und Formularfeldern; eine Instanz pro neuem Dokument hält jede Datei bei ihrem eigenen Inhalt
  • Das Laden eines vorhandenen Dokuments mit LoadFromFile und das erneute Schreiben ist nicht betroffen

Version 2.762.0

Fixed

  • Text-, Freitext-, Linien-, Rechteck-, Kreis-, Stempel- und Dateianhang-Anmerkungen sind in PDF/A-2-, PDF/A-3-, PDF/A-4- und PDF/X-6-Dokumenten sichtbar; sie trugen einen leeren Appearance-Stream, der nur den Validator zufriedenstellte, und weil Viewer die Appearance zeichnen, war nichts zu sehen
  • Diese Appearances zeichnen jetzt die Annotation: die Rechteck- und Kreisrahmen, die Linie, ein Notiz- und ein Anhang-Symbol in der Farbe der Annotation, den Stempelrahmen und den Freitext-Kasten, gefüllt mit seiner Hintergrundfarbe
  • Die PDF-2.0-Ausgabe gibt jeder dieser Annotationen, den erweiterten Markup-Annotationen und neuen Formularfeldern einen Appearance-Stream, wie ISO 32000-2 Tabelle 166 es verlangt, und schreibt /NeedAppearances false; außerhalb von PDF/A und PDF/X werden Freitext und Stempelname in Helvetica gezeichnet
  • In PDF/A und PDF/X zeichnen die Freitext- und Stempel-Appearances keinen Text, weil jede dort verwendete Schrift eingebettet sein muss; der Text bleibt in der Annotation, damit Viewer ihn anzeigen können

Version 2.761.6

Fixed

  • Dateianhang-Anmerkungen (AddFileAttachmentAnnotation) lassen sich in Viewern wieder öffnen und speichern: Die Dateispezifikation schrieb den eingebetteten Datei-Stream selbst als /EF, wo ISO 32000-1 Tabelle 44 ein /EF-Dictionary verlangt, das den Stream unter /F enthält, sodass Reader meldeten, dass der Dateieintrag fehlt
  • Der eingebettete Datei-Stream eines solchen Anhangs erhält den Typ /EmbeddedFile, und der Annotationstext wird zusätzlich als Beschreibung der Datei gespeichert

Version 2.761.5

Fixed

  • Benannte Destinations, JavaScript auf Dokumentebene und Dokumentanhänge werden mit ihren Name-Tree-Schlüsseln in sortierter Reihenfolge geschrieben, wie ISO 32000-1 7.9.6 es verlangt; bisher wurden sie in der Reihenfolge der Registrierung geschrieben, und Reader, die den Baum durchsuchen, konnten Einträge verpassen (qpdf meldete die Bäume als unsortiert)
  • Zwei Anhänge mit demselben Dateinamen erzeugen nicht mehr zwei Einträge mit einem Schlüssel, wodurch nur ein Anhang erreichbar blieb; der zweite bekommt einen nummerierten Schlüssel wie a (2).txt und behält seinen ursprünglichen Dateinamen
  • Änderungen von AddLoadedDocumentJavaScript und AddLoadedNamedDestination werden gespeichert; der bearbeitete Name-Tree wurde nicht zurückgeschrieben, wenn er in einem direkten Dictionary lag, sodass die neuen Einträge verloren gingen. Beide fügen an der sortierten Position ein, auch in Bäumen, die in /Kids-Knoten aufgeteilt sind, und ersetzen einen vorhandenen Eintrag desselben Namens
  • AddLoadedDocumentJavaScript speichert eine JavaScript-Action als Name-Tree-Wert statt eines nackten Skript-Streams, und AddLoadedNamedDestination schreibt den Zoom-Operanden seiner /XYZ-Destination
  • RemoveLoadedJavaScript und RemoveLoadedJavaScriptAll entfernen die Skripte aus dem Dokument selbst; zuvor änderte sich nur die von den Gettern zurückgegebene Liste, und die Skripte blieben in der gespeicherten Datei
  • SetDocumentAttachmentMetadata benennt den übergebenen Anhang um; bisher benannte es den Schlüssel des letzten Anhangs im Baum um, und der umbenannte Eintrag wandert jetzt an seine sortierte Position

Version 2.761.4

Fixed

  • Neue AcroForms definieren immer die Helvetica-Schrift, die die Default-Appearance-Strings der Felder nennen, in den Default-Ressourcen (/DR) des Formulars, wie ISO 32000-1 12.7.3.3 es verlangt; ohne AutoFormAppearances fehlte die Schrift, sodass Viewer, die Feld-Appearances bauen, keine Schrift dafür hatten
  • AddLoadedComboBox erzeugt eine echte Combobox; es setzte das Edit-Flag statt des Combo-Flags, sodass das Feld ein Listenfeld war, das Viewer als Liste aller Optionen zeigten
  • Felder, die einem geladenen Dokument hinzugefügt werden, schreiben /NeedAppearances als boolesches true statt des Namens /true, und ein für sie erzeugtes AcroForm erhält den Default-Appearance-String und die Default-Ressourcen, auf die sich ihre /DA-Strings beziehen
  • AddLoadedTextField, AddLoadedCheckBox, AddLoadedComboBox, AddLoadedListBox und AddLoadedPushButton geben dem neuen Feld einen Appearance-Stream, sodass es in Viewern sichtbar ist, die keine Appearances bauen, und in Dokumenten, deren Formular /NeedAppearances false setzt
  • Appearances, die für geladene Pushbuttons erzeugt werden (beim Hinzufügen, Neuzeichnen oder Flatten), zeichnen die Beschriftung, wo sie leer waren

Version 2.761.3

Fixed

  • Ändert man den Wert eines Text- oder Auswahlfelds in einem geladenen Formular, wird das Feld jetzt neu gezeichnet: SetFormFieldValue, ResetLoadedFormField und Multi-Selection-Updates von Listenfeldern regenerieren den Appearance-Stream, wobei die gespeicherte Datei bisher in jedem Viewer und im Druck den alten Text zeigte, weil Viewer die Appearance zeichnen, nicht den gespeicherten Wert
  • Generierte Appearances von Passwort-Textfeldern zeigen ein Sternchen pro Zeichen statt des Passworts in lesbarer Form (ISO 32000-1 Tabelle 228), sowohl für neue Felder mit AutoFormAppearances als auch für geladene Felder, die neu gezeichnet oder geflattet werden
  • AnalyzeLoadedSignatureRevisions ordnet das neue Appearance-Dictionary, den Appearance-Stream und seine Ressourcen, die ein Formularausfüllen nach dem Signieren hinzufügt, als Formularausfüllen ein, genau wie bisher beim Feld selbst, sodass das Ausfüllen eines zertifizierten Formulars in einem inkrementellen Update nicht mehr als Änderung außerhalb erkannter Strukturen gemeldet wird

Version 2.761.2

Fixed

  • 1-Bit- und 4-Bit-Paletten-Bitmaps, die mit Flate-Kompression hinzugefügt werden, behalten ihre Farben; sie wurden auf die 256-Farben-Systempalette umgemappt, wodurch sich jede Farbe verschob, die diese Palette nicht enthält. Jetzt werden sie mit ihrer eigenen Bittiefe und ihrer eigenen Palette eingebettet, was auch die Bilddaten verkleinert
  • 1-Bit-Bitmaps, deren Palette Weiß vor Schwarz listet, kommen mit CCITT Group 3-, CCITT Group 4- oder JBIG2-Kompression nicht mehr als Negativ heraus, einschließlich der Batch- und seitenübergreifenden JBIG2-Pfade; die dunklere Palettenfarbe wird immer als Schwarz kodiert
  • icAutoMono und AddMonochromeImageAuto lassen eine 1-Bit-Bitmap mit farbiger Palette auf Flate, statt sie mit CCITT oder JBIG2 in Schwarzweiß zu verwandeln
  • Zweidimensionale CCITT-Group-3-Bilder (icCCITT32) folgen jetzt ihrem /K-Parameter: Die erste Zeile und jede zweite Zeile werden eindimensional kodiert, und /K ist 2, wobei zuvor jede Zeile zweidimensional unter /K 1 kodiert wurde, was gar keine zweidimensionalen Zeilen erlaubt (ISO 32000-1 Tabelle 11, ITU-T T.4)

Version 2.761.1

Fixed

  • JPEG-Bilder, die mit DCT-Kompression hinzugefügt werden, behalten ihr eigenes Farbmodell: Graustufen-JPEGs werden als DeviceGray und CMYK-JPEGs als DeviceCMYK geschrieben, wobei jeder JPEG bisher als DeviceRGB deklariert wurde; Reader zeigten Graustufen-Dateien dann verstümmelt oder abgeschnitten und CMYK-Dateien in falschen Farben
  • CMYK-JPEGs mit Adobe-Marker (die übliche Photoshop-Ausgabe) bekommen das invertierte /Decode-Array, das ihre Sample-Werte brauchen (ISO 32000-1 8.9.5.2 und 7.4.8)
  • Die PDF/A-Farbraum-Prüfungen werten Graustufen- und CMYK-JPEG-Bilder jetzt als DeviceGray- bzw. DeviceCMYK-Verwendung aus statt als DeviceRGB
  • StampLoadedPageImage wendet dasselbe Farbmodell an, wenn ein JPEG auf eine geladene Seite gestempelt wird
  • Dateinamen wie PHOTO.JPG oder scan.jpeg laden jetzt bei jedem Kompressionstyp als JPEG; der Datei-Overload von AddImage erkennt JPEG-Daten an ihrer Signatur statt an einer case-sensitiven .jpg-Endung und versucht nicht mehr, solche Dateien als Bitmaps zu lesen

Version 2.761.0

Added

  • Das neue AddLoadedSignedSignatureField fügt in ein geladenes Dokument ein Signaturfeld ein, das bereit zum Signieren ist, sodass ein bereits signiertes PDF in einem inkrementellen Update eine zweite Signatur erhalten kann (Gegensignatur oder Genehmigung)
  • Das Feld reserviert den Signaturbereich, den SignPDFWithPFX, PreparePDFForSigning und InsertSignatureHex ausfüllen; nach BeginIncrementalUpdate und SaveIncrementalUpdate deckt die neue Signatur die gesamte Datei ab, während die früheren Signaturen gültig bleiben
  • Optional lassen sich pro Feld Grund, Ort und Kontaktinformationen, der SubFilter und die reservierte Signaturgröße setzen; das AcroForm wird als signiert und append-only markiert, und das signierte Dokument erhält kein Flag zur Neuerzeugung von Appearances

Fixed

  • Der dokumentierte Multi-Signature-Workflow für BeginIncrementalUpdate beschreibt jetzt Schritte, die funktionieren; die bisherige Beschreibung stützte sich auf eine aktuelle Seite, die nach dem Laden nicht existiert, und auf ein Signaturfeld ohne reservierten Signaturbereich, sodass das Signieren fehlschlug

Version 2.760.1

Fixed

  • DrawQRCode, DrawDataMatrix, DrawPDF417 und DrawAztec stellen die Füllfarbe der Seite nach dem Zeichnen wieder her, wie dokumentiert; vorher übernahmen danach gefüllte Formen die Barcodefarbe
  • Diese Barcodes werden als ein Pfad gezeichnet, wobei jede Folge dunkler Module in einer Zeile zu einem einzelnen Rechteck zusammengefasst wird; der Seiteninhalt wird kleiner, und Viewer zeigen keine schwachen Nähte mehr zwischen benachbarten Modulen

Version 2.760.0

Changed

  • Setzt man CryptKeyLength auf aes256, wird die Ausgabe, wie es andere versionsabhängige Features bereits tun, auf PDF 1.7 angehoben, wenn sie niedriger ist, sodass Dokumente wirklich mit AES-256 geschützt werden. Bei der Standardausgabe als PDF 1.6 wurden sie bisher kommentarlos mit AES-128 geschrieben; mit gesetztem StrictVersionLock fällt eine niedrigere Version weiterhin auf AES-128 zurück

Fixed

  • Die Hilfeseiten zu den Schutzeigenschaften zeigten Berechtigungsnamen, die nicht existieren; die Beispiele und die Beschreibungen von prPrint und prPrint12bit entsprechen jetzt den tatsächlichen Optionen, und die Hinweise zur Public-Key-Verschlüsselung listen die unterstützten Schlüsseltypen auf

Version 2.759.0

Fixed

  • Signierte PDFs lassen jetzt die gesamte /Contents-Zeichenkette einschließlich ihrer Begrenzer < und > aus den signierten Byte-Ranges heraus, wie ISO/IEC 32000-1 12.8.3.3 es verlangt; die Begrenzer wurden bisher mit signiert, was Validatoren, die die Byte-Range gegen den Signaturwert prüfen, als ungültige Byte-Range melden
  • Die PDF-MAC-Validierung von Signaturen mit angehängtem MAC akzeptiert sowohl die standardkonforme Byte-Range als auch die, die frühere Versionen geschrieben haben

Security

  • Die Signaturprüfung weist ein Dokument zurück, dessen unsignierte Lücke zwischen den beiden Byte-Ranges etwas anderes enthält als die eigene /Contents-Zeichenkette der Signatur; damit wird die Signature-Wrapping-Lücke geschlossen, bei der Inhalt außerhalb der signierten Bytes als abgedeckt gemeldet wurde. Signaturen früherer Versionen lassen sich weiterhin prüfen

Version 2.758.1

Fixed

  • Das Standard-Appearance, das AttachSignatureFieldAppearance einem unsignierten Signaturfeld gibt, zeichnet seinen hellgrauen Hintergrund wieder: Dem Füllrechteck fehlten zwei Operanden, und es setzte seine Farbe innerhalb des Pfads, was Viewer zurückweisen
  • Freitext-Anmerkungen, die auf einer neuen Seite erzeugt werden, tragen den Default-Appearance-String, den ISO 32000-1 verlangt, sodass Viewer ihren Text setzen können, statt eine leere Box anzuzeigen

Version 2.758.0

Fixed

  • Der eingebaute JBIG2-Decoder platziert jedes Symbol nach dem ersten dort in einem Textstreifen, wo ISO/IEC 14492 es vorsieht; jedes weitere Symbol landete bisher ein Pixel weiter rechts, sodass Text in JBIG2-Scans anderer Encoder auseinanderlief
  • JBIG2-Bilder, die mit dem nativen arithmetischen Encoder und einem Symboldictionary mit nur einer Glyphe geschrieben wurden, kann jetzt auch andere PDF-Viewer lesen; die Symbolbezeichner wurden mit einem Bit statt ohne kodiert, wodurch diese Viewer bereits an der ersten Glyphe scheiterten
  • Symboldictionaries, die Glyphen über Refinement und Aggregation kombinieren, werden mit dem standardmäßigen Zeichenabstand dekodiert, passend zu anderen JBIG2-Decodern
  • JBIG2-Bilder, die sich ein globales Symboldictionary teilen, schreiben /DecodeParms als Array passend zum /Filter-Array; andere Viewer ignorierten das einzelne Dictionary und fanden die geteilten Glyphen nicht, sodass solche Bilder nicht angezeigt wurden

Version 2.757.0

Fixed

  • DirectDrawBarcode und die Simple*-Balkenfunktionen zeichnen jetzt für jede Symbologie echte Barcodes; die meisten gaben bisher gleichmäßig wechselnde Balken ohne Dateninhalt zurück. GS1-128 mit Code Set C (Typ 22) wird gezeichnet, statt auf Code 39 auszuweichen, und die kurzen POSTNET-Balken werden mit 40 % der Höhe gezeichnet
  • DirectDrawBarcode skaliert Balkenbreiten und -höhen mit dem Seitenkoordinatensystem, sodass Barcodes lesbar bleiben, wenn der Dokumentmaßstab nicht einem Point pro Einheit entspricht
  • Code 128, Code 93 und die EAN-/UPC-Familie behalten exakte Elementbreiten von einem bis vier Modulen bei, egal wie Ratio gesetzt ist; jedes andere Verhältnis als 2 machte sie bisher unlesbar
  • Wenn EAN-8, EAN-13, UPC-A und UPC-E nur ihre Datenziffern erhalten, wird die Prüfziffer ergänzt; bisher wurde die letzte Datenziffer als Prüfziffer genommen. Mit aktiviertem Checksum verwirft UPC-A seine letzte Datenziffer nicht mehr, und die UPC-E-Prüfziffer (die auch die Balkenparität wählt) wird aus der expandierten UPC-A-Nummer berechnet
  • MSI-Prüfziffern stimmen bei Zahlen mit ungerader Ziffernanzahl, POSTNET-Codes erhalten ihre Korrekturziffer, und Interleaved 2 of 5 behält die letzte Ziffer einer Zahl ungerader Länge, indem eine führende Null ergänzt wird
  • Code 128 A kodiert Kleinbuchstaben über SHIFT, statt sie in Leerzeichen oder Steuerzeichen zu verwandeln, Code 39 faltet Kleinschreibung zu Großschreibung, und Codabar behält die mitgelieferten Start- und Stopzeichen
  • Zeichen, die eine Symbologie nicht darstellen kann, lösen jetzt eine Exception aus; Code 39 und Code 128 haben sie bisher verworfen oder ersetzt, und Codabar las außerhalb seiner Zeichentabelle
  • GS1-128 mit aktiviertem Checksum hängt bei jedem Messen oder Zeichnen des Barcodes nicht mehr eine weitere Prüfziffer an Text an

Version 2.756.0

Fixed

  • QR-Codes, die mit DrawQRCode gezeichnet oder mit THPDFQRCode erzeugt werden, scannen jetzt mit Standard-Readern: Die Formatinformation wird platziert, wie ISO/IEC 18004 es vorschreibt, und die Blockstruktur der Fehlerkorrektur stimmt für jede Version von 10 bis 40 (und für Version 7-Q)
  • Die automatische Moduswahl belässt Text mit Kleinbuchstaben im Byte-Modus, sodass eine URL wie https://example.com nicht mehr in Großbuchstaben kodiert und zurückgelesen wird
  • Text, dessen Länge auf ein oder zwei Ziffern oder ein alphanumerisches Zeichen endet, erhält ein Symbol, das groß genug dafür ist; die letzten Zeichen fielen bisher weg
  • Doppeltes Kodieren mit derselben THPDFQRCode-Instanz mischt das vorherige Symbol nicht mehr in das neue
  • Encode gibt False zurück, wenn eine explizit angeforderte Version zu klein ist oder der angeforderte numerische oder alphanumerische Modus die Daten nicht darstellen kann, statt ein abgeschnittenes Symbol zu erzeugen
  • Die Maskenauswahl wendet die Strafwerte für Finder-ähnliche Muster und die Dunkelmodul-Balance aus ISO/IEC 18004 7.8.3 an
  • Der eingebaute Barcode-Decoder liest standardkonforme QR-Codes: Multi-Block-Symbole mit Reed-Solomon-Verifikation, numerische, alphanumerische, Byte- und ECI-Segmente, UTF-8-Payloads und Versionen mit mehreren Alignment-Mustern

Added

  • HPDFQRFunctionMap und HPDFQRExtractDataWords machen das Modullayout und das Block-De-Interleaving mit Fehlererkennung für Code zugänglich, der QR-Symbole liest

Version 2.755.9

Changed

  • Das Soft-Mask-Rendering von Bildern verwendet exakte horizontale Sample-Indizes wieder und nutzt SSE2-Alpha-Prämultiplikation auf unterstützten Delphi-x86- und x64-Zielen; Pixelrundung und Abbruch bleiben erhalten, mit begrenztem temporärem Speicher und einem skalaren Fallback

Version 2.755.8

Fixed

  • Das Vordergrund-Rendering kann fortsetzen, sobald ein abgebrochener Seiten-Prefetch die Dokumentressourcen freigegeben hat, ohne auf das Ende des Worker-Threads warten zu müssen; expliziter Abbruch, Ersetzung, Neuladen und Zerstörung joinen den Thread weiterhin, und ungültige Seitenbereiche verlieren keinen suspendierten Worker mehr

Version 2.755.7

Fixed

  • Das Seitenrendering bewahrt den aktuellen Pfad über Grafikzustand-Restores hinweg und isoliert Form-XObject- und Type3-Glyphenpfade, Clipping und gesicherte Zustände, einschließlich fehlerhafter zusätzlicher Restores und Abbrüchen

Version 2.755.6

Fixed

  • Der SIMD-Rechteckrenderer berücksichtigt jetzt zusammengesetzte Even-Odd- und Nonzero-Füllregeln und bewahrt Löcher, gespiegelte Subpath-Richtungen und fraktionale Kantenplatzierung; ein Abbruch während der Rasterisierung verwirft die Teilbitmap und gibt korrekt weiter

Version 2.755.5

Fixed

  • Der Import von Multi-Select-Formularen reserviert jetzt exakte Optionswerte, bevor hexadezimale Kompatibilitäts-Schreibweisen in XFDF interpretiert werden; so wählt ein literaler Wert nicht mehr eine andere Option aus, und die gespeicherten Werte bleiben mit den Auswahlindizes konsistent

Version 2.755.4

Fixed

  • Die Textextraktion aus vertikalem (WMode 1) CID-Text bewegt den Stift jetzt um die ISO-32000-1-9.4.4-Verschiebung, sodass Zeichenabstand den Schritt die Spalte hinunter gemäß der Spezifikation verkürzt statt verlängert
  • Eine TJ-Positionskorrektur in vertikalem Text bewegt den Stift jetzt in der Spalte nach unten oder oben statt seitwärts, sodass extrahierte Spalten nicht mehr zerfallen und die Lesereihenfolge von oben nach unten bleibt
  • Das CIDFont-Array /DW2 wird beim Extrahieren in seiner spezifizierten Reihenfolge [v1y w1y] gelesen, sodass Glyphen, die sich auf die Standardwerte stützen, um ein volles Em statt 0,88 Em vorrücken
  • Die Originale extrahierter vertikaler Glyphen bleiben auf der Spaltenmittellinie, und Glyphenboxen werden am vertikalen Original minus dem Positionsvektor platziert, wobei die horizontale Komponente standardmäßig die halbe Glyphenbreite beträgt
  • /W2-Listeneinträge, die mehrere aufeinanderfolgende CIDs beschreiben, wenden ihre Metriken beim Extrahieren jetzt auf jede CID des Laufs an statt nur auf die erste
  • Der Seitenrenderer und der Textextraktions-Interpreter teilen sich nun eine Implementierung der Glyphen- und TJ-Verschiebungsregeln, sodass gerenderte und extrahierte Positionen nicht auseinanderlaufen können

Version 2.755.3

Added

  • THPDFQCStatementInfo erhält HasPSD2Statement, PSD2RolesOfPSP, PSD2NCAName und PSD2NCAId; der CMS-seitige Deskriptor trägt dieselben Felder
  • HPDFParsePSD2QcStatement analysiert eine PSD2-Erklärung, die Sie bereits als DER vorliegen haben, und weist jede fehlerhafte Eingabe zurück

Deprecated

  • PSD2RolesPayer und PSD2RolesPayee bleiben aus Quellkompatibilität erhalten, sind aber stets leer, da die Spezifikation keine Betäter- und Empfängerrollenlisten definiert; verwenden Sie PSD2RolesOfPSP

Fixed

  • Die PSD2-Erklärung qualifizierter Zertifikate wird nun gemäß ihrer ETSI-TS-119-495-Struktur gelesen und meldet jede Rolle des Zahlungsdienstleisters mit Rollen-OID und Rollennamen, den Namen der nationalen Aufsichtsbehörde und deren Kennung; echte PSD2-Zertifikate meldeten zuvor überhaupt keine Rollen
  • Eine fehlerhafte PSD2-Erklärung — einschließlich überschreitender oder nicht minimaler Längen, fehlender oder überzähliger Komponenten, falscher String-Typen und Namen, die kein gültiges UTF-8 sind — wird nun als Ganzes ignoriert statt teilweise gemeldet zu werden

Version 2.755.2

Fixed

  • Das Seitenrendering vertikalen (WMode 1) Texts rückt jedes Glyph nun um die ISO-32000-1-9.4.4-Textraumverschiebung vor: Wortabstand wird nicht länger mit der Schriftgröße skaliert und nicht länger zu Zweibyte-CID-Codes addiert, da er nur auf den Einbyte-Leerzeichencode wirkt
  • Zeichenabstand wird in vertikalem Text genau entlang der Schreibrichtung angewendet, wie die Spezifikation es definiert, sodass mit ungleich null Tc gesetzte Spalten genauso hoch gerendert werden wie in anderen standardkonformen Viewern
  • Unsichtbarer Text (Rendermodus 3 und verborgener optionaler Inhalt) rückt vertikale Spalten nach denselben Regeln wie gemalter Text vor und hält spätere sichtbare Glyphen an der richtigen Stelle
  • Das CIDFont-Array /DW2 wird in seiner spezifizierten Reihenfolge [v1y w1y] gelesen, sodass sich auf Standardwerte stützende Schriften um ein volles Em statt 0,88 Em vorrücken
  • Vertikale Glyphen werden am vertikalen Original minus ihres Positionsvektors gemalt, wobei die horizontale Komponente standardmäßig die halbe Glyphenbreite beträgt, wodurch Spalten um die Stiftposition zentriert werden
  • /W2-Listeneinträge, die mehrere aufeinanderfolgende CIDs beschreiben, wenden ihre Metriken jetzt auf jede CID des Laufs an statt nur auf die erste

Version 2.755.1

Fixed

  • ExportLoadedFormToFDF erzeugt jetzt den vollständigen FDF-Body, bevor die Zieldatei angelegt wird, sodass ein Fehlschlag mitten im Export das Ziel nicht mehr durch ein abgeschnittenes Dokument ersetzt
  • Der Interchange-Scanner des FDF-Streams verfolgt Hexadezimal-Strings und hält Field-Dictionaries intakt, wenn ein Hex-Wert unmittelbar am Dictionary-Terminator endet
  • Der Abgleich der Choice-Auswahlindizes dekodiert gemischte PDFDocEncoding-, UTF-16- und Hexadezimal-Schreibweisen mit einem einzigen Matcher, sodass äquivalente Export-Werte /I konsistent wiederaufbauen
  • Der XFDF-Import akzeptiert die Hexadezimal-Schreibweise eines Options-Export-Werts, der als plain Literal-Text geliefert wird, und stellt damit Round Trips wieder her, die Drittanbieter-Tools geschrieben haben
  • Der FDF-Export überspringt Widget-only-Felder ohne Feldnamen und ist damit auf einer Linie mit dem XFDF-Exporter und dem Verhalten jedes Importers
  • Die Delphi-Stamp-Demo verankert ihr Wasserzeichen und die Rubber-Stamp-Annotation an der tatsächlichen Seitengröße, sodass beide auf Landscape- und Nicht-A4-Eingaben sichtbar bleiben
  • Die C++Builder-DigiPrint-Demo gibt ihre Bilder und seitenweisen Zeilenlisten frei, initialisiert den Header-Zeilenabstandsfaktor und meldet ein fehlendes demo.xml, statt abzustürzen
  • Die Build-Skripte für die Win64-ABI-DLL und die Codec-Worker finden dcc64 ab RAD Studio 12 in bin64, und vollständige C++Builder-Library-Builds erkennen Trial-Rückstände im gemeinsamen Ausgabeverzeichnis und räumen sie auf

Version 2.755.0

Added

  • Geladene Multi-Select-Choice-Felder tauschen jetzt einzelne ausgewählte Werte über die FDF-Datei- und -Stream-APIs sowie über XFDF-Callbacks mit Array-Unterstützung aus, bewahren die Optionsgrenzen und synchronisieren beim Import die Auswahlindizes

Version 2.754.6

Fixed

  • Behoben: SetLoadedFormFieldExportValue geht jetzt den normalen Weg der Field-Value-Aktualisierung und bewahrt Button-Value-Typen, Auswahlindizes, Appearance-States, kodierte Strings und das Calculation-Change-Tracking

Version 2.754.5

Fixed

  • Behoben: XFDF-Formularwerte und Annotation-Textelemente bewahren ihren exakten Inhalt, ohne Formatierungs-Whitespace einzufügen — einschließlich führender und nachgestellter Leerzeichen, Tabs und Zeilenumbrüche

Version 2.754.4

Fixed

  • Behoben: Die Helper für Value, Default und Maximallänge geladener Formularfelder beachten jetzt geerbte und indirekte Einträge; Field-Resets bewahren die Default-Value-Typen, synchronisieren Choice-Auswahlen und Button-States und lassen Geschwisterfelder unverändert; neu erzeugte Button-Appearances behalten den ausgewählten State und gültige Rendering-Bounds

Version 2.754.3

Fixed

  • Behoben: Benannte Kindfelder bleiben einzeln adressierbar, wenn ihr Field-Typ geerbt ist — geerbter Typ, Flags und Optionen liegen über die Field-Helper offen, und das Entfernen erhält Geschwisterfelder samt ihrer Widgets

Version 2.754.2

Fixed

  • Behoben: Neu erzeugte Appearances geladener Choice-Felder zeigen jetzt Unicode-Optionslabels, ohne die Export-Werte anzutasten, rendern nicht ausgewählte List-Optionen und heben Einzel- und Mehrfachauswahl konsistent zu den Field-Values und Indizes hervor

Version 2.754.1

Fixed

  • Behoben: Die Aktualisierung eines geladenen Choice-Felds hält die Indizes der ausgewählten Optionen jetzt konsistent zum neuen Wert — einschließlich Options-Export-Werten und editierbaren Einträgen außerhalb der Optionsliste — ohne geteilte Auswahl-Arrays zu verändern

Version 2.754.0

Added

  • Die optionalen Factory-Funktionen HPDFCreateTesseractOCREngine und HPDFCreateRapidOCREngine binden lokale Erkennungsprogramme und vom Aufrufer gelieferte Modelle an durchsuchbare Text-Layer — mit Unicode-Text, Wortkoordinaten, Timeouts, Cancellation und Output-Budgets

Fixed

  • Behoben: Text-Matrix-Advances, indirekte CID-Font-Breiten, die q/Q- und Form-Clipping-Wiederherstellung, die Ausrichtung reduzierter JPEGs, Bild-Soft-Masks und Indexed-Stream-Paletten — Textlayout und Bildinhalt stimmen auf den betroffenen Seiten wieder
  • Kleine eingebettete TrueType-Füllglyphen verwenden jetzt eine lokale Coverage-Antialiasing-Behandlung, um dünne Striche bei niedrigem DPI besser darzustellen; abgebrochene OCR-Anfragen werden auch dann als Cancellation gemeldet, wenn die Erkennungs-Engine einen Fehler zurückgibt
  • RenderOutputDither greift jetzt über alle Rendering-Backends und das parallele Seiten-Rendering hinweg, mit konsistenter Cache-Invalidierung und Cancellation

Version 2.753.0

Added

  • SetLoadedFreeTextPlainText wandelt unterstützte geladene FreeText-Annotationen explizit in ASCII-Helvetica-Plain-Text um und baut ihre sichtbare Appearance neu auf — für vollständige Rewrites und inkrementelle Saves

Fixed

  • Behoben: Die Seitenkonvertierung und die Save-Validierung geladener Dokumente lösen jetzt indirekte und geerbte Page-Boxes auf und bewahren gemeinsame Seitenabmessungen, statt sie durch A4 zu ersetzen

Version 2.752.5

Fixed

  • Behoben: Die Page-Bitmap-Initialisierung prüft beim Leeren der begrenzten Blöcke die Cancellation, gibt unfertige Bitmaps frei und hält das Vordergrund-Rendering nicht mehr auf, während abgebrochene Prefetch-Arbeiten ihre Initialisierung abschließen

Version 2.752.4

Fixed

  • Behoben: Das Schließen oder Neuladen eines Dokuments gibt jetzt die von ihm gehaltenen PDF-Objektgraphen und Stream-Payloads frei — einschließlich geteilter und zyklischer Ownership — ohne verknüpfte Referenzen doppelt freizugeben

Version 2.752.3

Fixed

  • Behoben: Wertänderungen an geladenen Checkboxen synchronisieren die Appearance-States jetzt auch dann, wenn das Normal-Appearance-Dictionary nur den ausgewählten State enthält

Version 2.752.2

Fixed

  • Behoben: Wird die reproduzierbare Ausgabe erst nach dem Dokumentaufbau aktiviert, wird der Erstellungs-Zeitstempel jetzt fixiert, sodass äquivalente Saves über Clock-Ticks hinweg byte-identisch bleiben

Version 2.752.1

Fixed

  • Behoben: Die Namen geladener Formularfelder dekodieren PDF-Strings jetzt konsistent, sodass Felder mit UTF-16-Namen gefunden und aktualisiert werden können, ohne ihre Identität zu ändern

Version 2.752.0

Fixed

  • Behoben: Das Verschieben einer geladenen Non-Widget-Annotation erhält jetzt die Identität des Annotationsobjekts und aktualisiert ihre optionale Seitenreferenz auf die Zielseite

Version 2.751.0

Fixed

  • Behoben: Das Löschen geladener Seiten pflegt jetzt Named Destinations, Outline-Destinations, Structure Trees, Parent Trees und Annotationsobjekt-Referenzen weiter und beseitigt erreichbare Null-Referenzen — sowohl bei vollständigen Rewrites als auch bei inkrementellen Saves

Version 2.750.0

Fixed

  • Behoben: Vollständige PDF-Rewrites expandieren ungelesene komprimierte Objekte jetzt, bevor die Object-Stream-Container ersetzt werden — Fonts, Farbräume und ActualText bleiben erhalten, während verstümmelter chinesischer Text, verändertes Seitenaussehen und abweichender Extraktionstext behoben sind
  • Verschlüsselte Dokumente mit leerem User-Password laden jetzt und starten den Rewrite direkt; gesperrte Object Streams scheitern mit einer klaren Meldung, statt ein unvollständiges Dokument zu erzeugen
  • Unveränderte numerische Objekte behalten ihre Quell-Präzision, was subtile Farb- und Transparenz-Drift nach einem Rewrite verhindert
  • Kopierte Seiten behalten ihre validierten Ressourcennamen und -referenzen, was Fehler im indirekten Resource-Dictionary und falsch gebundene Bilder behebt

Version 2.748.6

Fixed

  • Behoben: Eine Cross-Reference-Untersektion, die mehr Einträge deklariert als die Tabelle enthält, lief die gesamte deklarierte Anzahl durch, obwohl keine Daten mehr zu lesen waren — eine vierzig Byte große fehlerhafte Datei brauchte dadurch Dutzende Sekunden, bis sie zurückgewiesen war
  • Behoben: Der Job-Runner verlor alle bereits erzeugten Ergebnisse, wenn eine Operation eine Exception auslöste, und der HTML-Import verlor ein Bildobjekt, wenn sich der umgebende Stream nicht erstellen ließ

Version 2.748.5

Fixed

  • Behoben: PKCS#12-Dateien mit nicht-ASCII-Passwort ließen sich nicht öffnen: Das Passwort ist eine UTF-8-Bytefolge, wurde aber Byte für Byte verbreitert statt dekodiert, sodass der abgeleitete Schlüssel für jedes Zeichen außerhalb von ASCII falsch war. Dateien mit dem modernen PBES2-Schema waren nicht betroffen — daher das unterschiedliche Verhalten der beiden Verfahren
  • Behoben: Der Signatur-Batch-Validator und der Revocation-Evidence-Cache lösten bei einer ungültigen Option im Konstruktor eine Access Violation statt ihres eigenen Fehlers aus, weil der Destruktor lief, bevor die Member erzeugt waren, die er freigibt
  • Behoben: Die Evidence-Download-Aufgabe scheiterte in ihrem Destruktor, wenn ihre Argumente zurückgewiesen wurden, da die Prüfungen liefen, bevor der Thread selbst erzeugt war
  • Behoben: Der Cloud-Signature-Provider kodierte einen Algorithm-Identifier, dessen zweiter Arc über 39 hinausgeht; ein fehlerhafter Identifier löst jetzt den eigenen Fehler des Providers aus statt eines Konvertierungsfehlers
  • Zertifikats- und Signaturcontainer weisen jetzt ein verschachteltes Element zurück, dessen deklarierte Länge über das umschließende Element hinausreicht — was validiert wird und was die Signatur abdeckt, kann also nicht mehr auseinanderliegen
  • Private-Key-Werte werden nach dem RSA-Signieren aus dem Speicher gewischt, statt für die nächste Allokation auf dem Heap zu liegen

Version 2.748.4

Fixed

  • Behoben: Das Laden von Type-1-Fonts las jede Eigenschaft aus der ersten Zeile des Fontprogramms: Die Tokenliste wurde aufgefüllt, ohne vorher geleert zu werden, sodass Versions-, Family- und Weight-Strings, die Stem Hints und die Charstring-Key-Länge alle aus veralteten Tokens stammten. Type-1-Fonts melden jetzt ihre eigenen Metadaten
  • Behoben: Die Charstring-Key-Länge wurde als Pointer in einen bereits freigegebenen String gehalten und ohne Bereichsprüfung verwendet; sie wird jetzt als Wert gespeichert und auf den vom Format erlaubten Bereich begrenzt
  • Behoben: Nicht eingebettete Schriften fielen immer auf den System-Default-Face zurück: Der angeforderte Face-Name wurde Byte für Byte in den Wide-Character-Fonteintrag kopiert, sodass keine installierte Family je passte
  • Behoben: Das Parsen eingebetteter TrueType- und OpenType-Schriften las beim Dekodieren von Glyph-Outlines, Composite-Glyph-Argumenten und der CFF-Tabelle eines OpenType-Containers hinter das Ende eines abgeschnittenen Fontprogramms, und eine fehlerhafte Character Map verlangt keinen negativen Glyph-Array mehr
  • Behoben: Cross-Reference-Tabellen und -Streams mit überlaufenden deklarierten Objektnummern: Ein Eintrag, der eine Nummer nahe am Integer-Limit angab, lief in einen negativen Index über und wurde außerhalb der Tabelle geschrieben, und eine deklarierte Objektanzahl oder /Size weit größer als alles, was die Datei enthalten konnte, dimensionierte die Arrays des Loaders allein nach dieser Angabe

Version 2.748.3

Fixed

  • Behoben: Data Matrix wies gültige Eingaben zurück: Die Symbolgröße wurde geschätzt, indem die Ziffernanzahl halbiert wurde, aber nur benachbarte Ziffern teilen sich ein Codewort — Text wie 1a2a3a wählte also ein zu kleines Symbol für seine eigenen Daten und ließ sich nicht kodieren
  • Behoben: Vier-Byte-UTF-8-Zeichen in XFDF, etwa Emoji, dekodierten zum falschen Surrogate-Pair, und ein unbekanntes Byte verschluckt nicht mehr die drei Zeichen danach
  • Region-Records von Enhanced Metafiles begrenzen ihre Rechteckanzahl jetzt über die Recordgröße, statt der Angabe im Region-Header zu vertrauen, die weit hinter den Record hinauslesen konnte
  • PNG-Bilder, deren deklarierte Breite mal Höhe den adressierbaren Bereich übersteigt, werden schon am Header zurückgewiesen, statt einen Pixelbuffer negativer Länge anzulegen
  • Hochwertiges Image-Resampling meldet jetzt eine Anfrage außerhalb des gültigen Bereichs, statt die Größe seines Zwischenbuffers überlaufen zu lassen
  • Ein WebP-Meta-Prefix-Bild, das mehr Entropy-Gruppen angibt als es Pixel hat, wird zurückgewiesen, statt aus ein paar hundert Bytes Input hunderte Megabyte an Prefix-Tabellen anzulegen
  • Behoben: Lecks auf den Fehlerpfaden der Aztec-Kodierung, der WebP-Bitmap-Dekodierung und des Object-Stream-Decode-Worker-Pools, wo ein halb fertiges Objekt liegen blieb, wenn ein späterer Schritt eine Exception auslöste

Version 2.748.2

Fixed

  • Behoben: QR-Code-Symbole verloren die letzten Codewort-Bits: Der Modulplatzierungsdurchlauf übersprang die linkeste Spalte, sodass das Ende des letzten Error-Correction-Blocks nie ins Symbol geschrieben wurde
  • Behoben: Der QR-Terminator füllte den gesamten Rest des Datenblocks mit Null-Bits und ließ keinen Raum für die 0xEC / 0x11-Pad-Codewörter, die ISO/IEC 18004 verlangt; ein Version-1-Symbol trug stattdessen sechs Null-Codewörter
  • Ein neuer Test liest ein erzeugtes Symbol wieder aus seinen Modulen zurück, sodass Datenblock, Pad-Codewörter, Error-Correction-Block, Maske und Platzierung alle gegen den Standard geprüft werden und nicht gegen die eigene Ausgabe des Encoders

Version 2.748.1

Fixed

  • Behoben: Drei Parser hingen bei fehlerhafter Eingabe, statt sie zu melden: der Object-Parser bei einem >> in einem Array oder einer ] in einem Dictionary, der CMap-Reader bei einer verwaisten eckigen oder geschweiften Klammer und der XFDF-Reader bei einem Konstrukt ohne Tagnamen (etwa einer Dokumenttyp-Deklaration) oder einem fremden Byte zwischen Attributen. Jeder von ihnen hörte auf, seinen Cursor weiterzubewegen — ein einziges unerwartetes Byte machte aus der Analyse eine Endlosschleife
  • Behoben: CDATA-Abschnitte in XFDF wurden als Markup gelesen: Ihr Inhalt zählt jetzt als Elementtext, und der Abschnittsmarker wird korrekt ausgemessen, statt das erste Zeichen zu verschlucken
  • Behoben: Eine WebP-Chunk-Länge nahe 2 GB ließ die Größenprüfung überlaufen, sodass das Kopieren der Payload hinter das Ende des Dateibuffers las; Chunk-Längen werden jetzt in 64-Bit-Arithmetik auf den gültigen Bereich geprüft
  • Behoben: Eine PNG-Chunk-Länge von 0xFFFFFFFF gab den Chunkbuffer frei, während der Chunk weiterhin seine deklarierte Länge meldete — spätere Lesezugriffe zeigten auf freigegebenen Speicher; überlange Chunks werden zurückgewiesen
  • Behoben: Das CCITT-Fax-Dekodieren überlieferte seine Berechnung der Row-Buffer-Größe bei sehr großen deklarierten Seitenformaten und konnte hinter den Buffer schreiben; der Row-Store ist jetzt begrenzt, und das Dekodieren stoppt sauber am Limit
  • Behoben: Der CCITT-Encoder las bei Breiten, die ein Vielfaches von acht sind, ein Byte hinter das Ende einer Scanzeile
  • Behoben: Comment-Records von Enhanced Metafiles wurden auf 64-Bit-Builds über einen auf 32 Bit abgeschnittenen Pointer gelesen, was bei jeder EMF mit GDI-Kommentar eine fremde Adresse las
  • Behoben: 8-Bit-Bilder mit weniger als 256 Paletteneinträgen gaben uninitialisierten Speicher als Ende ihrer Farbtabelle aus; die Tabelle gibt jetzt ihre tatsächliche Eintrageanzahl an
  • Behoben: Tief verschachtelte BER-Strukturen unbestimmter Länge erschöpften den Stack beim Parsen eines Signatur- oder Zertifikatscontainers; eine Schachtelung über 128 Ebenen wird zurückgewiesen

Version 2.748.0

Fixed

  • Behoben: Die Fehlerkorrektur jedes 2D-Barcodes, den die Bibliothek zeichnet: QR Code, Data Matrix, PDF417 und Aztec bauten ihr Generatorpolynom vom konstanten Term aufwärts, teilten aber so, als käme der führende Term zuerst — jedes Symbol trug also Checkwörter, die kein konformer Reader akzeptiert. Die Checkwörter entsprechen jetzt den Rechenbeispielen aus ISO/IEC 18004, ISO/IEC 16022 und ISO/IEC 15438
  • Behoben: Aztec-Symbole verloren ihre Nutzdaten: Der Encoder teilt das Codewort-Array in place und der Aufrufer gibt genau dieses Array aus — die Nachrichtenwörter wurden von der Division überschrieben, und das Symbol trug weder die Daten noch eine gültige Mode-Message
  • Behoben: Das Data-Matrix-Generatorpolynom begann seine Wurzeln eine Potenz zu niedrig und erzeugte dadurch ein anderes Polynom, als ISO/IEC 16022 Anhang E vorschreibt
  • Behoben: Das Data-Matrix-Finder-Pattern: Das durchgezogene L liegt jetzt in der linken Spalte und der untersten Zeile, die alternierende Clock-Spur in der obersten Zeile und der rechten Spalte, jeweils beginnend dunkel an der Ecke, die es mit dem L teilt. Beide waren vertauscht, sodass Reader die Orientierung des Symbols nicht bestimmen konnten

Version 2.747.4

Fixed

  • Behoben: Die Bearbeitung geladener Dokumente schrieb PDF-Zahlen mit dem systemabhängigen Dezimaltrennzeichen: Page Stitching, Rechteck-Schwärzung, Text- und Bild-Stamps, zusammengesetzte Wasserzeichenformen und Ellipse-Appearances geben jetzt immer einen Punkt aus, sodass Dokumente, die auf einem Dezimalkomma-System bearbeitet wurden (zum Beispiel deutsches oder französisches Windows), keine Content-Streams mehr enthalten, die Viewer zurückweisen
  • Behoben: Das Laden von Type-1-Fonts hing vom System-Locale ab: FontMatrix-, BlueValues-, Stem-Hint- und Charstring-Realzahlen werden als PostScript-Zahlen mit Punkt geparst, sodass PFB-Fonts ihre Metriken und Outlines auf Dezimalkomma-Systemen behalten, anstatt lautlos unbrauchbar zu werden
  • Behoben: Das Fontgrößen- und Farbparsing der Default Appearance (/DA), die HTML-Attribute width und size, FormCalc-Ergebnisse und Job-JSON-Zahlen folgten dem Prozess-Locale; sie verwenden jetzt in beide Richtungen das Invariant-Format
  • Behoben: Die integrierte Barcode-Zeichnung schrieb ihre Balkenrechtecke über ein Locale-abhängiges Format, was auf einem Dezimalkomma-System einen ungültigen Content-Stream erzeugte
  • Free-Pascal-Builds parsen und formatieren Content-Stream-Operanden, Textextraktions-Metriken und JavaScript-Zahlen jetzt mit dem Invariant-Format und sind damit auf Augenhöhe mit den Delphi-Builds, statt auf die Locale-abhängige Konvertierung zurückzufallen
  • Der Zahlen-Writer schreibt bei jedem Aufruf nicht mehr das Dezimaltrennzeichen der globalen Formateinstellungen der Host-Anwendung um — das veränderte, wie der Rest des Programms seine eigenen Zahlen formatierte, und war unsicher, wenn mehrere Threads gleichzeitig Dokumente erzeugten

Version 2.747.3

Fixed

  • Behoben: Bearbeitungen verschwanden auf komprimierten Seiten: Rechteck-Schwärzung, Page Stitching, zusammengesetzte Wasserzeichenformen und Anmerkungs-Flattening hängten ihre Operatoren an einen noch komprimierten Seiten-Content-Stream an, sodass der Schwärzungsbalken, die gestitchte Seite, die Wasserzeichenform oder die eingebrannte Anmerkung in der gespeicherten Datei stillschweigend fehlte. Der Seiteninhalt wird jetzt expandiert, bevor etwas angehängt wird
  • Behoben: Angehängter Inhalt verschmolz mit dem letzten auf der Seite vorhandenen Operator, wenn die Seite nicht mit einem Leerzeichen endete; dabei entstand ein nicht lesbares Token wie Q0.5, das einen Viewer dazu bringen konnte, die ganze Seite zurückzuweisen. Jetzt wird wo nötig ein Zeilenende eingefügt

Version 2.747.2

Added

  • Free-Pascal-Win32-Unterstützung hinzugefügt: Das Lazarus-Package baut jetzt über eigene Build-Einstiegspunkte für i386-win32 und x86_64-win64, die Smoke-Testsuiten nehmen ein Architektur-Argument entgegen, und die Probleme mit dem 32-Bit-Compiler und dem C-Symbol-Linking wurden behoben; PDF-Erzeugung, Laden, Flate-Kompression, AES-Verschlüsselung und CBZ-Dokumenthandling werden auf beiden Zielen abgedeckt

Version 2.747.1

Fixed

  • Behoben: Der Rotated-Mask-Retry des integrierten Barcode-Decoders hinterließ veraltete Bytes in unberührten Zellen der gedrehten Maske, erzeugte Phantomtinte und machte viertelgedrehte Code-39-Symbole unlesbar; der rotierte Puffer wird jetzt explizit genullt, sodass um 90° gedrehte Code-39-Fotos und -Scans über den Rotation-Retry dekodiert werden

Version 2.747.0

Added

  • WebP-Bildimport hinzugefügt: AddImageFromFile akzeptiert nun .webp-Dateien über einen integrierten verlustfreien (VP8L)-Decoder nach RFC 9649 — kanonische Prefix-Codes, räumliche Meta-Prefix-Codes, LZ77-Backward-References mit Neighborhood-Distance-Map, Color-Cache und alle vier inversen Transformationen (Predictor, Color, Subtract-Green, Color Indexing mit Pixel Bundling); verlustbehaftete VP8-Frames werden mit einer klaren Meldung abgelehnt

Version 2.746.0

Added

  • Der integrierte Barcode-Decoder liest QR-Symbole jetzt in jeder der acht Ausrichtungen, in denen eine fotografierte oder gescannte Seite ankommen kann: Die Finder-Patterns identifizieren die fehlende Ecke, und die abgetastete Modulmatrix wird vor dem Dekodieren in das erwartete Layout rotiert oder gespiegelt, sodass viertelgedrehte und gespiegelte Aufnahmen ohne Vorverarbeitung gelesen werden

Version 2.745.0

Added

  • eIDAS-Qualified-Certificate-Auswertung für geladene Signaturen hinzugefügt: GetLoadedSignatureQCStatements meldet die ETSI EN 319 412-5 QCStatements des Signaturzertifikats — QcCompliance, QcSSCD, QcType-Werte, Währung/Betrag/Exponent von QcLimitValue und die PDS-Positionen — plus die TS 119 495 PSD2-Payer- und Payee-Rollen, und löst eine Qualified-Signature-Heuristik aus, wenn QcCompliance und QcSSCD beide gesetzt sind (die QTSP-Vertrauensentscheidung bleibt beim Aufrufer)

Version 2.744.0

Added

  • N-up-Imposition für geladene Dokumente hinzugefügt: ComposeLoadedPagesNUp setzt jede Seite auf rasterkomponierte Bögen in der Quellpapiergröße um (2-up, 4-up, 6-up, bis 16x16) für druckfertige Ausgabe, zieht das /Rotate jeder Seite in die Platzierungsmatrix hinein, teilt die Seitenressourcen mit der komponierten Form und zeichnet optional Haarlinien-Zellenrahmen mit einstellbarem Bundsteg

Version 2.743.0

Added

  • FlattenLoadedAnnotations backt Annotationen ohne Appearance-Stream jetzt ein, statt sie stillschweigend zu überspringen: Widgets bekommen zuerst ihre Feld-Appearance aus dem Feldwert generiert (der bei in Browsern gedruckten Formularen verbreitete /NeedAppearances-Fall), sodass der eingegebene Wert im Seiteninhalt erhalten bleibt
  • Markup-Annotationen ohne /AP erhalten eine synthetisierte Appearance aus ihren eigenen Eigenschaften — FreeText- und Stamp-Text mit /DA-Styling und /Q-Ausrichtung, Square- und Circle-Formen mit /C-//IC-Farbe und /BS-Breite, Line- und Ink-Striche sowie Highlight-/Underline-/StrikeOut-/Squiggly-Quad-Markup, das /QuadPoints und /CA-Deckkraft berücksichtigt
  • Versteckte Annotationen (das /F-Hidden-Flag) bleiben Annotationen, wenn sie keine Appearance haben, weil das Einbacken einer unsichtbaren Notiz sie sichtbar machen würde

Version 2.742.0

Fixed

  • Behoben: Free-Pascal-Package-Builds schlugen seit 2.738.0 fehl, weil die LTV-Evidence- und Seed-Value-Memberdeklarationen in einem Delphi-only-Conditional-Block lagen, während ihre Implementierungen bedingungslos waren, sodass sich das Free-Pascal-Package nicht mehr kompilieren ließ; die Implementierungen tragen jetzt dasselbe Conditional, und das Package baut wieder

Added

  • Der HTML-Import löst Tabellen jetzt auf einem vollständigen Belegungsraster auf, sodass rowspan- und colspan-Zellen ihre Spalten korrekt belegen und spätere Zeilen die belegten Slots überspringen, statt nach links zu rutschen
  • Tabellenzeilenhöhen ergeben sich aus dem Zeilenumbruch des Zelltexts unter der Schrift der Zelle selbst statt aus einer Zeichenzähl-Schätzung, sodass gemischter schmaler und breiter Inhalt keine überlaufenden oder überdimensionierten Zellen mehr erzeugt
  • Spaltenbreiten folgen <col>-Breitenhinweisen und Zellenbreiten-Attributen, und mit <thead> ausgezeichnete Kopfzeilen (oder führende Reihen aus lauter <th>) wiederholen sich auf jeder Fortsetzungsseite, wenn eine Tabelle einen Seitenumbruch überschreitet
  • Eine rowspan-Gruppe bleibt über Seitenumbrüche hinweg ganz: Die durch eine verbindende Zelle zusammengefassten Zeilen wandern gemeinsam auf die nächste Seite, damit die verbindende Zelle nie zerschnitten wird

Version 2.741.0

Fixed

  • Behoben: Free-Pascal-Builds wurden beendet, statt einen Fehler zu melden, wenn ein Dokument einen der von diesen Builds nicht gelinkten Codecs brauchte — das Öffnen eines TIFF, das Dekodieren eines JPEG-2000- oder JBIG2-Bildes, das Lesen eines progressiven oder reduzierten JPEG, das Anwenden einer ICC-Farbtransformation oder das Anfordern von Zopfli-Rekomprimierung beendete den Prozess komplett
  • Jede dieser Operationen schlägt jetzt so fehl, wie es ihr Aufrufer ohnehin erwartet, sodass ein Dokument, das eine davon nutzt, mit übersprungener Funktion lädt, statt die Anwendung abstürzen zu lassen

Added

  • Strukturordnungs-Textextraktion hinzugefügt: ExtractLoadedPageStructureText durchläuft den Dokumentstrukturbaum in Autor-Reihenfolge (ISO 32000-1 14.8.4) und verkettet die Marked-Content-Läufe einer Seite nach MCID, sodass getaggte Dokumente wie Behördenformulare oder barrierefreie Publikationen ihre verbindliche Lesereihenfolge extrahieren statt einer geometrischen Schätzung; Glyphen, die der Baum nie beansprucht, fallen an ein geometrisches Ende und zählen im Untagged-Bericht mit

Version 2.740.0

Fixed

  • Behoben: Farbige Glyphen verloren in Free-Pascal-Builds ihre Transparenz, weil eingebettete Farbitmaps über einen Pfad gelesen wurden, der den Alphakanal verwirft — jeder Emoji- oder Farbfont-Glyphe wurde als opakes Rechteck gezeichnet; die Bitmaps behalten jetzt ihre per-Pixel-Alpha

Fixed

  • P-384-ECDH-Key-Agreement aktiviert: Die finale bedingte Subtraktion der CIOS-Montgomery-Multiplikation verglich gegen P-Limb plus Borrow, was bei den auf allen Bits gesetzten High-Limbs der P-384-/P-521-Primzahlen auf Null überlief und stillschweigend falsch entlieh; der Vergleich erkennt den Borrow jetzt ohne die überlaufende Addition, und das P-384-Shared-Secret stimmt Byte für Byte mit OpenSSL-Referenzvektoren überein

Version 2.739.0

Added

  • Free-Pascal-Builds verschlüsseln und entschlüsseln jetzt Dokumente: Die AES-Einstiegspunkte werden von der FIPS-197-Implementierung der Bibliothek selbst bedient, statt einen Unsupported-Operation-Fehler zu melden, sodass AES-128- und AES-256-geschützte Dateien dort erstellt und geöffnet werden können
  • AES-GCM-Verschlüsselung und -Entschlüsselung, einschließlich des Streaming-Kontexts für große Payloads, sind in Free-Pascal-Builds verfügbar
  • Der Free-Pascal-Smoke-Test prüft die Chiffre jetzt gegen die FIPS-197-Known-Answer-Vektoren, fährt PKCS#7- und GCM-Round-Trips und erstellt ein AES-256-geschütztes Dokument und lädt es inklusive Passwort-Ablehnungstest neu

Added

  • CSS2.1-Absatztypografie in die HTML5-Import-Engine integriert: text-align (mit Legacy-align-Attribut und Center-Tag-Mapping), letter-spacing und word-spacing über die PDF-Tc-/Word-Space-Operatoren, text-indent für Erste-Zeile-Einzüge und text-decoration-Underline-/Line-Through-Regeln, sodass bestehende Web- und E-Mail-HTML-Imports ihre zentrierten Überschriften, Einzüge und Unterstreichungen behalten
  • Den integrierten QR-Decoder über Version 1 hinaus erweitert: Die Symbolversion leitet sich jetzt über die Gitterteilbarkeit aus der Finder-Geometrie ab (Versionen 2-40 mit sauberem Modulgitter dekodieren), das Byte-Mode-Längenlimit folgt der Kapazität aus ISO/IEC 18004 Tabelle 7 pro Version, und die Funktionsmodul-Map deckt Alignment-Patterns und Versionsinformationsblöcke für höhere Symbole ab

Version 2.738.0

Added

  • Free-Pascal-Builds komprimieren und dekomprimieren Dokumente jetzt nativ: Der Deflate-Codec kommt aus einem integrierten Backend über die mit Free Pascal mitgelieferte Pascal-zlib-Implementierung, sodass FlateDecode-Inhalte keinen Unsupported-Operation-Fehler mehr melden
  • Komprimierte Dokumente lassen sich unter Free Pascal mit der Standardkomprimierungseinstellung erstellen und neu laden, und Cross-Reference-Streams, Object-Streams, eingebettete Dateien und komprimierter Seiteninhalt dekodieren dort alle
  • Das Backend deckt die zlib- und Raw-Deflate-Wrapper, den gzip-Wrapper und die automatische Header-Erkennung ab, sodass SVG-Imports und der Multi-Window-Size-Dekompressions-Fallback sich so verhalten wie unter Delphi
  • Der Free-Pascal-Smoke-Test verifiziert den Codec jetzt über einen Wrapper- und Checksummen-Selbsttest plus einen komprimierten Dokument-Round-Trip

Added

  • AIA-caIssuers-Kettenvervollständigung hinzugefügt: HPDFFetchAIAIntermediates durchläuft die Access-Method-1.3.6.1.5.5.7.48.2-Endpunkte eines CMS-Zertifikatssatzes über den Transport des Aufrufers (nackte DER- und PEM-Bodies dekodieren beide), und die FetchMissingIntermediates-Validierungsoption speist die geholten Intermediates in den Pfadaufbau, sodass Cloud-Signer-Signaturen mit einem einzelnen End-Entity-Zertifikat validieren, statt beim Pfadaufbau zu scheitern
  • LTV-Aktivierung mit einem einzigen Aufruf hinzugefügt: PopulatePAdESLTVEvidence durchläuft jede geladene Signatur, holt ihre Intermediates plus OCSP/CRL-Evidence online und schreibt das Material in das Dokument-DSS, wodurch ein frisches B-B-Signaturdokument zu B-LT aufgewertet wird, ohne handmontierte Evidence-Arrays
  • Seed-Value-Durchsetzung für Signaturen hinzugefügt: CheckLoadedSignatureSeedValue liest das /SV-Dictionary eines Signaturfeldes und prüft Kandidaten-SubFilter, DigestMethod, Reason und das DocMDP-Profil gegen seine Constraints mit der Force-Bit-Semantik von ISO 32000-1 12.7.5.5, sodass Constraints des Formular-Authors beachtet werden, bevor eine Signatur platziert wird

Version 2.737.0

Added

  • Strenge Speicherverifikation über die VerifySavedOutput-Property hinzugefügt: Nach dem Schreiben lädt eine frische Reader-Instanz mit deaktivierter Cross-Reference-Recovery die Datei erneut, sodass korrupte Serialisierung direkt an der Aufrufstelle fliegt, statt erst beim nächsten Konsumenten aufzutauchen
  • ReproducibleOutput auf verschlüsselte Dokumente ausgeweitet: AES-CBC-Streams nutzen die statische 14*(1+i)-IV-Konvention, Schlüsselmaterial und Salze werden deterministisch abgeleitet, und die kanonische Dokument-ID normalisiert flüchtige Info-Timestamps — für Byte-identische verschlüsselte Speicherung in Regression-Pipelines

Version 2.736.0

Added

  • Hochwertiges Resampling und monochromes Dithering über eine neue HPDFResample-Unit hinzugefügt: Separable Catmull-Rom-Bikubik- und Lanczos3-Kernel ersetzen die GDI-Stretch-Semantik für Bild-Downsampling über die ImageDownsampleKernel-Property, und RenderOutputDither wendet nach der Seitenkomposition Floyd-Steinberg-Error-Diffusion an, sodass Print-Preview-Ausgabe fotografische Details in reinem Schwarzweiß behält

Version 2.735.2

Fixed

  • Behoben: Flate-Dekompressions-Streams übergaben beim Nachfüllen aus dem Quellstream die Adresse ihrer Buffer-Variablen statt des Buffers selbst, was bei jedem Lesevorgang den Speicher korrumpierte und den Prozess zum Absturz bringen konnte; betroffen sind das Laden komprimierter Dokumente, die Inflate-Stream-Klassen und die Compress-/Decompress-Stream-Helfer

Version 2.735.1

Fixed

  • Behoben: Wachstumsfähige XFA-Felder ohne Datenquelle fielen beim Flatten auf eine einzige Zeile zusammen; ihre Höhe wird jetzt aus dem Text gemessen, den das Template selbst deklariert — genau das zeigt ein solches Feld auch an; ein an leere Daten gebundenes Feld misst weiterhin als leer

Version 2.735.0

Added

  • Free-Pascal-Builds decken jetzt die gesamte Bibliothek ab: Jede Unit kompiliert mit FPC 3.2.2 und Lazarus, zuvor ging nur der zentrale Erstellungs- und Ladepfad
  • XPS-, EPUB- und CBZ-Container lassen sich unter Free Pascal importieren — über einen integrierten Read-only-ZIP-Reader, der ZIP64-Größen, Stored- und Deflated-Einträge, CRC-Prüfung und traditionell verschlüsselte Einträge mit demselben Password-Callback wie der Delphi-Pfad abdeckt
  • XFA-Formular-Flattening, die FormCalc-Berechnungs-Engine, die Widget-Runtime, die Dokument-Viewer-Komponenten, die Type-1-Font-Handler, der HTML-Import, die Signaturprüfung und der Job-Runner kompilieren alle in Free-Pascal-Builds; das Flatten der XFA-Pakete eines geladenen Dokuments braucht zusätzlich den Deflate-Codec, den diese Builds nicht linken

Fixed

  • Behoben: Das 64-Bit-Byte-Swapping der PNG-Helper-Unit lieferte auf Win64 falsche Werte und hatte die Unit dadurch komplett aus dem Build verdrängt

Added

  • Missing-Glyph-Erkennung zur Zeichenzeit hinzugefügt: Die TrackUnresolvedGlyphs-Property erfasst jeden Codepunkt, der über die aktive Unicode-Schrift als .notdef-Tofu-Box rendert, feuert pro Fund das OnUnresolvedGlyph-Ereignis und lässt nicht registrierte Pure-GDI-Dokumente unangetastet
  • Legacy-kern-Table-Unterstützung hinzugefügt: RegisterUnicodeTTF erfasst die kern-Tabelle aus Apple-/GDI-Zeiten, und die Kerning-Ausgabe fällt auf ihre Format-0-Binärpairsuche zurück, wenn eine Schrift keine GPOS-Kern-Lookups mitbringt — der klassische Paar-Abstand ist damit in Schriften wie Standard-Arial wieder da
  • Per-Run-Font-Fallback im Absatzlayout hinzugefügt: WideTextOutBox teilt jede umgebrochene Zeile jetzt an Codepunkten, die die aktuelle Schrift nicht abbilden kann, und zeichnet jeden Run in seiner aufgelösten Fallback-Schrift, sodass gemischte Latein-, Emoji- und CJK-Absätze ohne Tofu rendern, wenn Fallback-Ketten registriert sind

Version 2.734.0

Added

  • RFC-3161-Timestamp-Request-Infrastruktur hinzugefügt: HPDFRFC3161BuildRequest erzeugt die DER TimeStampReq mit frischer positive-INTEGER-Nonce, optionaler Policy-OID und certReq, und HPDFRFC3161ParseResponse dekodiert den PKIStatusInfo-Header und extrahiert das Token — TSA-Transport-Callbacks sind damit drei Zeilen statt eines DER-Studiums
  • Die ISO/TS-32002-Developer-Extension-Deklaration (THotPDF.EnsureISO32002Extensions) hinzugefügt, die EdDSA-Signaturalgorithmen und die zusätzlichen ECDSA-Kurven in PDF-2.0-Dokumenten abdeckt — idempotent und version-gated wie die 32001-SHA-3-Deklaration

Version 2.733.0

Added

  • Portierbarer X25519- und X448-Montgomery-Ladder-Key-Agreement plus P-256-/P-521-NIST-Kurven-ECDH mit CIOS-Montgomery-Multiplikation hinzugefügt, sodass Key-Agreement-(KARI-)Public-Key-Empfänger vollständig in-process erstellt und entpackt werden können; RFC 7748 und OpenSSL-generierte Referenzvektoren zurren das Ladder-Verhalten in der Regression-Suite fest
  • HPDFUnwrapKeyAgreementRecipientEnvelope zusammen mit den Einstiegspunkten AddPubSecAgreementKeyMaterial und AddPubKeyAgreementRecipientWithSecret hinzugefügt, sodass mit ECDH-/X25519-/X448-Empfängern verschlüsselte Dokumente mit dem privaten Empfänger-Scalar geöffnet und ohne externe ECDH-Tools verschlüsselt werden können

Version 2.732.0

Changed

  • Speichervorgänge leiten die Serialisierer-Ausgabe jetzt durch einen gepufferten 1-MiB-Write-Stream und fassen die per-token-Write-Aufrufe von Objekt-Headern, Dictionary-Keys und xref-Zeilen zu gebündelten Pushes auf dateibasierten Zielen zusammen
  • Cross-Reference-Stream-Payloads wenden vor FlateDecode eine PNG-Up-Prädiktion an (/DecodeParms /Predictor 12) und schließen Free-List-Löcher über /Index-Subsections, wodurch xref-Container bei jedem PDF-1.5+-Dokument und bei dünn besetzten Objektbereichen schrumpfen
  • Die CompressionLevel-Property wählt jetzt auch den Flate-Aufwand der Cross-Reference-Stream- und Object-Stream-Container, sodass clMaximum beim Speichern kleinere Struktur-Streams erzeugt

Fixed

  • Die /W-Feldbreiten des Cross-Reference-Streams passen sich jetzt dem tatsächlichen Offset-Bereich an, statt auf einem festen [1 4 2]-Layout zu bestehen, dessen Cardinal-Cast Offsets jenseits von 4 GiB stumm zu beschädigter Ausgabe kappte

Version 2.731.0

Changed

  • Die integrierte Template-Matching-OCR wurde neu gebaut: Connected-Component-Glyphen-Extraktion, Grayscale-Coverage-Scoring gegen gecachte Multi-Font-Templates, Otsu-Binarisierung mit Local-Window-Fallback, bimodale Gap-Worttrennung, Wort-Baselines, Speckle-Noise-Verwerfung und ein erweitertes 62-Zeichen-Alphabet, das gemischt geschriebenen ASCII-Text über Zeilen-Höhenclustering und Case-Context-Präferenz erkennt

Version 2.730.0

Added

  • Win64-Unterstützung für Free Pascal 3.2.2 und Lazarus 4.6 hinzugefügt, inklusive Runtime-Package, reproduzierbarem Build-Skript, Kompatibilitätsschicht und Non-GUI-Create-and-Reload-Smoke-Test; native statische Codec-Integrationen bleiben Delphi-only und melden in Free-Pascal-Builds einen expliziten Unsupported-Operation-Fehler

Version 2.729.0

Added

  • Eine host-neutrale dynamische XFA-Widget-Runtime hinzugefügt mit Unicode-Bearbeitung, Focus- und Hit-Testing, instance-aware Binding, atomarer Validierung und Berechnung, begrenztem Reflow und einer Read-only-Factory für geladene Dokumente, die das Quell-XFA bewahrt

Version 2.728.0

Fixed

  • XFA-intrinsische Messung und Textfortsetzung korrigiert, sodass explizit leere und berechnete Werte erhalten bleiben, jeder Feld- oder Repeated-Row-Binding-Kontext benutzt wird, breakAfter-Aktionen erhalten bleiben, synthetische Namenskollisionen vermieden werden und ein gecachtes globales Messbudget durchgesetzt wird

Version 2.727.0

Changed

  • Das XFA-Layout wendet jetzt intrinsische Minimal- und Maximalabmessungen an, misst wachstumsfähige Felder an ihrem gebundenen Text und teilt geeigneten textEdit-Inhalt atomar über Inhaltsbereiche und Seiten auf — mit Read-only-Fortsetzungsfeldern und begrenzten Text-, Fragment- und Messbudgets

Version 2.726.0

Added

  • Vollständige NChannel-Process- und Spot-Attribute hinzugefügt, Mixing-Hints, begrenzte PDF-2.0-CxF/X-4-Spekral-Tintenstreams sowie dokumentweite Konsistenzprüfungen für Spot-Tint-Definitionen und externe Output-Intent-Colorant-Tabellen

Version 2.725.0

Added

  • Ein Thread-safe deterministisches SIMD-Scanline-Render-Backend hinzugefügt, das unterstützte Rechteck-Display-Lists vorab prüft, die finale Bitmap-Oberfläche in Vektorblöcken ohne Zwischen-Bitmap-Kopie schreibt und exakte Ablehnungsgründe pro Anfrage über die bestehende Software-Fallback- und Telemetrie-Pipeline zurückgibt

Version 2.724.0

Changed

  • Den begrenzten nativen FormCalc-Evaluator erweitert um allgemeine SOM-Node-Set-Aggregate, gemischte Scalar- und Node-Set-Argumente, verschachtelte numerische und String-Aufrufe sowie deterministische Selection-, String-, trigonometrische, logarithmische und Konvertierungsfunktionen unter den bestehenden Operation-, Array-, Tiefe-, Zeit- und Ausgabebudgets

Version 2.723.0

Changed

  • SubsetLoadedFonts subsettet jetzt eingebettete Type-1-PFB- sowie gesplittete Binär- und Hex-PFA-Programme sicher, behält rekursive TrueType-Composite-Abhängigkeiten und schließt COLR-v0/v1-Outline-Abhängigkeiten, während Farb-, Bitmap-, Variations- und Shaping-Tabellen erhalten bleiben

Version 2.722.0

Added

  • Begrenzte Password-Callbacks für klassisch ZIP-verschlüsselte XPS-, EPUB- und CBZ-Einträge hinzugefügt, inklusive Retry-Limits pro Eintrag, Cancellation-Checks, Memory-only-Credential-Handling und Fail-closed-Ablehnung von nicht verfügbarer, ungültiger oder nicht unterstützter Verschlüsselung

Version 2.721.0

Changed

  • DownsampleLoadedImages skaliert unterstützte 8-Bit-Separation- und DeviceN-Bildsamples jetzt direkt im Komponentenraum und bewahrt den ursprünglichen Farbraum-Graphen, die Tint-Transform, die Colorants, /Decode-Bereiche und die Overprint-Semantik über Speichern und Neuladen hinweg

Version 2.720.0

Added

  • Begrenzte eingebaute Recognition-Overloads hinzugefügt für OCR mit hohem Kontrast und Großbuchstaben-ASCII, horizontale Code 39 und saubere achsenparallel ausgerichtete QR-Version-1-Byte-Mode-Symbole — so lassen sich durchsuchbare Textebenen und Barcode-Dekodierung geladener Seiten ohne vom Aufrufer gelieferte Engine nutzen, während mehrdeutige oder nicht unterstützte Eingaben fail-closed abgelehnt werden

Version 2.719.0

Added

  • Begrenzte JPEG-2000-Verfeinerung nach Auflösung und Quality-Layer über THPDFJpeg2000Decoder.LoadProgressiveFromByteArray hinzugefügt, plus Multi-Layer-Encoding über TJpeg2000Bitmap.QualityLayers, mit identischen Finalpixeln für die Progression-Orders LRCP, RLCP, RPCL, PCRL und CPRL

Version 2.718.0

Changed

  • Vollständige UniJIS-, UniGB-, UniCNS- und UniKS-CMaps für UCS2 und UTF16 in horizontaler und vertikaler Richtung eingebettet, inklusive Supplementary-Scalaren und Standard-Vertikal-Defaults, sodass CJK-Textextraktion und -Geometrie nicht mehr von externen Unicode-Mapping-Dateien oder Half-em-Schätzungen abhängen

Version 2.717.0

Added

  • Explizite Shared-Object-Abhängigkeitsbereiche für linearisierte Dokumente und ein Range-Arrival-Redraw-Scheduler hinzugefügt, sodass Seiten schon zeichnen können, bevor alle optionalen Abhängigkeiten da sind, und genau dann neu zeichnen, wenn neu verfügbare Daten das Ergebnis ändern

Version 2.716.0

Added

  • Begrenzte Objektgraph-Reparatur für umsetzbare xref-, Trailer-, Catalog-, Page-Tree- und Name-Tree-Preflight-Findings hinzugefügt, mit validiertem Transaction-Commit und vollständigem Rollback bei unsicherer oder mehrdeutiger Eingabe

Version 2.715.0

Added

  • PDF-2.0-Encrypted-Payload-Wrapper hinzugefügt, bei denen der sichtbare Dokumentinhalt vor der Authentifizierung lesbar bleibt, während Namen, Beschreibungen und Bytes eingebetteter Dateien bis zu einem expliziten Passwort-Unlock geschützt bleiben

Version 2.714.0

Changed

  • Der SVG-Export geladener Seiten gibt jetzt axiale und radiale Gradienten, begrenzte PNG-Repräsentationen von Type-4- bis Type-7-Mesh-Shadings und dekodierte Inline-Bilder aus, ohne die entsprechenden Skip-Counter hochzuzählen

Version 2.713.0

Changed

  • Farbige Glyphen in OpenType-SVG nutzen jetzt die begrenzte Form-XObject-Pipeline für Bögen, Vektor-Gradienten, Deckkraft, geometrische Masken und lokale #id-Wiederverwendung, während Skripte, externe Ressourcen, Bilder und nicht unterstützter aktiver Inhalt weiterhin abgelehnt werden

Version 2.712.0

Changed

  • ReplaceLoadedPageText ersetzt Treffer, die sich über TJ-String-Items und -Arrays erstrecken, jetzt über Glyphen-Source-Spans und bewahrt dabei Kerning-Zahlen, nicht passende Präfixe und Suffixe, unverbundene Operanden und die ursprüngliche Content-Stream-Struktur

Version 2.711.0

Added

  • CFF-FontSet-SyntheticBase-Auflösung hinzugefügt mit geerbten Top- und Private-DICT-Werten, CharStrings, charset, Encoding und Local Subrs, plus deterministischer Override-Semantik und begrenzter Ablehnung ungültiger, zyklischer oder übermäßig tiefer Vererbung

Version 2.710.0

Added

  • Deterministische begrenzte Flate-Predictor-Auswahl über HPDFSelectFlatePredictor hinzugefügt, mit verteilten Zeilenstichproben, geschätzten Byte-Kosten, konfigurierbarer CPU-Gewichtung und expliziten Byte-, Zeilen- und Arbeitsbudgets

Version 2.709.0

Added

  • Opt-in-native JBIG2-Huffman-Symbol-Dictionary- und Text-Region-Ausgabe über THPDFJBIG2Options.UseHuffmanEncoding hinzugefügt, inklusive Standardtabellen DH, DW, BMSIZE, FS, DS und DT, rohe kollektive Bitmaps, Symbol-ID-Tabellen, deterministisches natives Routing und pixel-exakte Decoder-Round-Trips, während die Arithmetic- und MMR-Defaults erhalten bleiben

Version 2.708.0

Changed

  • Arabische und kombinierte Presentation-Form-Reverse-cmap-Mappings werden nach registrierter Font-Generation gecacht und ersetzen die wiederholten U+FB00..U+FDFF- und U+FE70..U+FEFF-Scans in ApplyArabicGSUBRefinement, ApplyArabicGSUBContextualRefinement und dem generischen kontextuellen GSUB-Pfad, während Codepunkt-Präzedenz und geformte Ausgabe erhalten bleiben

Version 2.707.0

Added

  • Den Aztec-2D-Barcode-Encoder (ISO/IEC 24778) hinzugefügt, über THPDFPage.DrawAztec und die eigenständige THPDFAztec-Unit: High-Level-Encoding per dynamischer Programmierung mit Mode-Latches, Shifts und Binary-Shift-Runs, Bit Stuffing, Reed-Solomon-Fehlerkorrektur über GF(16) bis GF(4096), automatische Auswahl kompakter 15x15..27x27- oder voller 19x19..143x143-Symbole und Forced-Layer-Steuerung für feste Symbolgrößen
  • Vertikale Seiten-Textzusammenführung hinzugefügt: THotPDF.ExtractLoadedPageText und die Range-/Stream-Aggregations-APIs clustern WMode-1-Glyphen jetzt in Spalten am Glyphen-Ursprung-X, ordnen die Spalten von rechts nach links und durchlaufen jede Spalte von oben nach unten, statt vertikalen CJK-Text in Ein-Glyphe-Zeilen zu zerfetzen

Fixed

  • Behoben: Der parallele Band-Export schlug bei Seiten mit gebrochenen Pixelabmessungen (A4 bei 96 DPI) mit einer PNG-Bandbreiten-Diskrepanz fehl; die Rastergröße wird jetzt einheitlich mit den Band-Writern per Ceil gerundet, sodass gelieferte Tiles immer zur Encoder-Breite passen

Version 2.706.0

Added

  • Streaming-PNG-Export geladener Seiten und gebänderter Multi-Page-TIFF-Export über THotPDF.SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded und SaveLoadedPagesToTiffStreamBanded hinzugefügt — komprimierte Bilddaten werden zeilenweise über Band-Encoder geschrieben, sodass sehr große Seiten keinen kompletten Framebuffer brauchen; THPDFBandImageExportInfo meldet Seiten-, Band-, Zeilen-, Worker-, Speicher-, Ausgabe-, Timing- und Cancellation-Telemetrie

Version 2.705.0

Added

  • PDF/A-Finalisierung in die Speicherpfade geladener Dokumente integriert: THotPDF.SaveLoadedDocument und SaveLoadedDocumentToStream validieren jetzt den GTS_PDFA1-OutputIntent (geerbt aus dem Quell-Catalog oder frisch registriert) und geben die pdfaid:part-/pdfaid:conformance-XMP-Identifikation aus, wenn PDFACompliance gesetzt ist, während ein vorhandenes pdfaid-Paket beim erneuten Speichern byte-genau erhalten bleibt
  • Verarbeitung von vertikaler Schrift (WMode 1) auf der Ladeseite hinzugefügt: CIDFont-/W2- und /DW2-Zellmetriken treiben jetzt Textextraktion und Seiten-Rendering und gehen Spalten entlang der y-Achse des Text-Raums mit dem v1x/v1y-Positionierungsvektor abwärts, statt horizontaler /W-Advances

Version 2.704.0

Added

  • Paralleles Tile- und Band-Rendering geladener Seiten über THotPDF.RenderLoadedPageTilesParallel und THotPDF.RenderLoadedPageBandsParallel hinzugefügt, mit Row-major-Callbacks im aufrufenden Thread, geliehenen Bitmaps, kooperativem Cancellation, vom Aufrufer gesteuertem In-flight-Speicher, Peak-Memory-Zulassung und einem begrenzten unveränderlichen Typ-3-Glyphen- und Halftone-Screen-Cache, der über isolierte Render-Kontexte geteilt wird

Version 2.703.0

Added

  • Begrenzte CSC-Multisign-Digest-Batches über THPDFCSCSignatureProvider.SignHashBatch hinzugefügt — ein hash-gepinntes SAD und eine signatures/signHash-Anfrage für einen geordneten Batch mit gleicher Algorithmuswahl, bei gleichzeitiger Durchsetzung lokaler und Credential-multisign-Limits, strikter Response-Kardinalität, synchroner oder asynchroner Ergebnisreihenfolge, SHA-256-content-adressierten Idempotency-Keys und Completed-Batch-Replay

Version 2.702.0

Added

  • THotPDF.RenewPAdESLTATimestamp erweitert um vom Aufrufer gelieferte Zertifikats-, OCSP- und CRL-Evidence, die vor dem neuen RFC-3161-Dokument-Timestamp in das bestehende DSS gemerged wird, jede frühere Revision byte-genau bewahrt und Validierungsstreams über aufeinanderfolgende Erneuerungen exakt dedupliziert

Version 2.701.0

Added

  • Klausel-adressierbaren PAdES-Baseline- und Extended-Profile-Preflight über THotPDF.PreflightLoadedPAdES hinzugefügt, der jede anwendbare Anforderung mit stabiler Rule-ID, Profil, normativem Level, Normklausel, PDF-Pfad, Objektnummer, signierter oder aktueller Revision und Bestehensstatus meldet, während CMS-Kardinalitäten, ESS-Referenzen des Signaturzertifikats, Signature-Dictionary-Constraints, Byte-Range-Abdeckung, vertrauenswürdige Zeit, DSS-Evidence und Dokument-Timestamp-Abdeckung validiert werden

Version 2.700.0

Added

  • End-to-End-ECDSA-, Ed25519- und Ed448-PFX-/PKCS#12-Private-Key-Laden und CMS-Dokumentsignierung hinzugefügt, inklusive Named-Curve-CNG-ECDSA, optionalem OpenSSL-3-PureEdDSA, RFC-8410-Key-Dekodierung, RFC-8419-Digest- und Parameterregeln, SHAKE256 mit 512-Bit-Ausgabe für Ed448, automatischer Key-Algorithmus-Auswahl und strikter Zertifikat-zu-Key-Zuordnung

Version 2.699.0

Added

  • Deterministische Multi-Identity-PFX-/PKCS#12-Credential-Auswahl über HPDFEnumeratePFXIdentities, HPDFParsePFXByLocalKeyID und THPDFCMSSignOptions.PFXLocalKeyID hinzugefügt, inklusive strikter einwertiger localKeyId- und friendlyName-Bag-Attribute, Public-Key-Pairing, rekursiver Safe-Content-Bags, begrenzter Ambiguitäts- und Zyklus-Diagnostik sowie automatischer Einbettung passender Intermediate- und Root-Zertifikatsketten mit exakter DER-Deduplizierung

Version 2.698.0

Added

  • Die In-process-PFX-/PKCS#12-PBES2-Entschlüsselung um AES-128-CBC und AES-192-CBC plus PBKDF2-HMAC-SHA-384- und HMAC-SHA-512-PRFs erweitert, inklusive chiffrespezifischer optionaler keyLength-Validierung und begrenzter Salt-, Iterations-, IV- und Padding-Prüfungen, bei beibehaltener AES-256-CBC- und HMAC-SHA-1-/SHA-256-Kompatibilität

Version 2.697.0

Added

  • Spezifikationskonforme XPS- und OpenXPS-Canvas-FixedPage.NavigateUri-Vererbung hinzugefügt, sodass Nachfahren von Path, Glyphs und verschachtelten Canvas-Visuals die gescopete URI erhalten, sofern sie sie nicht selbst überschreiben — mit Bewahrung externer, Mail-, Package-Page- und Prozent-dekodierter LinkTarget-Aktionen über Transformationen, verschachtelte Clips, isolierte Opacity-Gruppen, Reusable-Visual-Unterdrückung, Wiederherstellung nach verschachtelten Overrides sowie der bestehenden Link-, URI-, Cancellation- und Unsafe-Scheme-Limits

Version 2.696.0

Added

  • Begrenzte native XPS- und OpenXPS-Canvas-Transparenzgruppen hinzugefügt, sodass Opacity- und Vollton-, Gradienten- oder Bild-Canvas.OpacityMask-Werte überlappende Kind-Visuals genau einmal durch isolierte DeviceRGB-Form-XObjects compositten — mit eingefalteter Uniform-Alpha, geteilten Variable-Alpha-Soft-Masks, verschachtelten Gruppen, transformierten Clips, Ressourcentransfer, erhaltenen Links und Fail-closed bei malformed, nicht unterstütztem, singulärem oder überdimensioniertem Inhalt

Version 2.695.0

Added

  • Begrenzte native XPS- und OpenXPS-Canvas.Clip-Konvertierung hinzugefügt für abgekürzte Geometrie, lokale oder entfernte StaticResource-PathGeometry-Werte, direkte Property-Elemente, strukturierte Linien-, Bézier-, quadratische und Bogen-Figuren, Geometrie-Transformationen, leere Clips und verschachteltes EvenOdd- oder NonZero-Clipping über PDF W* oder W — mit geclippten Navigationsgrenzen, 100,000-Wert-Parsing-Limits und Fail-closed bei malformed oder singulären Transformationen

Version 2.694.0

Added

  • Begrenzte native XPS- und OpenXPS-Navigation für transformierte Path- und Glyphs-Visuals hinzugefügt — HTTP-, HTTPS- und Mail-Links bleiben als PDF-URI-Annotationen erhalten, und paketrelative Seiten plus Prozent-dekodierte LinkTarget-Fragmente werden als vorwärts- oder rückwärtsgerichtete PDF-GoTo-Aktionen aufgelöst, sobald alle Seiten existieren, mit metrikbewussten Klickgrenzen, 65,536-Link- und 8,192-Zeichen-Limits, VisualBrush-Capture-Unterdrückung, Cancellation und Fail-closed-Diagnostik bei unsicheren Schemata

Version 2.693.0

Added

  • Begrenzte native XPS- und OpenXPS-VisualBrush-Konvertierung hinzugefügt für Inline- oder ressourcenbasierte Canvas-, Path- und Glyphs-Visuals, hierarchische und entfernte ResourceDictionary-Lookups, absolute Viewbox, absolute oder relative Viewport, None-, Tile- und gespiegelte Tile-Modi, Transformationen, Opacity, wiederverwendbare Form-XObjects, geteilte Tiling-Patterns, token-bewussten Ressourcentransfer und Fail-closed-Budgets für Zyklen, malformed Input, Rekursion, Inhalt, Cache und Platzierung

Version 2.692.0

Added

  • Natives XPS- und OpenXPS-Package-Font-Einbetten hinzugefügt für TrueType- und OpenType-Programme, TTC-Member-Fragmente, GUID-obfuskierte Ressourcen, direkte oder cmap-abgeleitete Glyphen-IDs, One-to-Many-Unicode-Cluster, explizite Advances und Offsets, breitenkorrekte RTL-Ursprünge, geteilte Font-Ressourcen, Embedding- und No-Subsetting-Berechtigungen, optionales Glyph-Subsetting, begrenzte ToUnicode-Maps und amortisiert-lineare Positioned-Run-Ausgabe ohne GDI-Face-Substitution

Version 2.691.0

Added

  • Begrenztes OpenXPS-Glyphs-Indices-Layout hinzugefügt für strenge Cluster-Code-Unit- und Glyphenzählung, explizite Hundertstel-em-Advances, horizontale und vertikale Offsets, umgekehrte Progression bei ungeradem BidiLevel, Vollton-Attribut- oder Property-Element-Füllungen, Opacity, natives PDF-TJ-Batching, Positioned-Unicode-Cluster-Fallback, bewahrte Textextraktion, Fail-closed-Diagnostik bei malformed Input und amortisiert-lineare Puffer mit einem Cap von 65,536 Mappings

Version 2.690.0

Added

  • OpenXPS-Path.OpacityMask-Unterstützung hinzugefügt für Vollton-, Variable-Alpha-Multi-Stop-Linear- und elliptische Radial-Gradient- sowie normale, gekachelte oder gespiegelte PNG-ImageBrush-Masken — über eingefaltete Uniform-Alpha, begrenzte native DeviceGray-Transparenzgruppen, geteilte Shading-Patterns und Bild-Soft-Mask-Streams, Fail-closed-Handling nicht unterstützter Inhalte und den wiederverwendbaren RegisterLuminositySoftMaskState-Builder mit Alpha-Image-Ressourcenbindung

Version 2.689.0

Added

  • OpenXPS-ImageBrush-Modi Tile, FlipX, FlipY und FlipXY über native PDF-Tiling-Patterns hinzugefügt, mit einer, zwei oder vier unabhängig geclippten Platzierungen, geteilten Bild- und PNG-Soft-Mask-Ressourcen, kombinierten Fixed-Page-, Path- und Brush-Matrizen und der begrenzten RegisterImageTilingPattern-API für wiederverwendbare bildbasierte Patterns

Version 2.688.0

Added

  • OpenXPS-ImageBrush.Transform-Unterstützung hinzugefügt für endliche Sechs-Parameter-Attributmatrizen und MatrixTransform-Property-Elemente, verkettet nach dem nativen Path-Clipping und vor Viewport-Clipping und Bildplatzierung, sodass der Brush rotieren, skalieren, scheren oder verschieben kann, ohne seine umgebende Vektorgeometrie zu ändern; nicht standardkonformes RelativeTransform und unaufgelöste Matrix-Ressourcen bleiben explizite Diagnostiken

Version 2.687.0

Added

  • Matrixgesteuerte Bild-XObject-Platzierung über THPDFPage.ShowImageMatrix hinzugefügt und den XPS-Fixed-Page-Import erweitert — um Package-JPEG-, PNG-, TIFF- und JPEG-XR-ImageBrush-Füllungen, absolute oder grenzenrelative Viewbox- und Viewport-Mappings, natives Path- und Single-Viewport-Clipping, Bild- und Path-Opacity, PNG-Soft-Mask-Alpha, DPI-bewusstes 96-DPI-Sizing, geteiltes Decoded-Resource-Caching und Fail-safe-Diagnostiken für nicht unterstütztes Tiling, Transformationen, Farbkonvertierung und Bild-Striche

Version 2.686.0

Changed

  • Wiederverwendbare begrenzte Multi-Stop-Radial-Gradient-Registrierung hinzugefügt und den nativen Vektor-XPS-Path-Import erweitert — um Property-Element-elliptische RadialGradientBrush-Werte, Pad-Spread, einheitliche Stop-Alpha, Brush-Opacity, relative oder absolute Center-, Origin- und Radius-Mappings, natives Typ-3-PDF-Shading und Koordinatenwiederherstellung, die die Path-Geometrie unverändert lässt

Version 2.685.0

Changed

  • Den geordneten nativen Vektor-XPS-Path-Import erweitert — um quote-bewusstes und begrenztes Property-Element-Parsing, Vollton- und Multi-Stop-Linear-Gradient-Brushes, native PDF-Shading-Patterns, Brush- und Stop-Alpha, standardmäßig grenzenrelative oder explizit absolute Gradient-Koordinaten, Out-of-Range-Stop-Interpolation und Fail-safe-Diagnostiken für nicht unterstützte Transformationen, Spread-Modi, Farbinterpolation, Variable-Alpha und entartete Achsen

Version 2.684.0

Changed

  • Geordneten nativen Vektor-XPS-Path-Import hinzugefügt — mit begrenzter abgekürzter Geometrie, Fill-Regeln, Vollton-RGB- und ARGB-Füllungen und -Strichen, Path-Opacity, Strichbreite, Sechs-Parameter-Transformationen und Fail-safe-Diagnostiken für nicht unterstützte Zeichenfeatures

Version 2.683.0

Changed

  • Die PDF/X-6-Validierung des tatsächlich gemalten Inhalts gestärkt — mit Graphics-State von Shading-Patterns zum Definitionszeitpunkt, Nonstroking-Pattern-ExtGState-Semantik, Fail-closed-Prüfungen von Soft-Mask-Subtyp und Backdrop, exakten Typ-3-Glyphenmetriken und geerbten Farbregeln, strikter Combined-Paint-Alpha-Klassifizierung, begrenzter JPX-Farbinferenz und appearance-bewusstem Annotation-Compositing

Version 2.682.0

Added

  • Producer- und Verifier-Unterstützung für brainpoolP256r1-, brainpoolP384r1- und brainpoolP512r1-ECDSA-Signaturen hinzugefügt, inklusive kurvenspezifischer SHA-2-/SHA3-Digest-Matrix, Fail-before-provider-Signaturvalidierung, strikter Named-Curve-Zertifikatsparameter, parameterfreier ECDSA-Algorithmus-Identifikatoren, kanonischer DER-Signaturwerte, Windows-CNG-Named-Curve-Import und deterministischer Diagnostik für explizite, nachgestellte, unbekannte oder nicht passende Parameter

Version 2.681.0

Changed

  • Nicht-progressives Bitmap-, Direct-DC-, Form- und Display-List-Content-Execution über HPDFInterpretContentTokensDevice und die optionale vollständige IHPDFContentOperatorDevice-Erweiterung vereinheitlicht — mit einem Cancellation-Checkpoint pro Operator, Compile-time-Operator-Index-Caching für operandenscanfreies Display-List-Replay, öffentlichen OperatorCount-Metriken, bewahrter Semantic-Device-Kompatibilität, korrigierter "-, v- und y-Operator-Semantik und legalem EI-Terminator-Handling ohne falsche Fallback-Diagnostiken

Version 2.680.0

Added

  • Begrenzte transaktionale RepairPDFA4-Overloads hinzugefügt — mit typisierten Optionen, detaillierten Reparaturberichten, geteilter Finding-Provenienz, sicherer PDF-2.0-Normalisierung von Header, Trailer-ID, Metadaten, Catalog und Präsentation, namespace-bewusster PDF/A-Identifikationsreparatur, konfigurierbarer Partial- oder Full-Conformance-Commit-Policy, Fehlerregressions-Erkennung, byte-genauem Graph- und XMP-Rollback sowie einer strengen Grenze, die Seiteninhalt, Schriften, Farben, Transparenz, Bilder, Graphics-Operatoren und extrahierten Text bewahrt

Version 2.679.0

Added

  • PDF/X-6-Validierung des tatsächlich gemalten Inhalts hinzugefügt — mit wählbaren ISO 15930-9:2020- oder aufgelösten Errata-2025-Regeln, echten ICC-Header- und Kanalprüfungen, ressourcenbewusstem Durchlauf von Content-Arrays, Form-XObjects, Tiling- und Shading-Patterns, Bildern, Typ-3-Glyphen, Soft-Masks und Annotation-Appearances, Overprint-Mode- und Combined-Paint-Transparenz-Diagnostik, stabiler Rule-Provenienz sowie begrenztem Decoded-Byte-, Token-, Objekt-, Issue-, Rekursions- und Graphics-State-Aufwand

Version 2.678.0

Added

  • Begrenzte PDF/A-4-Validierung vertieft — mit gecachten ICC-Header- und Komponentenprüfungen, Dokument- und Seiten-Output-Intent-Konsistenz, Analyse tatsächlich gemalter Gerätfarben und Transparenz über Content-Arrays, verschachtelte Form-XObjects, Bilder, Image-Masks, Shadings und Annotation-Appearances hinweg, geerbtem Graphics-State, Rendering-Font-Einbettung, CIDFont- und CMap-Beziehungen, strikten Annotation-Flags und Appearance-States, UTF-8-XMP-Paket- und Namespace-Validierung, logischen Page-Tree-Positionen, stabiler klauselbewusster Diagnostik sowie konfigurierbaren Decoded-Byte- und Content-Token-Obergrenzen

Version 2.677.0

Added

  • Begrenzte PDF/UA-2-Validierung für Dokument, menschenlesbare Strings, Optional-Content, Annotationen, AcroForm, Struktur-Destinations, Outlines, eingebettete Dateien und verschachtelte Seitenlabel vervollständigt — inklusive physischer ParentTree-Zugehörigkeit, skalarer Strukturkinder, Appearance-Stream-Beschränkungen, Namespace-URI-basierter XMP-Properties, Unicode-Private-Use-Erkennung und klauselbewusster Diagnostik; der strukturierte HTML-, XHTML-, XML- und JSON-Export teilt sich jetzt ein Tagged-first-barrierefreies Lesemodell mit Sprache, Titel, Navigation, Seitenlabels, sicheren Links, Annotationen, nicht sensiblen Formularsteuerelementen, Marked-Content-Ersatz, Artifacts, Bildalternativen, geometrischem Fallback, unabhängigen Limits, Cancellation und atomarer Veröffentlichung

Version 2.676.0

Added

  • Begrenzte minimale Byte-Range-Planung für jede Seite eines linearisierten PDFs über PlanProgressiveLinearizedPageRanges hinzugefügt — mit Raw- und Flate-Dekodierung primärer oder Overflow-Hints, interoperablen byte-ausgerichteten Combined- und Annex-F-Continuous-Split-Hint-Layouts, exakten Bootstrap-, Seiten-, Shared-Group- und LF- oder CRLF-präfixierten traditionellen bzw. Stream-Cross-Reference-Abhängigkeiten, legalem Short-Read-Akkumulieren, einer 256-MiB-Standard-Planner-Speicherobergrenze mit Fail-closed-Encoding-Disambiguierung, overlap-bewusstem Mergen, strengen strukturellen Gegenprüfungen, typisierten Limits und Availability-Diagnostik sowie einem vereinheitlichten [0, /E)-Erstseiten-Pfad

Version 2.675.0

Added

  • Unabhängige normkonforme Crypt-Filter-Policies für Strings, normale Streams und eingebettete Dateien über ConfigureCryptFilterDefaults und SetStreamCryptFilter hinzugefügt — inklusive Passwort- und Public-Key-Reserved-Filtern, /Identity, writer-korrekten Password-Security-/EFF und führenden /Crypt-Pipelines, Fail-closed-Public-Key-Empfängergrenzen pro Stream, case-sensitivem Laden und Inspizieren externer Named-Filter, /CFM /None, V2-Key-Length-Reporting, Mixed-Policy-Direct-File-Fallback, getrennten Object-Stream-Container- und Member-String-Policies sowie policy-bewahrenden verschlüsselten inkrementellen Updates

Version 2.674.0

Added

  • Credential-bewahrende Standard- und Public-Key-verschlüsselte inkrementelle Updates über ein passwortbewusstes BeginIncrementalUpdate-Overload und zugewiesenes Empfänger-Key-Material hinzugefügt — mit sicher verwahrten File-Keys bzw. FEKs, getrennten String-, Stream-, Metadata- und Identity-Crypt-Filter-Policies, generationsbewusster Legacy-Objekt-Key-Ableitung, exakten geerbten /Encrypt-Referenzen, byte-identischen Quellrevisionen, ursprünglichem User-, Owner- oder Empfängerzugriff sowie Fail-closed-Ablehnung von Verschlüsselungsänderungen oder nicht unterstützten heterogenen Filtern

Version 2.673.0

Security

  • Begrenzte JBIG2-Segment-Graph-Validierung vor Vollseiten-, Regions-, nativer oder externer Dekodierung und vor dem Teilen globaler Dictionaries hinzugefügt — mit indexierten Duplikat- und fehlende-Referenz-Prüfungen, iterativer Zyklus- und Abhängigkeitstiefen-Erkennung, Durchsetzung der Seitenzuordnung eingebetteter Streams, Verwerfung verbotener Segmente, Long-Reference- und Aggregate-Edge-Budgets, Symbol-Dictionary-Allokationswächtern und präziser Failure-Telemetrie

Version 2.672.0

Added

  • PAdES-E-EPES-signature-policy-identifier-Generierung und strenge Validierung hinzugefügt — mit expliziten Policy-OIDs, bekannten oder ETSI-Unknown-Hashes, SPuri-, SPUserNotice- und SPDocSpecification-Qualifiern, begrenztem Unicode- und Collection-Parsing, Policy-Dokument-Hashing, Primary-Signer-OID- und Hash-Pinning vor der kryptografischen Arbeit, dedizierten Mismatch-Statuswerten und vollständiger JSON-Berichterstattung

Version 2.671.0

Added

  • Deterministische RFC-5652-Container mit bis zu 256 unabhängigen primären SignerInfo-Einträgen über HPDFCMSBuildMultiSignedData und HPDFCMSMergeSignedData hinzugefügt — inklusive Batch-weiter Vorvalidierung vor Signer-Nebenwirkungen, Attributen, Algorithmen, Zertifikaten und Providern pro Signer, strikter Definite-Length-Container-Validierung, DER-sortierten und deduplizierten Mengen, unabhängigen Verifikationsergebnissen, Single-Signer-Byte-Kompatibilität und nebenwirkungsfreier Aggregate-Placeholder-Größenbestimmung

Version 2.670.0

Added

  • Optionale RFC-5652-SubjectKeyIdentifier-Signer-Identitäten über THPDFCMSSignOptions.SignerIdentifier hinzugefügt — inklusive kompakter IMPLICIT-SID-Encodierung, automatischer SignerInfo- und SignedData-Versionsauswahl, strikter X.509-Extension-Extraktion, Provider- und Placeholder-Sizing-Unterstützung sowie Fail-closed-SID-, Zertifikats- und Versionsabgleich bei der Verifikation

Version 2.669.0

Security

  • Fail-fast-CMS-Digest-Algorithmus-Konsistenzdiagnostik über SignedData.digestAlgorithms, SignerInfo, Signaturmechanismus-Parameter und RFC-6211-CMSAlgorithmProtection hinzugefügt — mit dediziertem Verifikationsstatus, Validierungs-Fehlercode, Timestamp-Propagierung, detaillierten Issue-Gründen und JSON-Ausgabe

Version 2.668.0

Added

  • SHA3-256-, SHA3-384- und SHA3-512-Erzeugung und -Verifikation über Detached-CMS, RSA PKCS#1 v1.5, RSA-PSS, ECDSA-Provider-Verträge, RFC-3161-Content- und -Signature-Timestamps, PAdES-LTA-Erneuerung, Seed-Value-Dictionaries und ISO-32001-PDF-2.0-Developer-Extension-Deklarationen hinzugefügt — mit begrenztem One-Pass-Byte-Range-Hashing, das sich mit den passenden PDF-MAC-Policies teilt

Version 2.667.0

Added

  • THotPDF.ValidatePDFMACChain hinzugefügt — mit Validierung der inkrementellen Revisionen von alt nach neu, kumulativer klassischer oder Xref-Stream-Indizierung, exakten Revisions- und Xref-Fehlerorten, Erkennung historischer MAC-Ersetzungen, stabiler KDFSalt-Durchsetzung, Zurückweisung von Digest-Strength-Downgrades, authentifizierten /P- und /Perms-Prüfungen, Preflight-Berichterstattung und begrenztem Revisions-Parsing ohne temporäre PDF-Kopien

Version 2.666.0

Added

  • THotPDF.SignPDFWithPFXAndAttachedPDFMAC und signaturangehängte Validierung hinzugefügt — mit direktem Active-Trailer-AuthCode, indirektem SigObjRef, vollständiger Abdeckung der signierten Revision, Raw-Signaturwert-Digest-Bindung, SHA-2- oder SHA-3-PDF-MAC-Policies, One-Pass-Signatur- und MAC-Range-Hashing, Preflight-Berichterstattung und atomarem Ausgabeaustausch

Version 2.665.0

Fixed

  • THotPDF.RegisterNChannelColorSpace gibt jetzt die fünfelementige DeviceN-Form nach ISO 32000-2 mit /Subtype /NChannel und Process-Component-Metadaten aus, die minimale PDF-Version wurde auf 1.6 angehoben, und Luminosity-Soft-Masks lösen NChannel-Farbe über ihren Alternativraum auf — die Lesekompatibilität mit Legacy-/NChannel-Family-Tokens bleibt erhalten

Version 2.664.0

Added

  • PDF-Blend-Mode-Rendering vervollständigt — mit Integer-Hot-Path-Implementierungen für Hue, Saturation, Color und Luminosity — und den Full-Opacity-Fast-Path korrigiert, sodass jeder aktive separierbare oder nicht separierbare Blend-Mode gegen seinen Hintergrund compositet

Version 2.663.0

Security

  • PKCS#12-Container werden authentifiziert, bevor verschlüsselte Safe-Inhalte offengelegt werden — durch Prüfung des optionalen äußeren MacData mit begrenzten PKCS#12-KDF-Iterationen, SHA-1- oder SHA-256-HMAC, konstantzeitlichen Digest-Vergleichen und Fail-closed-Handling von Falschpasswort und Manipulation

Version 2.662.0

Added

  • Drei HotPDFCLI-Befehle hinzugefügt: render rastert jede ausgewählte Seite über die Bitmap-Pipeline geladener Seiten zu <prefix>-page<N>.png (--pages-Range, --dpi 10..2400, Standard 150), tables extrahiert typisierte Tabellen nach CSV oder JSON über ExportLoadedTypedTables (--json, -o Datei oder Konsole), und compare gibt den JSON-Vergleichsbericht zweier Dokumente über HPDFDocCompareDocuments aus (--mode 0..5 für Seitenzahl-, Seitentext-, Objektzahl-, gerenderte-Bilder-, Voll- und Strukturvergleich)

Fixed

  • Behoben: Die Win64-ICC-Transform-Pipeline lieferte bei 8-Bit-Batch-Transforms (TransformBytes) nur Nullen aus — der optimierte 1D-LUT-Fast-Path in den Win64-lcms2-Objekten gibt Nullen zurück, während die generische Resampling-Pipeline korrekt ist; der 8-Bit-Transform baut jetzt nur auf Win64 mit cmsFLAGS_NOOPTIMIZE, der 16-Bit-Einzelfarben-Pfad und alle Win32-Transforms behalten den optimierten Fast-Path (Batch-sRGB-Primaries round-trippen jetzt auf beiden Plattformen)

Version 2.661.0

Added

  • Echte budgetierte Zopfli-High-Ratio-Flate-Kompression nach der bestehenden zlib-Baseline mit vier Strategien hinzugefügt — mit strikter No-Growth-Auswahl, Input-, Iterations-, Block-, Output- und Zeitlimits, detaillierter Stream- und Parallel-Image-Telemetrie sowie deterministischen Fixed-Corpus-Einsparungsschwellen

Version 2.660.0

Added

  • Deterministische, maschinenlesbare XML-Preflight-Berichte und ABI-versionierte Trusted-Plugins für Feature-Extraktion und eigene Validierungsregeln hinzugefügt — mit stabiler Ordnung, Policy-Bundle-Integration, Cancellation-Propagierung, Fail-closed-Capability-Checks und endlichen Plugin-, Finding-, Feature-, String-, Output- und Zeitbudgets

Version 2.659.0

Added

  • Begrenztes XFA-FormCalc um bedingte Logik, wiederholte numerische Aggregate und validierte Dynamic-Instance-Callbacks erweitert und standardmäßig deaktivierte QuickJS-Formularskripte in einer Sandbox hinzugefügt — mit vollem Control Flow, nativen Typed Arrays, isoliertem Datenzugriff, endlichen Instruktions-, Zeit-, Speicher-, Stack-, Wert- und Instance-Operation-Budgets sowie Execution-Telemetrie

Version 2.658.0

Added

  • Begrenzte editierbare XFA-Paket-DOMs für komplette XDP-Streams und geordnete Paketarrays hinzugefügt — mit Local-Name-Pfad-Queries, Paket- und Node-Mutation, exakter Bewahrung unberührter Bytes, paketweisem selektiven Umschreiben, deterministischer Namespace- und Attribut-Ausgabe, sicherem CDATA-Splitting, Entity-Escaping und endlichen Input-, Output-, Paket-, Node-, Tiefe-, Attribut-, Text- und Query-Budgets

Version 2.657.0

Added

  • CSC-API-v2-Remote-Signing über die bestehende CMS-Provider-Pipeline hinzugefügt — mit anwendungseigenem Transport, OAuth-Token-Refresh, begrenzter Credential-Chain-Discovery, expliziter Authorization- und SAD-Behandlung, synchroner oder asynchroner Digest-Signierung, RSA-PSS-Parametern, Polling, RFC-3161-Timestamps, Cancellation, stabilen Idempotency-Keys und einem endlichen Completed-Operation-Cache

Version 2.656.0

Added

  • Optionale Dokument-Handler für XPS, EPUB und CBZ mit Content-Scoring hinzugefügt — mit ersetzbarer Thread-safe-Registrierung, einem validierten Archiv-Scan, Fixed-Page-, Spine- und natürlicher Bildreihenfolge, unveränderlichem PDF-Konvertierungs-Caching, geteilten Archiv-, Ressourcen-, Reflow-, Seiten-, Pixel-, DPI-, Output- und Cancellation-Budgets sowie rollback-sicherer PDF-Veröffentlichung

Version 2.655.0

Added

  • Begrenzte Typed-Table-Extraktion und atomarer CSV- oder JSON-Export hinzugefügt — mit kanonischen Spalten, Same-Page-Fragment- und Folgeseiten-Merging, Merged-Cell-Spans, wiederholten Kopfzeilen, Seitengeometrie, Confidence, Provenienz sowie locale-gesteuerter Inferenz für Integer, Number, Boolean, Datum, Datum-Zeit, Währung und Prozentwerte

Version 2.654.0

Added

  • Atomarer strukturierter Export geladener Seiten nach HTML, XHTML, XML und JSON hinzugefügt — über ein einziges Lesereihenfolge-Modell mit Blöcken, gestylten Spans, erkannten Tabellen, Koordinaten, Quellreihenfolge, optionalen begrenzten PNG-Bildern, Unicode-safe Escaping, Cancellation und endlichen Ressourcenbudgets

Version 2.653.0

Added

  • Atomare Umschreibung der Farben geladener Seiten nach DeviceGray, DeviceRGB oder DeviceCMYK hinzugefügt — mit bewahrtem durchsuchbarem Vektorinhalt, verlustfreier farbverwalteter Rasterkonvertierung für Bilder und komplexe Ressourcen, rotationssicherer Ausgabe, expliziten Render-Fidelity- und Ressourcenbudgets sowie Preserve-, Process-Convert- oder Reject-Policies für Volltonplatten

Version 2.652.0

Added

  • Review-first Schwärzungserkennung für geladene Seiten hinzugefügt — mit prüfsummenbewussten PII-Mustern, pluggable Entity- und Face-Detektoren, Confidence-bewerteten Fundstellen im Seitenraum, begrenzter Work-Telemetrie, verpflichtender Reviewer-Identität, atomarem Staging freigegebener Annotationen und einer getrennten, expliziten Burn-in-Grenze

Version 2.651.0

Added

  • Begrenzte Barcode-Dekodierung für geladene Seiten und Regionen hinzugefügt — mit pluggable Engines, progressivem Rendern in niedriger Auflösung, Fallback-Scans in Vierteldrehungen, validierten Text- und Rohdaten-Payloads, PDF-Raum-Grenzen und Orientierung, Confidence-Filterung, Overlap-Deduplikation, Cancellation und Ressourcen-Telemetrie

Version 2.650.0

Added

  • Begrenzte, abbrechbare durchsuchbare OCR-Textebenen hinzugefügt — mit pluggable Recognition-Engines, Confidence- und Geometrie-Validierung, rotationsausgerichtetem unsichtbarem Unicode-Text, Optional-Content-Gruppierung, Ressourcen-Telemetrie und atomarer Multi-Page-Veröffentlichung

Version 2.649.0

Added

  • Vollständige Object-Graph-Round-Trips über versioniertes JSON hinzugefügt — mit Streaming-Snapshot- und inkrementellen Exporten, rohen oder dekodierten eingebetteten und atomaren Sidecar-Payloads, begrenztem schema-kompatiblen Import, Struktur- und Stream-Längen-Validierung sowie transaktionaler Veröffentlichung

Version 2.648.0

Added

  • Begrenzte Reparatur handeditierter QDF-Diagnosedokumente hinzugefügt — Objekt- und Stream-Bytes bleiben erhalten, direkte, indirekte, fehlende oder veraltete Stream-Längen werden korrigiert, klassische Cross-Reference-Offsets und Trailer neu aufgebaut, unsichere Struktur abgelehnt, und die Ausgabe wird über den normalen Loader verifiziert

Version 2.647.0

Added

  • Thread-safe Registry für eigene Stream-Filter hinzugefügt — mit begrenzten Push- und Pull-Verträgen, gemeinsamen Decode-Budgets, kooperativer Cancellation, expliziten Seek-Anforderungen, isolierten Custom-Fehlern und Execution-Telemetrie

Version 2.646.0

Added

  • Begrenzte Content-Operator-Visitor- und Event-APIs hinzugefügt — mit Read-only-Operanden-Views, deterministischen State-Callbacks sowie Inspect-, Measure-, Replace-, Delete-, Stop- und Reject-Aktionen, kooperativer Cancellation, validierter Ausgabe und atomaren Updates geladener Seiten

Version 2.645.0

Added

  • Pluggable Render-Backend-Vertrag für geladene Seiten hinzugefügt — mit Zugriff auf kompilierte Display-Listen, nativer GDI-Implementierung, thread-safe parallelem Dispatch, deterministischer Fallback-Policy, Cache-Invalidierung und Execution-Telemetrie

Version 2.644.0

Added

  • Begrenzte Layout-Overlap-Erkennung hinzugefügt — mit Element-Pfaden, Opt-in-Quellzuordnung, nativen Vektor-Overflow- und Overlap-Overlays, Live-Diagnose-Callbacks und Work-Statistiken

Version 2.643.0

Added

  • Native, begrenzte Vektor-Charts hinzugefügt — mit Linien-, Balken-, Flächen-, Kreis- und Scatter-Serien, automatischen oder manuellen Achsen, Themes, Legenden, Labels, PDF/UA-Figure-Alternativen und Render-Statistiken

Version 2.642.0

Added

  • Begrenzte RichEdit- und RTF-Paginierung im GUI-Thread hinzugefügt — mit Vektor-EMF-Ausgabe, Bildern, Opt-in-Unterstützung für OLE-Präsentationen, Cancellation, bewahrter Stream-Position sowie expliziten Input-, Zeichen-, Seiten- und Output-Budgets

Version 2.641.0

Added

  • Begrenzter SVG-2-Import als wiederverwendbare PDF-Form-XObjects hinzugefügt — mit nativer Geometrie und Arcs, CSS-Cascade, Vektor-Gradients, Clip- und Mask-Unterstützung, Base-14-Text, Opacity-Ressourcen, placementsbewussten Link-Annotationen und Import-Statistiken

Version 2.640.0

Added

  • Versioniertes HTML5-Paged-Media-Import-Profil hinzugefügt — mit toleranter DOM-Verarbeitung, Print-CSS-Cascade, paginiertem Block- und Tabellenlayout, optionalen AcroForm-Steuerelementen, begrenzten Callback-getriebenen Ressourcen und Statistiken pro Operation

Version 2.639.0

Changed

  • Große Local-File-Mappings passen die konfigurierte Mapped-Byte-Obergrenze jetzt zwischen größeren sequenziellen Fenstern und bis zu 16 kleineren MRU-Random-Access-Fenstern an, behalten eine explizite Fixed-Geometry-Option bei und melden aktive Geometrie, Übergänge, Access-Pattern-Zähler und Peak-Mapped-Bytes

Version 2.638.0

Added

  • Begrenztes seitenübergreifendes JBIG2-Symboltraining hinzugefügt — mit externen und nativen Backends, einem gemeinsamen globalen Dictionary, exakter Wiederverwendung identischer Seiten, direkter PDF-Bildbatch-Insertion, Backend- und Größen-Telemetrie sowie gemessenen 78,8 Prozent Kompressionsersparnis auf dem 100-Seiten-Regressionskorpus

Version 2.637.0

Changed

  • Paralleles Rendern geladener Seiten reduziert die angeforderten Worker jetzt aus dem prozessweiten Memory-Budget, reserviert jede beanspruchte Seite, hält Ordered-Output-Reservierungen bis zur Callback-Auslieferung, weckt Budget-Waiter bei Cancellation oder Fehler und meldet Concurrency-, Reservierungs-, Admission-, Verzögerungs- und Wait-Telemetrie

Version 2.636.0

Changed

  • Der Prefetch geladener Seiten kompiliert und rendert jetzt außerhalb des Cache-Locks, bricht kooperativ über Tokenisierung und Playback ab, räumt dem Vordergrund-Seitenrendern Vorrang ein und legt Progress-, Failure-, Preemption- und Cancellation-Latency-Telemetrie offen

Version 2.635.0

Added

  • Geordnetes Streaming-Parallelrendern von Seiten hinzugefügt — mit Callbacks im aufrufenden Thread, einer begrenzten Completed-Bitmap-Queue, Producer-Backpressure, kooperativer Cancellation, geliehenen Bitmap-Lifetimes sowie Queue-, Byte-, Wait-, Completion- und Delivery-Telemetrie

Version 2.634.0

Added

  • Zweistufige Pipeline für paralleles Rendern geladener Seiten hinzugefügt — sie kompiliert Display-Listen außerhalb des Render-Cache-Locks, startet das Playback, bevor der volle Seitensatz kompiliert ist, balanciert begrenzte Worker dynamisch aus, bewahrt die Input-Reihenfolge, reduziert Content-Token-Allokation und legt Stage-, Cache-, Completion- und Latency-Telemetrie offen

Version 2.633.0

Added

  • Immutable, referenzzählende Handles für dekodierte Bitmaps hinzugefügt — mit copy-freien Cache-Hits, direktem thread-safe Zeichnen im Renderer, isolierten veränderbaren Kopien auf Anfrage, von Eviction unabhängigen Lifetimes sowie kumulativer Handle- und Copy-Telemetrie

Version 2.632.0

Changed

  • Die QuickJS-Ausführung funktioniert jetzt über statische Objekte und eine ABI-neutrale Bridge-DLL auf Win32 und Win64 — mit Unicode-safe Werten, deterministischem Status-Reporting, konfigurierbaren Memory-, Stack-, Script-, Zeit- und Interrupt-Limits, sicherer DLL-Erkennung, Wiederanlauf nach abgelehnten Skripten und reproduzierbaren Cross-Platform-Runtime-Builds

Version 2.631.0

Changed

  • Die Factur-X- und ZUGFeRD-Geschäftsregelvalidierung führt jetzt die komplette geprüfte XPath-2-Schematron-Oberfläche aus — mit externen Code-Datenbanken, sequenziellen Bindings, Quantoren, FLWOR-Summen, stabilen Fallback-Regel-Identifikatoren, sicherer begrenzter XML-Verarbeitung, expliziten Evaluation-Error-Fundstellen, null stillen Überspringungen und Fail-closed-Kombivalidierung

Version 2.630.0

Added

  • Eingebaute TrueType-Variable-Font-Instanzierung hinzugefügt — mit gemappten Achsen, gemeinsamen und privaten gvar-Tupeln, IUP-Interpolation, einfachen und zusammengesetzten Outline-Updates, Phantom-Point-Metriken, HVAR-, VVAR- und MVAR-Baking, kompakter statischer Glyph-Rekonstruktion, prüfsummenkorrekter Ausgabe und Callback-freier Unicode-Font-Registrierung

Version 2.629.0

Added

  • Nebenwirkungsfreie CMS-Platzhalterabschätzung hinzugefügt — aus expliziten, Provider- oder RSA-Zertifikatssignaturgrößen, mit exakter statischer Containerformung, konservativen dynamischen Payload-Reserven, Pre-Sign-Rebuilds, capability-gestützten Provider-Retries, strengen Single-Invocation-Garantien für externe Signierer, begrenzter Größenberechnung und detaillierter Attempt-Diagnostik

Version 2.628.0

Added

  • Reachability-basiertes Subsetting eingebetteter Schriften in geladenen PDFs hinzugefügt — einschließlich Seiteninhalt, verschachtelten Form-XObjects, Annotations-Appearance-States, gemeinsamen Font-Programmen, TrueType- und CFF-Formaten, Auswahl nach kodierter Größe, stabilen CID- und ToUnicode-Mappings, detaillierten Ergebnissen und standardmäßiger Verweigerung, wenn Signaturen vorhanden sind

Version 2.627.0

Added

  • Automatische PDF/UA-Strukturgenerierung für deklarative Layout-Bäume hinzugefügt — einschließlich Überschriften, Listen, Tabellen, Figuren, Sprach- und Alternativtext-Metadaten, Paginierungs-Artefakten, kontinuationssicheren Marked-Content-Referenzen, bewahrter Lesereihenfolge, semantischer Validierung und Struktur-Statistiken

Version 2.626.0

Added

  • Deklaratives Dokument-DOM hinzugefügt — mit vererbbaren Styles, wiederverwendbaren Component-Factories, Text, Spacern, Stacks, Containern, Sections, wiederholten Kopf- und Fußzeilen, gewichteten Tabellen mit sich wiederholenden Kopfzeilen, begrenzter Continuation-Tiefe, Paginierungs-Statistiken, nicht kopierenden Text- und Tabellenfragmenten, linearer Top-Level-Traversierung, unmittelbarem Seiten-Flush und passenden Delphi- und C++Builder-Oberflächen

Version 2.625.0

Added

  • Wiederholbares statistisches Performance-Gate für Win32 und Win64 hinzugefügt — es isoliert Laden, Speichern, Rendern und Textextraktion, zeichnet Warmups und 30 Rohsamples mit p50, p95, Sample-Varianz, RSS, Prozess-I/O, Umgebung und deterministischer Fixture-Identität auf, wertet stabile JSON-Schwellen aus und liefert bei Regression einen fehlschlagenden Exit-Code

Version 2.624.0

Changed

  • Das Parsen einfacher Dictionaries und Arrays wurde neu um immutable Source-Spans, direkte numerische Konvertierung, Single-Pass-verschachtelte Container und indexierte Dictionary-Insertion herum aufgebaut, mit öffentlicher Materialisierungs-Telemetrie; eine 30.000-Paare-Win32-Fixture reduzierte die Allokationsbytes des Fünf-Pass-Durchlaufs um 64,7 Prozent und die Laufzeit von 3.656 ms auf 46 ms

Version 2.623.0

Added

  • Konfigurierbare Parser-Limits hinzugefügt — für einzelne Token-Bytes, aggregierte Tokens, Array- oder Dictionary-Einträge und malformed Tokens; dazu ein strenges Untrusted-Input-Preset, typisierte Limit-Exceptions und Telemetrie pro Laden; Regression-Gates weisen ein 2-MiB-Token und einen Million-Token-Container in unter 250 ms und unter einem 37-MiB-Prozesspeak zurück

Version 2.622.0

Added

  • Explizite Release- und Telemetrie-APIs für den Objektgraphen geladener Seiten hinzugefügt — sie verwerfen saubere, seiten-eigene Roots und Render-Caches und bewahren indirekte geteilte Ressourcen und Reload-Metadaten; sequenzielle Verarbeitung von 100.000 Seiten bleibt bei stabilen 69,3 MiB Peak, und freigegebene gewöhnliche oder komprimierte Seiten materialisieren sich mit ihrer ursprünglichen Objektidentität neu

Version 2.621.0

Changed

  • Dekodierte Object-Stream-Container nutzen jetzt einen konfigurierbaren, byte-begrenzten LRU-Cache mit unmittelbarer Eviction pro Container, quellbasiertem Reload nach der Eviction, einem Zero-Retention-Modus sowie Peak-Byte-, Eviction- und Reload-Telemetrie

Version 2.620.0

Changed

  • Große gewöhnliche Seitenbäume öffnen jetzt als kompakte Platzhalter, lösen zufällige Seiten über /Count-geführte Traversierung und einen Indirect-Object-Hash-Index auf, cachen aufgelöste Seiten, legen Materialisierungs-Telemetrie und Steuerungen offen und expandieren automatisch vor strukturellen Mutationen oder Speicheroperationen

Version 2.619.0

Changed

  • Geladene AcroForm-Felder, qualifizierte Namen, Widgets, Annotationen und Seiten teilen sich jetzt einen lazy bidirektionalen Beziehungscache — mit umgekehrter Annotation-Suche, Seitensuche pro Widget, Aktivitäts-Telemetrie, expliziter Invalidierung für rohe Objektgraph-Edits und mutations-sicherer automatischer Wartung

Version 2.618.0

Changed

  • Die Page-Object-Suche nutzt jetzt einen lazy neu aufgebauten, mutations-bewussten Reverse-Index für Objektnummern und aufgelöste Seitenzeiger und ersetzt damit wiederholte Seiten-Tabellen-Scans beim Seitenkopieren, in Outlines, Named Destinations, Actions, Formularen, Accessibility und beim Seitenbaum-Abgleich — bei offengelegter Validity- und Activity-Telemetrie

Version 2.617.0

Changed

  • Der gerenderte Dokumentvergleich unterstützt jetzt caller-seitig gewählte DPI, RGB- oder Luminanz-Farbtoleranz, Changed-Pixel-Ratio- und SSIM-ähnliche Similarity-Gates, deterministische zusammenhängende Changed-Regions, optionale PNG-Difference-Overlays sowie Fail-closed-Seiten- und Aggregat-Pixel-Budgets mit expliziter Rendering-Diagnostik

Version 2.616.0

Changed

  • Der Dokumentvergleich traversiert indirekte Objektgraphen jetzt über deterministische, katalogbasierte Pfade, hasht Werte und Streams innerhalb expliziter Ressourcenlimits, richtet Seiten aus, bevor Insertions, Deletions, Moves und Changes klassifiziert werden, unterscheidet verschobene Objekte von Hinzufügungen und Entfernungen und meldet unvollständige Vergleiche, statt budgetbegrenzte Ergebnisse als identisch zu behandeln

Version 2.615.0

Changed

  • Das Dekodieren geladener Bilder nutzt jetzt 16 Cache-Metadata-Shards und exakte per-Key-Singleflight-Koordination, führt unabhängige teure Dekodierungen gleichzeitig aus, während eine Owner-Dekodierung für Duplikat-Requests erhalten bleibt, setzt die konfigurierten Byte- und Entry-Budgets über alle Shards durch und legt gecachte Decode-Einstiegspunkte plus Concurrency-Telemetrie offen; vier unabhängige 12.000-Pixel-JPEG-Requests skalieren auf vier Win64-Workern um Faktor 3,72, während acht Same-Key-Requests nur einmal dekodieren

Version 2.614.0

Changed

  • Das JPEG-Rendering in niedriger Auflösung (Graustufen und RGB) wählt jetzt einen begrenzten 1/2-, 1/4- oder 1/8-Inverse-DCT-Skalierungsgrad, streamt skalierte Scanlines durch einen Fixed-Point-Resampler direkt in die exakte Ziel-Bitmap, bewahrt Decode-Budgets, Cancellation und Codec-Worker-Isolation und legt Source-, Scaled-, Target-, Scanline- und Memory-Telemetrie über GetLastJPEGReducedDecodeInfo offen; die 12.000 mal 12.000 auf 300 mal 300 Regression-Fixture läuft 24,05-mal schneller als das Voll-Dekodieren, ohne das 432-MB-Source-Raster zu allokieren

Version 2.613.0

Changed

  • /Contents-Arrays geladener Seiten legen jetzt einen lazy, seekbaren verketteten Stream offen, halten ungefilterte Segmente in quellbasiertem Speicher, dekodieren höchstens ein gefiltertes Segment gleichzeitig, nutzen amortisiert-lineare Token- und Byte-Akkumulation und bewahren Original-Streams beim Editieren durch Anhängen eines neuen Segments — eine 1-GiB-Sequenz mit 10.000 Segmenten bleibt unter 64 MiB zusätzlichem Arbeitsspeicher

Version 2.612.0

Changed

  • Inkrementelle Updates halten die Quelldatei jetzt write-locked und file-backed, statt vollständige Source-Bytes vorzuhalten, besuchen und schreiben nur geänderte, neue und gelöschte Objekte in spärlichen xref-Subsections, streamen das Original-Präfix zu einem neuen Ziel und hängen direkt an — mit Rollback für Same-Target-Saves; eine 4-GiB-Revision mit einem Objekt bleibt innerhalb von 128 MiB zusätzlichem Arbeitsspeicher

Version 2.611.0

Added

  • Begrenzter dokumentweiter Loaded-Font-Decoder-Cache hinzugefügt — mit 32-MiB- und 128-Entry-LRU-Limit, Singleflight-Parse-Wiederverwendung über Seiten, geladene Textextraktion, SVG-Export und Textersetzung hinweg, unabhängigen Deep-Copy-Ergebnissen aus GetLoadedFontDecoder, konfigurierbarem Memory-Budget und Telemetrie-APIs sowie automatischer Invalidierung für Graph-, Seiten-, Reload-, JSON-Patch- und CMap-Konfiguration; die wiederholte Nutzung einer geteilten indirekten Schrift parst Encoding, Breiten, ToUnicode, CIDToGIDMap und Descendant-Mappings jetzt nur einmal, solange sie vorgehalten wird