Viewer

Den huvudsakliga dokumentvisarklassen

Viewer (namespace Doconut) är den offentliga ingångspunkten för att öppna dokument från MVC‑kontroller, Web Forms‑sidor och hanterare. Det är en transient‑tjänst som komponeras av DoconutHost.Initialize; lös upp den där du använder den:

csharp
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();

new Viewer() fungerar också när DoconutHost.Initialize har körts — den löser samma tjänster — vilket gör att kod som migrerats från det klassiska paketet kan kompileras. Före Initialize kastas InvalidOperationException.

Viewer har ingen per‑begäran‑dokumentstatus och implementerar avsiktligt inte IDisposable: dokumentsessioner lever oberoende av den, så att disponera en Viewer aldrig kan stänga ett öppet dokument (se Hur visaren fungerar).

OpenDocumentAsync

Öppnar ett dokument och returnerar sessionstoken som widgeten använder för varje senare begäran. När UnsafeMode är false (standard) beviljas token till ASP.NET‑sessionen för den aktuella begäran — anropa den från en begäran som har sessionsstatus (se Sessioner & Säkerhet).

ÖverlagringAnvänd när
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default)Öppning från disk med automatisk formatdetektering och formatets standardkonfiguration
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default)Du behöver per‑format renderingsalternativ (PdfConfig, WordConfig, …)
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default)Dokumentet är inte en fil på disk (en uppladdning, en databas, en blob). fileInfo måste ha rätt filändelse — den väljer formatet
csharp
// Simple open
string token = await viewer.OpenDocumentAsync(path);

// With per-format config and options
token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig { AllowSearch = true, AllowCopy = true },
    new DocOptions { TimeOut = 30 });

// From an upload (HttpPostedFileBase in MVC; HttpPostedFile in Web Forms)
using (var ms = new MemoryStream())
{
    await file.InputStream.CopyToAsync(ms);
    ms.Position = 0;
    token = await viewer.OpenDocumentAsync(ms, new FileInfo(Path.GetFileName(file.FileName)));
}

Undantag att hantera:

  • LicenseException — en licens hittades men avslogs (meddelandet innehåller anledningen), eller så kräver formatet en plugin‑funktion som licensen inte beviljar.
  • FormatNotSupportedException — ingen visare hanterar filens filändelse.
  • InvalidDataException — innehållet är korrupt eller matchar inte dess filändelse.

OpenDocument (synchronous)

För Web Forms‑code‑behind och annan kod som inte använder asynkrona sidor:

text
string OpenDocument(string filePath, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(Stream stream, string fileName, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(byte[] bytes, string fileName, BaseConfig? config = null, DocOptions? options = null)

Var och en returnerar token och lagrar den också i viewer.Token. fileName måste ha rätt filändelse. Dessa omslag är säkra att anropa från en Web Forms‑sida: öppningsvägen återupptas aldrig på ASP.NET‑begärans kontext, så att vänta på den kan inte leda till deadlock. Det samma gäller inte för varje asynkron Doconut‑API — se Web Forms‑avsnittet i Konverterings‑plugin.

CloseDocument

text
void CloseDocument(string token)

Tar bort sessionen (frigör dokumentmotorn omedelbart), tar bort tokenens beviljning från den aktuella begärans ASP.NET‑session och återkallar tokenen. Valfritt — glidande utgång utför samma städning — men rekommenderas för stora dokument.

Session queries

MedlemReturnerar
int GetPageCount(string token)Totalt antal sidor i det öppna dokumentet
(int Width, int Height) GetPageDimensions(string token, int page = 1)Standard renderad sidstorlek vid 100 % zoom — koordinatrymden för annotationer byggda i kod
IReadOnlyList<string> GetWorksheetNames(string token)Ett kalkylarks renderade arbetsblad, i arbetsbokens ordning; tomt för andra dokument

Varje metod kastar ett undantag om tokenen är okänd eller har gått ut.

DocOptions

Per öppning, formatoberoende alternativ (namnrymd Doconut):

TypEgenskapStandardBeskrivning
stringPassword""Lösenord för skyddade dokument (kopieras automatiskt till formatkonfigurationen).
stringWatermark""Anpassad vattenstämpeltext som ritas på renderade sidor — se nedan.
intTimeOut60Glidande sessionsexpiration, i minuter.
stringBrowserId""Webbfarmar: webbläsaren som en signerad biljett är bunden till. Ställ in den med DoconutFarmBinding.EnsureBrowserId (se Sessioner & Säkerhet).
stringUserId""Webbfarmar: den inloggade användaren som en biljett är bunden till, från DoconutFarmBinding.ResolveUserId.
intImageResolution0Föråldrad. Ställ in ImageResolution i formatkonfigurationen istället.
boolIsSecuredtrueReserverad; inte verkställd. Åtkomstkontroll är DoconutOptions.UnsafeMode.
boolIsWebFarm / string WebFarmPathfalse / ""Behålls för kod migrerad från det klassiska paketet. De aktiverar inte farmläge — AddDoconutDistributed gör det.
boolEditModefalseReserverad för den separat distribuerade editorn; lämna false.

Custom watermark

DocOptions.Watermark tar sex tilde‑separerade fält. Ett valfritt inledande ^ begär layout med vattenstämpeln i alla hörn:

text
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig(),
    new DocOptions
    {
        Watermark = "^Confidential~Red~24~Verdana~80~-45",
        TimeOut = 30
    });
FältExempelBetydelse
Inledande ^^Valfri layout med vattenstämpeln i alla hörn. Utan den används normal placering.
TextConfidentialText som ritas på varje sida. Den får inte vara tom.
ColorRedEn namngiven färg.
FontSize24Teckenstorlek; ogiltig numerisk inmatning faller tillbaka på standardvärdet.
FontNameVerdanaTypsnittsfamilj. Den måste vara installerad på servern — Windows Server har färre typsnitt än en arbetsstation.
Opacity800 till 255. Den måste kunna parsas.
Angle-45Rotation i grader; ogiltig numerisk inmatning faller tillbaka på standardvärdet.

Parsern förväntar sig exakt sex fält efter det valfria ^. En ogiltig definition ersätts av en synlig text Invalid Watermark istället för att tyst försvinna.

License decision

LicensstatusAnpassat värde angivetRenderat resultat
Giltig betald visningslicensNejRen sida
Giltig betald visningslicensJaAnpassad vattenstämpel
Aktiv tillfällig/demo-licensNejRen sida
Aktiv tillfällig/demo-licensJaAnpassad vattenstämpel
Saknad, avvisad, utgången, fel version eller ogiltig domän‑licensBådaUtvärderingsvattenstämpel; det anpassade värdet ersätter den inte

Samma beslut gäller för levererade sidor och för export av annotationer. En anpassad vattenstämpel är en funktion i en licensierad applikation, inte ett sätt att ersätta utvärderingsvattenstämpeln.

Annotations API

Server‑sidans laddning och export av annotationer. Genomgången finns i Annotationer.

MedlemSyfte
AnnotationManager GetAnnotationManager(string token)Manager bunden till den öppna sessionens siddimensioner
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight)Manager med explicita siddimensioner
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight)Sessionsoberoende manager
void LoadAnnotationData(string token, AnnotationManager manager)Ladda annotationer byggda i C# in i sessionen
void LoadAnnotationData(string token, string annotationData)Ladda den kodade kuvertet som returneras av AnnotationManager.GetAnnotationData()
void LoadAnnotationXML(string token, XmlDocument annotationXml)Ladda annotationer från XML
XmlDocument GetAnnotationXML(string token)Exportera sessionens annotationer som XML
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default)PDF med inbrända annotationer
Task<int> ExportAnnotationsToPngAsync(…)PNG‑filer med inbrända annotationer
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default)ZIP med PNG‑filer per sida med inbrända annotationer

DICOM‑metadata

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

I det här paketet returneras alltid null, och widgetens metadataförfrågan svarar 501 Not Implemented: att läsa DICOM‑taggar är inte tillgängligt i .NET Framework. DICOM rendering — sidor, ramar och animation — fungerar. Se DICOM‑plugin.

Resurs‑hjälpare — ReferenceCss / ReferenceScripts

Generera <link>‑ och <script>‑taggarna för resurserna som resursmodulen tillhandahåller under DoconutOptions.ResourcesPath, i beroendeordning. Filerna för licensstyrda funktioner (Search, Annotation) genereras endast när licensen beviljar dem.

text
string ReferenceCss(CssConfig? config = null)       // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)
bool IsSearchEnabled { get; }                       // license state, for guarding ribbon init code
bool IsAnnotationEnabled { get; }

CssConfig‑flaggor: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (sök‑styrd), IncludeAnnotationCss (annoterings‑styrd).

ScriptConfig‑flaggor: IncludeJQuery (krävs av alla andra), IncludeBootstrap, IncludeViewerScripts (de grundläggande viewer‑skripten), IncludeSearchScripts och IncludeSearchBar (sök‑styrd), IncludeAnnotationScripts och IncludeAnnotationBar (annoterings‑styrd).

Båda returnerar HTML: skriv dem med @Html.Raw(...) i MVC 5 (generera dem i kontrollern — vyer har ingen @inject) eller <%= %> i Web Forms. Snabbstart visar båda.

RenderViewer

text
string RenderViewer(string elementId, string token, ViewerConfig? config = null)

Returnerar ett <script>‑block som initierar widgeten på elementet med id elementId och visar dokumentet: docViewer({...}) byggt från ViewerConfig (standard: BasePath: '/', ResPath: 'doconut-res/images'), följt av .View(token). Skriv det efter viewer‑skripten. Det genererade skriptet behåller ingen referens till viewer‑objektet, så en sida med egen verktygsrad bör initiera widgeten manuellt istället. Se ViewerConfig.

Webb‑farm

string? AccessToken innehåller den signerade biljetten som utfärdats av den senaste öppningen när distribuerat läge är aktivt och UnsafeMode är false; den är null på en enskild server. Skicka den till widgeten tillsammans med token: objViewer.View(token, access).

Var den här sidan hjälpsam?