PDF-Filterunterstützung

Übersicht

PDF-Streams und eingebettete Bilder identifizieren ihre Codierung durch Filternamen. HotPDF arbeitet beim Generieren von Dokumenten oder Decodieren externer Inhalte hauptsächlich mit den folgenden Filterfamilien

Häufige Filter

  • FlateDecode: Hauptkompressionsfilter für generierte Streams und der primäre zlib-basierte Dekompressionspfad
  • LZWDecode: Unterstützt für Legacy- und Kompatibilitätsszenarien durch HPDFLZW.pas
  • DCTDecode: Verwendet für Standard-JPEG-Bilddaten, die von HotPDF-Bildladepfaden verarbeitet werden
  • CCITTFaxDecode: Häufig in monochromen TIFF- und Fax-Bilddaten
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Encoder-Hilfsmittel, die seit HotPDF v2.4.0 in HPDFTypes.pas offengelegt sind (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode); nützlich beim Verpacken beliebiger Binärinhalte für 7-Bit-Kanäle oder für die explizite PDF 1.7 7.4 Round-Trip-Unterstützung
  • JBIG2Decode / JPXDecode: Von PDF 1.7 7.4.7 / 7.4.9 definierte Filternamen; die von HotPDF gebündelten JBIG2- und JPEG 2000-Hilfsmittel sind Stubs, die "nicht unterstützt" melden (False zurückgeben), bis ein echtes OpenJPEG- / JBIG2-Backend verknüpft ist; frühere Builds gaben einen gefälschten 100×100-Erfolg zurück, der unlesbare Bilder erzeugte; dies ist nun korrigiert

Praktische Hinweise

  • Nicht jeder Filter wird über eine einzige generische API bereitgestellt; einige werden über dedizierte Bild- oder Stream-Hilfsunits erreicht
  • Für generierte PDF-Inhalte bleibt THotPDF.Compression die zentrale benutzernahe Einstellung
  • Beim Laden externer Daten hängt der anwendbare Filter vom Quelldateiformat und der verwendeten Hilfsklasse ab
  • Verschlüsselte PDFs kombinieren diese Filter mit dem Sicherheits-Handler; siehe CryptKeyLength für die unterstützten Optionen AES-128 (V=4 R=4 / CFM=AESV2) und RC4 (V=1/V=2)
  • Interaktive Formularfelder werden als Widget-Anmerkungen ausgegeben, die der Viewer zeichnet; siehe AcroForm-Unterstützung
  • Textmarkierungs-Anmerkungen (Highlight, Underline, Squiggly, StrikeOut) und dokumentinterne Sprunglinks (GoTo, GoToR, Launch) werden seit HotPDF v2.6.0 als neue Methoden THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink bereitgestellt
  • Die DeviceCMYK-Ausgabe ist über THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor verfügbar; ICC-verwaltete Farbräume werden mit THotPDF.RegisterICCProfile registriert und über SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor seit HotPDF v2.7.0 angewendet
  • Setzen Sie THotPDF.UseXRefStream auf true vor dem Speichern, um einen einzelnen FlateDecode-komprimierten Kreuzverweis-Stream vom Typ /Type /XRef anstelle der textuellen Sequenz xref / trailer / startxref auszugeben (PDF 1.7 7.5.8); verfügbar seit HotPDF v2.8.0
  • Setzen Sie THotPDF.EnableXMPMetadata auf true, um dem Catalog einen XMP-Stream vom Typ /Type /Metadata /Subtype /XML hinzuzufügen (PDF 1.7 14.3.2); dieser wird automatisch aus den Info-Wörterbuchfeldern erstellt, oder stellen Sie ein selbst verfasstes Paket über CustomXMP bereit; verfügbar seit HotPDF v2.9.0
  • Gating der PDF-Version pro Methode (seit HotPDF v2.24.0); jede in v2.4.0+ eingeführte Feature-Methode prüft RequirePDFVersion vor dem Ausgeben; bei StrictVersionLock=false (Standard) wird die Dokumentversion (Version) im Hintergrund automatisch auf das vom Feature geforderte Minimum angehoben, und bei StrictVersionLock=true wird der Aufruf verweigert, sodass die gespeicherte Datei strikt der gewählten Referenzspezifikation 1.3 / 1.4 / 1.5 / 1.6 / 1.7 entspricht
  • PNG- und TIFF-Prädiktor-Codierer für FlateDecode-komprimierte Bilddaten (PDF 1.7 7.4.4.4): _PNGPredictorEncode wendet die libpng-Heuristik für den minimalen absoluten Unterschied an (Predictor=15), _TIFFPredictor2Encode wendet horizontale Differenzierung an (Predictor=2); verfügbar seit HotPDF v2.10.0
  • Einstiegspunkte für Tagged PDF (PDF 1.7 14.7-14.8): THotPDF.Lang füllt /Lang im Catalog, EnableTaggedPDF gibt /MarkInfo <</Marked true>> und einen Stub-Eintrag /StructTreeRoot aus, and die neuen Methoden THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent schreiben die Inhaltsstream-Operatoren BMC / BDC / EMC; verfügbar seit HotPDF v2.11.0
  • Axiale und radiale Verläufe (PDF 1.7 7.10 / 8.7): THotPDF.RegisterAxialGradient / RegisterRadialGradient erstellen den vollständigen Stack aus Function Type 2 / Shading Type 2-3 / Pattern Type 2 und geben einen stabilen Pattern-Namen zurück; THPDFPage.SetFillPattern / SetStrokePattern wenden diesen auf der Seite an; die Anzahl der Komponenten der Start-/Endfarbe wählt DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4); verfügbar seit HotPDF v2.13.0; mehrstufige axiale Verläufe über Function Type 3 werden seit v2.18.0 über RegisterMultiStopAxialGradient bereitgestellt
  • Inline-Bilder (PDF 1.7 8.9.7) über THPDFPage.DrawInlineImage; Rohbytes werden automatisch mit ASCIIHex verpackt, wenn kein Filter angegeben ist, damit der Inhaltsstream 7-Bit-sauber bleibt; verfügbar seit HotPDF v2.18.0
  • OutputIntents (PDF 1.7 14.11) über THotPDF.AddOutputIntent; jeder Aufruf hängt ein /Type /OutputIntent-Wörterbuch mit optionalem /DestOutputProfile, das auf ein registriertes ICC-Profil verweist, an den Catalog an; verfügbar seit HotPDF v2.18.0
  • Automatische Generierung von AcroForm-Darstellungsstreams (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): Setzen Sie THotPDF.AutoFormAppearances auf true vor dem Hinzufügen interaktiver Formularfelder, und HotPDF erstellt für den Eintrag /AP /N jedes Widgets ein Form XObject vom Typ /Subtype /Form (Yes / Off-Unterwörterbücher für Schaltflächen), füllt die AcroForm-Standardressourcen (/DR) mit indirekten Helvetica- / ZapfDingbats-Schriftartwörterbüchern und schaltet /NeedAppearances auf false, damit Renderer die eingebetteten Streams berücksichtigen; verfügbar seit HotPDF v2.28.0
  • ViewerPreferences /ViewArea und /ViewClip (PDF 1.4 12.2 Tabelle 152) werden jetzt über die Eigenschaften THotPDF.ViewArea / THotPDF.ViewClip (mit den entsprechenden Set-Elementen vpViewArea / vpViewClip) bereitgestellt; beide akzeptieren die THPDFPageBoundary-Werte (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) und verweisen auf die entsprechenden ViewerPreferences; verfügbar seit HotPDF v2.29.0
  • Seitenübergänge (PDF 1.1 / 1.5 12.4.4): THPDFPage.SetPageTransition schreibt ein /Trans-Wörterbuch auf die Seite, damit PDF-Reader im Vollbildmodus (/PageMode /FullScreen) die Navigation animieren; PDF 1.1-Stile (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) und PDF 1.5-Stile (Fly, Push, Cover, Uncover, Fade) werden über die Aufzählung THPDFTransitionStyle bereitgestellt; begleitende Unteroptionen /Dm, /M und /Di sind ebenfalls verfügbar; THPDFPage.SetPageDuration schreibt die automatische Vorlaufverzögerung in Sekunden (/Dur); verfügbar seit HotPDF v2.30.0
  • Transparenzgruppe auf Seitenebene (PDF 1.4 11.6.6 / 7.5.5): THPDFPage.SetTransparencyGroup hängt ein /Group-Wörterbuch (/Type /Group /S /Transparency) an, damit Renderer alphahaltige Inhalte vorhersagbar zusammensetzen; wählen Sie einen Gerätefarbraum über die Aufzählung THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK oder weglassen) oder rufen Sie THPDFPage.SetTransparencyGroupICC mit dem Namen eines zuvor über THotPDF.RegisterICCProfile registrierten ICC-Profils auf; optionale Flags /I (Isolated) und /K (Knockout) steuern den Compositor; THPDFPage.ClearTransparencyGroup entfernt einen zuvor angehängten Eintrag; verfügbar seit HotPDF v2.32.0
  • Inkrementelle Aktualisierung (PDF 1.7 ISO 32000-1 7.5.6): THotPDF.BeginIncrementalUpdate(SourceFile) lädt ein vorhandenes PDF im Nur-Anhängen-Modus; nachfolgende CreateIndirect*-Aufrufe markieren neue Objekte automatisch als geändert (dirty), und THotPDF.MarkDirty(Obj) kennzeichnet bereits vorhandene geladene Objekte für die erneute Ausgabe; THotPDF.SaveIncrementalUpdate(TargetFile) schreibt die ursprünglichen Quellbytes wortgetreu, hängt nur geänderte Objekte unter Beibehaltung ihrer Objektnummern an, gibt einen neuen Kreuzverweis-Unterabschnitt aus und endet mit einem Trailer, der ein auf den vorherigen Kreuzverweis zeigendes /Prev enthält; kombinieren Sie dies mit der vorhandenen Pipeline aus AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex, um einem bereits signierten Dokument nachfolgende Signaturfelder hinzuzufügen, ohne frühere Signaturen ungültig zu machen (deren /ByteRange-Digests bleiben gültig, da keine der ursprünglichen Bytes geändert werden); verfügbar seit HotPDF v2.35.0
  • Namensnormalisierung für eingebettete TrueType-Schriftarten: HotPDF liest die eingebettete TrueType-Namentabelle und gleicht /BaseFont, /FontDescriptor /FontName, /FontFamily und nachfolgende CID-Schriftartnamen an den PostScript-Namen des Schriftartprogramms an; dies verhindert Adobe Acrobat Font Capture-Fehler, die durch eine Nichtübereinstimmung zwischen dem PDF-Schriftartwörterbuch und der eingebetteten TTF-Nutzlast verursacht werden; verfügbar seit HotPDF v2.35.1
  • Subsetting für TrueType-Schriftarten (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): Setzen Sie THotPDF.EnableFontSubsetting vor BeginDoc auf true, und HotPDF baut die eingebettete TrueType-Nutzlast so um, dass sie nur die tatsächlich vom Dokument verwendeten Glyphen enthält; typische lateinische Dokumente verzeichnen eine Gewichtsreduktion der eingebetteten Schriftart um ca 90% (1 MB Arial -> ca 70 KB bei einem einzeiligen "Hello, world"); Abhängigkeiten von zusammengesetzten Glyphen werden rekursiv verfolgt, die GID-Nummerierung bleibt erhalten (sodass vorhandene Type0- / Identity-H-Inhaltsstreams weiterhin funktionieren), und der neue /BaseFont erhält automatisch das von der Spezifikation vorgeschriebene sechsstellige Präfix mit "+"-Suffix (zB /BaseFont /AAAAAA+ArialMT); standardmäßig deaktiviert; aktivieren Sie Opt-in, um die vollständige Schrifteinbettung für Bearbeitungsworkflows beizubehalten; verfügbar seit HotPDF v2.36.0
  • Subsetter für Compact Font Format (CFF) (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): Pendant zum TrueType-Subsetter für OpenType-CFF- (.otf, sfntVersion OTTO) und Type 1- / Type 1C-Schriftarten; die von der Unit exportierte Funktion HPDFSubsetCFF(CFFBytes, KeepGlyph) baut den CharStrings-INDEX neu auf, wobei nicht beibehaltene Glyphen durch den minimalen 1-Byte-Stub endchar ersetzt werden und die GID-Nummerierung Byte für Byte erhalten bleibt; verfügbar seit HotPDF v2.37.0
  • In StoreFont integrierter OpenType-CFF-Einbettungspfad (.otf) (PDF 1.6+ 9.7.4 Tabelle 117): Wenn die GDI-geladene Schriftartdatei ein sfnt-OTTO-Container ist, teilt HotPDF die eingebettete Untertabelle 'CFF ' über HPDFSubsetOTFContainer in Untergruppen auf, gibt das Schriftartprogramm über /FontFile3 /Subtype /OpenType aus und schreibt das Nachkommen-Schriftartwörterbuch mit /Subtype /CIDFontType0 anstelle von /CIDFontType2; TrueType-Schriftarten nutzen weiterhin den vorhandenen Pfad /FontFile2 + /CIDFontType2 ohne Verhaltensänderung; verfügbar seit HotPDF v2.38.0
  • Subroutine-Subsetting für CFF von Ende zu Ende (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): Der CFF-Subsetter entfernt jetzt ungenutzte Einträge aus SOWOHL dem Global Subr INDEX (direkt nach dem String INDEX in der CFF-Binärdatei) als auch dem Local Subr INDEX (verschachtelt unter Private DICT, erreichbar über Top DICT-Operator 18 + Private DICT-Operator 19); eine einzige Festkomma-Schließung folgt transitiv den Ketten callsubr (Op 0x0A) UND callgsubr (Op 0x1D), sodass ein CharString, der eine Local Subr aufruft, die eine Global Subr aufruft, die wiederum eine andere Local Subr aufruft, in einem Durchlauf erfasst wird; jeder ungenutzte Eintrag wird durch einen 1-Byte-Stub return ersetzt und der INDEX wird an Ort und Stelle mit Nullauffüllung des nachfolgenden freien Raums neu geschrieben; dieses Verhalten wird über die öffentlichen Hilfsmittel HPDFSubsetCFF und HPDFSubsetOTFContainer bereitgestellt; tiefergehende CFF-Scanner bleiben intern; verfügbar seit HotPDF v2.39.0
  • Subsetting für CID-keyed CFF (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): Der CFF-Subsetter erkennt jetzt den Top DICT-ROS-Operator (12-30), der eine CID-keyed OpenType-CFF-Schriftart kennzeichnet, und durchläuft den FDArray-INDEX (12-36) von Font-DICTs, von denen jedes sein eigenes Private DICT + Local Subr INDEX enthält; die FDSelect-Glyphen-zu-FD-Zuordnung (12-37) bleibt Byte für Byte erhalten; der Subroutinen-Schließungsscan verfolgt den FD-Kontext jedes beibehaltenen CharStrings, sodass eine Glyphe in FD #5 nur Local Subrs in FD #5 markiert - globale Subroutinen bleiben über FDs hinweg gemeinsam genutzt; der Local Subr INDEX jedes FD wird an Ort und Stelle neu geschrieben, wobei ungenutzte Einträge zu 1-Byte-Stubs return zusammengeklappt werden; CJK- / Indic- / arabische OTF-Schriftarten (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans etc) durchlaufen nun die vollständige Subsetting-Pipeline, anstatt wie bisher unverändert eingebettet zu werden; verfügbar seit HotPDF v2.40.0
  • Objekt-Streams (PDF 1.5 ISO 32000-1 7.5.7): Setzen Sie THotPDF.UseObjectStreams zusätzlich zu UseXRefStream auf true, und SaveToStream packt berechtigte indirekte Objekte (alles außer Streams, dem Verschlüsselungswörterbuch und den vom Trailer referenzierten Catalog- und Info-Wörterbüchern) in einen oder mehrere Container-Streams vom Typ /Type /ObjStm; der Kreuzverweis-Stream referenziert die gepackten Objekte dann über Typ-2-Einträge (Feld-2 = Host-ObjStm-Objektnummer; Feld-3 = Eintragsindex im Stream); dies reduziert die Dateigröße bei PDFs mit vielen kleinen Wörterbüchern (mehrseitige Dokumente, Anmerkungen, AcroForm-Widgets, Strukturbaumelemente, Ebenen für optionalen Inhalt) erheblich - ein 30-seitiges reines Grafikdokument schrumpft von 14502 auf 8488 Bytes (41.5% kleiner); wird automatisch auf false zurückgestuft, wenn UseXRefStream deaktiviert ist (Typ-2-Einträge sind in der textuellen xref-Tabelle laut Spezifikation nicht darstellbar) oder wenn die Version (Version) unter PDF 1.5 liegt; verfügbar seit HotPDF v2.41.0
  • Soft-Mask-Bild / SMask (PDF 1.4 ISO 32000-1 8.9.5.4): THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) gibt ein Farbbild-XObject plus ein 8-Bit-DeviceGray-Soft-Mask-Bild-XObject aus und verknüpft den Kreuzverweis /SMask automatisch, sodass jedes Pixel eine vollständige Transparenz pro Kanal tragen kann, anstelle der binären Ein/Aus-Grenze des älteren Pfads /ImageMask; die Komfort-Überladung THotPDF.AddImageWithSMask32(Bitmap32) extrahiert die RGB- und Alpha-Ebenen aus einem 32-Bit-BGRA-TBitmap für die Einbettung von PNG mit Alpha in einem einzigen Aufruf; beide Aufrufe werden über RequirePDFVersion(pdf14) gesteuert, sodass die Ausgabe im strikten 1.3-Modus konform bleibt; verfügbar seit HotPDF v2.42.0
  • Zeichnen von unkolorierten Kachelmustern (PDF 1.7 ISO 32000-1 8.6.6.1): THotPDF.RegisterTilingPattern gibt seit v2.19.0 sowohl /PaintType 1 (koloriert) als auch /PaintType 2 (unkoloriert) aus, aber die entsprechende seitenseitige Operatorsequenz war nur für die kolorierte Variante korrekt; sechs neue THPDFPage-Methoden - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - steuern nun den unkolorierten Pfad, indem sie den passenden Tönungsfarbraum [/Pattern /BaseCS] automatisch im Seitenwörterbuch Resources/ColorSpace registrieren und die von der Spezifikation vorgeschriebene Sequenz tint_components /Pn scn ausgeben; verwenden Sie die ursprünglichen Methoden SetFillPattern / SetStrokePattern für die kolorierte Variante, bei der die Kachel ihre eigene Farbe trägt; verfügbar seit HotPDF v2.43.0
  • CIELab-Farbraum (PDF 1.3+ ISO 32000-1 8.6.5.3): THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) erstellt ein Inline-Farbraum-Array [/Lab << /WhitePoint /BlackPoint /Range >>], speichert es unter einem automatisch generierten Namen (Lab1, Lab2, ...) und gibt diesen Namen zur Verwendung mit der regulären Pipeline THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]) zurück; verwenden Sie ein D50-Leuchtmittel [0.9505, 1.0, 1.089] für ICC-Druck-Workflows oder ein D65-Leuchtmittel [0.95047, 1.0, 1.08883] für eine sRGB-äquivalente Anzeige, und zeichnen Sie dann mit L* im Bereich [0..100] und a*, b* im gewählten Bereich (typischerweise [-128..127]); verfügbar seit HotPDF v2.44.0
  • Separation-Farbraum für Volltonfarben (PDF 1.3+ ISO 32000-1 8.6.6.4): THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) deklariert eine Einkomponenten-Volltonfarbe, deren einzelner Tönungsoperand in [0..1] eine intern erstellte lineare Function Type 2-Tönungstransformation steuert; verwenden Sie den zurückgegebenen Namen (Sep1, Sep2, ...) mit der regulären Pipeline SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]); AlternateCS akzeptiert DeviceGray, DeviceRGB oder DeviceCMYK; TintC1 liefert die Komponenten des alternativen Farbraums bei Tönung = 1.0; Pantone- und andere Farbnamen mit Leerzeichen werden direkt akzeptiert - HotPDF maskiert sie beim Schreiben des Farbraumnamens gemäß PDF 1.7 7.3.5 zu #20; verfügbar seit HotPDF v2.45.0
  • Mehrzeilige und Kamm-Text-Darstellungsstreams für AcroForm (PDF 1.7 ISO 32000-1 12.7.4.3): Wenn THotPDF.AutoFormAppearances aktiviert ist, Textfelder, deren Flags den Wert ffMultiline enthalten, ein Form XObject vom Typ /AP /N mit Zeilenumbruch (Layout mit Td + T* + /TL Zeilenabstand, das CR- / LF- / CRLF-Trennzeichen berücksichtigt und bei der sichtbaren Zeilenanzahl abschneidet); Felder, deren Flags den Wert ffComb zusammen mit einer positiven maximalen Länge (MaxLen) enthalten, rendern jedes Zeichen in eine eigene Zelle gleicher Breite unter Verwendung einer absoluten Tm-Matrix pro Glyphe; das einzeilige Layout aus v2.28.0 bleibt für Felder ohne solche Flags Byte für Byte erhalten; internationale Zeichen im Anfangswert nutzen weiterhin den /NeedAppearances-Neuberechnungspfad des Viewers - die vollständige Generierung von Darstellungen mit eingebetteten CID-Schriftarten bleibt zukünftigen Arbeiten vorbehalten; verfügbar seit HotPDF v2.46.0
  • AcroForm /AP Unicode-Schriftart (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3): THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) registriert eine vom Aufrufer bereitgestellte zusammengesetzte Type 0- / CIDFontType2- + Identity-H-Schriftart im Standard-Ressourcenwörterbuch /DR/Font der AcroForm; nach der Registrierung wechseln das AcroForm-spezifische /DA, das /DA jedes Tx-Widgets und der von AutoFormAppearances für nicht-ASCII Tx-Anfangswerte erzeugte /AP /N-Stream zum logischen Namen; das Unterwörterbuch /Resources/Font des Form XObjects verweist ebenfalls auf dieselbe indirekte Schriftart, sodass das AP eigenständig ist, ohne von der /DR-Auflösung zur Renderzeit abzuhängen; die begleitende Hilfsfunktion THotPDF.CreateIndirectFontDict gibt ein neues leeres THPDFDictionaryObject zurück, das als indirektes PDF-Objekt registriert ist, sodass Aufrufer benutzerdefinierte Schriftartwörterbücher (oder jedes andere Wörterbuch, das eine indirekte "N G R"-Serialisierung erfordert) erstellen können, ohne interne Hilfsfunktionen zu berühren; übergeben Sie einen leeren Namen (LogicalName) und nil für FontDict, um zum ASCII-only-Verhalten /Helv aus v2.46.0 zurückzukehren; ASCII Tx-Felder verwenden weiterhin /Helv mit byteidentischer Ausgabe zu v2.46.0 / v2.55.0; mehrzeilige und Kamm-nicht-ASCII /AP- sowie RTL-Bidi-Shaping (UAX #9 + arabische kontextuelle Verbindung) bleiben zukünftigen Arbeiten vorbehalten; verfügbar seit HotPDF v2.56.0; ffMultiline-nicht-ASCII-AP-Unterstützung (zeilenweises UTF-16BE-Hex-Tj mit Td / T* / /TL Zeilenabstand und CJK-fähigem Wortumbruch) seit v2.57.0; ffComb-nicht-ASCII-AP-Unterstützung (absolute Tm-Zellen gleicher Breite pro CID + Einzelzellen-Tj pro Codepoint mit UTF-16-Surrogatpaar-Behandlung) seit v2.58.0; Eigenschaft THotPDF.FormUnicodeRTL für die Richtung von rechts nach links (kehrt die UTF-16-Reihenfolge in /AP Tj hex um, während /V in logischer Reihenfolge bleibt; der Aufrufer formt arabischen Text vorab in Unicode-Präsentationsformen U+FB50..U+FDFF + U+FE70..U+FEFF um; vollständiges UAX #9 + automatisches GSUB-Shaping stehen noch aus) seit v2.59.0
  • AcroForm Rich-Text-Tx-Widget (PDF 1.5+ ISO 32000-1 12.7.4.3 + Anhang L): THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) gibt ein Text-Widget mit /RV (Rich-Text-XHTML-Inhalt), /DS (CSS-ähnlicher Standardstil), dem automatisch veroderten Flag ffRichText /Ff Bit 26 sowie dem Nur-Text-Fallback /V + /DV für Reader aus, die /RV nicht parsen; Acrobat und Foxit rendern direkt aus /RV, wenn das RichText-Bit aktiviert ist, und beziehen Schriftart-Fallbacks aus den installierten Unicode-Schriftarten des Readers - sodass Multibyte-Inhalte (CJK / Kyrillisch / Arabisch / akzentuiertes Latein) korrekt angezeigt werden, ohne dass HotPDF eine CID-Schriftart in den /DR-Ressourcen einbettet; sowohl /V als auch /RV erkennen Multibyte-Eingaben automatisch und wechseln bei Bedarf zur UTF-16BE-Hex-String-Codierung (FE FF BOM + Big-Endian-Codeeinheiten); die Generierung von Darstellungsstreams mit CID-Schriftarten für HotPDFs eigenen /AP-Pfad bleibt zukünftigen Arbeiten vorbehalten; Rich-Text-fähige Viewer benötigen diese nicht; verfügbar seit HotPDF v2.55.0
  • DeviceN-Farbraum für Spot-Tinten-Workflows mit mehreren Farbgebungen (PDF 1.3+ ISO 32000-1 8.6.6.5): THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) verallgemeinert RegisterSeparation von einer einzigen Spot-Tinte auf N; die Tönungstransformation ist eine PostScript-Rechnerfunktion vom Typ Function Type 4, die eine lineare gewichtete Mischung über die bereitgestellte N x M-Matrix ausgibt (Zeile n Spalte m ist der Beitrag der Farbgebung n zum AlternateCS-Kanal m, wenn die Farbgebung n allein 1.0 is); gibt einen Farbraumnamen (DevN1, DevN2, ...) zurück, der die reguläre Pipeline SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]) steuert; AlternateCS akzeptiert DeviceGray, DeviceRGB oder DeviceCMYK; Farbnamen mit Leerzeichen werden gemäß PDF 1.7 7.3.5 als #20 maskiert; der spezielle Name None kennzeichnet einen ungenutzten Farbgebungsplatz; verfügbar seit HotPDF v2.47.0
  • Freiform-Gouraud-schattiertes Dreiecksnetz (PDF 1.3+ ISO 32000-1 8.7.4.5.4): THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) deklariert einen /ShadingType 4-Stream mit /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, verpackt ihn in einen Inline-Pattern-Eintrag vom Typ Pattern Type 2 im Seitenwörterbuch Resources/Pattern und gibt den automatisch generierten Pattern-Namen (Sh1, Sh2, ...) für die reguläre Pipeline SetFillPattern / SetStrokePattern zurück; jeder Scheitelpunkt wird als 1 Flag-Byte (immer 0 für unabhängige Dreiecke) + 2 Big-Endian-X-Bytes + 2 Big-Endian-Y-Bytes + NumComponents 8-Bit-Farbkomponenten gepackt; das Argument NumComponents akzeptiert 1 (DeviceGray), 3 (DeviceRGB) oder 4 (DeviceCMYK); jeder Scheitelpunkt trägt 2 + NumComponents Extended-Werte zu Vertices in der Reihenfolge (X, Y, c1...cN) bei; die Anzahl der Scheitelpunkte muss ein Vielfaches von 3 sein; /Decode bildet die 16-Bit-Koordinaten wieder auf [XMin, XMax] x [YMin, YMax] und die Farbkomponenten auf [0, 1] ab; Gitter- (Typ 5), Coons-Patch- (Typ 6) und Tensorprodukt-Netzschattierungen (Typ 7) bleiben zukünftigen Arbeiten vorbehalten; verfügbar seit HotPDF v2.48.0
  • Gitterförmiges Gouraud-schattiertes Dreiecksnetz (PDF 1.3+ ISO 32000-1 8.7.4.5.5): THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) deklariert einen /ShadingType 5-Stream, der Scheitelpunkte in einem Gitter aus M Zeilen x N Spalten anordnet und den Renderer jedes Paar benachbarter Zeilen automatisch in einen Dreiecksstreifen umwandeln lässt; im Gegensatz zu RegisterFreeFormGouraudShading (Typ 4) gibt es kein Flag-Byte pro Scheitelpunkt; /BitsPerFlag fehlt im Schattierungswörterbuch und jeder Scheitelpunkt belegt nur 4 + NumComponents Bytes (2 Big-Endian-X + 2 Big-Endian-Y + N Farbkomponenten); das Schattierungswörterbuch enthält stattdessen den erforderlichen Eintrag /VerticesPerRow N; verwenden Sie es für Quelldaten, die sich bereits auf einem regelmäßigen Abtastgitter befinden (Gelände, FEA-Ergebnisse, wissenschaftliche Heatmaps) - die Anwendung liefert die Scheitelpunkte zeilenweise (row-major) und die Rendering-Pipeline assembliert die Dreiecksstreifentopologie automatisch; VerticesPerRow muss mindestens 2 betragen und die Gesamtzahl der Scheitelpunkte muss ein Vielfaches von VerticesPerRow mit mindestens zwei Zeilen sein; verfügbar seit HotPDF v2.49.0
  • Coons-Patch-Netzschattierung (PDF 1.3+ ISO 32000-1 8.7.4.5.6): THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) deklariert einen /ShadingType 6-Stream aus Coons-Patches, von denen jeder durch vier kubische Bezier-Kurven begrenzt ist und eine Farbe pro Ecke trägt; der Renderer passt die Coons-Oberfläche zwischen den vier Kanten ein, was ein beliebig gekrümmtes, farbtragendes Viereck ergibt - nützlich für Folien- und Metallverläufe auf gekrümmten Pfaden, aus SVG abgeleitete Verlaufsnetze und jedes Viereck mit gekrümmten Kanten, das andernfalls viele kleine Dreiecke zur Annäherung benötigen würde; jedes Patch steuert 12 Kontrollpunkte (24 X+Y Extended-Werte, im Uhrzeigersinn um die Begrenzung herum geordnet als c1..c12 mit c1 / c4 / c7 / c10 an den vier Ecken und den restlichen 8 als innere Bezier-Griffe) gefolgt von 4 Eckfarben (4 * NumComponents Extended-Werte) bei, sodass der Schritt (stride) für Patches den Wert 24 + 4 * NumComponents hat; das Schattierungswörterbuch enthält dieselben Angaben /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 wie bei Typ 4 (und im Gegensatz zu Typ 5 fehlt /VerticesPerRow); jedes ausgegebene Patch trägt das Flag = 0 (unabhängiges Patch); Fortsetzungsflags 1 / 2 / 3 (gemeinsame Kanten) werden in dieser Komfort-Überladung nicht offengelegt; verfügbar seit HotPDF v2.50.0
  • Separation-Farbraum mit abgetasteter LUT-Tönungstransformation (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2): THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) kapselt RegisterSampledFunction, sodass Aufrufer eine vollständige nichtlineare Tönungs- zu Alternativ-Farbraum-Kurve als flachen Byte-Stream von 8-Bit-Abtastwerten (M-Tupel) ausdrücken können, ohne manuell ein Function Type 0-Wörterbuch erstellen zu müssen; verwenden Sie die LUT-Variante, wenn der Farbübergang nichtlinear ist - zB bei PANTONE Hexachrome-ähnlichen Tönungsrampen, gamma-korrigierten Dichtekurven, handgezeichneten Tonwertkurven, die einer Druckkennlinie entsprechen, oder sRGB-zu-Volltonfarbe-Konvertierungs-ICC-LUTs ohne den gesamten ICC-Profil-Apparat; der v2.45.0 Einstiegspunkt RegisterSeparation deckt weiterhin den linearen Einzeltendpunkt-Fall ab; AlternateCS akzeptiert DeviceGray, DeviceRGB oder DeviceCMYK; die Länge von Samples muss ein positives Vielfaches von M mit mindestens 2 * M Bytes sein, damit die Funktion einen interpolierbaren Bereich hat, und die Anzahl der Gitterpunkte S wird aus Length(Samples) / M abgeleitet; die lineare Interpolation ist der Standard gemäß PDF 1.7 /Order 1; gibt den registrierten Farbraumnamen (Sep1, Sep2, ...) zur Verwendung mit der regulären Pipeline SetFillColorSpace + SetFillColor([tint]) zurück; verfügbar seit HotPDF v2.53.0
  • Registrierung von Function Type 0 (Sampled) (PDF 1.3+ ISO 32000-1 7.10.2): THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) deklariert einen indirekten /FunctionType 0-Stream, der eine beliebige Eingabe-zu-Ausgabe-Zuordnung als regelmäßiges N-dimensionales Gitter aus M-dimensionalen Ausgabewerten ausdrückt, die zwischen Gitterpunkten interpoliert werden; verwenden Sie dies, wenn der ICC-Profil-Apparat überdimensioniert ist, aber eine manuell abgestimmte Farb-LUT gewünscht wird - zB Tonwertkurven für /TransferFunction (ExtGState /TR), abgetastete Tönungstransformationen für /Separation / /DeviceN über die linearen Type 2- / arithmetischen Type 4-Pfade hinaus, Raster-Schwellenwertkurven oder jedes andere PDF-Konstrukt, das ein Function-Wörterbuch erwartet; Domain besteht aus 2N Einträgen (ein [Min, Max]-Paar pro Eingabedimension); Range besteht aus 2M Einträgen (ein Paar pro Ausgabedimension); Size besteht aus N Gitterpunkt-Anzahlen; BitsPerSample akzeptiert 1, 2, 4, 8, 12, 16, 24 oder 32 gemäß PDF 1.7 Tabelle 38; Samples is der rohe bitgepackte Abtastwert-Stream (MSB-first innerhalb jedes Abtastwerts, keine Auffüllung zwischen Abtastwerten über das abschließende Byte hinaus, wobei die Eingabe 0 gemäß den Spezifikations-Abtastreihenfolgeregeln am schnellsten variiert); Order hat standardmäßig den Wert 1 (linear) und akzeptiert 3 (kubische Spline-Interpolation, seit v2.54.0) gemäß PDF 1.7 Tabelle 38; HotPDF validiert die Abtastwert-Byteanzahl gegen ceil(GridPoints * M * BitsPerSample / 8); gibt das indirekte THPDFStreamObject zurück, sodass Aufrufer es dort anhängen können, wo ein Function-Wörterbuch erwartet wird; verfügbar seit HotPDF v2.52.0; kubische /Order 3 + End-to-End-Abdeckung für mehrere Eingänge / mehrere Ausgänge seit v2.54.0
  • Tensorprodukt-Patch-Netzschattierung (PDF 1.3+ ISO 32000-1 8.7.4.5.7): THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) deklariert einen /ShadingType 7-Stream aus Tensorprodukt-Patches, von denen jedes durch ein vollständiges 4 x 4-Gitter aus bikubischen Bezier-Kontrollpunkten p[i][j] sowie einer Farbe pro Ecke definiert ist; erweitert RegisterCoonsPatchMesh (Typ 6) um 4 explizite innere Kontrollpunkte (p[1][1], p[1][2], p[2][2], p[2][1]) zusätzlich zu den 12 Begrenzungspunkten, was eine feinere Steuerung des Patch-Inneren ermöglicht, als es die Coons-Mischung ausdrücken kann; nützlich für SVG-Netzverlauf-Round-Trips und alle Grafiken, die eine Bezier-Oberfläche mit Tensorprodukt erfordern; jedes Patch steuert 16 Kontrollpunkte (32 X+Y Extended-Werte, geordnet nach der Stream-Reihenfolge in Tabelle 88 der Spezifikation: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], dann die 4 inneren Punkte p[1][1], p[1][2], p[2][2], p[2][1]) gefolgt von 4 Eckfarben (4 * NumComponents Extended-Werte bei p[0][0] / p[0][3] / p[3][3] / p[3][0]) bei, sodass der Schritt (stride) für Patches den Wert 32 + 4 * NumComponents hat; jedes ausgegebene Patch trägt das Flag = 0 (unabhängiges Patch); mit dieser Version ist nun die gesamte ISO 32000-1 8.7.4.5-Netzschattierungsfamilie (Typen 4 / 5 / 6 / 7) abgedeckt; verfügbar seit HotPDF v2.51.0
  • Anmerkungsrahmenstil und Popup-Verknüpfung (PDF 1.7 12.5.4 / 12.5.6.14): THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) hängt ein /BS-Wörterbuch mit dem gewählten THPDFAnnotBorderStyle (absSolid / absDashed / absBeveled / absInset / absUnderline) an; THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) gibt eine /Popup-Anmerkung aus, die in beide Richtungen verknüpft ist (Elternteil /Popup -> Popup, Popup /Parent -> Elternteil), sodass der Viewer das Sprechblasen-Verbindungselement rendern kann; die neue Eigenschaft THPDFPage.LastAnnotation speist beide Hilfsfunktionen, ohne die Signatur der vorhandenen Add*Annotation-Prozeduren zu ändern; verfügbar seit HotPDF v2.34.0
  • Public-Key-Sicherheits-Handler (PDF 1.7 7.6.5): THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) geben ein /Filter /Adobe.PubSec-Verschlüsselungswörterbuch aus (/SubFilter /adbe.pkcs7.s4 für V=1 RC4-40 / /adbe.pkcs7.s5 für V=2 RC4-128 / V=4 AESV2); der Aufrufer liefert den 20-Byte-Zufalls-Seed und einen PKCS#7 envelopedData-Binär-Blob pro Empfänger (extern erstellt mit Windows-CryptoAPI, OpenSSL oder pycryptodome); HotPDF leitet den Dateiverschlüsselungsschlüssel über den Algorithmus 9 ab (SHA-1 des mit jedem Umschlag verketteten Seeds) und verwendet die standardmäßige Schlüsselableitung pro Objekt für AES-128- / RC4-Streams wieder; verfügbar seit HotPDF v2.33.0

Siehe auch