|
PDF-filterondersteuning
Overzicht
PDF-streams en ingesloten afbeeldingen geven hun encoding aan via filternamen. HotPDF werkt bij het genereren van documenten of het decoderen van externe content vooral met de volgende filterfamilies.
Common Filters
- FlateDecode: hoofdcompressiefilter voor gegenereerde streams en het primaire op zlib gebaseerde decompressiepad
- LZWDecode: ondersteund voor legacy- en compatibiliteitsscenario's via HPDFLZW.pas
- DCTDecode: gebruikt voor standaard JPEG-beelddata die via de HotPDF-beeldlaadpaden loopt
- CCITTFaxDecode: geladen monochrome beeldstreams in Group 3 en Group 4 ondersteunen een- en tweedimensionale rijen, T.4/T.6-uncompressed-extensies, EOFB-afhandeling, byte-uitlijning, uitvoerpolariteit en begrens herstel van beschadigde rijen via de standaard DecodeParms-invoeren
- ASCIIHexDecode / ASCII85Decode / RunLengthDecode: encoder-helpers beschikbaar in HPDFTypes.pas (
_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) sinds HotPDF v2.4.0. Handig wanneer je willekeurige binaire content inpakt voor 7-bit-kanalen of voor expliciete PDF 1.7 7.4-round-trip-ondersteuning
- JBIG2Decode / JPXDecode: filternamen gedefinieerd door PDF 1.7 7.4.7 / 7.4.9. HotPDF leidt JPXDecode-beeldstreams en JPEG 2000-bestanden door de op OpenJPEG gebaseerde JPEG2000-decoder en embedt het resultaat daarna met de door de aanroeper gekozen compressie. Bilevel JBIG2-uitvoer en geladen JBIG2Decode-beeldpaden gebruiken de native JBIG2-encoder/decoder-pijplijn, inclusief regeling van symbol dictionary, global segment, lossy-niveau en black-dot-filtering
Praktische opmerkingen
- Niet elk filter wordt via één generieke API blootgegeven; sommige bereik je via speciale afbeeldings- of stream-helperunits
- Voor gegenereerde PDF-content blijft THotPDF.Compression de centrale instelling voor de gebruiker
- Bij het laden van externe data hangt het toepasselijke filter af van het bronbestandsformaat en de gebruikte helperklasse
- Versleutelde PDF's combineren deze filters met de security handler; zie CryptKeyLength voor de ondersteunde opties AES‑128 (V=4 R=4 / CFM=AESV2) en RC4 (V=1/V=2)
- Gereserveerde crypt-filterpolicies zijn via
ConfigureCryptFilterDefaults onafhankelijk te kiezen voor strings, gewone streams en ingesloten-bestandsstreams. Wachtwoordbeveiliging accepteert StdCF of Identity, public-key-beveiliging accepteert DefaultCryptFilter of Identity. SetStreamCryptFilter voegt een expliciet voorliggend Crypt-filter toe of ruimt dat op zonder een bestaand decodepijplijn te storen. Overrides per stream vereisen encryptiewoordenboek /V 4 of nieuwer
- Encrypted payload wrappers houden gewone paginastreams zichtbaar terwijl ze metadata en bytes van ingesloten bestanden beschermen via een
EFOpen-cryptfilter, met expliciete inspectie- en unlock-API's voor geladen documenten sinds HotPDF v2.715.0
- Met wachtwoord beveiligde bijlage-streams gebruiken
/EFF en krijgen een expliciet Crypt-filter zodra /EFF afwijkt van /StmF. Public-key-versleutelde expliciete streamfilters falen gesloten, omdat ze een streamspecifieke ontvangerenvelop vereisen
- Geladen documenten stellen het oorspronkelijke beleid
/CF, /StrF, /StmF en /EFF bloot, inclusief hoofdlettergevoelige externe benoemde filters, expliciete of weggelaten /CFM /None, authenticatie-events en effectieve sleutellengte via THPDFCryptFilterInfo. V2-filterlengtes van de standaardhandler worden als bytes gelezen, die van public-key-V2-filters als bits, en alleen 40-bit- en 128-bit-V2-sleutels worden geaccepteerd. Plaintext objectstream-containers ontcijferen ingepakte ledenstrings nog steeds via /StrF, terwijl versleutelde containers een tweede ledenontcijfering overslaan. Incrementele updates behouden het geladen beleid. Beschikbaar sinds HotPDF v2.675.0
- Interactieve formuliervelden worden uitgegeven als Widget-annotaties die de viewer tekent; zie AcroForm-ondersteuning
- Tekstmarkering-annotaties (Highlight, Underline, Squiggly, StrikeOut) en spronglinks binnen het document (
GoTo, GoToR, Launch) zijn sinds HotPDF v2.6.0 beschikbaar als nieuwe methoden THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink
- DeviceCMYK-uitvoer is beschikbaar via
THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; ICC-beheerde kleurruimtes worden geregistreerd met THotPDF.RegisterICCProfile en toegepast via SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor sinds HotPDF v2.7.0
- Zet
THotPDF.UseXRefStream op true vóór het opslaan om één enkele /Type /XRef-kruisverwijzingsstream, FlateDecode-gecomprimeerd, uit te geven in plaats van de tekstuele xref / trailer / startxref-sequentie (PDF 1.7 7.5.8); beschikbaar sinds HotPDF v2.8.0
- Zet
THotPDF.EnableXMPMetadata op true om een XMP /Type /Metadata /Subtype /XML-stream aan de Catalog te hangen (PDF 1.7 14.3.2); automatisch opgebouwd uit de Info-dict-velden, of lever zelf een pakket aan via CustomXMP. Beschikbaar sinds HotPDF v2.9.0
- PDF-versiegating per methode (sinds HotPDF v2.24.0). Elke feature-methode geïntroduceerd in v2.4.0+ raadpleegt
RequirePDFVersion voordat er wordt uitgegeven; met StrictVersionLock=false (de default) wordt de document-Version stilletjes automatisch opgehoogd naar het minimum dat de feature vereist, en met StrictVersionLock=true wordt de aanroep geweigerd zodat het opgeslagen bestand strikt aan de gekozen referentiespec 1.3 / 1.4 / 1.5 / 1.6 / 1.7 voldoet.
- PNG- en TIFF-predictor-encoders voor FlateDecode-gecomprimeerde beelddata (PDF 1.7 7.4.4.4):
_PNGPredictorEncode past de libpng minimum-absolute-difference-filterheuristiek toe (Predictor=15), _TIFFPredictor2Encode past horizontale differentiatie toe (Predictor=2). Beschikbaar sinds HotPDF v2.10.0
- Tagged PDF-ingangspunten (PDF 1.7 14.7-14.8):
THotPDF.Lang vult /Lang in de Catalog, EnableTaggedPDF schrijft /MarkInfo <</Marked true>> en een stub /StructTreeRoot, en de nieuwe methoden THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent schrijven de BMC / BDC / EMC-contentstream-operatoren. Beschikbaar sinds HotPDF v2.11.0
- Axiale en radiale gradiënten (PDF 1.7 7.10 / 8.7):
THotPDF.RegisterAxialGradient / RegisterRadialGradient bouwen de volledige stapel Function Type 2 / Shading Type 2-3 / Pattern Type 2 en geven een stabiele patroonnaam terug; THPDFPage.SetFillPattern / SetStrokePattern zetten die op de pagina. Het aantal componenten van de begin-/eindkleur kiest DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Beschikbaar sinds HotPDF v2.13.0; Function Type 3-multi-stop-gradiënten zijn via RegisterMultiStopAxialGradient beschikbaar sinds v2.18.0 en via RegisterMultiStopRadialGradient sinds v2.686.0
- Inline afbeeldingen (PDF 1.7 8.9.7) via
THPDFPage.DrawInlineImage; rauwe bytes worden automatisch met ASCIIHex verpakt wanneer er geen Filter is opgegeven, zodat de contentstream 7-bit-clean blijft. Beschikbaar sinds HotPDF v2.18.0
- OutputIntents (PDF 1.7 14.11) via
THotPDF.AddOutputIntent; elke aanroep plakt een /Type /OutputIntent-dict aan de Catalog met optioneel een /DestOutputProfile die naar een geregistreerd ICC-profiel verwijst. Beschikbaar sinds HotPDF v2.18.0
- Automatische generatie van AcroForm-appearance-streams (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): zet
THotPDF.AutoFormAppearances op true voordat je interactieve formuliervelden toevoegt, en HotPDF bouwt vooraf een /Subtype /Form-Form XObject voor de /AP /N-invoer van elke widget (Yes / Off-subdicts voor knoppen), vult de AcroForm-default-resources /DR met indirecte Helvetica / ZapfDingbats-fontdicts en zet /NeedAppearances op false zodat renderers de ingebedde streams volgen. Beschikbaar sinds HotPDF v2.28.0
- ViewerPreferences /ViewArea en /ViewClip (PDF 1.4 12.2 Tabel 152) zijn nu beschikbaar via de properties
THotPDF.ViewArea / THotPDF.ViewClip (met de bijbehorende setleden vpViewArea / vpViewClip). Beide accepteren de THPDFPageBoundary-waarden (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) en maken de dekking van de vier PDF 1.4 page-boundary-ViewerPreferences door HotPDF compleet. Beschikbaar sinds HotPDF v2.29.0
- Pagina-overgangen (PDF 1.1 / 1.5 12.4.4):
THPDFPage.SetPageTransition schrijft een /Trans-woordenboek op de pagina zodat PDF-lezers in /PageMode /FullScreen navigatie animeren. De PDF 1.1-stijlen (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) en PDF 1.5-stijlen (Fly, Push, Cover, Uncover, Fade) zijn beschikbaar via de enum THPDFTransitionStyle; de bijbehorende subopties /Dm, /M en /Di zijn ook blootgegeven. THPDFPage.SetPageDuration schrijft de /Dur-auto-advance-vertraging in seconden. Beschikbaar sinds HotPDF v2.30.0
- Transparency group op paginaniveau (PDF 1.4 11.6.6 / 7.5.5):
THPDFPage.SetTransparencyGroup hangt een /Group-woordenboek (/Type /Group /S /Transparency) aan zodat renderers alpha-dragende content voorspelbaar compositen. Kies een devicekleurruimte via de enum THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK of weglaten), of roep THPDFPage.SetTransparencyGroupICC aan met de naam van een eerder via THotPDF.RegisterICCProfile geregistreerd ICC-profiel. Optionele vlaggen /I (Isolated) en /K (Knockout) sturen de compositor; THPDFPage.ClearTransparencyGroup verwijdert een eerder gekoppelde invoer. Beschikbaar sinds HotPDF v2.32.0
- Incrementele update (PDF 1.7 ISO 32000-1 7.5.6):
THotPDF.BeginIncrementalUpdate(SourceFile) laadt een bestaande PDF in append-only-modus; latere CreateIndirect*-aanroepen markeren nieuwe objecten automatisch als dirty en THotPDF.MarkDirty(Obj) tagt al bestaande geladen objecten voor heruitgifte. THotPDF.SaveIncrementalUpdate(TargetFile) schrijft de originele bronbytes ongewijzigd weg, voegt alleen dirty objecten toe met hun objectnummers behouden, geeft een nieuwe xref-subsectie uit en sluit af met een trailer met /Prev die naar de vorige xref wijst. Combineer met de bestaande pijplijn AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex om vervolgende signature-velden aan een al ondertekend document toe te voegen zonder eerdere handtekeningen ongeldig te maken (hun /ByteRange-digests blijven geldig omdat geen enkele originele byte verandert). Beschikbaar sinds HotPDF v2.35.0
- Normalisatie van ingebedde TrueType-fontnamen: HotPDF leest de naamtabel van het ingebedde TrueType-font en stemt
/BaseFont, /FontDescriptor /FontName, /FontFamily en de CID-fontnamen van afstammelingen af op de PostScript-naam van het fontprogramma. Dat voorkomt Adobe Acrobat Font Capture-fouten door een mismatch tussen het PDF-fontwoordenboek en de ingebedde TTF-payload. Beschikbaar sinds HotPDF v2.35.1
- TrueType-fontsubsetting (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): zet
THotPDF.EnableFontSubsetting op true vóór BeginDoc en HotPDF bouwt de ingebedde TrueType-payload zo om dat deze alleen de glyphs bevat die het document echt gebruikt. Typische Latijnse documenten zien zo'n 90% minder ingebed fontgewicht (1 MB Arial -> ~70 KB bij een éénregelige "Hello, world."). Samengestelde-glyph-afhankelijkheden worden recursief gevolgd, GID-nummering blijft behouden (zodat bestaande Type0-/Identity-H-contentstreams blijven werken) en de nieuwe /BaseFont krijgt automatisch het door de spec voorgeschreven zesletterige "+"-prefix (bijv. /BaseFont /AAAAAA+ArialMT). Standaard uit; zet opt-in aan om voor bewerkingsworkflows het volledige font in te bedden. Beschikbaar sinds HotPDF v2.36.0
- Compact Font Format (CFF)-subsetter (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): tegenhanger van de TrueType-subsetter voor OpenType-CFF (.otf, sfntVersion
OTTO) en Type 1 / Type 1C-fonts. De unit-geexporteerde functie HPDFSubsetCFF(CFFBytes, KeepGlyph) bouwt de CharStrings-INDEX opnieuw op waarbij niet-gehouden glyphs vervangen zijn door de minimale 1-byte endchar-stub, met GID-nummering byte voor byte behouden. Beschikbaar sinds HotPDF v2.37.0.
- OpenType-CFF (.otf)-embedpad aangesloten op
StoreFont (PDF 1.6+ 9.7.4 Tabel 117). Als het via GDI geladen fontbinair een sfnt OTTO-container is, subset HotPDF de ingebedde sub-tabel 'CFF ' via HPDFSubsetOTFContainer, geeft het fontprogramma uit via /FontFile3 /Subtype /OpenType en schrijft het afstammende fontwoordenboek met /Subtype /CIDFontType0 in plaats van /CIDFontType2. TrueType-fonts blijven via het bestaande pad /FontFile2 + /CIDFontType2 lopen, zonder gedragsverandering. Beschikbaar sinds HotPDF v2.38.0.
- CFF-subroutine-subsetting end-to-end (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): de CFF-subsetter stript nu ongebruikte invoeren uit ZOWEL de Global Subr INDEX (direct na de String INDEX in het CFF-binair) als de Local Subr INDEX (genest onder de Private DICT, bereikt via Top DICT-operator 18 + Private DICT-operator 19). Eén enkele fixed-point-closure volgt
callsubr (op 0x0A) EN callgsubr (op 0x1D)-ketens transitief, dus een CharString die een Local Subr aanroept die een Global Subr aanroept die weer een Local Subr aanroept, wordt in één iteratie gepakt. Elke ongebruikte invoer wordt vervangen door een 1-byte return-stub en de INDEX wordt in place herschreven met de resterende ruimte op nul gevuld. Dit gedrag is beschikbaar via de publieke helpers HPDFSubsetCFF en HPDFSubsetOTFContainer; de diepere CFF-scanners blijven intern. Beschikbaar sinds HotPDF v2.39.0.
- CID-keyed CFF-subsetting (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): de CFF-subsetter herkent nu de Top DICT-operator
ROS (12-30) die een CID-keyed OpenType-CFF-font markeert en loopt de FDArray (12-36)-INDEX van Font DICTs af, waarvan elk zijn eigen Private DICT + Local Subr INDEX draagt. De FDSelect (12-37)-glyph-naar-FD-map blijft byte voor byte behouden. De subroutine-closure-scan volgt per gehouden CharString de FD-context, zodat een glyph in FD #5 alleen Local Subrs in FD #5 markeert - global subrs blijven gedeeld over FDs heen. De Local Subr INDEX van elke FD wordt in place herschreven met ongebruikte invoeren ingekrompen tot 1-byte return-stubs. CJK-/Indic-/Arabische OTF-fonts (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans enz.) lopen nu door de volledige subsettingpijplijn in plaats van ongewijzigd ingebed te worden. Beschikbaar sinds HotPDF v2.40.0.
- Object Streams (PDF 1.5 ISO 32000-1 7.5.7): zet
THotPDF.UseObjectStreams op true naast UseXRefStream en SaveToStream verpakt in aanmerking komende indirecte objecten (alles behalve streams, het encryptiewoordenboek en de door de trailer aangewezen Catalog- en Info-woordenboeken) in één of meer /Type /ObjStm-containerstreams. De kruisverwijzingsstream verwijst daarna naar de ingepakte objecten via type-2-invoeren (veld-2 = objectnummer van de hostende ObjStm; veld-3 = invoerindex binnen de stream). Scheelt flink wat bestandsgrootte bij PDF's met veel kleine woordenboeken (documenten met veel pagina's, annotaties, AcroForm-widgets, structuurboomelementen, Optional Content-lagen) - een 30-pagina rooktest met alleen graphics krimpt van 14502 naar 8488 bytes (41,5% kleiner). Downgradeert stilletjes naar false wanneer UseXRefStream uit staat (type-2-invoeren zijn volgens de spec niet representabel in de tekstuele xref-tabel) of wanneer Version onder PDF 1.5 zit. Beschikbaar sinds HotPDF v2.41.0.
- Soft-mask-afbeelding / SMask (PDF 1.4 ISO 32000-1 8.9.5.4):
THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) geeft een kleur-image XObject plus een 8-bit DeviceGray soft-mask-image XObject uit en legt de /SMask-kruisverwijzing automatisch, zodat elke pixel volledige transparantie per kanaal kan dragen in plaats van de binaire aan/uit-limiet van het legacy-pad /ImageMask. De convenience-overload THotPDF.AddImageWithSMask32(Bitmap32) haalt de RGB- en alpha-planes uit een 32-bit BGRA TBitmap voor het embedden van PNG-met-alpha in één aanroep. AddImageWithTransparency en AddImageWithTransparency32 bieden dezelfde workflow met beeldgerichte naamgeving. Beide aanroepplekken gate via RequirePDFVersion(pdf14) zodat strikte 1.3-uitvoer conform blijft. Beschikbaar sinds HotPDF v2.42.0
- Handige image-mask-helpers:
AddImageAsMask geeft een binaire /ImageMask uit, AddImageWithMask koppelt de resulterende mask via /Mask aan een kleurenafbeelding, en beide geven gewone afbeeldingsindexen terug voor THPDFPage.ShowImage
- Compressieregeling per afbeelding:
AddImageWithJpegQuality past JPEG-kwaliteit in één aanroep toe zonder JpegQuality te veranderen, terwijl AddMonochromeImageAuto en icAutoMono voor 1-bit-bitmapinvoer kiezen uit Flate, CCITT Group 4 of JBIG2
- Oongekleurde tiling patterns schilderen (PDF 1.7 ISO 32000-1 8.6.6.1):
THotPDF.RegisterTilingPattern geeft al sinds v2.19.0 zowel /PaintType 1 (gekleurd) als /PaintType 2 (ongekleurd) uit, maar de bijbehorende operatorsequentie aan pagina-zijde was alleen correct voor de gekleurde variant. Zes nieuwe THPDFPage-methoden - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - bedienen nu het ongekleurde pad door automatisch de bijpassende [/Pattern /BaseCS]-tintkleurruimte te registreren in het Resources/ColorSpace-dict van de pagina en de door de spec voorgeschreven tint_components /Pn scn-sequentie uit te geven. Gebruik de originele SetFillPattern / SetStrokePattern voor de gekleurde variant waarbij de tile zijn eigen kleur meebrengt. Beschikbaar sinds HotPDF v2.43.0.
- Volledige tiling-pattern-rendering past de patroonmatrix nu toe relatief aan het defaultcoordinatenstelsel van de ouder-contentstream, implementeert alle drie de
/TilingType-plaatsingsregels, ondersteunt negatieve /XStep en /YStep, begint elke cel met een geïsoleerd path, past de basistint van een ongekleurd patroon toe op zowel fill- als stroke-operaties en houdt begrensde uitvoering van geneste patronen vast. De uitgebreide overload RegisterTilingPattern en de properties THPDFTilingPatternBuilder.TilingType / Matrix stellen dezelfde gevalideerde regeling beschikbaar voor gegenereerde PDF's. Beschikbaar sinds HotPDF v2.542.0
- CIELab-kleurruimte (PDF 1.3+ ISO 32000-1 8.6.5.3):
THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) bouwt een inline kleurruimte-array [/Lab << /WhitePoint /BlackPoint /Range >>], bewaart die onder een automatisch gegenereerde naam (Lab1, Lab2, ...) en geeft die naam terug voor gebruik met de gewone pijplijn THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]). Kies een D50-illuminant [0.9505, 1.0, 1.089] voor ICC-printworkflows of een D65-illuminant [0.95047, 1.0, 1.08883] voor sRGB-equivalente weergave, en schilder dan met L* in [0..100] en a*, b* in het gekozen bereik (meestal [-128..127]). Beschikbaar sinds HotPDF v2.44.0.
- Separation-kleurruimte voor steunkleuren (PDF 1.3+ ISO 32000-1 8.6.6.4):
THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) declareert een één-component-steunkleur waarvan de enkele tintoperand in [0..1] een intern gebouwde lineaire Function Type 2-tinttransformatie aanstuurt. Gebruik de teruggegeven naam (Sep1, Sep2, ...) met de gewone pijplijn SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). AlternateCS accepteert DeviceGray, DeviceRGB of DeviceCMYK; TintC1 levert de alt-CS-componenten bij tint = 1.0. Pantone- en andere inktnamen met spaties worden direct geaccepteerd - HotPDF escapet ze naar #20 volgens PDF 1.7 7.3.5 bij het wegschrijven van de kleurruimtenaam. Beschikbaar sinds HotPDF v2.45.0.
- AcroForm multi-line- en comb-text-appearance-streams (PDF 1.7 ISO 32000-1 12.7.4.3): als
THotPDF.AutoFormAppearances aan staat, krijgen tekstvelden waarvan Flags ffMultiline bevat een word-wrapped /AP /N-Form XObject (Td + T* + /TL-leading-layout, met respect voor CR / LF / CRLF-scheidingstekens en afkappen op het zichtbare rijantal). Velden waarvan Flags ffComb bevat samen met een positieve MaxLen renderen elk teken in een eigen cel van gelijke breedte via een absolute Tm-matrix per glyph. De single-line-layout uit v2.28.0 blijft voor velden zonder die vlaggen byte voor byte behouden. Internationale tekens in de beginwaarde vallen nog steeds terug op het /NeedAppearances-herberekeningspad van de viewer - volledige appearance-generatie met ingebed CID-font blijft toekomstwerk. Beschikbaar sinds HotPDF v2.46.0.
- AcroForm /AP Unicode-font (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3):
THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) registreert een door de aanroeper geleverd Type 0 / CIDFontType2 + Identity-H-samengesteld font in het AcroForm-default-resources-dict /DR/Font. Eenmaal geregistreerd schakelen de AcroForm-/DA, de /DA van elke Tx-widget en de /AP /N-stream die AutoFormAppearances produceert voor niet-ASCII Tx-beginwaarden allemaal over op de logische naam; het sub-dict /Resources/Font van het Form XObject verwijst ook naar hetzelfde indirecte font, zodat de AP zelfvoorzienend is en niet hoeft te leunen op /DR-resolutie tijdens rendering. De bijbehorende helper THotPDF.CreateIndirectFontDict geeft een frisse, lege THPDFDictionaryObject terug die als indirect PDF-object is geregistreerd, zodat aanroepers eigen fontdicts (of elk ander dict dat "N G R"-indirecte serialisatie vereist) kunnen bouwen zonder interne helpers aan te raken. Geef lege LogicalName en nil FontDict door om terug te keren naar het ASCII-only /Helv-gedrag van v2.46.0. ASCII Tx-velden blijven /Helv gebruiken met byte-identieke uitvoer ten opzichte van v2.46.0 / v2.55.0. Multi-line + comb niet-ASCII /AP en RTL bidi-shaping (UAX #9 + Arabische contextuele verbinding) blijven toekomstwerk. Beschikbaar sinds HotPDF v2.56.0; ondersteuning voor ffMultiline niet-ASCII /AP (per regel UTF-16BE-hex Tj met Td / T* / /TL-leading en CJK-bewuste word-wrap) sinds v2.57.0; ondersteuning voor ffComb niet-ASCII /AP (per-CID cellen van gelijke breedte met absolute Tm + ééncellige Tj per codepoint met UTF-16-surrogaatpaar-afhandeling) sinds v2.58.0; property THotPDF.FormUnicodeRTL voor rechts-naar-links-richting (draait de UTF-16-volgorde in /AP Tj-hex om terwijl /V logisch blijft; de aanroeper vormt Arabisch vooraf naar Unicode presentation forms U+FB50..U+FDFF + U+FE70..U+FEFF; volledige UAX #9 + automatische GSUB-shaping volgt nog) sinds v2.59.0.
- AcroForm rich-text Tx-widget (PDF 1.5+ ISO 32000-1 12.7.4.3 + Bijlage L):
THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) geeft een tekstwidget uit met /RV (rich-text XHTML-body), /DS (CSS-achtige defaultstijl), automatisch toegevoegde ffRichText-/Ff bit 26-vlag, plus de platte-tekst-fallback /V + /DV voor lezers die /RV niet parsen. Acrobat en Foxit renderen rechtstreeks uit /RV wanneer de RichText-bit aan staat en pakken font-fallbacks uit de geinstalleerde Unicode-fonts van de lezer - dus multi-byte-content (CJK / Cyrillisch / Arabisch / Latijn met diakritiek) wordt correct getoond zonder dat HotPDF een CID-font in de /DR-Resources moet embedden. Zowel /V als /RV detecteren multi-byte-invoer automatisch en schakelen zo nodig over op UTF-16BE-hexstring-encoding (FE FF-BOM + big-endian codeunits). CID-font-appearance-stream-generatie voor het eigen /AP-pad van HotPDF blijft toekomstwerk; rich-text-bewuste viewers hebben het niet nodig. Beschikbaar sinds HotPDF v2.55.0.
- DeviceN-kleurruimte voor steunkleur-workflows met meerdere colourants (PDF 1.3+ ISO 32000-1 8.6.6.5):
THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) generaliseert RegisterSeparation van één steunkleur naar N. De tinttransformatie is een PostScript-calculator Function Type 4 die een lineaire gewogen blend uitgeeft over de opgegeven N x M-matrix (rij n kolom m is de bijdrage van colourant n aan AlternateCS-kanaal m wanneer colourant n alleen op 1.0 staat). Geeft een kleurruimtenaam terug (DevN1, DevN2, ...) die de gewone pijplijn SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]) aanstuurt. AlternateCS accepteert DeviceGray, DeviceRGB of DeviceCMYK; inktnamen met spaties worden ge-escapet naar #20 volgens PDF 1.7 7.3.5; de speciale naam None markeert een ongebruikte colourantsleuf. Beschikbaar sinds HotPDF v2.47.0.
- Free-form Gouraud-shaded driehoeksmesh (PDF 1.3+ ISO 32000-1 8.7.4.5.4):
THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) declareert een /ShadingType 4-stream met /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, wikkelt die in een inline Pattern Type 2-invoer op het Resources/Pattern-dict van de pagina en geeft de automatisch gegenereerde patroonnaam terug (Sh1, Sh2, ...) voor de gewone pijplijn SetFillPattern / SetStrokePattern. Elk hoekpunt wordt ingepakt als 1 vlagbyte (altijd 0 voor onafhankelijke driehoeken) + 2 big-endian X-bytes + 2 big-endian Y-bytes + NumComponents 8-bit kleurcomponenten. Het argument NumComponents accepteert 1 (DeviceGray), 3 (DeviceRGB) of 4 (DeviceCMYK); elk hoekpunt levert 2 + NumComponents Extended-waarden aan Vertices in de volgorde (X, Y, c1...cN); het hoekpuntaantal moet een veelvoud van 3 zijn. /Decode mapt de 16-bit-coordinaten terug naar [XMin, XMax] x [YMin, YMax] en de kleurcomponenten naar [0, 1]. Mesh-shadings Type 5 (lattice), Type 6 (Coons patch) en Type 7 (tensor product) blijven toekomstwerk. Beschikbaar sinds HotPDF v2.48.0.
- Lattice-form Gouraud-shaded driehoeksmesh (PDF 1.3+ ISO 32000-1 8.7.4.5.5):
THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) declareert een /ShadingType 5-stream die hoekpunten in een raster van M-rijen x N-kolommen zet en de renderer elke twee aangrenzende rijen automatisch laat trianguleren tot een triangle strip. In tegenstelling tot RegisterFreeFormGouraudShading (Type 4) is er geen vlagbyte per hoekpunt; /BitsPerFlag ontbreekt in het shadingwoordenboek en elk hoekpunt beslaat slechts 4 + NumComponents bytes (2 big-endian X + 2 big-endian Y + N kleurcomponenten). Het shadingwoordenboek draagt in plaats daarvan de vereiste invoer /VerticesPerRow N. Gebruik het voor brondata die al op een regelmatig samplegrid ligt (terrein, FEA-resultaten, wetenschappelijke heatmaps) - de toepassing levert hoekpunten row-major en de renderingpijplijn stelt de triangle-strip-topologie automatisch samen. VerticesPerRow moet ten minste 2 zijn en het totale hoekpuntaantal een veelvoud van VerticesPerRow met ten minste twee rijen. Beschikbaar sinds HotPDF v2.49.0.
- Coons patch mesh-shading (PDF 1.3+ ISO 32000-1 8.7.4.5.6):
THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declareert een /ShadingType 6-stream van Coons patches, elk begrensd door vier kubische Bezier-curves en met één kleur per hoek. De renderer fit het Coons-oppervlak tussen de vier randen, wat een willekeurig gekromde, kleurdragende vierhoek oplevert - handig voor folie- en metaalgradiënten op gebogen paths, op SVG gebaseerde gradiëntmeshes en elke vierhoek met gebogen randen die anders veel kleine driehoeken zou kosten. Elke patch levert 12 controlepunten (24 X+Y Extended-waarden, geordend c1..c12 met de klok mee rond de rand, met c1 / c4 / c7 / c10 op de vier hoeken en de overige 8 als binnenste Bezier-handvatten) gevolgd door 4 hoekkleuren (4 * NumComponents Extended-waarden), dus de Patches-stride is 24 + 4 * NumComponents. Het shadingwoordenboek draagt dezelfde /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 als Type 4 (en anders dan bij Type 5 ontbreekt /VerticesPerRow). Elke uitgegeven patch draagt vlag = 0 (onafhankelijke patch); continuatievlaggen 1 / 2 / 3 (rand-delen) zijn niet blootgegeven in deze convenience-overload. Beschikbaar sinds HotPDF v2.50.0.
- Separation-kleurruimte met gesamplede LUT-tinttransformatie (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2):
THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) wikkelt RegisterSampledFunction zodat aanroepers een volledige niet-lineaire tint -> alt-CS-curve kunnen uitdrukken als een platte bytestroom van 8-bit (M-tupel)-samples zonder handmatig een Function Type 0-woordenboek te bouwen. Gebruik de LUT-variant wanneer de kleurovergang niet-lineair is - PANTONE Hexachrome-achtige tintrampen, gamma-gecorrigeerde dichtheidscurves, handgetekende tooncurves die bij een drukperskarakterisering passen, sRGB-naar-steunkleur-ICC-LUT's zonder de volledige ICC-profielmachine; het ingangspunt RegisterSeparation uit v2.45.0 dekt nog steeds het lineaire single-endpoint-geval. AlternateCS accepteert DeviceGray, DeviceRGB of DeviceCMYK; de lengte van Samples moet een positief veelvoud van M zijn met ten minste 2 * M bytes zodat de functie interpoleerbaar bereik heeft, en het aantal gridpunten S volgt uit Length(Samples) / M. Lineaire interpolatie is de default volgens PDF 1.7 /Order 1. Geeft de geregistreerde kleurruimtenaam terug (Sep1, Sep2, ...) voor gebruik met de gewone pijplijn SetFillColorSpace + SetFillColor([tint]). Beschikbaar sinds HotPDF v2.53.0.
- Registratie van Function Type 0 (Sampled) (PDF 1.3+ ISO 32000-1 7.10.2):
THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) declareert een indirecte /FunctionType 0-stream die een willekeurige invoer-naar-uitvoer-mapping uitdrukt als een regelmatig N-dimensionaal raster van M-dimensionale outputsamples, geïnterpoleerd tussen gridpunten. Gebruik het waar ICC-profielmachine overkill is maar een handafgestelde kleur-LUT gewenst is - tooncurves voor /TransferFunction (ExtGState /TR), gesamplede tinttransformaties voor /Separation / /DeviceN voorbij de lineaire Type 2- / rekenkundige Type 4-paden, halftone-drempelcurves, of elke andere PDF-constructie die een Function-woordenboek accepteert. Domain is 2N invoeren (één [min, max]-paar per invoerdimensie); Range is 2M invoeren (één paar per uitvoerdimensie); Size zijn N gridpuntaantallen; BitsPerSample accepteert 1, 2, 4, 8, 12, 16, 24 of 32 volgens PDF 1.7 Tabel 38; Samples is de rauwe bit-ingepakte samplestroom (MSB eerst binnen elk sample, geen padding tussen samples behalve de nulvulling van de laatste byte, met invoer 0 die volgens de sample-orderregels van de spec het snelst varieert); Order staat default op 1 (lineair) en accepteert 3 (kubisch-spline-interpolatie, sinds v2.54.0) volgens PDF 1.7 Tabel 38. HotPDF valideert het samplebyteaantal tegen ceil(GridPoints * M * BitsPerSample / 8). Geeft het indirecte THPDFStreamObject terug zodat aanroepers het overal kunnen hangen waar een Function-woordenboek wordt verwacht. Beschikbaar sinds HotPDF v2.52.0; kubische /Order 3 + end-to-end multi-invoer-/multi-uitvoer-dekking sinds v2.54.0.
- Tensor product patch mesh-shading (PDF 1.3+ ISO 32000-1 8.7.4.5.7):
THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declareert een /ShadingType 7-stream van tensorproductpatches, elk gedefinieerd door een volledig 4 x 4-raster bicubische Bezier-controlepunten p[i][j] plus één kleur per hoek. Breidt RegisterCoonsPatchMesh (Type 6) uit met 4 expliciete binnencontrolepunten (p[1][1], p[1][2], p[2][2], p[2][1]) bovenop de 12 randpunten, wat fijnere regeling van de patchinterieur geeft dan de Coons-geblendde fit kan uitdrukken. Handig voor SVG mesh-gradient-round-trips en elke artwork die een tensorproduct-Bezier-oppervlak nodig heeft. Elke patch levert 16 controlepunten (32 X+Y Extended-waarden, geordend volgens de streamvolgorde van spec Tabel 88: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], daarna de 4 binnenpunten p[1][1], p[1][2], p[2][2], p[2][1]) gevolgd door 4 hoekkleuren (4 * NumComponents Extended-waarden op p[0][0] / p[0][3] / p[3][3] / p[3][0]), dus de Patches-stride is 32 + 4 * NumComponents. Elke uitgegeven patch draagt vlag = 0 (onafhankelijke patch). Met deze release is de hele mesh-shadingfamilie uit ISO 32000-1 8.7.4.5 (Types 4 / 5 / 6 / 7) gedekt. Beschikbaar sinds HotPDF v2.51.0.
- Annotatierandstijl en Popup-koppeling (PDF 1.7 12.5.4 / 12.5.6.14):
THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) hangt een /BS-woordenboek aan met de gekozen THPDFAnnotBorderStyle (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) geeft een /Popup-annotatie uit die in beide richtingen is bedraad (ouder /Popup -> popup, popup /Parent -> ouder) zodat de viewer de tekstballon-verbinding kan tekenen. De nieuwe property THPDFPage.LastAnnotation voedt beide helpers zonder de signatuur van de bestaande Add*Annotation-procedures te veranderen. Beschikbaar sinds HotPDF v2.34.0
- Public-key security handler (ISO 32000-1 7.6.4, ISO 32000-2 7.6.5):
THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) geven een encryptiewoordenboek met /Filter /Adobe.PubSec uit (/SubFilter /adbe.pkcs7.s4 voor V=1 RC4-40 / /adbe.pkcs7.s5 voor V=2 RC4-128 / V=4 AESV2). De aanroeper levert de 20-byte willekeurige seed en één PKCS#7-envelopedData-binair per ontvanger (extern gebouwd met Windows CryptoAPI, OpenSSL of pycryptodome). HotPDF leidt de bestandssleutel af zoals beschreven in ISO 32000-1 7.6.4.3 (SHA-1 van de seed geconcateneerd met elke envelop) en hergebruikt de standaard per-object-sleutelafleiding voor AES-128 / RC4-streams. Beschikbaar sinds HotPDF v2.33.0
- Rendering van geladen pagina's decodeert Shading Types 4 tot en met 7 met alle standaard bitbreedtes voor coordinaten, componenten en vlaggen, byte-uitgelijnde records, Type 4-driehoek- en Type 6 / 7-patch-continuatievlaggen, optionele Function-arrays, aangegeven ColorSpace-conversie, BBox- en Background-afhandeling, clip-culling, gebatchte Gouraud-vullingen en begrensde adaptieve Coons- en tensorproduct-tessellatie. Beschikbaar sinds HotPDF v2.488.0
Zie ook
|