Rurociąg renderowania

Od dokumentu do obrazów stron

Między OpenDocumentAsync a PNG, które dociera do przeglądarki, istnieją dwa odrębne etapy: rozwiązywanie przeglądarki (który silnik ładuje dokument, ustalane raz przy otwarciu) i przetwarzanie stron (co dzieje się z każdym obrazem strony przy każdym żądaniu). Znajomość obu wyjaśnia, dlaczego format renderuje się w określony sposób — oraz co naprawdę przełącza DefaultRender.

Etap 1 — Rozwiązywanie przeglądarki formatu

Fabryka mapuje rozszerzenie pliku na przeglądarkę za pomocą katalogu formatów, z trzema poziomami priorytetu:

  1. Najpierw własne przeglądarki. Wszystko, co zarejestrowałeś przy pomocy DoconutOptions.RegisterViewer(extension, factory, defaultConfig?), ma pierwszeństwo przed wszystkimi wbudowanymi.
  2. Wbudowane przeglądarki rodzinne. Katalog mapuje każde rozszerzenie możliwe do wyświetlenia na rodzinę przeglądarek — Word, Excel, PowerPoint, Pdf, Cad, Dgn, Image, Tiff, Psd, Email, Visio, Project, Xps, Epub, Txt, Html, Mht, Dcn — każda z własnym adapterem silnika. Jeśli licencjonowana wtyczka dostarcza przeglądarkę dla tego samego rozszerzenia, przeglądarka wtyczki zastępuje wbudowaną. AddDoconut() weryfikuje uprawnienia zarejestrowanych wtyczek przy starcie; przejście fabryki do wbudowanej przeglądarki jest defensywną regułą w czasie wykonywania.
  3. Formaty tylko z wtyczką. Niektóre rozszerzenia nie mają w ogóle wbudowanej przeglądarki — DICOM (.dcm) istnieje wyłącznie poprzez wtyczkę DICOM. Otwarcie takiego pliku bez wymaganego uprawnienia powoduje wyrzucenie:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Rozszerzenie, dla którego nie ma przeglądarki, powoduje podniesienie:

text
FormatNotSupportedException: Document format '<extension>' is not supported.

Po rozwiązaniu, konfiguracja zostaje ustalona: twój explicite podany obiekt konfiguracji, jeśli go przekazałeś, w przeciwnym razie domyślna konfiguracja formatu z katalogu. DocOptions.Password jest kopiowane do konfiguracji dla chronionych dokumentów.

Etap 1b — Tryb przekierowania (DefaultRender = false)

Większość konfiguracji per-format udostępnia flagę DefaultRender. Wybiera ona pomiędzy dwoma zasadniczo różnymi ścieżkami:

  • DefaultRender = true — dokument renderuje się natywnie, bezpośrednio do obrazów stron.
  • DefaultRender = false — dokument jest najpierw konwertowany do PDF w pamięci, silnik źródłowy jest zwalniany, a przejmuje go przeglądarka PDF. Wygenerowany PDF zawiera prawdziwy tekst, więc pełnotekstowe wyszukiwanie uzyskuje pikselowo dokładne natywne podświetlenia; rurociąg wymusza włączenie AllowSearch i AllowCopy dla przekierowanego PDF, ponieważ konwersja jest niewidoczna dla użytkownika.

XPS oraz domyślne ustawienie katalogu dla MHT używają ścieżki przekierowania. Projekcja PDF może zapewnić natywne wyszukiwanie dla formatów takich jak HTML i Microsoft Project. Jeśli wynikowy PDF zawiera obrazy bez warstwy tekstowej, standardowa przeglądarka nie może przeszukiwać tych pikseli.

Używaj trybu przekierowania, gdy potrzebujesz projekcji PDF zawierającej tekst — kosztem wstępnej konwersji przy otwieraniu dokumentu.

Etap 2 — Rurociąg obrazów stron

Renderowane strony są przetwarzane przy każdym żądaniu według stałej sekwencji:

text
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response
  • Watermark — stosowany w zależności od stanu licencji (brak licencji, wygasła tymczasowa lub subskrypcyjna, nieprawidłowa domena, zła wersja) oraz z DocOptions.Watermark dla własnego tekstu. Aplikacja z prawidłową licencją — lub aktywną licencją tymczasową — bez własnego znaku wodnego pomija ten krok.
  • Rotate/flip — stan per-strona ustawiany przez użytkownika w widżecie (90°/180°/270°, odbicia poziome/pionowe) jest przechowywany w sesji i stosowany przy każdym kolejnym renderowaniu tej strony.
  • Scale — miniatury i poziomy powiększenia są tworzone przez skalowanie renderowanej strony do żądanego rozmiaru docelowego; 0 oznacza podanie w oryginalnym rozmiarze.
  • Annotation burn — zapisane adnotacje są rysowane na bitmapie, tak aby eksporty i obrazy stron je wyświetlały.
  • Encoding — wynik jest kodowany do PNG przy użyciu pulowanych strumieni pamięci i zapisywany bezpośrednio w odpowiedzi HTTP.

Błędy w middleware są zwracane jako obrazy błędów PNG (czerwony tekst na białym tle) zamiast stron błędów HTTP, aby widżet mógł je wyświetlić w obszarze strony.

Buforowanie stron

BaseConfig.CachePages (domyślnie true) przechowuje renderowane obrazy stron w pamięci przez cały czas trwania sesji dokumentu, więc ponowne odwiedzenie strony nie powoduje jej ponownego renderowania. BaseConfig.ImageResolution (25–300 DPI, 0 = domyślne dla formatu) jest głównym ustawieniem jakości/pamięci; domyślne wartości każdego formatu są udokumentowane na jego stronie konfiguracji.

DocOptions.ImageResolution jest przestarzałe i nie kontroluje jakości renderowania. Jeśli przenosisz aplikację z poprzedniej biblioteki, przenieś tę wartość do konfiguracji formatu — kompilator wskaże każde miejsce wywołania.

Renderowanie na jednym węźle vs. wielu

Wszystko powyższe opisuje renderowanie na żądanie na pojedynczym węźle dla sesji, która otworzyła dokument. Wdrożenie, w którym jeden węzeł renderuje i publikuje cały zestaw artefaktów, a inne węzły serwują te strony z współdzielonego magazynu, używa innej ścieżki odczytu — zobacz Rozproszone wdrożenia.

Gdzie dostroić co

Co chceszDostrój
Ostrzejsze stronyImageResolution w konfiguracji formatu
Dokładne wyszukiwanie tekstu w HTML/EPUB/e‑mail/MHT/MPPDefaultRender = false w konfiguracji formatu
Mniejsze zużycie pamięci przy dużych dokumentachCachePages = false, zamykaj sesje explicite
Własny znak na każdej stronieDocOptions.Watermark

Czy ta strona była pomocna?