Rurociąg renderowania
Od dokumentu do obrazów stron
Pomiędzy OpenDocumentAsync a PNG, który 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 do DocImage.axd). 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 poprzez katalog formatów, z trzema poziomami priorytetu:
- Własne podglądy najpierw. Wszystko, co zarejestrowałeś przy pomocy
DoconutOptions.RegisterViewer(extension, factory, defaultConfig?), ma pierwszeństwo przed wszystkimi wbudowanymi. - 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.
- Formaty tylko wtyczkowe. Niektóre rozszerzenia nie mają w ogóle wbudowanego podglądu — DICOM (
.dcm,.ima) istnieje wyłącznie poprzez wtyczkę DICOM. Otwarcie takiego pliku bez wymaganego uprawnienia powoduje wyjątek:
LicenseException: This document type requires the 'Dicom' plugin license.Rozszerzenie, dla którego żaden podgląd nie jest dostępny, powoduje FormatNotSupportedException.
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 dokumentów zabezpieczonych.
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 wyszukiwanie pełnotekstowe uzyskuje dokładne natywne podświetlenia; rurociąg włączaAllowSearchiAllowCopydla przekierowanego PDF, ponieważ konwersja jest niewidoczna dla użytkownika.
XPS oraz MHT domyślnie używają ścieżki przekierowania. Projekcja PDF zapewnia natywne wyszukiwanie dla formatów takich jak HTML i Microsoft Project. Jeśli wygenerowany PDF zawiera obrazy bez warstwy tekstowej, te piksele nie mogą być przeszukiwane.
Używaj trybu przekierowania, gdy potrzebujesz przeszukiwalnej projekcji zawierającej tekst — kosztem wstępnej konwersji przy otwieraniu dokumentu.
Etap 2 — Rurociąg obrazów stron
Każde żądanie strony do DocImage.axd wykonuje stałą sekwencję:
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 licencja tymczasowa lub subskrypcyjna, nieprawidłowa domena, kompilacja spoza wersji licencji) oraz z
DocOptions.Watermarkdla własnego tekstu. Licencjonowana strona 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 i pionowe) jest przechowywany w sesji i stosowany przy każdym kolejnym renderowaniu tej strony.
- Scale — miniatury i poziomy przybliżenia są tworzone przez skalowanie wyrenderowanej strony do żądanego rozmiaru.
- Annotation burn — zapisane adnotacje są rysowane na bitmapie, więc eksporty i obrazy stron je wyświetlają.
- Encoding — wynik jest kodowany jako PNG i zapisywany bezpośrednio w odpowiedzi.
Błędy wewnątrz obsługi są zwracane jako obrazy PNG z błędem (czerwony tekst na białym tle) z kodem statusu 200, 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 wyrenderowane 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 i zużycia pamięci; domyślne wartości dla każdego formatu są wymienione w Format Configs.
Na pojedynczym węźle sesje i buforowane strony znajdują się w pamięci procesu roboczego. Recykling puli aplikacji — zaplanowany lub wywołany edycją Web.config lub upływem czasu bezczynności — usuwa wszystkie otwarte sesje dokumentów, a widżet wyświetla wtedy komunikat Document session not found. Please re-open document. W trybie rozproszonym (zobacz Sessions & Security) sesja jest odtwarzana ze wspólnego magazynu.
Gdzie dostroić co
| Chcesz | Dostrój |
|---|---|
| Ostrość stron | ImageResolution w konfiguracji formatu |
| Dokładne wyszukiwanie tekstu w HTML, EPUB, email, MHT lub MPP | DefaultRender = false w konfiguracji formatu |
| Mniejsze zużycie pamięci przy dużych dokumentach | CachePages = false i zamykanie sesji explicite |
| Własny stempel na każdej stronie | DocOptions.Watermark |
Czy ta strona była pomocna?