Renderingspipeline

Från dokument till sidbilder

Mellan OpenDocumentAsync och PNG‑filen som når webbläsaren finns två distinkta steg: visningsupplösning (vilken motor som laddar dokumentet, bestäms en gång per öppning) och sidbearbetning (vad som händer med varje sidbild vid varje begäran). Att känna till båda förklarar varför ett format renderas på det sätt det gör — och vad DefaultRender egentligen byter.

Steg 1 — Upplösning av formatvisaren

Fabriken mappar filändelsen till en visare via formatkatalogen, med tre nivåer av prioritet:

  1. Anpassade visare först. Allt du registrerat med DoconutOptions.RegisterViewer(extension, factory, defaultConfig?) har företräde framför alla inbyggda.
  2. Inbyggda familjevisare. Katalogen mappar varje visningsbar filändelse till en visarfamilj — Word, Excel, PowerPoint, Pdf, Cad, Dgn, Image, Tiff, Psd, Email, Visio, Project, Xps, Epub, Txt, Html, Mht, Dcn — var och en med sin egen motoradapter. Om ett licensierat plugin bidrar med en visare för samma filändelse ersätter plugin‑visaren den inbyggda. AddDoconut() validerar registrerade plugin‑behörigheter vid start; fabrikens återgång till den inbyggda visaren är en defensiv körningsregel.
  3. Endast plugin‑format. Vissa filändelser har ingen inbyggd visare alls — DICOM (.dcm) finns endast via DICOM‑pluginet. Att öppna en utan den nödvändiga kapaciteten kastar:
text
LicenseException: This document type requires the 'Dicom' plugin license.

En filändelse utan visare ger:

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

Efter upplösning är konfigurationen fastställd: ditt explicita konfigurationsobjekt om du skickade ett, annars formatets standardkonfiguration från katalogen. DocOptions.Password kopieras in i konfigurationen för skyddade dokument.

Steg 1b — Omdirigeringsläge (DefaultRender = false)

De flesta per‑formatkonfigurationer exponerar en DefaultRender‑flagga. Den väljer mellan två fundamentalt olika vägar:

  • DefaultRender = true — dokumentet renderas nativt, direkt till sidbilder.
  • DefaultRender = false — dokumentet konverteras först till en PDF i minnet, källmotorn frigörs, och en PDF‑visare tar över. Den genererade PDF‑filen bäddar in riktig text, så fulltextsökning får pixel‑exakta inbyggda markeringar; pipelinen tvingar AllowSearch och AllowCopy till på för den omdirigerade PDF‑en eftersom konverteringen är osynlig för användaren.

XPS och katalogens standard för MHT använder omdirigeringsvägen. En PDF‑projektion kan erbjuda inbyggd sökning för format som HTML och Microsoft Project. Om den resulterande PDF‑en innehåller bilder utan ett textlager kan den standardvisaren inte söka i dessa pixlar.

Använd omdirigeringsläge när du behöver en PDF‑projektion med text — på kostnad av en förhandskonvertering när dokumentet öppnas.

Steg 2 — Sidbildspipelinen

Renderade sidor bearbetas per begäran genom en fast sekvens:

text
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response
  • Vattenstämpel — tillämpas från licenstillståndet (saknad licens, utgången tillfällig eller prenumerationslicens, ogiltig domän, fel version) och från DocOptions.Watermark för din egen anpassade text. En korrekt licensierad app — eller en aktiv tillfällig licens — utan anpassad vattenstämpel hoppar över detta steg.
  • Rotera/vända — per‑sidostatus som användaren ställer in i widgeten (90°/180°/270°, horisontella/vertikala vändningar) lagras i sessionen och tillämpas vid varje efterföljande rendering av den sidan.
  • Skala — miniatyrbilder och zoomnivåer produceras genom att skala den renderade sidan till den begärda målstorleken; 0 betyder att den levereras i originalstorlek.
  • Inbränning av annotationer — sparade annotationer ritas på bitmapen så export och sidbilder visar dem.
  • Kodning — resultatet kodas till PNG med hjälp av poolade minnesströmmar och skrivs direkt till HTTP‑svaret.

Fel i middleware returneras som PNG‑felbilder (röd text på vit) istället för HTTP‑felssidor, så att widgeten kan visa dem i sidområdet.

Sidcachning

BaseConfig.CachePages (standard true) behåller renderade sidbilder i minnet under dokumentsessionens livstid, så att återbesök av en sida inte renderas om. BaseConfig.ImageResolution (25–300 DPI, 0 = formatstandard) är den huvudsakliga kvalitets-/minnesreglaget; varje formats standard är dokumenterad på dess konfigurationssida.

DocOptions.ImageResolution är föråldrad och styr inte renderingskvaliteten. Om du för vidare en applikation från det tidigare biblioteket, flytta det värdet till formatkonfigurationen — kompilatorn kommer att peka på varje anropställe.

Rendering på en nod vs. många

Allt ovan beskriver rendering på en enskild nod på begäran för den session som öppnade dokumentet. En distribution där en nod renderar och publicerar hela artefaktuppsättningen, och andra noder levererar dessa sidor från delat lagringsutrymme, använder en annan läsväg — se Distribuerade distributioner.

Var du finjusterar vad

Du villJustera
Skarpare sidorImageResolution i formatkonfigurationen
Noggrann textsökning på HTML/EPUB/e‑post/MHT/MPPDefaultRender = false i formatkonfigurationen
Mindre minnesanvändning för stora dokumentCachePages = false, stäng sessioner explicit
Egen stämpel på varje sidaDocOptions.Watermark

Var den här sidan hjälpsam?