Natywny renderer Cairo w Linuksie
HPDFHeadlessCairoDevice renderuje wczytaną stronę PDF do RGB PNG używając powierzchni obrazu Cairo i FreeType, bez serwera wyświetlania ani czytnika PDF
Dostarcz szeregowy pożzyczony widok z THPDFHeadlessDocument.GetRenderAccess(PageIndex) i utrzymuj ten dokument wczytany i niezmieniony do powrotu renderowania
Document := THPDFHeadlessDocument.Create;
try
Document.LoadFromFile('input.pdf');
Options := THPDFHeadlessRenderOptions.Default;
Info := HPDFRenderHeadlessPagePNGFile(
Document.GetRenderAccess(0), 'page.png', Options);
finally
Document.Free;
end;
Zależności runtime
Natywny Linux używa libcairo.so.2, libfreetype.so.6 i zależności Fontconfig dostawcy standardowych fontów; zainstaluj odpowiednie fonty dla podstawienia Helvetica, Times i Courier
HOTPDF_CAIRO_LIBRARY i HOTPDF_FREETYPE_LIBRARY mogą wybrać jawne zgodne ścieżki bibliotek przed pierwszym renderem; udane moduły pozostają wczytane, bo natywne cache fontów mogą zachować callbacki niszczenia
Host musi utrzymać swój plik wykonywalny, DLL albo kod pakietu HotPDF wczytany, dopóki te natywne cache mogą zachować callbacki niszczenia fontów HotPDF; wyładowanie modułu hosta niezależnie od czasu życia cache jest poza tym profilem
Windows używa zgodnych libcairo-2.dll i libfreetype-6.dll przez ten sam most; binarki runtime i ich licencje są dostarczane przez aplikację
Kolory ICCBased dodatkowo wczytują liblcms2.so.2; JPEG używa libturbojpeg.so.0, a JPEG 2000 zgodnego z OpenJPEG 2.5 libopenjp2.so.7; te zależności są wczytywane tylko dla odpowiadających wejść
HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY i HOTPDF_OPENJPEG_LIBRARY nadpisują te ścieżki; domyślne Windows to lcms2.dll, turbojpeg.dll i openjp2.dll
Profil renderowania
Wspierana zawartość obejmuje konstrukcję i malowanie ścieżek, reguły wypełnienia nonzero i even-odd, przycinanie, zagnieżdżony stan grafiki, transformacje CTM, styl linii, kolory DeviceGray/RGB/CMYK, normalną alfę i powtórzone Form XObjects z własnymi zasobami, Matrix i BBox
Szerokości linii mogą być zerowe: PDF-owe hairlines żądane przez 0 w albo ExtGState LW=0 używają jednopikselowego obrysu w przestrzeni urządzenia; ujemne szerokości są odrzucane
ExtGState D i operator d strumienia zawartości współdzielą ograniczoną walidację dash: pełne puste wzorce, powtórzenia o nieparzystej długości, wpisy zerowej długości, ułamkowe długości i podpisane fazy są wspierane
Wzorzec dash dopuszcza co najwyżej 256 skończonych niedodatnich długości do 1e9, z co najmniej jedną dodatnią długością, gdy niepusty, i skończoną fazą o wartości bezwzględnej do 1e9; każdy element konsumuje pracę operacji, a przechowywanie tymczasowe uczestniczy w przyjmowaniu bajtów roboczych
Tablice operandów przyjmują komentarze PDF, włącznie z numerycznymi tablicami dash i tekstowymi tablicami TJ; zniekształcone wartości leksykalne i brakujące domykające nawiasy są zachowywane przez współdzielony skaner i odrzucane przez renderer zamiast po cichu znikać
Tekst poziomy używa współdzielonego interpretatora glifów dla macierzy tekstu, jawnych szerokości PDF, kanonicznych posunięć Helvetica/Times/Courier, odstępów znaków i słów, skali poziomej i korekt TJ
Osadzone wspierane programy fontów używają FreeType z rozwiązanymi ID glifów; mapowania Unicode ToUnicode pozostają dostępne przez API tekstu dokumentu, podczas gdy kształty rastra standardowych fontów zależą od zainstalowanych podstawień
Tekst kompozytowy wspiera Identity-H, Identity-V, jawne osadzone strumienie CMap Encoding i wbudowane mapowania poziome i pionowe UniJIS, UniGB, UniCNS i UniKS UCS2/UTF16; osobno instalowane zasoby CMap nie są wymagane
Pionowe malowanie glifów honoruje domyślne i jawne wektory pozycjonowania DW2/W2, podniesienie tekstu, skalę poziomą, macierze tekstu i grafiki oraz przesunięcie TJ; mapowania UTF-16 przyjmują kody znaków z płaszczyzny uzupełniającej
Wszystkie osiem trybów renderowania tekstu jest wspieranych, włącznie z pionowymi konturami wypełnienia/obrysu/niewidzialnymi akumulowanymi do clipu przy ET; osadzone strumienie CMap Encoding zachowują swój WMode i mapowania CID nieidentity
Przezroczyste połączone operacje wypełnienia i obrysu używają kompozycji knockout obiektów, by nakładające się wypełnienie nie przelewało się przez obrys; procedury glifów Type3 wykonują własne ograniczone zasoby i macierze fontów
Obrazy przyjmują próbki 1/2/4/8/16-bit i tablice Decode, maski stencil, jawne, color-key i miękkie, maski o innych rozmiarach i odzyskiwanie Matte; brakujące Interpolate używa próbkowania najbliższego sąsiada, a true wybiera próbkowanie dwuliniowe
Strumienie kodu JPX przyjmują komponenty źródła ze znakiem i bez znaku do 26 bitów, włącznie z mieszaną precyzją, subsamplingiem i jawnym kryciem, i normalizują do ograniczonych próbek 8 albo 16-bit; BitsPerComponent słownika obrazu i nie-stencilowe wpisy Decode są ignorowane dla obrazów JPX, zgodnie z profilem obrazów PDF
Palety Indexed i walidowane transformacje ICCBased do sRGB są wspierane dla obrazów i kolorów ścieżek; DeviceCMYK bez profilu zachowuje prostą konwersję urządzeniową
Transformacje ICCBased przyjmują sygnatury profilów Gray, RGB, CMYK, Lab i XYZ i ścisłe walidują zadeklarowaną liczbę komponentów i zakresy komponentów
Operandy profilu Lab używają fizycznych współrzędnych L a b z domyślnymi zakresami [0 100 -128 127 -128 127]; operandy XYZ używają fizycznych współrzędnych X Y Z z domyślnym niepodpisanym zakresem 1.15 [0 65535/32768] na komponent
Wejścia profilu XYZ to natywne rozszerzenie zgodności i nie implikują zgodności archiwalnej PDF; profile źródła Lab i XYZ nie wybierają wspieranej przestrzeni mieszania przezroczystości
Range strumienia ICC wymaga dwóch skończonych uporządkowanych wartości na komponent i ogranicza operandy koloru; domyślne wartości Decode surowego obrazu i wartości wyszukiwania Indexed używają tych zakresów komponentów
CalGray, CalRGB i Lab wspierają ścieżki, tekst, obrazy i bazy palet Indexed; parametry są ścisłe walidowane, wpisy Matrix CalRGB podążają za kolejnością kolumn PDF, a komponenty Lab i domyślne wartości Decode obrazów używają zadeklarowanych zakresów
Kolory CIE używają adaptacji chromatycznej Bradford i wyjścia sRGB względnego; metadane BlackPoint są walidowane, podczas gdy dodatkowa kompensacja czarnego punktu i polityki stanu intencji renderowania pozostają osobnymi rozszerzeniami
Kolory kompozytowe Separation i DeviceN zachowują od jednego do trzydziestu dwóch komponentów tonacji dla ścieżek, tekstu, baz Indexed i spakowanych obrazów; kolory alternatywne urządzeniowe albo CIE używają ograniczonych próbkowanych, wykładniczych, szytych albo kalkulatorowych funkcji tonacji
ICCBased Lab/XYZ i CalGray/CalRGB/Lab alternatywne źródła kolorów zachowują swoje fizyczne współrzędne przez transformację tonacji przed konwersją do wspieranej grupy przezroczystości
Wielowymiarowe próbkowane funkcje tonacji wspierają interpolację liniową i sześcienną, Domain, Encode, Decode, Range wyjścia i spakowane głębokości próbek do 32 bitów; ewaluacja sześcienna rozszerza istniejącą skalarną konwencję czterech węzłów przez iloczyny tensorowe, z liniowym fallbackiem w krótkich wymiarach oraz ograniczoną pracą i anulowaniem
Zobacz Natywne próbkowane funkcje kolorów dla konwencji interpolacji i osobnych dowodów wzorów i czytników
Separation None i przestrzenie DeviceN zawierające wyłącznie koloranty None nie wnoszą ani koloru, ani kształtu knockout; mieszane komponenty None nadal osiągają transformację tonacji alternatywnej
Separation All stosuje swoją tonację do każdego dostępnego kolorantu wyjścia, używając neutralnego wyjścia strony RGB i zachowując każdy komponent procesu w grupach CMYK
Grupy CMYK otrzymują oryginalne alternatywne wartości tonacji czterech komponentów przed mieszaniem; płyty spot separation, selekcja proces/kolorant NChannel i symulacja mixing-hint pozostają osobnymi rozszerzeniami
Końcowy callback obrazu zachowuje deszyfrowanie dokumentu i poprzedzające filtry strumieni przed natywnym dekodowaniem JPEG, JPEG 2000, CCITT albo JBIG2; JBIG2 wspiera tekst arytmetyczny i Huffmana, MMR i współdzielone słowniki globalne
JPEG 2000 wspiera komponenty subsamplingowane i podpisane, wywnioskowane deklaracje kolorów i próbek, osadzone profile ICC, jawne nadpisania przestrzeni kolorów oraz osobne albo skojarzone krycie przez SMaskInData; jego wartości komponentów są normalizowane do 8 albo 16 bitów, a jego tablica Decode obrazu jest ignorowana
Osadzone albo jawne profile ICC Lab/XYZ używają fizycznych zakresów komponentów; skojarzone krycie jest usuwane ze znormalizowanych przechowywanych próbek przed zastosowaniem mapowania fizycznych współrzędnych, zachowując kanały offsetu Lab
SMask stanu grafiki wspiera grupy Alpha i Luminosity, kolory tła, macierze Form, przywracanie zapisanego stanu oraz próbkowane, wykładnicze, szyte i ograniczone kalkulatorowe funkcje transferu; własna miękka maska obrazu nadpisuje miękką maskę stanu grafiki
Wszystkie szesnaście standardowych trybów mieszania PDF jest wspieranych; grupy Form i stron wspierają kompozycję izolowaną i nieizolowaną, knockout obiektów oraz przestrzenie mieszania DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB albo ICCBased o jednym, trzech i czterech komponentach
Kalibrowane grupy zachowują natywne wartości komponentów do granicy grupy i przyjmują kolory źródła urządzeniowe albo Lab przez odwrotne transformacje kalibrowane; sam Lab nie jest poprawną przestrzenią mieszania
Kalibrowane maski Luminosity zachowują współrzędne swojej grupy i wyliczają CIE XYZ-Y, włącznie z kryciem grupy i kolorami tła, przed zastosowaniem funkcji transferu
Kompozycja knockout utrzymuje geometryczny kształt obiektu osobno od krycia miękkiej maski; dziury stencil zachowują poprzedzające obiekty, podczas gdy maskowana ścieżka zastępuje je w całej swojej malowanej geometrii
Zagnieżdżone grupy knockout zachowują sumę kształtów geometrycznych swoich dzieci, włącznie z obiektami o zerowym kryciu; nieizolowane grupy dzieci używają początkowego tła otaczającej grupy knockout
Grupy CMYK zachowują komplementarne CMY i czarne komponenty w osobnych ograniczonych płaszczyznach obrazu i konwertują połączony wynik na granicach grup; tryby mieszania nieseparowalne zachowują albo podmieniają czarny według wybranego trybu
Grupy nieizolowane renderują dodatkowy ograniczony przebieg krycia, usuwają wkład początkowego tła i raz stosują przychodzącą alfę i tryb mieszania grupy; grupy przezroczystości stron używają izolowanej powierzchni przed kompozycją na tło strony
Nieizolowany Form dziedziczy otaczającą przestrzeń mieszania; jawny wpis CS grupy nie przełącza początkowego tła na inną przestrzeń
Istniejące wyglądy normal adnotacji są dopasowywane z ich przekształconego BBox do Rect; RenderAnnotations=false pomija wyglądy w obu użyciach
Użycie domyślnie hruView, które pomija adnotacje Hidden i NoView oraz nieznane typy adnotacji z ustawionym Invisible; standardowe typy adnotacji ISO 32000, włącznie z RichMedia i Projection z PDF 2.0, ze wspieranymi wyglądami normal pozostają widoczne, gdy ustawione jest tylko Invisible
Akceptacja RichMedia i Projection obejmuje istniejące statyczne wyglądy normal z poprawnymi zasobami mediów albo powiązanym domyślnym widokiem 3D; odtwarzanie mediów i interaktywna aktywacja 3D są poza tą ścieżką rastrową
hruPrint maluje tylko adnotacje z ustawionym Print i wyczyszczonym Hidden; Invisible wycisza nieznane typy adnotacji w obu użyciach, NoView nie wycisza druku, a NoZoom nie zmienia rozmiaru wydrukowanego wyglądu
Gdy wygląd normal jest brakujący, wspierane metadane adnotacji są renderowane przez wygląd tymczasowy; zobacz natywny fallback adnotacji dla geometrii, Unicode FreeText, statycznych ikon i pozostałych granic
Dla wyjścia widoku adnotacyjne NoZoom usuwa skalę renderowania z rozmiaru wyglądu, zachowując UserUnit; NoRotate utrzymuje dopasowany wygląd pionowo przez rotację strony w obu użyciach, a oba zachowują przekształconą kotwicę górnego lewego Rect i clip strony
Adnotacje tekstowe z istniejącymi wyglądami normal zachowują się jak NoZoom i NoRotate w wyjściu widoku niezależnie od swoich jawnych flag; wyjście druku zachowuje ich zachowanie NoRotate, ignorując NoZoom
Użycie steruje statyczną widocznością rastra i geometrią adnotacji; flagi tylko interakcji nie tworzą zachowania hover ani edycji, a istniejący callback uprawnienia ekstrakcji pozostaje wymagany bez udzielania uprawnienia druku
Optional-content w wyjściu statycznym
Renderowanie konsumuje domyślną konfigurację OCProperties/D katalogu, inicjalizuje stany grup z BaseState, stosuje nadpisania ON i OFF i używa pasujących wartości Intent przy określaniu widoczności
Słowniki membership wspierają AnyOn, AllOn, AnyOff i AllOff; rekurencyjne wyrażenia VE wspierają And, Or i jednooperandowe Not, z VE mającym pierwszeństwo przed prostszą polityką
Referencje grup null, niedostępne i nieaktualne nie mają efektu membership; grupy poza intencjami konfiguracji nie kontrolują widoczności, a membership albo wyrażenie bez pasujących grup pozostawia zawartość widoczną
Zagnieżdżona zawartość oznaczona /OC, obrazy i Form XObjects oraz adnotacje respektują wynikowy stan; ukryte sekcje oznaczone nadal aktualizują kolory, macierze, przycinanie i pozycję tekstu, podczas gdy ukryte całe XObjects i adnotacje mogą być pomijane
Zwykłe słowniki właściwości marked-content pozostają używalne, włącznie z zagnieżdżonymi wartościami inline; tablice zawartości zachowują stan marked-content między swoimi strumieniami składowymi, a strumienie dzieci zachowują własne zagnieżdżenie marked-content
Samodzielna rasteryzacja final-form używa domyślnej konfiguracji w obu trybach widoku i druku bez automatycznego stosowania interaktywnych rekomendacji użycia AS, zgodnie z sekcją 8.11.4.5 ISO 32000-1:2008; jawny ViewerState umożliwia rekomendacje View, Print, Export, Zoom, Language i User z trwałym ręcznym zaznaczeniem i tymczasowym stanem zdarzenia
Brakujące właściwości optional-content albo nil pożzyczony katalog pozostawiają struktury optional-content bez wpływu na widoczność; zniekształcone żywe memberships, cykle wyrażeń i skonfigurowane limity pracy, pamięci albo rekurencji zawodzą przed publikacją PNG
Afiniczne macierze wyglądów i niezerowe początki BBox zachowują normalne dopasowanie pod tymi flagami; skrajnie mała skala renderowania nadal może uczynić początkową macierz strony Cairo numerycznie nieodwracalną
Renderowana strona używa przecięcia MediaBox/CropBox, dziedziczonych ramek stron i ćwierćobrotowego Rotate oraz UserUnit strony; skala 1 produkuje jeden piksel na efektywny punkt strony, z wymiarami powierzchni zaokrąglanymi w górę
Operator sh maluje cieniowania oparte na funkcjach, axial i radial (ShadingTypes 1–3), z dwuwejściowymi dziedzinami, macierzami cieniowania, wyborem okręgu radialnego, końcami Extend, BBox i istniejącymi clipami ścieżek
Wspierane funkcje kolorów i tablice funkcji skalarnych konwertują przez kolory źródła urządzeniowe, kalibrowane, ICC Lab/XYZ i Separation/DeviceN; bieżące krycie wypełnienia, tryby mieszania, miękkie maski stanu grafiki i knockout grupy przezroczystości stosują się do wynikowego cieniowania
Bieżąca ścieżka i kolor są zachowywane; Background cieniowania jest ignorowane przez sh, a AntiAlias to podpowiedź urządzenia z próbkowaniem koloru w centrum piksela
Nieobsługiwane wpisy ExtGState i nieobsługiwane operatory zawartości pozostają poza tym profilem
Cieniowania siatki trójkątnej
ShadingTypes 4 i 5 malują siatki Gouraud trójkątne free-form i lattice z reużyciem krawędzi, dowolną geometrią lattice, rekordami wierzchołków wyrównanymi do bajtu, precyzją współrzędnych do 32 bitów i precyzją komponentów do 16 bitów
Komponenty wierzchołków są interpolowane w centrach pikseli urządzenia przed konwersją koloru; opcjonalna funkcja jednowejściowa albo tablica funkcji komponentów wylicza parametr interpolowany, włącznie z kolorami kalibrowanymi, ICC i specjalnymi
Źródła Indexed zaokrąglają interpolowane indeksy do najbliższego wpisu palety; szesnastkowe łańcuchy wyszukiwania dekodują się raz z białymi znakami, cyframi o mieszanej wielkości liter i nieparzystym dopełnieniem ostatniego nibble'a, podczas gdy literałowe łańcuchy wyszukiwania zachowują swoje zdekodowane bajty
Bieżące transformacje, przycinanie, BBox, krycie wypełnienia, tryb mieszania, miękkie maski, koloranty niemalujące i knockout grupy stosują się do ukończonej siatki; zachowane bajty strumienia, tymczasowa powierzchnia strony i dwa wiersze lattice dołączają do przyjmowania pamięci roboczej
Parsowanie wierzchołków, rasteryzacja trójkątów i funkcje współdzielą zagregowane limity operacji i odpytywanie anulowania; zniekształcone albo obcięte rekordy i niekompletne wiersze lattice zawodzą przed publikacją wyjścia
Skoncentrowana akceptacja sprawdza domknięte równania barycentryczne i osobne wyjście MuPDF i Poppler; rekordy dowodów utrzymują niepowodzenia źródeł czytnika osobno dla dopełnienia wierzchołków, nieużytych bitów flag i przezroczystości siatki i używają jawnych równań czytnika alternatywnego dla kolorantów niemalujących i znormalizowanych wartości Indexed
Siatki patch Coons i tensor
ShadingTypes 6 i 7 malują sześciennie granice Coons i sieci kontrolne tensor, z reużyciem krawędzi poprzedzających, rekordami wyrównanymi do bajtu, semantyką flag dwóch najniższych bitów i tą samą precyzją współrzędnych i komponentów co siatki trójkątne
Komponenty narożników są interpolowane dwuliniowo w parametrach patcha przed opcjonalnymi funkcjami i konwersją koloru; granice Coons są podnoszone do równoważnego dwusześciennego netu Bernsteina, którego granice drugiej pochodnej wybierają podziały z błędem geometrii co najwyżej 0,125 piksela wyjścia
Inwersja wielomianowa dopracowuje parametry pikseli; złożone pokrycie wybiera największy parametr v, a potem największy u przy równym v, podczas gdy późniejsze patche podmieniają wcześniejsze kolory, zanim ukończone cieniowanie otrzyma przezroczystość obiektu
Współdzielony kompozytor siatek stosuje przycinanie, BBox, wzorce cieniowania, koloranty niemalujące, krycie, mieszanie, miękkie maski i knockout grupy; dwa wiersze podziału i tablice parametrów i kolejności per piksel dołączają do aktywnego przyjmowania bajtów roboczych
Parsowanie punktów kontrolnych, podział, rasteryzacja i funkcje kolorów współdzielą limity operacji i anulowanie; skoncentrowana akceptacja używa niezależnych równań Coons i tensor oraz sześciennych pierwiastków dla złożonych patchy, z niepowodzeniami źródeł czytnika nagrywanymi osobno od zwykłej weryfikacji stron równań RGB
Dziedziczony stan tekstu
Strumienie dzieci Form, Type3 i pattern dziedziczą pasujący obiekt fontu, rozmiar fontu, odstęp znaków, odstęp słów, skalę poziomą, leading, tryb renderowania i podniesienie ze swojego początkowego stanu grafiki; zasób dziecka z tą samą nazwą fontu nie podmienia dziedziczonego fontu, dopóki lokalne Tf go nie wybierze
Zapisany stan grafiki przywraca parametry tekstu, a operatory TD i podwójnego cudzysłowu zachowują swoje zmiany leading i odstępów dla kolejnych strumieni dzieci; każde dziecko startuje z własnymi macierzami tekstu
Niezależne wyglądy adnotacji startują z domyślnych parametrów tekstu bez zachowywania finalnego stanu tekstu zawartości strony
Tekst Type3 w trybie renderowania 3 nie wnosi żadnej widocznej grafiki glifów; skoncentrowany dowód zagnieżdżonego tekstu Type3 utrzymuje odchylenie parametrów domyślnych MuPDF osobno od równań stanu dziedziczonego, podczas gdy Poppler podąża za parametrami dziedziczonymi w tych fiksaturach
Wzorce tiling i cieniowania
Przestrzenie kolorów wzorców wspierają wzorce tiling kolorowe i jednokolorowe, TilingType 1–3, wzorce cieniowania, PatternMatrix, BBox komórek, dodatnie albo ujemne odstępy, wybór wzorca, przywracanie zapisanego stanu i malowanie wypełnieniem albo obrysem
Wzorce jednokolorowe otrzymują komponenty ze wspieranej bazowej przestrzeni kolorów i mogą malować maski obrazów stencil; jawne zmiany koloru, kolorowe obrazy i bezpośrednie cieniowania wewnątrz definicji jednokolorowej to niepoprawna zawartość PDF i są odrzucane również przez zagnieżdżone Forms i procedury Type3
Wybrane wzorce zachowują domyślną przestrzeń współrzędnych strumienia zawartości, który rozwiązał ich definicję; późniejsze operacje cm i dziedziczony wzorzec użyty wewnątrz Form nie podmieniają tego początku
Definicje startują od początkowego wspieranego stanu grafiki rodzica i domyślnych parametrów przezroczystości; definicje tiling tworzą grupę nieizolowaną nie-knockout, podczas gdy definicje cieniowania używają knockout obiektu
Przezroczyste i nakładające się komórki tiling są ewaluowane względem bieżącego tła; przychodząca alfa i tryb mieszania obiektu stosują się raz przy malowaniu ukończonego wzorca, włącznie ze zagnieżdżonymi wzorcami, tekstem, obrysami i maskami obrazów
ExtGState wzorca cieniowania uzupełnia wspierane parametry cieniowania, włącznie z kryciem i miękkimi maskami; Background jest malowany przed cieniowaniem, BBox przycina oba wkłady, a koloranty None niemalujące nie wnoszą ani koloru, ani kształtu
Ewaluacja wzorca dopuszcza dwie powierzchnie stron i zdekodowaną zawartość komórek, ogranicza wyliczanie widocznych komórek do bieżącego clipu i odpytuje anulowanie podczas renderowania komórek i usuwania wkładu tła
Skoncentrowane fiksatury porównują domknięte równania współrzędnych, koloru i kompozycji z natywnymi pikselami i wyjściem niezależnego czytnika; pliki dowodów zachowują różnice czytników dla dziedziczonych początków wzorców Form, krycia ExtGState wzorca cieniowania i kolorantów None niemalujących, z osobnymi zwykłymi stronami równań wektorowych dla tych przypadków
Fonty CFF kluczowane CID
Osadzone fonty CIDFontType0 rozwiązują rzeczywiste CID CFF w kontenerach samodzielnych i OpenType, włącznie z mapowaniami nieidentity, CID 65535, osadzonymi strumieniami CMap Encoding, pionowymi początkami W2, przekształconymi konturami i przycinaniem tekstu
Samodzielne twarze CFF wczytują się po CID, a twarze opakowane SFNT po kompaktowym indeksie glifów; most używa poprawnego layoutu twarzy FreeType dla Linux LP64 i Windows LLP64
Niemapowany kod znaku albo nieobecny żądany CID konsultuje notdefchar i notdefrange dla oryginalnego kodu, po czym używa obowiązkowego glifu CID 0, gdy podmiana jest nieobecna; zakresy mają stałe cele CID, a wpisy znaków mają pierwszeństwo, podczas gdy obecne glify zachowują swoją żądaną wartość CID
Skoncentrowana akceptacja używa zadeklarowanych konturów wielokątów i równań początków dla 28 poprawnych źródeł, z osobnymi porównaniami MuPDF i Poppler oraz zwykłymi stronami równań RGB
Pliki dowodów zachowują różnice czytników dla selekcji glifów OpenType kluczowanego CID i pominiętych podstawień notdef; alternatywa pominięcia jest mierzona osobno i nie zastępuje wymaganego natywnego równania źródła
Granice i anulowanie
Dokładne wbudowane kodowania Type0 pokrywają wszystkie 200 dołączonych nazw kodowań: Identity-H i Identity-V, szesnaście mapowań UCS2 i UTF16 oraz 182 dodatkowe mapy legacy i Unicode ze spłaszczonymi pionowymi nadpisaniami znaków
Mieszane operandy od jednego do czterech bajtów używają granic przestrzeni kodu per bajt i odzyskiwania najdłuższego prefiksu po niepoprawnym kodzie; dekodowanie UTF8 i UTF32 i odwrotne kodowanie zachowują skalary z płaszczyzny uzupełniającej i znaczące wiodące bajty zerowe
Strumienie Encoding i ToUnicode rozwiązują nazwy usecmap ciała i UseCMap słownika albo strumienie, z pierwszeństwem słownika oraz lokalnymi nadpisaniami znaków, zakresów, sekwencji Unicode i notdef
Każde dziecko CMap zachowuje własny tryb pisania, domyślnie poziomy przy pominiętym WMode; jawny tryb pionowy wybiera dziedziczone mapowania i pionowe metryki fontu
Dziedziczenie CMap używa lokalnych dla wątku zagnieżdżonych limitów głębokości bez zmiany layoutu THPDFCMapBounds; cykle, zniekształceni rodzice i nadmierna głębokość zawodzą przed publikacją wyjścia, a bloki finally przywracają limity po anulowaniu albo wyjątkach
Skoncentrowany dowód zachowuje niepowodzenia źródeł nazwanych UTF8 i UTF32 w niezależnym czytniku bez tych wbudowanych tabel, weryfikuje osobne towarzysze osadzonych map i zapisuje różnice tekstu źródła, gdy wiele kodów wybiera ten sam CID
Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh buduje i testuje dokładne interwały kodowania, źródła PDF o mieszanej szerokości, zagnieżdżone renderowanie, izolację wątków i odzyskiwanie po anulowaniu na natywnym Linuksie
Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py wykonuje pasujące natywne pliki wykonywalne Windows, nagrywa hasze źródła, binarek, PNG i diagnostyki, po czym przenosi stałe przechwyty do przechowywania natywnego Linux dla osobnych kontroli MuPDF i Poppler
Spakowane mapy zachowują hasze swoich zasobów i kompletne noty redystrybucji; utrzymuj licencję danych CMap z dystrybucjami źródła i binarek
Eskapy szesnastkowe w wartościach nazw PDF i operandach nazw zawartości dekodują się raz przed rozwiązywaniem fontów, przestrzeni kolorów, trybów mieszania i zasobów; literałowy hash powstały z dekodowania pozostaje częścią nazwy semantycznej
Współdzielony dekoder fontów stosuje te semantyki do wartości słowników fontów, nazwanych kodowań, nazw glifów Differences i CIDToGIDMap, bez modyfikowania pożzyczonych obiektów ani dekodowania wartości łańcuchowych
Eskapowane nazwy rendererów używają dekodowania liniowego, tymczasowego przyjmowania bajtów roboczych, zagregowanych limitów operacji i odpytywania anulowania; skoncentrowana akceptacja porównuje równoważne natywne bajty PNG i tekst plus niezależne wyjście MuPDF i Poppler
Praca rasteryzacji cieniowania i funkcje kolorów współdzielą zagregowane limity operacji i odpytywanie anulowania; powierzchnia tymczasowa i cache dokładnych współrzędnych co najwyżej 8,192 skonwertowanych kolorów dołączają do aktywnego przyjmowania bajtów roboczych
Skoncentrowana akceptacja cieniowania używa domkniętych równań geometrii/funkcji/koloru i osobnych stron równań wektorowych, zachowując różnice czytników dla przycinania BBox, geometrii zdegenerowanej, konwersji koloru, specjalnych nazw kolorantów i teselacji knockout
Opcje ograniczają piksele powierzchni, aktywne zarządzane bufory, skumulowane zdekodowane bajty, zakodowane bajty PNG, pracę tokenów i operatorów oraz głębokość rekurencyjną albo stanu grafiki
Dekodowanie fontów używa konserwatywnych pul przyjmowania: 32 MiB pojemności przejściowej, 64 razy rozmiar zdekodowanego strumienia fontu, 128 razy rekurencyjnie sprawdzane gniazda tablic i dwukrotność zachowanego szacunku dekodera w aktywnym zagregowanym
Tablice CID dopuszczają 65,536 zachowanych wpisów; wyliczanie ogranicza rzeczywiste charstringi, a tablice notdef dołączają do kopiowania głębokiego dekodera i rozliczania zachowanych bajtów
Parsowanie CMap i wyszukiwanie notdef współdzielą lokalne dla wątku zagnieżdżone granice wpisów i odpytywanie pracy; zakresy renderera współdzielą zagregowane limity tokenów i operacji, a długie skany leksykalne odpytują co najwyżej co 256 bajtów
Interpretator rezerwuje tež pojemność sekwencji Unicode per glif z bajtów operandów wejścia i najdłuższego mapowania ToUnicode przed tworzeniem rekordów glifów, więc powtórzone długie mapowania nie mogą obejść przyjmowania pamięci roboczej
Mały budżet pamięci roboczej może odrzucić prosty font nawet, gdy jego docelowa alokacja zmieściłaby się; te kontrole obejmują zarządzane bufory i powierzchnie obrazów CPU, podczas gdy Cairo, Fontconfig, cache FreeType i całkowity RSS procesu są poza rozliczaniem
Powierzchnie przezroczystości, miękkiej maski, tła, krycia i knockoutu obiektów dołączają do aktywnego budżetu powierzchni; funkcje transferu współdzielą zagregowany budżet operacji, kodeki ICC i obrazów używają konserwatywnego przyjmowania, a natywny dekoder JBIG2 ogranicza alokację bitmapy/kontekstu skumulowanie i odpytuje anulowanie podczas dekodowania
Komplementarne przejścia CMY, czarnego i kształtu geometrycznego współdzielą zagregowane limity operacji, dekodowania i anulowania; profile używające tego samego rozwiązanego strumienia współdzielą jedną walidowaną transformację i aktywną rezerwację przyjmowania do zakończenia renderowania strony
Zachowane strumienie funkcji, ewaluacja funkcji i rekordy stanu grafiki dołączają do przyjmowania bajtów roboczych; rekurencyjne funkcje tonacji, wielowymiarowa interpolacja i instrukcje kalkulatora współdzielą limity operacji i anulowania
Pożzyczony token anulowania jest odpytywany podczas ograniczonego dekodowania, tokenizacji, operatorów, wywołań rozwiązywacza glifów, wierszy obrazów, rekurencji, kodowania PNG i przed publikacją; wywołujący jest właścicielem jego czasu życia
Renderer sprawdza uprawnienie ekstrakcji przez pożzyczoną politykę dokumentu i zachowuje wartości obiektów źródła i bajty źródła
Własność wyjścia
HPDFRenderHeadlessPagePNG ukończa renderowanie i kodowanie PNG prywatnie przed zapisem do strumienia należącego do wywołującego; końcowe niepowodzenie I/O strumienia może zachować już przyjęte bajty
HPDFRenderHeadlessPagePNGFile sprawdza tożsamość źródła, wyłącznie tworzy plik staging w katalogu docelowym, flushuje go, ponownie sprawdza tożsamość i anulowanie i atomowo podmienia cel
Publikacja Windows używa co najwyżej ośmiu atomowych prób podmiany i siedmiu oczekiwań 1, 2, 4, 8, 16, 16 i 16 milisekund, ponawiając tylko błędy odmowy dostępu, naruszenia współdzielenia i naruszenia blokady; anulowanie jest sprawdzane przed każdą próbą i po obu stronach każdego oczekiwania
Nieudana publikacja Windows raportuje przechwycony końcowy kod błędu Windows przez EHPDFHeadlessRenderError; anulowanie zachowuje diagnostykę anulowania renderera, a żadna ze ścieżek nie usuwa istniejącego celu ani nie schodzi do kopiowania nieatomowego
Niepowodzenia renderowania, budżetu, anulowania i staging zachowują istniejący cel i usuwają posiadane niepublikowane pliki staging; aliasy ścieżki źródła i twarde dowiązania są odrzucane
Akceptacja
Akceptacja runtime Windows używa pasujących natywnych plików wykonywalnych konsoli i izolowanego, przypiętego SHA-256 zamknięcia importu przenośnych DLL; osobny proces WSL wykonuje niezależne kontrole pikseli, równań i geometrii MuPDF i Poppler względem plików PNG wyprodukowanych w Windows
Podstawienia standardowych fontów Windows używają jawnych twarzy GDI Cairo dla tekstu Unicode i rzeczywistych konturów, włącznie z przycinaniem i trybami wypełnienia i obrysu; osadzone fonty zachowują swoje mapowanie glifów FreeType
Wywołania OpenJPEG używają ABI stdcall Windows i dekorowanych eksportów Win32, podczas gdy callbacki strumieni i komunikatów zachowują konwencję callbacka C
Tests/Linux/Run-HeadlessCairoAcceptance.sh wykonuje świeże natywne budowanie ELF, czyści DISPLAY i WAYLAND_DISPLAY, odrzuca bezpośrednio linkowane biblioteki pulpitu i uruchamia niezależne wyrocznie pypdf/MuPDF
Fiksatury ćwiczą standardowe fonty, TrueType Unicode, Type3, wszystkie tryby renderowania i mieszania tekstu, alfę i knockout, grupy przezroczystości RGB, głębokości próbek i Decode, maski obrazów i Matte, kolory Indexed i ICC, kodeki terminalne, zaszyfrowane łańcuchy filtrów AES, geometrię stron, transformacje adnotacji, budżety, anulowanie, zachowanie źródła i wyjście atomowe
Zobacz THPDFHeadlessRenderResult dla liczników i EHPDFHeadlessRenderError dla obsługi błędów