PDF Filter Support

Apžvalga

PDF srautai ir įterpti vaizdai nurodo kodavimą per filtrų pavadinimus. HotPDF daugiausia dirba su šiais filtrų šeimomis kuriant dokumentus arba išskleidžiant išorinio turinio duomenis

Common Filters

  • FlateDecode: Pagrindinis suspaudimo filtras generuojamiems srautams ir pagrindinis zlib pagrįstas išskleidimo kelias
  • LZWDecode: Palaikomas senesnėms ir suderinamumo scenarijams per HPDFLZW.pas
  • DCTDecode: Naudojamas standartiniams JPEG vaizdo duomenims, kuriuos tvarko HotPDF vaizdų įkėlimo keliai
  • CCITTFaxDecode: Dažnas vienspalviuose TIFF ir fakso stiliaus vaizdo duomenyse
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: kodavimo pagalbinės funkcijos, atskleistos HPDFTypes.pas (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) nuo HotPDF v2.4.0. Naudinga, kai reikia apgaubti bet kokį dvejetainį turinį 7 bitų kanalams arba aiškiai PDF 1.7 7.4 dvikrypčiai eigai
  • JBIG2Decode / JPXDecode: Filtro pavadinimai, apibrėžti PDF 1.7 7.4.7 / 7.4.9. HotPDF komplekte esantys JBIG2 ir JPEG 2000 pagalbiniai moduliai yra stub'ai, kurie grąžina nepalaikoma (grąžina False) tol, kol neprijungtas tikras OpenJPEG / JBIG2 backendas. Ankstesnės laidos grąžindavo netikrą 100×100 sėkmę, dėl kurios vaizdai buvo neįskaitomi; tai dabar pataisyta

Praktinės pastabos

  • Ne kiekvienas filtras atskleidžiamas per vieną bendrą API; kai kurie pasiekiami per specializuotus vaizdo arba srauto pagalbinius modulius
  • Generuojamam PDF turiniui THotPDF.Compression išlieka pagrindinis vartotojui matomas nustatymas
  • Įkeliant išorinius duomenis, taikomas filtras priklauso nuo šaltinio failo formato ir naudojamos pagalbinės klasės
  • Užšifruoti PDF šiuos filtrus sujungia su saugos tvarkykle; žr. CryptKeyLength dėl palaikomų AES‑128 (V=4 R=4 / CFM=AESV2) ir RC4 (V=1/V=2) parinkčių
  • Interaktyvūs formų laukai išvedami kaip Widget anotacijos, kurias piešia žiūriklis; žr. AcroForm Support
  • Teksto žymėjimo anotacijos (Highlight, Underline, Squiggly, StrikeOut) ir šuolio dokumente nuorodos (GoTo, GoToR, Launch) nuo HotPDF v2.6.0 atskleidžiamos kaip nauji THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink metodai
  • DeviceCMYK išvestis pasiekiama per THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; ICC valdomos spalvų erdvės registruojamos per THotPDF.RegisterICCProfile ir taikomos per SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor nuo HotPDF v2.7.0
  • Prieš išsaugodami nustatykite THotPDF.UseXRefStream į true, kad būtų išvedamas vienas /Type /XRef FlateDecode suspaustas kryžminių nuorodų srautas vietoj tekstinės xref / trailer / startxref sekos (PDF 1.7 7.5.8); prieinamas nuo HotPDF v2.8.0
  • Nustatykite THotPDF.EnableXMPMetadata į true, kad prie Catalog būtų prijungtas XMP /Type /Metadata /Subtype /XML srautas (PDF 1.7 14.3.2); jis automatiškai sudaromas iš Info žodyno laukų, arba galite pateikti ranka parengtą paketą per CustomXMP. Prieinamas nuo HotPDF v2.9.0
  • Kiekvienos funkcijos lygmens PDF versijos vartai (nuo HotPDF v2.24.0). Kiekvienas v2.4.0+ pristatytas funkcijos metodas prieš išvesdamas tikrina RequirePDFVersion; kai StrictVersionLock=false (numatytoji reikšmė) dokumento Version tyliai pakeliamas iki minimalios reikalingos versijos, o kai StrictVersionLock=true kvietimas atmetamas, kad išsaugotas failas griežtai atitiktų pasirinktą 1.3 / 1.4 / 1.5 / 1.6 / 1.7 etaloninę specifikaciją
  • PNG ir TIFF prediktorių koduotojai FlateDecode suspaustiems vaizdo duomenims (PDF 1.7 7.4.4.4): _PNGPredictorEncode taiko libpng mažiausio absoliutaus skirtumo filtro heuristiką (Predictor=15), _TIFFPredictor2Encode taiko horizontalią diferencijaciją (Predictor=2). Prieinama nuo HotPDF v2.10.0
  • Pažymėto PDF įėjimo taškai (PDF 1.7 14.7-14.8): THotPDF.Lang užpildo /Lang Catalog žodyne, EnableTaggedPDF išveda /MarkInfo <</Marked true>> ir stub /StructTreeRoot, o nauji THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent metodai rašo BMC / BDC / EMC turinio srauto operatorius. Prieinama nuo HotPDF v2.11.0
  • Ašiniai ir radialiniai gradientai (PDF 1.7 7.10 / 8.7): THotPDF.RegisterAxialGradient / RegisterRadialGradient sukuria visą Function Type 2 / Shading Type 2-3 / Pattern Type 2 grandinę ir grąžina pastovų modelio pavadinimą; THPDFPage.SetFillPattern / SetStrokePattern jį įrašo puslapyje. Pradžios / pabaigos spalvos komponentų skaičius parenka DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Prieinama nuo HotPDF v2.13.0; kelių sustojimų ašiniai gradientai per Function Type 3 atskleidžiami per RegisterMultiStopAxialGradient nuo v2.18.0
  • Vidiniai vaizdai (PDF 1.7 8.9.7) per THPDFPage.DrawInlineImage; kai Filter nenurodytas, žali baitai automatiškai apgaubiami ASCIIHex, kad turinio srautas liktų 7 bitų švarus. Prieinama nuo HotPDF v2.18.0
  • OutputIntents (PDF 1.7 14.11) per THotPDF.AddOutputIntent; kiekvienas kvietimas prideda /Type /OutputIntent žodyną į Catalog su pasirenkamu /DestOutputProfile, kuris nurodo į registruotą ICC profilį. Prieinama nuo HotPDF v2.18.0
  • AcroForm kelių eilučių ir comb teksto appearance streamai (PDF 1.7 ISO 32000-1 12.7.4.3): kai THotPDF.AutoFormAppearances įjungtas, teksto laukai, kurių Flags apima ffMultiline, gauna žodžiais laužytą /AP /N Form XObject (Td + T* + /TL eilučių tarpai, gerbiant CR / LF / CRLF skirtukus ir apkarpant pagal matomų eilučių skaičių). Laukai, kurių Flags apima ffComb kartu su teigiamu MaxLen, kiekvieną simbolį atvaizduoja į atskirą vienodo pločio langelį naudodami absoliučią Tm matricą kiekvienam glifui. Vienos eilutės maketas iš v2.28.0 išlaikomas baitas į baitą laukams be tokių vėliavų. Pradinės reikšmės tarptautiniai simboliai vis dar patenka į žiūriklio /NeedAppearances perskaičiavimo kelią - pilnas įterpto CID šrifto appearance stream generavimas lieka būsimam darbui. Galima nuo HotPDF v2.46.0
  • AcroForm /AP Unicode šriftas (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3): THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) registruoja kviestinės pusės pateiktą Type 0 / CIDFontType2 + Identity-H sudėtinį šriftą AcroForm /DR/Font numatytųjų resursų žodyne. Kai šriftas užregistruotas, AcroForm lygio /DA, kiekvieno Tx widget /DA ir AutoFormAppearances sugeneruotas /AP /N srautas ne ASCII Tx pradinėms reikšmėms persijungia į loginį pavadinimą; Form XObject /Resources/Font subžodynas taip pat nurodo į tą patį netiesioginį šriftą, todėl AP yra savarankiškas ir nepriklauso nuo /DR sprendimo atvaizdavimo metu. Pagalbinis metodas THotPDF.CreateIndirectFontDict grąžina naują tuščią THPDFDictionaryObject, registruotą kaip netiesioginį PDF objektą, kad kviestinė pusė galėtų kurti pasirinktinius šriftų žodynus arba bet kurį kitą žodyną, kuriam reikia netiesioginės "N G R" serializacijos, neliesdama vidinių pagalbinių priemonių. Pateikite tuščią LogicalName ir nil FontDict, jei norite grįžti prie v2.46.0 tik ASCII /Helv elgsenos. ASCII Tx laukai toliau naudoja /Helv su baitas į baitą identiška v2.46.0 / v2.55.0 išvestimi. Daugiaeilė + comb ne ASCII /AP ir RTL bidi formavimas (UAX #9 + arabiškas kontekstinis sujungimas) lieka būsimam darbui. Prieinama nuo HotPDF v2.56.0; ffMultiline ne ASCII /AP palaikymas (eilutė po eilutės UTF-16BE hex Tj su Td / T* / /TL tarpais ir CJK suvokiančiu žodžių laužymu) nuo v2.57.0; ffComb ne ASCII /AP palaikymas (po vieną CID vienodo pločio absoliučią Tm ląstelę + po vieną Tj kiekvienam kodų taškui su UTF-16 pakaitinių porų tvarkymu) nuo v2.58.0; THotPDF.FormUnicodeRTL savybė dešinės į kairę krypčiai (sukeičia UTF-16 tvarką /AP Tj hex, bet /V palieka logine tvarka; kviestinė pusė iš anksto formuoja arabišką tekstą į Unicode presentation forms U+FB50..U+FDFF + U+FE70..U+FEFF; pilnas UAX #9 + automatinis GSUB formavimas dar laukia) nuo v2.59.0
  • AcroForm raiškiojo teksto Tx widget (PDF 1.5+ ISO 32000-1 12.7.4.3 + Annex L): THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) išveda teksto widget su /RV (raiškiojo teksto XHTML turiniu), /DS (CSS tipo numatytuoju stiliumi), automatiškai OR'inta ffRichText /Ff 26 vėliava, taip pat paprasto teksto /V + /DV atsarginiu variantu, kurį naudoja skaitytuvai, neskaitantys /RV. Acrobat ir Foxit tiesiogiai atvaizduoja iš /RV, kai įjungtas RichText bitas, ir naudoja skaitytuvo įdiegtus Unicode šriftų pakaitalus, todėl kelių baitų turinys (CJK / Cyrillic / Arabic / accented Latin) rodomas teisingai, HotPDF neįterpiant CID šrifto į /DR Resources. Ir /V, ir /RV automatiškai aptinka kelių baitų įvestį ir prireikus persijungia į UTF-16BE hex-string kodavimą (FE FF BOM + big-endian code units). HotPDF savo /AP kelyje CID šrifto appearance stream generavimas lieka būsimam darbui; raiškųjį tekstą suprantantiems žiūrikliams jo nereikia. Galima nuo HotPDF v2.55.0
  • DeviceN spalvų erdvė kelių dažų spot-ink darbo eigoms (PDF 1.3+ ISO 32000-1 8.6.6.5): THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) apibendrina RegisterSeparation nuo vieno spot dažo iki N. Tint transformacija yra PostScript skaičiuotuvo Function Type 4, išvedanti tiesinį svertinį mišinį per pateiktą N x M matricą (n eilutė m stulpelis yra colorant n indėlis į AlternateCS kanalą m, kai colorant n vienas yra 1.0). Grąžina spalvų erdvės pavadinimą (DevN1, DevN2, ...) kuris valdo įprastą SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]) kanalą. AlternateCS priima DeviceGray, DeviceRGB arba DeviceCMYK; pavadinimai su tarpais ekranuojami į #20 pagal PDF 1.7 7.3.5; specialus pavadinimas None žymi nenaudojamą colorant vietą. Prieinama nuo HotPDF v2.47.0
  • Laisvos formos Gouraud šešėliuotas trikampių tinklas (PDF 1.3+ ISO 32000-1 8.7.4.5.4): THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) aprašo /ShadingType 4 srautą su /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, įdeda jį kaip eilutinį Pattern Type 2 įrašą puslapio Resources/Pattern žodyne ir grąžina automatiškai sugeneruotą modelio pavadinimą (Sh1, Sh2, ...) įprastam SetFillPattern / SetStrokePattern kanalui. Kiekviena viršūnė supakuojama kaip 1 flag baitas (visada 0 nepriklausomiems trikampiams) + 2 big-endian X baitai + 2 big-endian Y baitai + NumComponents 8 bitų spalvų komponentai. NumComponents argumentas priima 1 (DeviceGray), 3 (DeviceRGB) arba 4 (DeviceCMYK); kiekviena viršūnė į Vertices (X, Y, c1...cN) tvarka prideda 2 + NumComponents Extended reikšmes; viršūnių skaičius turi būti 3 kartotinis. /Decode 16 bitų koordinates grąžina į [XMin, XMax] x [YMin, YMax], o spalvų komponentus į [0, 1]. 5 tipas (lattice), 6 tipas (Coons patch) ir 7 tipas (tensor product) tinklelių šešėliavimai lieka būsimam darbui. Prieinama nuo HotPDF v2.48.0
  • Lattice formos Gouraud šešėliuotas trikampių tinklas (PDF 1.3+ ISO 32000-1 8.7.4.5.5): THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) aprašo /ShadingType 5 srautą, kuris viršūnes išdėsto M eilučių x N stulpelių gardelėje ir leidžia renderintojui automatiškai trianguliuoti kiekvieną gretimų eilučių porą į triangle strip. Skirtingai nuo RegisterFreeFormGouraudShading (Type 4), čia nėra per viršūnę skirto flag baito; /BitsPerFlag šešėliavimo žodyne nenurodytas, o kiekviena viršūnė užima tik 4 + NumComponents baitus (2 big-endian X + 2 big-endian Y + N spalvų komponentai). Šešėliavimo žodynas vietoj to turi privalomą /VerticesPerRow N įrašą. Naudokite jį šaltinio duomenims, kurie jau yra reguliariame mėginių tinklelyje (reljefas, FEA rezultatai, moksliniai šilumos žemėlapiai) - programa pateikia viršūnes eilučių tvarka, o renderavimo kanalas automatiškai sudeda triangle strip topologiją. VerticesPerRow turi būti bent 2, o bendras viršūnių skaičius turi būti VerticesPerRow kartotinis su bent dviem eilėmis. Prieinama nuo HotPDF v2.49.0
  • Coons patch tinklo šešėliavimas (PDF 1.3+ ISO 32000-1 8.7.4.5.6): THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) aprašo /ShadingType 6 Coons patch srautą, kurį riboja keturios kubinės Bezier kreivės ir kuriame kiekviename kampe yra po vieną spalvą. Renderintojas pritaiko Coons paviršių tarp keturių kraštų, taip gaunamas bet kaip lenktas spalvinis keturkampis - naudingas folijos ir metaliniams gradientams lenktuose takuose, iš SVG gautiems gradientų tinklams ir bet kuriam keturkampiui su lenktais kraštais, kuriam kitu atveju reikėtų daugybės mažų trikampių. Kiekvienas patchas prideda 12 valdymo taškų (24 X+Y Extended reikšmės, išdėstytos c1..c12 pagal laikrodį aplink ribą, c1 / c4 / c7 / c10 keturiuose kampuose, o likę 8 kaip vidiniai Bezier valdikliai), po kurių seka 4 kampų spalvos (4 * NumComponents Extended reikšmės), todėl Patches žingsnis yra 24 + 4 * NumComponents. Šešėliavimo žodynas turi tą pačią /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 kaip Type 4 (ir, skirtingai nuo Type 5, neturi /VerticesPerRow). Kiekvienas išvedamas patchas turi flag = 0 (nepriklausomas patchas); tęstinumo vėliavos 1 / 2 / 3 (krašto dalijimasis) šioje patogioje perkrovoje nenaudojamos. Prieinama nuo HotPDF v2.50.0
  • Separation spalvų erdvė su mėginiuotu LUT tint transformu (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2): THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) apgaubia RegisterSampledFunction, kad kviestinė pusė galėtų išreikšti visą nelinijinę tint -> alt-CS kreivę kaip plokščią 8 bitų (M-tūrio) mėginių baitų srautą, ranka nekuriant Function Type 0 žodyno. Naudokite LUT variantą, kai spalvos perėjimas yra nelinijinis - PANTONE Hexachrome stiliaus tint rampos, gama koreguotos tankio kreivės, ranka braižytos toninės kreivės, atitinkančios spaudos charakteristikas, sRGB į spot konvertavimo ICC LUT be visos ICC profilio mašinerijos; v2.45.0 RegisterSeparation įėjimo taškas vis dar dengia tiesinį vieno galo atvejį. AlternateCS priima DeviceGray, DeviceRGB arba DeviceCMYK; Samples ilgis turi būti teigiamas M kartotinis su bent 2 * M baitais, kad funkcija turėtų interpoliuojamą sritį, o gardelės taškų skaičius S nustatomas iš Length(Samples) / M. Tiesinė interpolacija yra numatytoji pagal PDF 1.7 /Order 1. Grąžina registruotos spalvų erdvės pavadinimą (Sep1, Sep2, ...) naudoti su įprastu SetFillColorSpace + SetFillColor([tint]) kanalu. Prieinama nuo HotPDF v2.53.0
  • 0 tipo (Sampled) funkcijos registravimas (PDF 1.3+ ISO 32000-1 7.10.2): THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) aprašo netiesioginį /FunctionType 0 srautą, kuris išreiškia bet kokį įėjimo į išvestį žemėlapį kaip reguliarią N matmenų gardelę iš M matmenų išvesties mėginių, interpoliuojamų tarp gardelės taškų. Naudokite jį ten, kur ICC profilio mašinerija yra per sunki, bet reikia ranka derinto spalvų LUT - toninėms kreivėms /TransferFunction (ExtGState /TR), mėginiuotoms tint transformacijoms /Separation / /DeviceN už tiesinių Type 2 / aritmetinių Type 4 kelių ribų, halftone slenksčių kreivėms arba bet kuriam kitam PDF konstruktui, kuris priima Function žodyną. Domain yra 2N įrašai (po vieną [min, max] porą kiekvienam įėjimo matmeniui); Range yra 2M įrašai (po vieną porą kiekvienam išvesties matmeniui); Size yra N gardelės taškų skaičiai; BitsPerSample priima 1, 2, 4, 8, 12, 16, 24 arba 32 pagal PDF 1.7 Table 38; Samples yra žalias bitais supakuotas mėginių srautas (MSB-first kiekvieno mėginio viduje, be tarpų tarp mėginių, išskyrus galinio baito nulinius užpildus, o įvestis 0 kinta greičiausiai pagal spec sample-order taisykles); Order pagal nutylėjimą yra 1 (linijinis) ir priima 3 (kubinės splainės interpolacija, nuo v2.54.0) pagal PDF 1.7 Table 38. HotPDF tikrina mėginio baitų skaičių pagal ceil(GridPoints * M * BitsPerSample / 8). Grąžina netiesioginį THPDFStreamObject, kad kviestinė pusė galėtų jį prijungti ten, kur tikimasi Function žodyno. Prieinama nuo HotPDF v2.52.0; kubinis /Order 3 + end-to-end kelių įėjimų / kelių išėjimų aprėptis nuo v2.54.0
  • Tensor product patch tinklo šešėliavimas (PDF 1.3+ ISO 32000-1 8.7.4.5.7): THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) aprašo /ShadingType 7 tensor-product patch srautą, kuriame kiekvienas patchas apibrėžtas viso 4 x 4 bicubic Bezier valdymo taškų tinklelio p[i][j] kartu su viena spalva kiekviename kampe. Išplečia RegisterCoonsPatchMesh (Type 6), pridėdamas 4 aiškius vidinius valdymo taškus (p[1][1], p[1][2], p[2][2], p[2][1]) virš 12 ribinių taškų, todėl vidinę patcho dalį galima valdyti tiksliau, nei leidžia Coons sujungtas pritaikymas. Naudinga SVG mesh-gradient grąžinimams ir bet kokiam kūriniui, kuriam reikia tensor-product Bezier paviršiaus. Kiekvienas patchas prideda 16 valdymo taškų (32 X+Y Extended reikšmės, išdėstytos pagal spec Table 88 srauto tvarką: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], tada 4 vidiniai taškai p[1][1], p[1][2], p[2][2], p[2][1]) po kurių seka 4 kampų spalvos (4 * NumComponents Extended reikšmės ties p[0][0] / p[0][3] / p[3][3] / p[3][0]), todėl Patches žingsnis yra 32 + 4 * NumComponents. Kiekvienas išvedamas patchas turi flag = 0 (nepriklausomas patchas). Su šiuo leidimu visa ISO 32000-1 8.7.4.5 tinklinių šešėliavimų šeima (tipai 4 / 5 / 6 / 7) dabar apimta. Prieinama nuo HotPDF v2.51.0
  • Anotacijos krašto stilius ir Popup susiejimas (PDF 1.7 12.5.4 / 12.5.6.14): THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) prideda /BS žodyną su pasirinktu THPDFAnnotBorderStyle (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) išveda /Popup anotaciją, kuri susiejama abiem kryptimis (parent /Popup -> popup, popup /Parent -> parent), kad žiūriklis galėtų pateikti kalbos burbulo jungtį. Nauja THPDFPage.LastAnnotation savybė leidžia naudoti bet kurį pagalbinį metodą nepakeičiant esamų Add*Annotation procedūrų parašo. Prieinama nuo HotPDF v2.34.0
  • Viešojo rakto saugos tvarkyklė (PDF 1.7 7.6.5): THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) išveda /Filter /Adobe.PubSec šifravimo žodyną (/SubFilter /adbe.pkcs7.s4 V=1 RC4-40 / /adbe.pkcs7.s5 V=2 RC4-128 / V=4 AESV2). Kviestinė pusė pateikia 20 baitų atsitiktinį seed ir po vieną PKCS#7 envelopedData dvejetainį blob'ą kiekvienam gavėjui (sukurtą išorėje su Windows CryptoAPI, OpenSSL arba pycryptodome). HotPDF išveda failo šifravimo raktą per 9 algoritmą (SHA-1 iš seed, sujungto su kiekvienu envelope) ir naudoja standartinį kiekvieno objekto raktų išvedimą AES-128 / RC4 srautams. Prieinama nuo HotPDF v2.33.0

Taip pat žr.