|
Obsługa filtrów PDF
Omówienie
Strumienie PDF i osadzone obrazy wskazują swoje kodowanie przez nazwy filtrów. Podczas
generowania dokumentów lub dekodowania zawartości zewnętrznej HotPDF korzysta głównie
z następujących rodzin filtrów.
Typowe filtry
- FlateDecode: Główny filtr kompresji dla generowanych strumieni i podstawowa ścieżka dekompresji oparta na zlib
- LZWDecode: Obsługiwany przez HPDFLZW.pas w scenariuszach starszych i zgodnościowych
- DCTDecode: Używany dla standardowych danych obrazów JPEG obsługiwanych przez ścieżki ładowania obrazów HotPDF
- CCITTFaxDecode: Częsty w monochromatycznych danych TIFF i obrazach typu faksowego
- ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Pomocnicze kodery udostępnione w HPDFTypes.pas (
_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) od HotPDF v2.4.0. Przydatne przy opakowywaniu dowolnej zawartości binarnej dla kanałów 7-bitowych albo do jawnej obsługi pełnego przejścia PDF 1.7 7.4
- JBIG2Decode / JPXDecode: nazwy filtrów zdefiniowane w PDF 1.7 7.4.7 / 7.4.9. HotPDF kieruje strumienie obrazów JPXDecode i pliki JPEG 2000 przez dekoder JPEG2000 oparty na OpenJPEG, po czym osadza wynik z kompresją wybraną przez wywołującego. Wyjście bilevel JBIG2 i załadowane ścieżki obrazów JBIG2Decode używają natywnego potoku enkodera i dekodera JBIG2, łącznie ze sterowaniem słownikiem symboli, segmentem globalnym, poziomem lossy i filtrowaniem czarnych kropek
Uwagi praktyczne
- Nie każdy filtr jest udostępniany przez jedno ogólne API; do części dochodzi się przez wyspecjalizowane jednostki pomocnicze dla obrazów lub strumieni
- Dla generowanej zawartości PDF THotPDF.Compression pozostaje głównym ustawieniem widocznym dla użytkownika
- Przy ładowaniu danych zewnętrznych właściwy filtr zależy od formatu pliku źródłowego i używanej klasy pomocniczej
- Zaszyfrowane PDF-y łączą te filtry z mechanizmem zabezpieczeń; obsługiwane opcje AES‑128 (V=4 R=4 / CFM=AESV2) i RC4 (V=1/V=2) opisuje CryptKeyLength
- Zarezerwowane polityki crypt-filter można wybierać niezależnie dla ciągów, zwykłych strumieni i strumieni plików osadzonych przez
ConfigureCryptFilterDefaults. Zabezpieczenie hasłem przyjmuje StdCF albo Identity, a zabezpieczenie kluczem publicznym -- DefaultCryptFilter albo Identity. SetStreamCryptFilter dodaje albo czyści jawny wiodący filtr Crypt, nie ruszając istniejącego potoku dekodowania. Nadpisania per strumień wymagają słownika szyfrowania /V 4 albo nowszego - Opakowania zaszyfrowanych payloadów utrzymują widoczność zwykłych strumieni stron, chroniąc metadane i bajty plików osadzonych filtrem crypt
EFOpen, z jawnymi API inspekcji i odblokowania załadowanego dokumentu dostępnymi od HotPDF v2.715.0 - Zahasłowane strumienie załączników używają
/EFF i dostają jawny filtr Crypt, gdy /EFF różni się od /StmF. Jawne filtry strumieni zaszyfrowane kluczem publicznym fail-closed, bo wymagają koperty odbiorcy właściwego dla strumienia - Załadowane dokumenty wystawiają oryginalną politykę
/CF, /StrF, /StmF i /EFF, łącznie z czułymi na wielkość liter zewnętrznymi filtrami nazwanymi, jawnym albo pominiętym /CFM /None, zdarzeniami uwierzytelniania i efektywną długością klucza przez THPDFCryptFilterInfo. Długości filtrów V2 standardowego handlera czytane są w bajtach, długości filtrów V2 klucza publicznego -- w bitach, a akceptowane są tylko klucze V2 40- i 128-bit. Kontenery object-stream w czystym tekście wciąż deszyfrują zapakowane ciągi członków przez /StrF, a kontenery zaszyfrowane omijają drugi deszyfr członka. Aktualizacje przyrostowe zachowują załadowaną politykę. Dostępne od HotPDF v2.675.0 - Interaktywne pola formularza są emitowane jako adnotacje Widget malowane przez przeglądarkę; zobacz obsługę AcroForm
- Adnotacje znaczników tekstu (Highlight, Underline, Squiggly, StrikeOut) oraz łącza skoków wewnątrz dokumentu (
GoTo, GoToR, Launch) są od HotPDF v2.6.0 dostępne jako nowe metody THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink
- Wyjście DeviceCMYK jest dostępne przez
THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; przestrzenie barw zarządzane przez ICC rejestruje THotPDF.RegisterICCProfile i stosuje przez SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor od HotPDF v2.7.0
- Ustaw
THotPDF.UseXRefStream na true przed zapisem, aby wyemitować pojedynczy, skompresowany FlateDecode strumień odsyłaczy /Type /XRef zamiast tekstowej sekwencji xref / trailer / startxref (PDF 1.7 7.5.8); dostępne od HotPDF v2.8.0
- Ustaw
THotPDF.EnableXMPMetadata na true, aby dołączyć do Catalog strumień XMP /Type /Metadata /Subtype /XML (PDF 1.7 14.3.2); jest budowany automatycznie z pól słownika Info albo można podać ręcznie przygotowany pakiet przez CustomXMP. Dostępne od HotPDF v2.9.0
- Bramkowanie wersji PDF na poziomie metod (od HotPDF v2.24.0). Każda metoda funkcji wprowadzona w v2.4.0+ sprawdza
RequirePDFVersion przed emisją; przy StrictVersionLock=false (domyślnie) Version dokumentu jest po cichu podnoszony do minimum wymaganego przez funkcję, a przy StrictVersionLock=true wywołanie jest odrzucane, aby zapisany plik ściśle odpowiadał wybranej specyfikacji referencyjnej 1.3 / 1.4 / 1.5 / 1.6 / 1.7
- Kodery predyktorów PNG i TIFF dla danych obrazu skompresowanych przez FlateDecode (PDF 1.7 7.4.4.4):
_PNGPredictorEncode stosuje heurystykę filtra libpng opartą na minimalnej różnicy bezwzględnej (Predictor=15), a _TIFFPredictor2Encode stosuje różnicowanie poziome (Predictor=2). Dostępne od HotPDF v2.10.0
- Punkty wejścia Tagged PDF (PDF 1.7 14.7-14.8):
THotPDF.Lang wypełnia /Lang w Catalog, EnableTaggedPDF emituje /MarkInfo <</Marked true>> oraz stub /StructTreeRoot, a nowe metody THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent zapisują operatory strumienia zawartości BMC / BDC / EMC. Dostępne od HotPDF v2.11.0
- Gradienty osiowe i radialne (PDF 1.7 7.10 / 8.7):
THotPDF.RegisterAxialGradient / RegisterRadialGradient budują pełny stos Function Type 2 / Shading Type 2-3 / Pattern Type 2 i zwracają stabilną nazwę wzoru; THPDFPage.SetFillPattern / SetStrokePattern instalują go na stronie. Liczba komponentów koloru start / końcowy wybiera DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Dostępne od HotPDF v2.13.0; gradienty wielostopniowe Function Type 3 są wystawione przez RegisterMultiStopAxialGradient od v2.18.0 i RegisterMultiStopRadialGradient od v2.686.0
- Obrazy inline (PDF 1.7 8.9.7) przez
THPDFPage.DrawInlineImage; surowe bajty są automatycznie opakowywane ASCIIHex, gdy nie podano Filter, dzięki czemu strumień zawartości pozostaje czysty 7-bitowo. Dostępne od HotPDF v2.18.0
- OutputIntents (PDF 1.7 14.11) przez
THotPDF.AddOutputIntent; każde wywołanie dopisuje do Catalog słownik /Type /OutputIntent z opcjonalnym /DestOutputProfile wskazującym zarejestrowany profil ICC. Dostępne od HotPDF v2.18.0
- Automatyczne generowanie strumieni wyglądu AcroForm (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): ustaw
THotPDF.AutoFormAppearances na true przed dodaniem interaktywnych pól formularza, a HotPDF wstępnie zbuduje Form XObject /Subtype /Form dla wpisu /AP /N każdego widgetu (podsłowniki Yes / Off dla przycisków), wypełni domyślne zasoby AcroForm /DR pośrednimi słownikami fontów Helvetica / ZapfDingbats i przełączy /NeedAppearances na false, aby renderery respektowały osadzone strumienie. Dostępne od HotPDF v2.28.0
- ViewerPreferences /ViewArea i /ViewClip (PDF 1.4 12.2 Table 152) są teraz dostępne przez właściwości
THotPDF.ViewArea / THotPDF.ViewClip (z odpowiadającymi im elementami zestawu vpViewArea / vpViewClip). Obie przyjmują wartości THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) i uzupełniają obsługę czterech granic strony ViewerPreferences z PDF 1.4. Dostępne od HotPDF v2.29.0
- Przejścia stron (PDF 1.1 / 1.5 12.4.4):
THPDFPage.SetPageTransition zapisuje na stronie słownik /Trans, aby czytniki PDF w trybie /PageMode /FullScreen animowały nawigację. Style PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) i style PDF 1.5 (Fly, Push, Cover, Uncover, Fade) są udostępniane przez enumerację THPDFTransitionStyle; dostępne są też opcje towarzyszące /Dm, /M i /Di. THPDFPage.SetPageDuration zapisuje opóźnienie automatycznego przejścia /Dur w sekundach. Dostępne od HotPDF v2.30.0
- Grupa przezroczystości na poziomie strony (PDF 1.4 11.6.6 / 7.5.5):
THPDFPage.SetTransparencyGroup dołącza słownik /Group (/Type /Group /S /Transparency), aby renderery przewidywalnie kompozytowały zawartość z alfa. Wybierz przestrzeń barw urządzenia przez enumerację THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK albo pomiń) lub wywołaj THPDFPage.SetTransparencyGroupICC z nazwą profilu ICC wcześniej zarejestrowanego przez THotPDF.RegisterICCProfile. Opcjonalne flagi /I (Isolated) i /K (Knockout) sterują kompozytorem; THPDFPage.ClearTransparencyGroup usuwa wcześniej dołączony wpis. Dostępne od HotPDF v2.32.0
- Aktualizacja przyrostowa (PDF 1.7 ISO 32000-1 7.5.6):
THotPDF.BeginIncrementalUpdate(SourceFile) ładuje istniejący PDF w trybie tylko dopisywania; późniejsze wywołania CreateIndirect* automatycznie oznaczają nowe obiekty jako dirty, a THotPDF.MarkDirty(Obj) oznacza wcześniej załadowane obiekty do ponownej emisji. THotPDF.SaveIncrementalUpdate(TargetFile) zapisuje oryginalne bajty źródłowe bez zmian, dopisuje wyłącznie obiekty dirty z zachowanymi numerami obiektów, emituje nową podsekcję xref i kończy trailerem z /Prev wskazującym poprzedni xref. Połącz to z istniejącym potokiem AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex, aby dodać kolejne pola podpisu do już podpisanego dokumentu bez unieważniania wcześniejszych podpisów (ich skróty /ByteRange pozostają poprawne, bo żaden z oryginalnych bajtów się nie zmienia). Dostępne od HotPDF v2.35.0
- Normalizacja nazw osadzonych fontów TrueType: HotPDF odczytuje osadzoną tabelę nazw TrueType i wyrównuje
/BaseFont, /FontDescriptor /FontName, /FontFamily oraz nazwy potomnych fontów CID z nazwą PostScript programu fontu. Zapobiega to awariom Adobe Acrobat Font Capture spowodowanym niezgodnością między słownikiem fontu PDF a osadzonym ładunkiem TTF. Dostępne od HotPDF v2.35.1
- Podzbiory fontów TrueType (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): ustaw
THotPDF.EnableFontSubsetting na true przed BeginDoc, a HotPDF przebuduje osadzony ładunek TrueType tak, aby zawierał tylko glify faktycznie użyte w dokumencie. Typowe dokumenty łacińskie uzyskują około 90% redukcji masy osadzonego fontu (1 MB Arial -> ~70 KB w jednowierszowym "Hello, world."). Zależności glifów złożonych są śledzone rekurencyjnie, numeracja GID jest zachowywana (więc istniejące strumienie zawartości Type0 / Identity-H nadal działają), a nowy /BaseFont automatycznie otrzymuje wymagany przez specyfikację sześcioliterowy prefiks zakończony "+" (np. /BaseFont /AAAAAA+ArialMT). Domyślnie wyłączone; włączaj świadomie, aby zachować osadzanie pełnych fontów w przepływach edycyjnych. Dostępne od HotPDF v2.36.0
- Moduł tworzenia podzbiorów Compact Font Format (CFF) (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): uzupełnienie podzbiorów TrueType dla fontów OpenType-CFF (.otf, sfntVersion
OTTO) oraz Type 1 / Type 1C. Eksportowana przez jednostkę funkcja HPDFSubsetCFF(CFFBytes, KeepGlyph) przebudowuje CharStrings INDEX, zastępując niepozostawiane glify minimalnym 1-bajtowym stubem endchar i zachowując numerację GID bajt w bajt. Dostępne od HotPDF v2.37.0
- Ścieżka osadzania OpenType-CFF (.otf) podłączona do
StoreFont (PDF 1.6+ 9.7.4 Table 117). Gdy binarium fontu załadowane przez GDI jest kontenerem sfnt OTTO, HotPDF tworzy podzbiór osadzonej podtabeli 'CFF ' przez HPDFSubsetOTFContainer, emituje program fontu przez /FontFile3 /Subtype /OpenType i zapisuje słownik fontu potomnego z /Subtype /CIDFontType0 zamiast /CIDFontType2. Fonty TrueType nadal przechodzą przez istniejącą ścieżkę /FontFile2 + /CIDFontType2 bez zmiany zachowania. Dostępne od HotPDF v2.38.0
- Kompletne tworzenie podzbiorów podprogramów CFF (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): moduł CFF usuwa teraz nieużywane wpisy zarówno z Global Subr INDEX (położonego bezpośrednio po String INDEX w binarium CFF), jak i z Local Subr INDEX (zagnieżdżonego pod Private DICT, osiąganego przez operator Top DICT 18 + operator Private DICT 19). Jedno domknięcie stałopunktowe przechodzi tranzytywnie po łańcuchach
callsubr (op 0x0A) i callgsubr (op 0x1D), więc CharString wywołujący Local Subr, który wywołuje Global Subr, który wywołuje kolejny Local Subr, zostaje wykryty w jednej iteracji. Każdy nieużywany wpis jest zastępowany 1-bajtowym stubem return, a INDEX jest przepisywany w miejscu z wyzerowaniem końcowego luzu. Zachowanie udostępniają publiczne pomocniki HPDFSubsetCFF i HPDFSubsetOTFContainer; skanery CFF niższego poziomu pozostają wewnętrzne. Dostępne od HotPDF v2.39.0
- Tworzenie podzbiorów CFF indeksowanych CID (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): moduł CFF rozpoznaje teraz operator Top DICT
ROS (12-30), który oznacza font OpenType-CFF indeksowany CID, i przechodzi po FDArray (12-36) INDEX słowników Font DICT, z których każdy niesie własny Private DICT + Local Subr INDEX. Mapa glif-do-FD FDSelect (12-37) jest zachowywana bajt w bajt. Skan domknięcia podprogramów śledzi kontekst FD każdego zachowanego CharString, więc glif w FD #5 oznacza tylko Local Subrs w FD #5, a globalne podprogramy pozostają współdzielone między FD. Local Subr INDEX każdego FD jest przepisywany w miejscu z nieużywanymi wpisami zwiniętymi do 1-bajtowych stubów return. Fonty OTF CJK / Indic / Arabic (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans itd.) przechodzą teraz przez pełny potok podzbiorów zamiast być osadzane bez zmian. Dostępne od HotPDF v2.40.0
- Strumienie obiektów (PDF 1.5 ISO 32000-1 7.5.7): ustaw
THotPDF.UseObjectStreams na true obok UseXRefStream, a SaveToStream spakuje kwalifikujące się obiekty pośrednie (wszystko poza strumieniami, słownikiem szyfrowania oraz słownikami Catalog i Info wskazywanymi przez trailer) do jednego lub większej liczby strumieni kontenerowych /Type /ObjStm. Strumień odsyłaczy wskazuje potem spakowane obiekty przez wpisy typu 2 (field-2 = numer obiektu hosta ObjStm; field-3 = indeks wpisu w strumieniu). Znacznie zmniejsza rozmiar pliku w PDF-ach z wieloma małymi słownikami (dokumenty wielostronicowe, adnotacje, widgety AcroForm, elementy drzewa struktury, warstwy Optional Content) - 30-stronicowy test graficzny zmniejsza się z 14502 do 8488 bajtów (o 41.5%). Cicho spada do false, gdy UseXRefStream jest wyłączone (wpisów typu 2 nie da się reprezentować w tekstowej tabeli xref zgodnie ze specyfikacją) albo gdy Version jest poniżej PDF 1.5. Dostępne od HotPDF v2.41.0
- Obraz soft-mask / SMask (PDF 1.4 ISO 32000-1 8.9.5.4):
THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) emituje XObject obrazu kolorowego plus 8-bitowy XObject obrazu soft-mask DeviceGray i automatycznie wiąże referencję krzyżową /SMask, więc każdy piksel może nieść pełną przezroczystość per kanał zamiast binarnego limitu on/off starej ścieżki /ImageMask. Overload wygodny THotPDF.AddImageWithSMask32(Bitmap32) wyciąga płaszczyzny RGB i alfy z 32-bitowego TBitmap BGRA dla osadzenia PNG-z-alfą jednym wywołaniem. AddImageWithTransparency i AddImageWithTransparency32 wystawiają ten sam workflow pod nazewnictwem skupionym na obrazie. Oba miejsca wywołania przepuszczają przez bramkę RequirePDFVersion(pdf14), więc wyjście 1.3 w trybie strict pozostaje zgodne. Dostępne od HotPDF v2.42.0 - Helpery wygodne dla masek obrazu:
AddImageAsMask emituje binarny /ImageMask, AddImageWithMask podpina powstałą maskę do obrazu kolorowego przez /Mask, a oba zwracają zwykłe indeksy obrazów dla THPDFPage.ShowImage - Sterowanie kompresją per obraz:
AddImageWithJpegQuality stosuje jakość JPEG jednym wywołaniem bez zmiany JpegQuality, a AddMonochromeImageAuto i icAutoMono wybierają Flate, CCITT Group 4 albo JBIG2 dla wejścia bitmapowego 1-bit
- Malowanie bezkolorowych wzorców kafelkowych (PDF 1.7 ISO 32000-1 8.6.6.1):
THotPDF.RegisterTilingPattern od v2.19.0 emituje zarówno /PaintType 1 (kolorowy), jak i /PaintType 2 (bezkolorowy), ale odpowiadająca sekwencja operatorów po stronie strony była poprawna tylko dla wariantu kolorowego. Sześć nowych metod THPDFPage - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - obsługuje teraz ścieżkę bezkolorową, automatycznie rejestrując pasującą przestrzeń barw tintingu [/Pattern /BaseCS] w słowniku strony Resources/ColorSpace i emitując wymaganą przez specyfikację sekwencję tint_components /Pn scn. Użyj oryginalnych SetFillPattern / SetStrokePattern dla wariantu kolorowego, w którym kafelek niesie własny kolor. Dostępne od HotPDF v2.43.0
- Kompletne renderowanie wzorów tiling stosuje teraz macierz wzoru względem domyślnego układu współrzędnych nadrzędnego strumienia treści, implementuje wszystkie trzy reguły rozmieszczania
/TilingType, obsługuje ujemne /XStep i /YStep, zaczyna każdą komórkę z izolowaną ścieżką, nakłada barwę bazową wzoru bezbarwnego na operacje fill i stroke oraz zachowuje ograniczone wykonanie wzorów zagnieżdżonych. Rozszerzony overload RegisterTilingPattern oraz właściwości THPDFTilingPatternBuilder.TilingType / Matrix wystawiają te same zwalidowane sterowania dla generowanych PDF-ów. Dostępne od HotPDF v2.542.0 - Przestrzeń barw CIELab (PDF 1.3+ ISO 32000-1 8.6.5.3):
THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) buduje inline tablicę przestrzeni barw [/Lab << /WhitePoint /BlackPoint /Range >>], zapisuje ją pod automatycznie wygenerowaną nazwą (Lab1, Lab2, ...) i zwraca tę nazwę do użycia ze zwykłym potokiem THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]). Podaj iluminant D50 [0.9505, 1.0, 1.089] dla przepływów druku ICC albo iluminant D65 [0.95047, 1.0, 1.08883] dla wyświetlania równoważnego sRGB, a potem maluj L* w [0..100] oraz a*, b* w wybranym zakresie (zwykle [-128..127]). Dostępne od HotPDF v2.44.0
- Przestrzeń barw Separation dla kolorów dodatkowych (PDF 1.3+ ISO 32000-1 8.6.6.4):
THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) deklaruje jednoskładnikowy tusz spot, którego pojedynczy operand tint w [0..1] steruje liniową transformacją tintu Function Type 2 budowaną wewnętrznie. Użyj zwróconej nazwy (Sep1, Sep2, ...) ze zwykłym potokiem SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). AlternateCS przyjmuje DeviceGray, DeviceRGB albo DeviceCMYK; TintC1 dostarcza składniki alt-CS przy tint = 1.0. Pantone i inne nazwy tuszów ze spacjami są akceptowane bezpośrednio - HotPDF ucieka je do #20 zgodnie z PDF 1.7 7.3.5 przy zapisie nazwy przestrzeni barw. Dostępne od HotPDF v2.45.0
- Strumienie wyglądu AcroForm dla tekstu wielowierszowego i comb (PDF 1.7 ISO 32000-1 12.7.4.3): gdy
THotPDF.AutoFormAppearances jest włączone, pola tekstowe, których Flags zawierają ffMultiline, otrzymują zawijany słowami Form XObject /AP /N (układ prowadzenia Td + T* + /TL, z poszanowaniem separatorów CR / LF / CRLF i obcinaniem do widocznej liczby wierszy). Pola, których Flags zawierają ffComb razem z dodatnim MaxLen, renderują każdy znak do własnej komórki o równej szerokości przy użyciu bezwzględnej macierzy Tm dla każdego glifu. Układ jednowierszowy z v2.28.0 pozostaje bajtowo identyczny dla pól bez tych flag. Znaki międzynarodowe w wartości początkowej nadal przechodzą do ścieżki przeliczania /NeedAppearances przez przeglądarkę - pełne generowanie wyglądu z osadzonym fontem CID pozostaje pracą na przyszłość. Dostępne od HotPDF v2.46.0
- Font Unicode w AcroForm /AP (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3):
THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) rejestruje dostarczony przez wywołującego font kompozytowy Type 0 / CIDFontType2 + Identity-H w słowniku zasobów domyślnych AcroForm /DR/Font. Po rejestracji poziom AcroForm /DA, /DA każdego widgetu Tx oraz strumień /AP /N produkowany przez AutoFormAppearances dla nie-ASCII wartości początkowych Tx przełączają się na nazwę logiczną; podsłownik /Resources/Font Form XObject odwołuje się też do tego samego fontu pośredniego, więc AP jest samowystarczalny bez zależności od rozwiązywania /DR w czasie renderu. Helper towarzyszący THotPDF.CreateIndirectFontDict zwraca świeży pusty THPDFDictionaryObject zarejestrowany jako pośredni obiekt PDF, więc wywołujący może budować własne słowniki fontów (albo dowolne inne słowniki wymagające serializacji pośredniej "N G R") bez dotykania wewnętrznych helperów. Puste LogicalName i nil FontDict przywracają zachowanie /Helv tylko-ASCII z v2.46.0. Pola Tx ASCII wciąż używają /Helv z wyjściem tożsamym bajt w bajt względem v2.46.0 / v2.55.0. Wieloliniowe + comb nie-ASCII /AP oraz kształtowanie RTL bidi (UAX #9 + kontekstowe łączenie arabskie) pozostają pracą przyszłą. Dostępne od HotPDF v2.56.0; obsługa ffMultiline nie-ASCII /AP (per-wierszowy hex UTF-16BE Tj z Td / T* / /TL i zawijaniem słów świadomym CJK) od v2.57.0; obsługa ffComb nie-ASCII /AP (per-CID komórki Tm o równej szerokości + jednokomórkowy Tj na codepoint z obsługą par surrogate UTF-16) od v2.58.0; właściwość THotPDF.FormUnicodeRTL dla kierunku od prawej do lewej (odwraca kolejność UTF-16 w hexie /AP Tj, zachowując /V w kolejności logicznej; wywołujący prekształtuje arabski do form prezentacji Unicode U+FB50..U+FDFF + U+FE70..U+FEFF; pełne UAX #9 + automatyczne shaping GSUB w toku) od v2.59.0.
- Widget Tx z tekstem sformatowanym AcroForm (PDF 1.5+ ISO 32000-1 12.7.4.3 + Annex L):
THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) emituje widget tekstowy z /RV (ciało XHTML tekstu sformatowanego), /DS (domyślny styl podobny do CSS), automatycznie ustawionym bitem 26 flagi ffRichText /Ff oraz awaryjnym zwykłym tekstem /V + /DV używanym przez czytniki, które nie parsują /RV. Acrobat i Foxit renderują bezpośrednio z /RV, gdy bit RichText jest włączony, korzystając z fontów Unicode zainstalowanych w czytniku - dlatego zawartość wielobajtowa (CJK / Cyrillic / Arabic / accented Latin) wyświetla się poprawnie bez osadzania przez HotPDF fontu CID w zasobach /DR. Zarówno /V, jak i /RV automatycznie wykrywają wejście wielobajtowe i w razie potrzeby przełączają się na kodowanie ciągu szesnastkowego UTF-16BE (BOM FE FF + jednostki kodu big-endian). Generowanie strumienia wyglądu fontu CID dla własnej ścieżki /AP HotPDF pozostaje pracą na przyszłość; przeglądarki świadome tekstu sformatowanego go nie potrzebują. Dostępne od HotPDF v2.55.0
- Przestrzeń barw DeviceN dla przepływów wielokolorantowych tuszów spot (PDF 1.3+ ISO 32000-1 8.6.6.5):
THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) uogólnia RegisterSeparation z pojedynczego tuszu spot do N. Transformacja tintu jest postscriptową kalkulatorową Function Type 4 emitującą liniowe ważone mieszanie po podanej macierzy N x M (wiersz n kolumna m to wkład kolorantu n do kanału m AlternateCS, gdy kolorant n sam ma wartość 1.0). Zwraca nazwę przestrzeni barw (DevN1, DevN2, ...), która steruje zwykłym potokiem SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]). AlternateCS przyjmuje DeviceGray, DeviceRGB albo DeviceCMYK; nazwy tuszów ze spacjami są uciekane do #20 zgodnie z PDF 1.7 7.3.5; specjalna nazwa None oznacza nieużyty slot kolorantu. Dostępne od HotPDF v2.47.0
- Dowolna siatka trójkątów cieniowanych Gourauda (PDF 1.3+ ISO 32000-1 8.7.4.5.4):
THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) deklaruje strumień /ShadingType 4 z /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, opakowuje go w inline wpis Pattern Type 2 w słowniku strony Resources/Pattern i zwraca automatycznie wygenerowaną nazwę wzorca (Sh1, Sh2, ...) dla zwykłego potoku SetFillPattern / SetStrokePattern. Każdy wierzchołek jest pakowany jako 1 bajt flagi (zawsze 0 dla niezależnych trójkątów) + 2 bajty X big-endian + 2 bajty Y big-endian + NumComponents 8-bitowych składników koloru. Argument NumComponents przyjmuje 1 (DeviceGray), 3 (DeviceRGB) albo 4 (DeviceCMYK); każdy wierzchołek wnosi 2 + NumComponents wartości Extended do Vertices w kolejności (X, Y, c1...cN); liczba wierzchołków musi być wielokrotnością 3. /Decode mapuje 16-bitowe współrzędne z powrotem na [XMin, XMax] x [YMin, YMax], a składniki koloru na [0, 1]. Cieniowania siatkowe Type 5 (lattice), Type 6 (Coons patch) i Type 7 (tensor product) pozostają pracą na przyszłość. Dostępne od HotPDF v2.48.0
- Kratowa siatka trójkątów cieniowanych Gourauda (PDF 1.3+ ISO 32000-1 8.7.4.5.5):
THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) deklaruje strumień /ShadingType 5, który układa wierzchołki w kracie M wierszy x N kolumn i pozwala rendererowi automatycznie triangulować każdą parę sąsiednich wierszy w pas trójkątów. W odróżnieniu od RegisterFreeFormGouraudShading (Type 4) nie ma bajtu flagi na wierzchołek; /BitsPerFlag nie występuje w słowniku cieniowania, a każdy wierzchołek zajmuje tylko 4 + NumComponents bajtów (2 bajty X big-endian + 2 bajty Y big-endian + N składników koloru). Słownik cieniowania niesie zamiast tego wymagany wpis /VerticesPerRow N. Używaj go dla danych źródłowych już leżących na regularnej siatce próbek (teren, wyniki FEA, naukowe mapy cieplne) - aplikacja podaje wierzchołki w porządku wierszowym, a potok renderowania automatycznie składa topologię pasa trójkątów. VerticesPerRow musi wynosić co najmniej 2, a całkowita liczba wierzchołków musi być wielokrotnością VerticesPerRow z co najmniej dwoma wierszami. Dostępne od HotPDF v2.49.0
- Cieniowanie siatką Coons patch (PDF 1.3+ ISO 32000-1 8.7.4.5.6):
THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) deklaruje strumień /ShadingType 6 z łatami Coons, z których każda jest ograniczona czterema krzywymi Beziera trzeciego stopnia i niesie jeden kolor na narożnik. Renderer dopasowuje powierzchnię Coons między czterema krawędziami, tworząc dowolnie zakrzywiony czworokąt z kolorem - przydatny dla folii i gradientów metalicznych na zagiętych ścieżkach, siatek gradientów pochodzących z SVG oraz każdego czworokąta z krzywymi krawędziami, który inaczej wymagałby wielu małych trójkątów. Każda łata wnosi 12 punktów sterujących (24 wartości Extended X+Y, uporządkowane c1..c12 zgodnie z ruchem wskazówek zegara wokół granicy, z c1 / c4 / c7 / c10 w czterech narożnikach i pozostałymi 8 jako wewnętrzne uchwyty Beziera), a następnie 4 kolory narożników (4 * NumComponents wartości Extended), więc krok Patches to 24 + 4 * NumComponents. Słownik cieniowania niesie te same /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 co Type 4 (a inaczej niż w Type 5 nie ma /VerticesPerRow). Każda emitowana łata ma flag = 0 (niezależna łata); flagi kontynuacji 1 / 2 / 3 (współdzielenie krawędzi) nie są udostępniane w tym wygodnym overloadzie. Dostępne od HotPDF v2.50.0
- Przestrzeń barw Separation z próbkowaną transformacją tintu LUT (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2):
THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) opakowuje RegisterSampledFunction, aby wywołujący mogli wyrazić pełną nieliniową krzywą tint -> alt-CS jako płaski strumień bajtów 8-bitowych próbek (M-tuple) bez ręcznego konstruowania słownika Function Type 0. Użyj wariantu LUT, gdy przejście koloru jest nieliniowe - rampy tintu w stylu PANTONE Hexachrome, krzywe gęstości korygowane gamma, ręcznie rysowane krzywe tonu dopasowane do charakterystyki prasy, LUT-y konwersji sRGB-do-spot ICC bez pełnej mechaniki profilu ICC; punkt wejścia RegisterSeparation z v2.45.0 nadal pokrywa liniowy przypadek jednego punktu końcowego. AlternateCS przyjmuje DeviceGray, DeviceRGB albo DeviceCMYK; długość Samples musi być dodatnią wielokrotnością M z co najmniej 2 * M bajtami, aby funkcja miała interpolowalny zakres, a liczba punktów siatki S jest wyprowadzana z Length(Samples) / M. Liniowa interpolacja jest domyślna zgodnie z PDF 1.7 /Order 1. Zwraca zarejestrowaną nazwę przestrzeni barw (Sep1, Sep2, ...) do użycia ze zwykłym potokiem SetFillColorSpace + SetFillColor([tint]). Dostępne od HotPDF v2.53.0
- Rejestracja Function Type 0 (Sampled) (PDF 1.3+ ISO 32000-1 7.10.2):
THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) deklaruje pośredni strumień /FunctionType 0, który wyraża dowolne mapowanie wejście-wyjście jako regularną N-wymiarową siatkę M-wymiarowych próbek wyjściowych interpolowanych między punktami siatki. Używaj tam, gdzie mechanika profilu ICC jest przesadą, ale potrzebny jest ręcznie dostrojony LUT koloru - krzywe tonu dla /TransferFunction (ExtGState /TR), próbkowane transformacje tintu dla /Separation / /DeviceN poza liniowymi ścieżkami Type 2 / arytmetycznymi Type 4, krzywe progów półtonów lub dowolna inna konstrukcja PDF przyjmująca słownik Function. Domain ma 2N wpisów (jedna para [min, max] na wymiar wejściowy); Range ma 2M wpisów (jedna para na wymiar wyjściowy); Size to liczby punktów siatki N; BitsPerSample przyjmuje 1, 2, 4, 8, 12, 16, 24 albo 32 zgodnie z PDF 1.7 Table 38; Samples to surowy bitowo spakowany strumień próbek (MSB-first w każdej próbce, bez dopełnienia między próbkami poza wyzerowaniem końcowego bajtu, z wejściem 0 zmieniającym się najszybciej według zasad kolejności próbek specyfikacji); Order domyślnie wynosi 1 (liniowa) i przyjmuje 3 (interpolacja cubic-spline, od v2.54.0) zgodnie z PDF 1.7 Table 38. HotPDF waliduje liczbę bajtów próbek względem ceil(GridPoints * M * BitsPerSample / 8). Zwraca pośredni THPDFStreamObject, aby wywołujący mogli dołączyć go wszędzie tam, gdzie oczekiwany jest słownik Function. Dostępne od HotPDF v2.52.0; cubic /Order 3 + pełne pokrycie wielowejściowe / wielowyjściowe od v2.54.0
- Cieniowanie siatką tensor product patch (PDF 1.3+ ISO 32000-1 8.7.4.5.7):
THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) deklaruje strumień /ShadingType 7 z łatami tensor-product, z których każda jest zdefiniowana pełną siatką 4 x 4 punktów sterujących Beziera dwusześciennego p[i][j] oraz jednym kolorem na narożnik. Rozszerza RegisterCoonsPatchMesh (Type 6), dodając 4 jawne punkty sterujące wnętrza (p[1][1], p[1][2], p[2][2], p[2][1]) oprócz 12 punktów granicznych, co daje dokładniejszą kontrolę wnętrza łaty niż dopasowanie Coons. Przydatne dla pełnych przejść siatek gradientów SVG i grafiki wymagającej powierzchni Beziera tensor product. Każda łata wnosi 16 punktów sterujących (32 wartości Extended X+Y, w kolejności strumienia z Table 88 specyfikacji: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], a potem 4 punkty wnętrza p[1][1], p[1][2], p[2][2], p[2][1]) oraz 4 kolory narożników (4 * NumComponents wartości Extended w p[0][0] / p[0][3] / p[3][3] / p[3][0]), więc krok Patches to 32 + 4 * NumComponents. Każda emitowana łata ma flag = 0 (niezależna łata). W tym wydaniu obsługiwana jest już cała rodzina cieniowań siatkowych ISO 32000-1 8.7.4.5 (Types 4 / 5 / 6 / 7). Dostępne od HotPDF v2.51.0
- Styl obramowania adnotacji i połączenie Popup (PDF 1.7 12.5.4 / 12.5.6.14):
THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) dołącza słownik /BS z wybranym THPDFAnnotBorderStyle (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) emituje adnotację /Popup podłączoną w obu kierunkach (parent /Popup -> popup, popup /Parent -> parent), aby przeglądarka mogła renderować łącznik dymku. Nowa właściwość THPDFPage.LastAnnotation zasila dowolny z tych pomocników bez zmiany sygnatur istniejących procedur Add*Annotation. Dostępne od HotPDF v2.34.0
- Public-Key Security Handler (PDF 1.7 7.6.5):
THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) emitują słownik szyfrowania /Filter /Adobe.PubSec (/SubFilter /adbe.pkcs7.s4 dla V=1 RC4-40 / /adbe.pkcs7.s5 dla V=2 RC4-128 / V=4 AESV2). Wywołujący dostarcza 20-bajtowy losowy seed oraz jeden binarny blob PKCS#7 envelopedData na odbiorcę (zbudowany zewnętrznie przez Windows CryptoAPI, OpenSSL albo pycryptodome). HotPDF wyprowadza klucz szyfrowania pliku przez algorithm 9 (SHA-1 z seed skonkatenowanego z każdą kopertą) i ponownie używa standardowego wyprowadzania klucza per obiekt dla strumieni AES-128 / RC4. Dostępne od HotPDF v2.33.0
- Renderowanie załadowanych stron dekoduje Shading Types od 4 do 7 ze wszystkimi standardowymi szerokościami współrzędnych, komponentów i flag, rekordami wyrównanymi do bajtu, flagami kontynuacji trójkątów Type 4 i patchy Type 6 / 7, opcjonalnymi tablicami Function, zadeklarowaną konwersją ColorSpace, obsługą BBox i Background, cullowaniem clipem, wsadowymi wypełnieniami Gouraud oraz ograniczonym adaptacyjnym tesselowaniem Coons i tensor-product. Dostępne od HotPDF v2.488.0
Zobacz też
|