Listy wyświetlania i produkcja drukowa

HotPDF kompiluje załadowane strumienie stron w komponenty THPDFPageDisplayList wielokrotnego użytku z metrykami THPDFDisplayListInfo i ramkami ograniczającymi obiektów treści

Renderowanie dokumentu buforuje skompilowane listy, podczas gdy wywołujący mogą żądać listy o niezależnej własności do powtarzanego wykonania lub zapytań obiektów regionalnych

Współdzielony interpreter produkcyjny

Nieprogresywne bitmapy, bezpośrednie DC, replay Form i display list przepuszczają uprzednio ztokenizowaną treść przez HPDFInterpretContentTokensDevice, który posiada traversal operatorów i granice anulowania

THPDFPageRenderer implementuje IHPDFContentOperatorDevice, więc współdzielony traversal wywołuje jego kompletną maszynę stanów grafiki, tekstu, zasobów, clipowania, wzorów, transparency, marked content i obrazów, nie zbijając renderowania produkcyjnego do mniejszej, semantycznej powierzchni callbacków

Display liste cache'ują indeksy tokenów operatorów, gdy strumienie są kompilowane, i replayują tylko te indeksy, unikając powtarzanych skanów operandów; THPDFPageDisplayList.OperatorCount i THPDFDisplayListInfo.OperatorCount wystawiają cache'owaną liczbę poleceń

Urządzenia semantyczne implementujące tylko IHPDFContentDevice zachowują callbacki filtrowane po zdolnościach, podczas gdy kompletne urządzenia operatorowe dostają jeden zwalidowany operator naraz z jednym punktem kontrolnym anulowania na operator

Ograniczone i współbieżne renderowanie

THPDFRenderTileEvent otrzymuje pojedynczy kafel lub poziomy pasek o rozmiarze wywołującego, utrzymując szczytową pamięć rastra niezależną od pełnego rozmiaru strony

RenderLoadedPagesParallel nakłada kompilację list wyświetlania na odtwarzanie, rozpoczyna pierwszą gotową stronę bez czekania na pełną barierę kompilacji, dynamicznie równoważy oba etapy na ograniczonych procesach roboczych i zwraca THPDFBitmapArray w kolejności wejścia

Kompilacja działa poza blokadą pamięci podręcznej list wyświetlania, podczas gdy podwójnie sprawdzone dopuszczenie i chronione liczniki użycia pozwalają niepowiązanym stronom kompilować się współbieżnie bez duplikowania opublikowanych wpisów ani wysiedlania listy podczas odtwarzania

THPDFParallelRenderPipelineInfo wystawia trafienia pamięci podręcznej, kompilacje, ukończenia, szczytowe współbieżności kompilacji i renderowania, strony skompilowane przy pierwszym wyniku, opóźnienie pierwszego wyniku i całkowity upływający czas

RenderLoadedPagesParallelOrdered dostarcza wywołania zwrotne w kolejności wejścia na wątku wywołującym i zwalnia każdą pożyczoną bitmapę po powrocie wywołania, podczas gdy wybrana przez wywołującego głębokość wyjścia stosuje przeciwciśnienie producentowi i rezerwuje jeden slot dla następnej wymaganej strony, aby wolna wczesna strona nie mogła zakleszczyć się za późniejszymi wynikami

Uporządkowane strumieniowanie zachowuje co najwyżej jedną listę wyświetlania i aktywne renderowanie na proces roboczy plus ograniczoną kolejkę ukończonych bitmap zamiast utrzymywania kompletnego wyjścia zadania w pamięci

Wtykowe backendy renderowania zużywają te same skompilowane listy przez niebędący właścicielem widok zasobów dokumentu, więc ścieżki synchroniczna i równoległa unikają ponownego parsowania treści strony, podczas gdy możliwości backendu określają, czy wywołania mogą się nakładać, czy wymagają wysyłki szeregowej

Procesowy planista pamięci szczytowej ogranicza teraz oba równoległe API: największe oszacowanie strony zmniejsza początkową liczbę procesów roboczych, każda pobrana strona rezerwuje swój kompletny szacowany zestaw roboczy, a uporządkowane wyjście zachowuje tę rezerwację przez dostarczanie wywołania

Anulowanie planisty budzi czekających na budżet przy anulowaniu wywołania lub awarii procesu roboczego, podczas gdy telemetria wystawia żądane względem efektywnych procesów roboczych, szczytową wagę rezerwacji, opóźnione strony i zagregowany czas oczekiwania

RenderLoadedPageTilesParallel i RenderLoadedPageBandsParallel dostarczają pożyczone kafle wierszowo albo pasy od góry do dołu przez izolowane workery, przy czym każdy worker ma co najwyżej jeden kafel, a limit pamięci roboczej od wywołującego redukuje współbieżność przed pierwszą rezerwacją

Równoległe konteksty renderowania kopiują niemutowalne sekwencje tokenów glifów Type 3 i ekrany progowe halftone z jednego ograniczonego cache LRU, zachowując własność lokalną renderera dla mutowalnego stanu grafiki i zasobów GDI

SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded i SaveLoadedPagesToTiffStreamBanded konsumują ten sam renderer pasów przez strumieniowe enkodery PNG albo TIFF, więc bardzo duże strony emitują skompresowane wyjście wiersz po wierszu bez trzymania pełnego framebuffera, a THPDFBandImageExportInfo raportuje wyrenderowane pasy, zakodowane wiersze, workerów, szczytowe bajty rezerwacji, bajty wyjścia, czas i anulowanie

Współdzielone dekodowanie obrazów jest koordynowane osobno, więc praca nad stronami wektorowymi pozostaje równoległa bez uszkadzania wpisów pamięci podręcznej zdekodowanych obrazów

PrefetchLoadedPages rozgrzewa wpisy rastra z dedykowanym tokenem anulowania podczas kompilacji i renderowania poza blokadą pamięci podręcznej, a renderowanie strony na pierwszym planie wywłaszcza proces roboczy przed rozpoczęciem pracy wrażliwej na opóźnienie

THPDFLoadedPagePrefetchInfo raportuje pracę zaplanowaną, rozpoczętą, ukończoną, buforowaną, wyrenderowaną, nieudaną, anulowaną i wywłaszczoną na pierwszym planie razem z ostatnim i szczytowym opóźnieniem anulowania

Przezroczystość i kontrola druku

Spłaszczanie przezroczystości najpierw sprawdza licznik przezroczystości listy wyświetlania i zdefiniowany przez wywołującego sufit pikseli, a następnie zastępuje malowanie strony bezstratnym, skompresowanym Flate, skalibrowanym obrazem RGB

Strony z kolorantami Separation lub DeviceN pozostają jako treść wektorowa, z wykrytymi kolorantami i stanem zachowania wystawionym wywołującemu

Renderer wykonuje funkcje przeniesienia oraz słowniki rastra Typu 1, 5, 6, 10 lub 16 z ExtGState, zachowując niezależne ekrany RGB i ich nadpisy przeniesienia przez q i Q

THPDFInkCoverageInfo raportuje średnie pokrycie CMYK, maksymalne całkowite pokrycie obszaru i liczbę pikseli powyżej wybranego progu

Wyjście płyt procesowych i spotowych obsługuje koloranty DeviceCMYK, Separation i DeviceN

Przepisanie kolorów załadowanej strony używa tego samego kompletnego renderera do konwersji złożonych stron na Gray, RGB lub CMYK, zachowując proste wektorowe treści stron o kolorze urządzenia i stosując jawną politykę płyt spot

THPDFTrappingInfo łączy deklaracje trapowania dokumentu, metadane strony i diagnostykę strukturalną TrapNet

Przepływ pracy ICC

Transformacja renderowania może łączyć profil źródłowy PDF, przestrzeń kolorów mieszania, profil proof, profil wyjściowy i rasterowe miejsce docelowe sRGB

Wszystkie cztery intencje renderowania ICC i prawdziwa kompensacja czarnego punktu są stosowane spójnie do kolorów wektorowych i próbek obrazu w całym potoku

Kompletne transformacje są współdzielone przez ścieżki renderowania wektorowego, obrazowego, strony i równoległego przez bezpieczną wątek pamięć podręczną LRU 64 MiB kluczowaną przez treści profili źródłowego, proof i wyjściowego, efektywną intencję renderowania i kompensację czarnego punktu

Spłaszczanie przezroczystości ponownie używa tego samego potoku transformacji, a następnie emituje kafli CalRGB bez szwów pod budżetami pikseli całkowitego rastra i per kafel kontrolowanymi przez wywołującego

Główne API