Visare

Den huvudsakliga dokumentvisarklassen

Viewer (namespace Doconut) är den offentliga ingångspunkten för att öppna dokument från Razor‑sidor, MVC‑kontroller, Blazor‑komponenter eller minimala API:er. Den är sealed, registrerad som en transient‑tjänst av AddDoconut(), och löses upp via konstruktor‑injektion — skapa den aldrig direkt.

Viewer håller ingen per‑request‑state och implementerar avsiktligt inte IDisposable: dokumentsessioner lever oberoende i sessionscachen, så att avyttra tjänsten skulle aldrig kunna stänga ett öppet dokument (se Core Concepts → How the Viewer Works).

OpenDocumentAsync

Öppnar ett dokument och returnerar sessionstoken som klient‑widgeten använder för alla efterföljande anrop.

Ö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 (uppladdning, databas, blob). fileInfo måste innehålla rätt filändelse — den styr formatdetektering
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
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));

Undantag att hantera:

  • LicenseException — en hittad licens avvisas (meddelandet innehåller avvisningsorsaken), eller så kräver formatet en plugin‑funktion som inte längre är beviljad. Kalenderutgång utan avvisningsmeddelande degraderas till vattenstämpel‑rendering istället för att kasta ett undantag.
  • FormatNotSupportedExceptionDocument format '<extension>' is not supported.
  • InvalidDataException — filinnehållet är korrupt eller matchar inte dess filändelse.

CloseDocument

text
void CloseDocument(string token)

Tar bort sessionen från cachen (avyttrar dokumentmotorn omedelbart), raderar säkerhetsmarkören och återkallar åtkomstbehörigheten. Valfritt — glidande utgång utför samma städning — men rekommenderas för stora dokument.

GetPageCount

text
int GetPageCount(string token)

Totalt antal sidor i den öppna sessionen. Kastar om token är okänd eller har löpt ut.

DocOptions

Per‑öppning, format‑oberoende alternativ (namespace Doconut):

TypEgenskapStandardBeskrivning
stringPassword""Lösenord för skyddade dokument (kopieras automatiskt in i formatkonfigurationen).
intImageResolution0Obsolet. Behålls endast för kompatibilitet — sätt ImageResolution i formatkonfigurationen istället.
stringWatermark""Anpassad vattenstämpeltext som ritas på renderade sidor. Formatsträng: "^Text~Color~FontSize~FontName~Opacity~Angle", t.ex. "^Sample Copy~Red~24~Verdana~80~-45".
intTimeOut60Sessions glidande utgång i minuter.
boolIsSecuredtrueEj för närvarande verkställd — reserverad. Token‑bindning styrs globalt av DoconutOptions.UnsafeMode (se Core Concepts → Sessions & Security).

Klassen exponerar också specialiserade egenskaper som avsiktligt ligger utanför det normala enkla‑host‑visningsflödet:

TypEgenskapStandardBeskrivning
boolIsWebFarmfalseMarkerar öppningsoperationen som ett web‑farm‑scenario. Använd endast med motsvarande delade lagrings‑/sessionsarkitektur.
stringWebFarmPath""Delad sökväg som används av det specialiserade web‑farm‑arbetsflödet. Tom i den normala enkla‑host‑visaren.
boolEditModefalseReserverad för det separat distribuerade Editor‑arbetsflödet; lämna false för standard‑visaren.

Anpassad vattenstämpel

DocOptions.Watermark använder sex tilde‑separerade fält. Ett valfritt inledande ^ begär layout 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 i alla hörn. Utan den används normal placering av vattenstämpeln.
TextConfidentialText som renderas på varje sida. Den får inte vara tom.
ColorRedNamngiven färg som förstås av ritlagret.
FontSize24Teckenstorlek; ogiltig numerisk inmatning faller tillbaka på renderarens standard.
FontNameVerdanaBegärd teckensnittsfamilj. Säkerställ att den är installerad i distributionsmiljön.
Opacity80Byte‑värde från 0 till 255. Det måste kunna parsas korrekt.
Angle-45Rotationsvinkel 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 SDK:ns synliga Invalid Watermark‑fallback istället för att tyst försvinna.

Licensbeslut

LicensstatusAnpassat värde angivetRenderat resultat
Giltig betald visarlincensNejRen sida
Giltig betald visarlincensJaAnpassad vattenstämpel
Aktiv temporär/demobasvisareNejRen bas‑visarsida
Aktiv temporär/demobasvisareJaAnpassad vattenstämpel när den rena bas‑visarsidan gäller
Saknad, avvisad, utgången, fel version eller ogiltig domän‑licensNågot av demTvingande/utvärderings‑vattenstämpel; det anpassade värdet ersätter den inte
Plugin‑rendering under utvärderingsreglerNågot av demUtvärderings‑vattenstämpel

Samma beslut tillämpas på levererade sidbilder och export av annotationer. Animerad GIF‑output märks bild för bild. En anpassad vattenstämpel är därför en licensierad applikationsfunktion, inte ett sätt att ersätta eller undertrycka utvärderings‑vattenstämpeln.

Annotations‑API

Server‑sidans laddning och export av annotationer. Den fullständiga genomgången finns i Guider → Annotations; gränssnittet är:

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 annotationer från den kodade page/Base64‑omslaget 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‑bilder per sida med inbrända annotationer

DICOM‑metadata

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

Returnerar DICOM‑tag‑metadata för sessioner öppnade via DICOM‑pluginen; null för icke‑DICOM‑dokument.

Resurs‑hjälpmedel — ReferenceCss / ReferenceScripts

Genererar <link>/<script>‑taggarna för de inbäddade resurserna som levereras av UseDoconutResources(), i korrekt beroendeordning. Paket för licens‑styrda funktioner såsom sökning och annotation genereras endast när licensen möjliggör dem, så att klient‑UI:n förblir i linje med serverbeteendet.

text
string ReferenceCss(CssConfig? config = null)      // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)

CssConfig‑flaggor: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (search‑gated), IncludeAnnotationCss (annotation‑gated).

ScriptConfig‑flaggor: IncludeJQuery (required by all others), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts and IncludeSearchBar (search‑gated), IncludeAnnotationScripts and IncludeAnnotationBar (annotation‑gated).

html
@inject Doconut.Viewer Viewer

@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))

Var den här sidan till hjälp?