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:
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).
| Överlagring | Anvä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 |
// 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:
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
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
| Medlem | Returnerar |
|---|---|
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):
| Typ | Egenskap | Standard | Beskrivning |
|---|---|---|---|
string | Password | "" | Lösenord för skyddade dokument (kopieras automatiskt till formatkonfigurationen). |
string | Watermark | "" | Anpassad vattenstämpeltext som ritas på renderade sidor — se nedan. |
int | TimeOut | 60 | Glidande sessionsexpiration, i minuter. |
string | BrowserId | "" | Webbfarmar: webbläsaren som en signerad biljett är bunden till. Ställ in den med DoconutFarmBinding.EnsureBrowserId (se Sessioner & Säkerhet). |
string | UserId | "" | Webbfarmar: den inloggade användaren som en biljett är bunden till, från DoconutFarmBinding.ResolveUserId. |
int | ImageResolution | 0 | Föråldrad. Ställ in ImageResolution i formatkonfigurationen istället. |
bool | IsSecured | true | Reserverad; inte verkställd. Åtkomstkontroll är DoconutOptions.UnsafeMode. |
bool | IsWebFarm / string WebFarmPath | false / "" | Behålls för kod migrerad från det klassiska paketet. De aktiverar inte farmläge — AddDoconutDistributed gör det. |
bool | EditMode | false | Reserverad 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~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Fält | Exempel | Betydelse |
|---|---|---|
Inledande ^ | ^ | Valfri layout med vattenstämpeln i alla hörn. Utan den används normal placering. |
| Text | Confidential | Text som ritas på varje sida. Den får inte vara tom. |
| Color | Red | En namngiven färg. |
| FontSize | 24 | Teckenstorlek; ogiltig numerisk inmatning faller tillbaka på standardvärdet. |
| FontName | Verdana | Typsnittsfamilj. Den måste vara installerad på servern — Windows Server har färre typsnitt än en arbetsstation. |
| Opacity | 80 | 0 till 255. Den måste kunna parsas. |
| Angle | -45 | Rotation 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
| Licensstatus | Anpassat värde angivet | Renderat resultat |
|---|---|---|
| Giltig betald visningslicens | Nej | Ren sida |
| Giltig betald visningslicens | Ja | Anpassad vattenstämpel |
| Aktiv tillfällig/demo-licens | Nej | Ren sida |
| Aktiv tillfällig/demo-licens | Ja | Anpassad vattenstämpel |
| Saknad, avvisad, utgången, fel version eller ogiltig domän‑licens | Båda | Utvä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.
| Medlem | Syfte |
|---|---|
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
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.
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
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?