|
Dukungan Filter PDF
Ikhtisar
Stream PDF dan gambar tertanam mengidentifikasi encoding mereka melalui nama filter. HotPDF
terutama bekerja dengan keluarga filter berikut saat menghasilkan dokumen atau mendekode
konten eksternal
Filter umum
- FlateDecode: Filter kompresi utama untuk stream yang dihasilkan dan jalur dekompresi utama berbasis zlib
- LZWDecode: Didukung untuk skenario lawas dan kompatibilitas melalui HPDFLZW.pas
- DCTDecode: Dipakai untuk data gambar JPEG standar yang ditangani jalur pemuatan gambar HotPDF
- CCITTFaxDecode: Umum pada TIFF monokrom dan data gambar bergaya faks
- ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Helper encoder yang diekspos di HPDFTypes.pas (
_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) sejak HotPDF v2.4.0. Berguna saat membungkus konten biner arbitrer untuk kanal 7-bit atau untuk dukungan round-trip PDF 1.7 7.4 yang eksplisit
- JBIG2Decode / JPXDecode: Nama filter yang didefinisikan PDF 1.7 7.4.7 / 7.4.9. Helper JBIG2 dan JPEG 2000 bawaan HotPDF hanyalah stub yang melaporkan tidak didukung (mengembalikan
False) sampai backend OpenJPEG / JBIG2 nyata ditautkan. Build sebelumnya mengembalikan keberhasilan palsu 100×100 yang menghasilkan gambar tak terbaca; ini kini sudah diperbaiki
Catatan praktis
Filter umum
- FlateDecode: Filter kompresi utama untuk stream yang dihasilkan dan jalur dekompresi utama berbasis zlib
- LZWDecode: Didukung untuk skenario lawas dan kompatibilitas melalui HPDFLZW.pas
- DCTDecode: Dipakai untuk data gambar JPEG standar yang ditangani jalur pemuatan gambar HotPDF
- CCITTFaxDecode: Umum pada TIFF monokrom dan data gambar bergaya faks
- ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Helper encoder yang diekspos di HPDFTypes.pas (
_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) sejak HotPDF v2.4.0. Berguna saat membungkus konten biner arbitrer untuk kanal 7-bit atau untuk dukungan round-trip PDF 1.7 7.4 yang eksplisit
- JBIG2Decode / JPXDecode: Nama filter yang didefinisikan PDF 1.7 7.4.7 / 7.4.9. Helper JBIG2 dan JPEG 2000 bawaan HotPDF hanyalah stub yang melaporkan tidak didukung (mengembalikan
False) sampai backend OpenJPEG / JBIG2 nyata ditautkan. Build sebelumnya mengembalikan keberhasilan palsu 100×100 yang menghasilkan gambar tak terbaca; ini kini sudah diperbaiki
Catatan praktis
- Tidak semua filter diekspos melalui satu API generik; beberapa dijangkau lewat unit helper gambar atau stream khusus
- Untuk konten PDF yang dihasilkan, THotPDF.Compression tetap menjadi pengaturan utama yang terlihat oleh pengguna
- Saat memuat data eksternal, filter yang berlaku bergantung pada format file sumber dan class helper yang dipakai
- PDF terenkripsi menggabungkan filter ini dengan security handler; lihat CryptKeyLength untuk opsi AES‑128 yang didukung (V=4 R=4 / CFM=AESV2) dan RC4 (V=1/V=2)
- Field formulir interaktif dikeluarkan sebagai anotasi Widget yang digambar viewer; lihat Dukungan AcroForm
- Anotasi text-markup (Highlight, Underline, Squiggly, StrikeOut) dan link lompat antar-dokumen (
GoTo, GoToR, Launch) diekspos sebagai metode baru THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink sejak HotPDF v2.6.0
- Output DeviceCMYK tersedia melalui
THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; color space yang dikelola ICC didaftarkan dengan THotPDF.RegisterICCProfile dan diterapkan lewat SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor sejak HotPDF v2.7.0
- Set
THotPDF.UseXRefStream ke true sebelum menyimpan untuk mengeluarkan satu stream cross-reference /Type /XRef yang dikompresi FlateDecode alih-alih urutan tekstual xref / trailer / startxref (PDF 1.7 7.5.8); tersedia sejak HotPDF v2.8.0
- Set
THotPDF.EnableXMPMetadata ke true untuk melampirkan stream XMP /Type /Metadata /Subtype /XML ke Catalog (PDF 1.7 14.3.2); dibangun otomatis dari field Info dict, atau sediakan paket buatan tangan melalui CustomXMP. Tersedia sejak HotPDF v2.9.0
- Gating versi PDF per metode (sejak HotPDF v2.24.0). Setiap metode fitur yang diperkenalkan di v2.4.0+ memeriksa
RequirePDFVersion sebelum mengekspor; dengan StrictVersionLock=false (default) Version dokumen dinaikkan otomatis diam-diam ke minimum yang dibutuhkan fitur, dan dengan StrictVersionLock=true panggilan ditolak sehingga file yang disimpan benar-benar sesuai dengan spesifikasi referensi 1.3 / 1.4 / 1.5 / 1.6 / 1.7 yang dipilih
- Encoder predictor PNG dan TIFF untuk data gambar yang dikompresi FlateDecode (PDF 1.7 7.4.4.4):
_PNGPredictorEncode menerapkan heuristik filter minimum-absolute-difference libpng (Predictor=15), _TIFFPredictor2Encode menerapkan differencing horizontal (Predictor=2). Tersedia sejak HotPDF v2.10.0
- Titik masuk Tagged PDF (PDF 1.7 14.7-14.8):
THotPDF.Lang mengisi /Lang di Catalog, EnableTaggedPDF mengeluarkan /MarkInfo <</Marked true>> dan stub /StructTreeRoot, dan metode baru THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent menulis operator content-stream BMC / BDC / EMC. Tersedia sejak HotPDF v2.11.0
- Gradien aksial dan radial (PDF 1.7 7.10 / 8.7):
THotPDF.RegisterAxialGradient / RegisterRadialGradient membangun stack Function Type 2 / Shading Type 2-3 / Pattern Type 2 lengkap dan mengembalikan nama pattern yang stabil; THPDFPage.SetFillPattern / SetStrokePattern memasangnya ke halaman. Jumlah komponen warna awal / akhir memilih DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Tersedia sejak HotPDF v2.13.0; gradien aksial multi-stop lewat Function Type 3 diekspos melalui RegisterMultiStopAxialGradient sejak v2.18.0
- Gambar inline (PDF 1.7 8.9.7) melalui
THPDFPage.DrawInlineImage; byte mentah dibungkus otomatis dengan ASCIIHex bila tidak ada Filter sehingga content stream tetap bersih 7-bit. Tersedia sejak HotPDF v2.18.0
- OutputIntent (PDF 1.7 14.11) melalui
THotPDF.AddOutputIntent; setiap panggilan menambahkan dict /Type /OutputIntent ke Catalog dengan /DestOutputProfile opsional yang merujuk ke profil ICC terdaftar. Tersedia sejak HotPDF v2.18.0
- Pembuatan otomatis appearance stream AcroForm (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): set
THotPDF.AutoFormAppearances ke true sebelum menambahkan field formulir interaktif dan HotPDF akan membangun dulu Form XObject /Subtype /Form untuk entri /AP /N setiap widget (sub-dict Yes / Off untuk tombol), mengisi /DR default resources AcroForm dengan dict font indirect Helvetica / ZapfDingbats, dan mengubah /NeedAppearances menjadi false sehingga renderer menghormati stream tertanam. Tersedia sejak HotPDF v2.28.0
- ViewerPreferences /ViewArea dan /ViewClip (PDF 1.4 12.2 Table 152) kini diekspos melalui properti
THotPDF.ViewArea / THotPDF.ViewClip (dengan anggota set vpViewArea / vpViewClip yang cocok). Keduanya menerima nilai THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) dan melengkapi cakupan HotPDF atas empat ViewerPreferences batas-halaman PDF 1.4. Tersedia sejak HotPDF v2.29.0
- Transisi halaman (PDF 1.1 / 1.5 12.4.4):
THPDFPage.SetPageTransition menulis dictionary /Trans pada halaman sehingga pembaca PDF di /PageMode /FullScreen menganimasikan navigasi. Gaya PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) dan gaya PDF 1.5 (Fly, Push, Cover, Uncover, Fade) diekspos melalui enum THPDFTransitionStyle; sub-opsi pendamping /Dm, /M, dan /Di juga diekspos. THPDFPage.SetPageDuration menulis delay auto-advance /Dur dalam detik. Tersedia sejak HotPDF v2.30.0
- Grup transparansi tingkat halaman (PDF 1.4 11.6.6 / 7.5.5):
THPDFPage.SetTransparencyGroup menempelkan dictionary /Group (/Type /Group /S /Transparency) sehingga renderer mengomposisi konten yang membawa alpha dengan prediktif. Pilih device color space melalui enum THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK atau diabaikan), atau panggil THPDFPage.SetTransparencyGroupICC dengan nama profil ICC yang sebelumnya didaftarkan melalui THotPDF.RegisterICCProfile. Flag opsional /I (Isolated) dan /K (Knockout) mengarahkan compositor; THPDFPage.ClearTransparencyGroup menghapus entri yang sudah ditempel sebelumnya. Tersedia sejak HotPDF v2.32.0
- Pembaruan inkremental (PDF 1.7 ISO 32000-1 7.5.6):
THotPDF.BeginIncrementalUpdate(SourceFile) memuat PDF yang sudah ada dalam mode append-only; panggilan CreateIndirect* berikutnya otomatis menandai objek baru dirty, dan THotPDF.MarkDirty(Obj) menandai objek yang sudah ada dan dimuat untuk dieksekusi ulang. THotPDF.SaveIncrementalUpdate(TargetFile) menulis byte sumber asli secara verbatim, menambahkan hanya objek dirty dengan nomor objeknya dipertahankan, mengeluarkan subsection xref baru, dan diakhiri trailer yang membawa /Prev yang menunjuk ke xref sebelumnya. Gabungkan dengan pipeline AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex yang ada untuk menambahkan field tanda tangan berikutnya ke dokumen yang sudah ditandatangani tanpa membatalkan tanda tangan sebelumnya (digest /ByteRange-nya tetap valid karena tidak ada byte asli yang berubah). Tersedia sejak HotPDF v2.35.0
- Normalisasi nama font TrueType tertanam: HotPDF membaca tabel name TrueType tertanam dan menyelaraskan
/BaseFont, /FontDescriptor /FontName, /FontFamily, dan nama font CID turunan dengan nama PostScript program font. Ini menghindari kegagalan Adobe Acrobat Font Capture yang disebabkan oleh ketidaksesuaian antara dictionary font PDF dan payload TTF tertanam. Tersedia sejak HotPDF v2.35.1
- Subsetting font TrueType (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): set
THotPDF.EnableFontSubsetting ke true sebelum BeginDoc dan HotPDF membangun ulang payload TrueType tertanam agar hanya memuat glyph yang benar-benar dipakai dokumen. Dokumen Latin tipikal melihat pengurangan berat font tertanam sekitar 90% (Arial 1 MB -> sekitar 70 KB pada "Hello, world." satu baris). Dependensi glyph komposit dilacak secara rekursif, penomoran GID dipertahankan (sehingga content stream Type0 / Identity-H yang sudah ada tetap bekerja), dan /BaseFont baru otomatis mendapat prefiks enam huruf dengan suffix "+" yang diwajibkan spesifikasi (misalnya /BaseFont /AAAAAA+ArialMT). Default mati; aktifkan opt-in untuk mempertahankan penyematan font penuh pada alur kerja pengeditan. Tersedia sejak HotPDF v2.36.0
- Subsetter Format Font Compact (CFF) (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): pasangan bagi subsetter TrueType untuk OpenType-CFF (.otf, sfntVersion
OTTO) dan font Type 1 / Type 1C. Fungsi HPDFSubsetCFF(CFFBytes, KeepGlyph) yang diekspor unit membangun ulang CharStrings INDEX dengan glyph yang tidak dipertahankan diganti stub endchar 1-byte minimal, sambil mempertahankan penomoran GID byte-for-byte. Tersedia sejak HotPDF v2.37.0
- Penyematan OpenType-CFF (.otf) yang terhubung ke
StoreFont (PDF 1.6+ 9.7.4 Table 117). Saat binary font yang dimuat GDI berupa kontainer sfnt OTTO, HotPDF melakukan subset pada sub-tabel 'CFF ' tertanam melalui HPDFSubsetOTFContainer, mengeluarkan program font melalui /FontFile3 /Subtype /OpenType, dan menulis dictionary font turunan dengan /Subtype /CIDFontType0 alih-alih /CIDFontType2. Font TrueType terus melewati jalur /FontFile2 + /CIDFontType2 yang sudah ada tanpa perubahan perilaku. Tersedia sejak HotPDF v2.38.0
- Subseting subroutine CFF end-to-end (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): subsetter CFF sekarang membuang entri yang tidak dipakai dari BAIK Global Subr INDEX (berada tepat setelah String INDEX di binary CFF) maupun Local Subr INDEX (bersarang di bawah Private DICT, diakses lewat operator Top DICT 18 + operator Private DICT 19). Satu closure fixed-point mengikuti rantai
callsubr (op 0x0A) DAN callgsubr (op 0x1D) secara transitif, jadi CharString yang memanggil Local Subr yang memanggil Global Subr yang memanggil Local Subr lain akan tertangkap dalam satu iterasi. Setiap entri yang tidak dipakai diganti stub return 1 byte dan INDEX ditulis ulang di tempat dengan slack di ekor diisi nol. Perilaku ini diekspos melalui helper publik HPDFSubsetCFF dan HPDFSubsetOTFContainer; scanner CFF tingkat lebih rendah tetap internal. Tersedia sejak HotPDF v2.39.0
- Subseting CFF bertanda CID (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): subsetter CFF sekarang mengenali operator Top DICT
ROS (12-30) yang menandai font OpenType-CFF bertanda CID dan menelusuri INDEX FDArray (12-36) dari Font DICT, masing-masing membawa Private DICT + Local Subr INDEX sendiri. Peta glyph-ke-FD FDSelect (12-37) dipertahankan byte demi byte. Pemindaian closure subroutine melacak konteks FD dari setiap CharString yang dipertahankan sehingga glyph di FD #5 hanya menandai Local Subr di FD #5 - global subr tetap dibagi lintas FD. INDEX Local Subr setiap FD ditulis ulang di tempat dengan entri yang tidak dipakai dipadatkan menjadi stub return 1 byte. Font OTF CJK / Indic / Arab (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans, dan lain-lain) kini melalui pipeline subset penuh alih-alih disematkan apa adanya. Tersedia sejak HotPDF v2.40.0
- Stream Objek (PDF 1.5 ISO 32000-1 7.5.7): set
THotPDF.UseObjectStreams ke true bersama UseXRefStream dan SaveToStream akan mengemas objek indirek yang memenuhi syarat (semuanya kecuali stream, dictionary enkripsi, serta dictionary Catalog dan Info yang dirujuk trailer) ke dalam satu atau lebih stream kontainer /Type /ObjStm. Stream cross-reference kemudian mereferensikan objek yang sudah dikemas melalui entri tipe-2 (field-2 = nomor objek host ObjStm; field-3 = indeks entri di dalam stream). Ukuran file turun cukup besar pada PDF dengan banyak dictionary kecil (dokumen multi-halaman, anotasi, widget AcroForm, elemen struktur tree, layer Optional Content) - smoke 30 halaman hanya grafis menyusut dari 14502 menjadi 8488 byte (lebih kecil 41.5%). Diam-diam turun ke false ketika UseXRefStream mati (entri tipe-2 tidak dapat direpresentasikan dalam tabel xref tekstual menurut spesifikasi) atau ketika Version berada di bawah PDF 1.5. Tersedia sejak HotPDF v2.41.0
- Gambar soft-mask / SMask (PDF 1.4 ISO 32000-1 8.9.5.4):
THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) mengeluarkan XObject gambar warna plus XObject gambar soft-mask DeviceGray 8-bit dan menghubungkan cross-reference /SMask secara otomatis, sehingga setiap piksel dapat membawa transparansi penuh per kanal alih-alih batas biner nyala/mati dari jalur /ImageMask lawas. Overload praktis THotPDF.AddImageWithSMask32(Bitmap32) mengambil bidang RGB dan alpha dari TBitmap BGRA 32-bit untuk penyematan PNG dengan alpha dalam satu panggilan. Kedua titik panggil melewati RequirePDFVersion(pdf14) sehingga output mode ketat 1.3 tetap patuh. Tersedia sejak HotPDF v2.42.0
- Pengecatan Tiling Pattern tak berwarna (PDF 1.7 ISO 32000-1 8.6.6.1):
THotPDF.RegisterTilingPattern sudah menghasilkan /PaintType 1 (berwarna) dan /PaintType 2 (tak berwarna) sejak v2.19.0, tetapi urutan operator di sisi halaman yang cocok hanya benar untuk varian berwarna. Enam metode baru THPDFPage - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - sekarang menggerakkan jalur tak berwarna dengan mendaftarkan otomatis color space tinting [/Pattern /BaseCS] yang cocok di dictionary Resources/ColorSpace halaman dan mengeluarkan urutan tint_components /Pn scn yang diwajibkan spesifikasi. Gunakan SetFillPattern / SetStrokePattern asli untuk varian berwarna saat tile membawa warnanya sendiri. Tersedia sejak HotPDF v2.43.0
- Color space CIELab (PDF 1.3+ ISO 32000-1 8.6.5.3):
THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) membangun array color space inline [/Lab << /WhitePoint /BlackPoint /Range >>], menyimpannya di bawah nama yang dibuat otomatis (Lab1, Lab2, ...) dan mengembalikan nama itu untuk dipakai bersama pipeline biasa THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]). Gunakan iluminan D50 [0.9505, 1.0, 1.089] untuk alur kerja cetak ICC atau iluminan D65 [0.95047, 1.0, 1.08883] untuk tampilan setara sRGB, lalu gambar dengan L* di [0..100] dan a*, b* di rentang yang dipilih (biasanya [-128..127]). Tersedia sejak HotPDF v2.44.0
- Color space Separation untuk spot color (PDF 1.3+ ISO 32000-1 8.6.6.4):
THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) mendeklarasikan tinta spot satu komponen yang operand tint tunggalnya di [0..1] menggerakkan transformasi tint Function Type 2 linear yang dibangun internal. Gunakan nama yang dikembalikan (Sep1, Sep2, ...) dengan pipeline biasa SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). AlternateCS menerima DeviceGray, DeviceRGB atau DeviceCMYK; TintC1 menyediakan komponen alt-CS saat tint = 1.0. Nama Pantone dan tinta lain yang mengandung spasi diterima langsung - HotPDF meng-escape-nya menjadi #20 menurut PDF 1.7 7.3.5 saat menulis nama color space. Tersedia sejak HotPDF v2.45.0
- Stream appearance teks multi-baris dan comb AcroForm (PDF 1.7 ISO 32000-1 12.7.4.3): saat
THotPDF.AutoFormAppearances aktif, field teks yang Flags-nya mencakup ffMultiline mendapat Form XObject /AP /N dengan word-wrap (Td + T* + tata letak leading /TL, menghormati pemisah CR / LF / CRLF dan memotong pada jumlah baris yang terlihat). Field yang Flags-nya mencakup ffComb bersama MaxLen positif merender setiap karakter ke sel lebar sama miliknya sendiri dengan matriks Tm absolut per glyph. Tata letak satu baris dari v2.28.0 dipertahankan byte demi byte untuk field tanpa flag tersebut. Karakter internasional pada nilai awal tetap diteruskan ke jalur recompute /NeedAppearances milik viewer - pembuatan appearance berbasis CID font tertanam penuh masih pekerjaan masa depan. Tersedia sejak HotPDF v2.46.0
- Font Unicode /AP AcroForm (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3):
THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) mendaftarkan font komposit Type 0 / CIDFontType2 + Identity-H yang disediakan pemanggil di dict default-resource AcroForm /DR/Font. Setelah terdaftar, /DA tingkat AcroForm, /DA setiap widget Tx, dan stream /AP /N yang dihasilkan AutoFormAppearances untuk nilai awal Tx non-ASCII semuanya beralih ke nama logis; sub-dict /Resources/Font pada Form XObject juga mereferensikan font indirek yang sama sehingga AP berdiri sendiri tanpa bergantung pada resolusi /DR saat render. Helper pendamping THotPDF.CreateIndirectFontDict mengembalikan THPDFDictionaryObject kosong baru yang terdaftar sebagai objek PDF indirek sehingga pemanggil dapat membangun font dict kustom (atau dictionary lain yang memerlukan serialisasi indirek "N G R") tanpa menyentuh helper internal. Berikan LogicalName kosong dan nil FontDict untuk kembali ke perilaku /Helv ASCII-only v2.46.0. Field Tx ASCII terus memakai /Helv dengan output byte-identik terhadap v2.46.0 / v2.55.0. AP non-ASCII multi-baris + comb dan shaping bidi RTL (UAX #9 + penggabungan kontekstual Arab) masih pekerjaan masa depan. Tersedia sejak HotPDF v2.56.0; dukungan AP non-ASCII ffMultiline (hex Tj UTF-16BE per baris dengan leading Td / T* / /TL dan word-wrap sadar CJK) sejak v2.57.0; dukungan AP non-ASCII ffComb (sel Tm absolut lebar sama per CID + Tj sel tunggal per code point dengan penanganan pasangan surrogate UTF-16) sejak v2.58.0; properti THotPDF.FormUnicodeRTL untuk arah kanan-ke-kiri (membalik urutan UTF-16 dalam hex Tj /AP sambil mempertahankan /V dalam urutan logis; pemanggil melakukan pra-pembentukan Arab ke bentuk presentasi Unicode U+FB50..U+FDFF + U+FE70..U+FEFF; shaping UAX #9 penuh + GSUB otomatis masih menunggu) sejak v2.59.0
- Widget Tx rich-text AcroForm (PDF 1.5+ ISO 32000-1 12.7.4.3 + Annex L):
THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) menghasilkan widget teks dengan /RV (body XHTML rich-text), /DS (default style mirip CSS), flag bit 26 ffRichText pada /Ff yang di-OR otomatis, plus fallback teks polos /V + /DV yang dipakai pembaca yang tidak mem-parsing /RV. Acrobat dan Foxit merender langsung dari /RV saat bit RichText aktif, mengambil fallback font dari font Unicode yang terpasang di pembaca - jadi konten multi-byte (CJK / Cyrillic / Arab / Latin beraksen) tampil benar tanpa HotPDF menyematkan font CID di Resources /DR. Baik /V maupun /RV mendeteksi otomatis input multi-byte dan beralih ke encoding string hex UTF-16BE (BOM FE FF + code unit big-endian) saat diperlukan. Pembuatan stream appearance font CID untuk jalur /AP milik HotPDF sendiri masih pekerjaan masa depan; viewer yang sadar rich text tidak membutuhkannya. Tersedia sejak HotPDF v2.55.0
- Color space DeviceN untuk alur kerja spot-ink multi-colorant (PDF 1.3+ ISO 32000-1 8.6.6.5):
THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) menggeneralisasi RegisterSeparation dari satu spot ink menjadi N. Transformasi tint adalah Function Type 4 kalkulator PostScript yang mengeluarkan weighted-blend linear di atas matriks N x M yang diberikan (baris n kolom m adalah kontribusi colorant n ke kanal m AlternateCS saat colorant n sendiri bernilai 1.0). Mengembalikan nama color space (DevN1, DevN2, ...) yang menggerakkan pipeline biasa SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]). AlternateCS menerima DeviceGray, DeviceRGB atau DeviceCMYK; nama tinta dengan spasi di-escape ke #20 menurut PDF 1.7 7.3.5; nama khusus None menandai slot colorant yang tidak terpakai. Tersedia sejak HotPDF v2.47.0
- Mesh segitiga Gouraud bebas (PDF 1.3+ ISO 32000-1 8.7.4.5.4):
THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) mendeklarasikan stream /ShadingType 4 dengan /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, membungkusnya dalam entri Pattern Type 2 inline pada dictionary Resources/Pattern halaman, dan mengembalikan nama pattern yang dibuat otomatis (Sh1, Sh2, ...) untuk pipeline biasa SetFillPattern / SetStrokePattern. Setiap vertex dikemas sebagai 1 byte flag (selalu 0 untuk segitiga independen) + 2 byte X big-endian + 2 byte Y big-endian + komponen warna 8-bit NumComponents. Argumen NumComponents menerima 1 (DeviceGray), 3 (DeviceRGB) atau 4 (DeviceCMYK); setiap vertex menyumbang 2 + NumComponents nilai Extended ke Vertices dalam urutan (X, Y, c1...cN); jumlah vertex harus kelipatan 3. /Decode memetakan koordinat 16-bit kembali ke [XMin, XMax] x [YMin, YMax] dan komponen warna ke [0, 1]. Mesh shading Type 5 (lattice), Type 6 (Coons patch), dan Type 7 (tensor product) masih pekerjaan masa depan. Tersedia sejak HotPDF v2.48.0
- Mesh segitiga Gouraud bentuk lattice (PDF 1.3+ ISO 32000-1 8.7.4.5.5):
THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) mendeklarasikan stream /ShadingType 5 yang menyusun vertex dalam lattice baris M x kolom N dan membiarkan renderer men-triangulasi otomatis setiap pasangan baris yang berdekatan menjadi triangle strip. Tidak seperti RegisterFreeFormGouraudShading (Type 4), tidak ada byte flag per vertex; /BitsPerFlag tidak ada dari dictionary shading dan setiap vertex hanya menempati 4 + NumComponents byte (2 X big-endian + 2 Y big-endian + N komponen warna). Dictionary shading sebagai gantinya membawa entri wajib /VerticesPerRow N. Gunakan untuk data sumber yang sudah berada pada grid sampel reguler (terrain, hasil FEA, heatmap ilmiah) - aplikasi menyediakan vertex dalam urutan row-major dan pipeline rendering menyusun topologi triangle strip secara otomatis. VerticesPerRow harus minimal 2 dan jumlah vertex total harus kelipatan VerticesPerRow dengan setidaknya dua baris. Tersedia sejak HotPDF v2.49.0
- Shading mesh Coons patch (PDF 1.3+ ISO 32000-1 8.7.4.5.6):
THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) mendeklarasikan stream /ShadingType 6 berisi patch Coons, masing-masing dibatasi empat kurva Bezier kubik dan membawa satu warna per sudut. Renderer menyesuaikan permukaan Coons di antara keempat sisi, menghasilkan quad berwarna dengan kurva bebas - berguna untuk gradien foil dan metalik pada jalur yang bengkok, mesh gradien turunan SVG, dan quad apa pun dengan sisi melengkung yang sebaliknya memerlukan banyak segitiga kecil untuk didekati. Setiap patch menyumbang 12 control point (24 nilai Extended X+Y, diurutkan c1..c12 searah jarum jam mengelilingi batas dengan c1 / c4 / c7 / c10 di keempat sudut dan 8 sisanya sebagai handle Bezier dalam) diikuti 4 warna sudut (4 * NumComponents nilai Extended), sehingga stride Patches adalah 24 + 4 * NumComponents. Dictionary shading membawa /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 yang sama seperti Type 4 (dan tidak seperti Type 5, /VerticesPerRow tidak ada). Setiap patch yang dikeluarkan membawa flag = 0 (patch independen); flag kelanjutan 1 / 2 / 3 (berbagi sisi) tidak diekspos dalam overload praktis ini. Tersedia sejak HotPDF v2.50.0
- Color space Separation dengan tint transform LUT tersampel (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2):
THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) membungkus RegisterSampledFunction sehingga pemanggil dapat mengekspresikan kurva tint -> alt-CS non-linear penuh sebagai stream byte datar sampel 8-bit (M-tuple) tanpa membangun dictionary Function Type 0 secara manual. Gunakan varian LUT saat transisi warna bersifat non-linear - ramp tint ala PANTONE Hexachrome, kurva densitas yang dikoreksi gamma, kurva nada buatan tangan yang sesuai karakterisasi press, LUT ICC konversi sRGB-ke-spot tanpa mesin profil ICC penuh; entry point RegisterSeparation v2.45.0 masih menangani kasus linear satu endpoint. AlternateCS menerima DeviceGray, DeviceRGB atau DeviceCMYK; panjang Samples harus kelipatan positif dari M dengan setidaknya 2 * M byte agar fungsi memiliki rentang yang dapat diinterpolasi, dan jumlah grid-point S diinfer dari Length(Samples) / M. Interpolasi linear adalah default menurut PDF 1.7 /Order 1. Mengembalikan nama color space terdaftar (Sep1, Sep2, ...) untuk dipakai bersama pipeline biasa SetFillColorSpace + SetFillColor([tint]). Tersedia sejak HotPDF v2.53.0
- Registrasi Function Type 0 (Sampled) (PDF 1.3+ ISO 32000-1 7.10.2):
THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) mendeklarasikan stream indirek /FunctionType 0 yang mengekspresikan pemetaan input-ke-output arbitrer sebagai grid reguler N-dimensional dari sampel output M-dimensional, yang diinterpolasi di antara titik grid. Gunakan saat mesin profil ICC berlebihan tetapi LUT warna yang disetel manual diinginkan - kurva nada untuk /TransferFunction (ExtGState /TR), transformasi tint tersampel untuk /Separation / /DeviceN di luar jalur linear Type 2 / arithmetic Type 4, kurva ambang halftone, atau konstruksi PDF lain yang memakai dictionary Function. Domain berisi 2N entri (satu pasangan [min, max] per dimensi input); Range berisi 2M entri (satu pasangan per dimensi output); Size adalah jumlah titik grid N; BitsPerSample menerima 1, 2, 4, 8, 12, 16, 24, atau 32 per PDF 1.7 Table 38; Samples adalah stream sampel mentah yang dikemas bit (MSB-first di dalam tiap sampel, tanpa padding antar sampel selain zero-fill byte terakhir, dengan input 0 bervariasi paling cepat menurut aturan urutan sampel spesifikasi); Order default ke 1 (linear) dan menerima 3 (interpolasi cubic-spline, sejak v2.54.0) menurut PDF 1.7 Table 38. HotPDF memvalidasi jumlah byte sampel terhadap ceil(GridPoints * M * BitsPerSample / 8). Mengembalikan THPDFStreamObject indirek sehingga pemanggil dapat menautkannya di mana pun dictionary Function diharapkan. Tersedia sejak HotPDF v2.52.0; /Order 3 cubic + cakupan multi-input / multi-output end-to-end sejak v2.54.0
- Shading mesh patch product tensor (PDF 1.3+ ISO 32000-1 8.7.4.5.7):
THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) mendeklarasikan stream /ShadingType 7 berisi patch tensor-product, masing-masing didefinisikan oleh grid 4 x 4 penuh control point Bezier kubik p[i][j] plus satu warna per sudut. Memperluas RegisterCoonsPatchMesh (Type 6) dengan menambahkan 4 control point interior eksplisit (p[1][1], p[1][2], p[2][2], p[2][1]) di atas 12 titik batas, memberi kontrol interior patch yang lebih halus daripada fit Coons-blended yang dapat diekspresikan. Berguna untuk round-trip gradien mesh SVG dan karya apa pun yang memerlukan permukaan Bezier tensor-product. Setiap patch menyumbang 16 control point (32 nilai Extended X+Y, diurutkan menurut stream order Table 88 spesifikasi: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], lalu 4 titik interior p[1][1], p[1][2], p[2][2], p[2][1]) diikuti 4 warna sudut (4 * NumComponents nilai Extended pada p[0][0] / p[0][3] / p[3][3] / p[3][0]), sehingga stride Patches adalah 32 + 4 * NumComponents. Setiap patch yang dikeluarkan membawa flag = 0 (patch independen). Dengan rilis ini, seluruh keluarga mesh shading ISO 32000-1 8.7.4.5 (Types 4 / 5 / 6 / 7) kini tercakup. Tersedia sejak HotPDF v2.51.0
- Border style anotasi dan keterkaitan Popup (PDF 1.7 12.5.4 / 12.5.6.14):
THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) menempelkan dictionary /BS dengan THPDFAnnotBorderStyle yang dipilih (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) menghasilkan anotasi /Popup yang dihubungkan dua arah (parent /Popup -> popup, popup /Parent -> parent) sehingga viewer dapat merender konektor balon percakapan. Properti baru THPDFPage.LastAnnotation memberi salah satu helper tanpa mengubah signature prosedur Add*Annotation yang sudah ada. Tersedia sejak HotPDF v2.34.0
- Pengendali Keamanan Public-Key (PDF 1.7 7.6.5):
THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) menghasilkan dictionary enkripsi /Filter /Adobe.PubSec (/SubFilter /adbe.pkcs7.s4 untuk V=1 RC4-40 / /adbe.pkcs7.s5 untuk V=2 RC4-128 / V=4 AESV2). Pemanggil menyediakan seed acak 20 byte dan satu blob biner PKCS#7 envelopedData per penerima (dibangun di luar dengan Windows CryptoAPI, OpenSSL, atau pycryptodome). HotPDF menurunkan kunci enkripsi file melalui algoritma 9 (SHA-1 dari seed yang digabungkan dengan setiap envelope) dan memakai kembali derivasi kunci per objek standar untuk stream AES-128 / RC4. Tersedia sejak HotPDF v2.33.0
Lihat juga
|