Potok renderowania

Od dokumentu do obrazów stron

Pomiędzy OpenDocumentAsync a PNG, które dociera do przeglądarki, istnieją dwa odrębne etapy: rozwiązywanie podglądu (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 podglądu formatu

Fabryka mapuje rozszerzenie pliku na podgląd za pomocą katalogu formatów, z trzema poziomami priorytetu:

  1. Najpierw własne podglądy. Wszystko, co zarejestrowałeś przy pomocy DoconutOptions.RegisterViewer(extension, factory, defaultConfig?), ma pierwszeństwo przed wszystkimi wbudowanymi.
  2. Wbudowane podglądy rodzinne. Katalog mapuje każde rozszerzenie możliwe do podglądu na rodzinę podglądu — 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 podgląd dla tego samego rozszerzenia, podgląd wtyczki zastępuje wbudowany. AddDoconut() weryfikuje zarejestrowane uprawnienia wtyczek przy starcie; awaryjne przejście fabryki do wbudowanego podglądu jest regułą obronną w czasie wykonywania.
  3. Formaty tylko wtyczkowe. Niektóre rozszerzenia nie mają w ogóle wbudowanego podglądu — DICOM (.dcm) istnieje wyłącznie poprzez wtyczkę DICOM. Otwarcie takiego pliku bez wymaganego uprawnienia powoduje błąd:
text
LicenseException: This document type requires the 'Dicom' plugin license.

Rozszerzenie, dla którego nie ma podglądu, generuje:

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

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

Etap 1b — Tryb przekierowania (DefaultRender = false)

Większość konfiguracji per format udostępnia flagę DefaultRender. Wybiera ona pomiędzy dwiema 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 podgląd PDF przejmuje kontrolę. Wygenerowany PDF zawiera prawdziwy tekst, więc pełnotekstowe wyszukiwanie uzyskuje pikselowo dokładne natywne podświetlenia; potok wymusza włączone 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, standardowy podgląd 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 — Potok obrazów stron

Renderowane strony są przetwarzane przy każdym żądaniu według ustalonej kolejności:

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. Poprawnie licencjonowana aplikacja — lub aktywna tymczasowa licencja — 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 puli 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, dzięki czemu widżet może 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 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.

Gdzie dostroić co

ChceszDostosuj
Ostrojsze stronyImageResolution w konfiguracji formatu
Dokładne wyszukiwanie tekstu w HTML/EPUB/email/MHT/MPPDefaultRender = false w konfiguracji formatu
Mniejsze zużycie pamięci przy dużych dokumentachCachePages = false, zamykaj sesje explicite
Własny stempel na każdej stronieDocOptions.Watermark

Czy ta strona była pomocna?