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