Viewer

Hlavní třída prohlížeče dokumentů

Viewer (namespace Doconut) je veřejný vstupní bod pro otevírání dokumentů z MVC kontrolerů, stránek Web Forms a handlerů. Jedná se o přechodovou službu vytvořenou pomocí DoconutHost.Initialize; získáte ji tam, kde ji používáte:

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

new Viewer() také funguje, jakmile byla spuštěna DoconutHost.Initialize — získá stejné služby — což umožňuje, aby migrovaný kód ze starého balíčku stále kompiloval. Před Initialize vyvolá InvalidOperationException.

Viewer neukládá žádný stav dokumentu na požadavek a úmyslně neimplementuje IDisposable: relace dokumentů existují nezávisle na ní, takže uvolnění Viewer by nikdy neuzavřelo otevřený dokument (viz Jak funguje Viewer).

OpenDocumentAsync

Otevře dokument a vrátí token relace, který widget používá pro každé další volání. Když je UnsafeMode nastaveno na false (výchozí), token je přidělen ASP.NET relaci aktuálního požadavku — zavolejte jej z požadavku, který má stav relace (viz Relace a zabezpečení).

PřetíženíPoužít když
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default)Otevírání z disku s automatickým rozpoznáním formátu a výchozím nastavením formátu
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default)Potřebujete nastavení renderování pro konkrétní formát (PdfConfig, WordConfig, …)
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default)Dokument není soubor na disku (nahrání, databáze, blob). fileInfo musí nést správnou příponu — určuje formát
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)));
}

Výjimky, které je třeba ošetřit:

  • LicenseException — licence byla nalezena, ale odmítnuta (zpráva obsahuje důvod), nebo formát vyžaduje schopnost pluginu, kterou licence neposkytuje.
  • FormatNotSupportedException — žádný prohlížeč neobsluhuje příponu souboru.
  • InvalidDataException — obsah je poškozený nebo neodpovídá své příponě.

OpenDocument (synchronous)

Pro kód-behind Web Forms a další kód, který nepoužívá asynchronní stránky:

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)

Každá metoda vrací token a také jej ukládá do viewer.Token. fileName musí mít správnou příponu. Tyto obálky lze bezpečně volat z stránky Web Forms: cesta otevření se nikdy neobnoví v kontextu ASP.NET požadavku, takže čekání na ni nemůže způsobit zablokování. To neplatí pro každé asynchronní API Doconut — viz sekce Web Forms v Pluginu převodníku.

Zavřít dokument

text
void CloseDocument(string token)

Odstraní relaci (okamžitě uvolní dokumentový engine), odstraní oprávnění tokenu z ASP.NET relace aktuálního požadavku a zruší token. Volitelné — posuvná expirace provádí stejný úklid — ale je doporučena pro velké dokumenty.

Dotazy na relaci

ČlenVrací
int GetPageCount(string token)Celkový počet stránek otevřeného dokumentu
(int Width, int Height) GetPageDimensions(string token, int page = 1)Výchozí velikost vykreslené stránky při 100 % přiblížení — souřadnicový prostor pro anotace vytvořené v kódu
IReadOnlyList<string> GetWorksheetNames(string token)Vykreslené listy tabulky ve stejném pořadí jako sešit; prázdné pro ostatní typy dokumentů

Každá metoda vyvolá výjimku, pokud je token neznámý nebo vypršel.

Možnosti dokumentu

Per-open, format-independent options (namespace Doconut):

TypVlastnostVýchozíPopis
stringPassword""Heslo pro chráněné dokumenty (automaticky zkopírováno do konfigurace formátu).
stringWatermark""Vlastní text vodoznaku vykreslený na stránkách — viz níže.
intTimeOut60Posuvná expirace relace, v minutách.
stringBrowserId""Webové farmy: prohlížeč, ke kterému je podepsaný tiket vázán. Nastavte jej pomocí DoconutFarmBinding.EnsureBrowserId (viz Relace a zabezpečení).
stringUserId""Webové farmy: přihlášený uživatel, ke kterému je tiket vázán, z DoconutFarmBinding.ResolveUserId (viz Relace a zabezpečení).
intImageResolution0Zastaralé. Nastavte ImageResolution místo toho v konfiguraci formátu.
boolIsSecuredtrueRezervováno; nevyžadováno. Řízení přístupu je DoconutOptions.UnsafeMode.
boolIsWebFarm / string WebFarmPathfalse / ""Uchováváno pro kód migrovaný z klasického balíčku. Nepřepínají režim farmy — to dělá AddDoconutDistributed.
boolEditModefalseRezervováno pro samostatně distribuovaný editor; ponechte false.

Vlastní vodoznak

DocOptions.Watermark přijímá šest polí oddělených vlnkou. Volitelný úvodní znak ^ požaduje rozložení po všech rozích:

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
    });
PolePříkladVýznam
Úvodní ^^Volitelné rozložení po všech rozích. Bez něj se používá normální umístění.
TextConfidentialText vykreslený na každé stránce. Nesmí být prázdný.
ColorRedPojmenovaná barva.
FontSize24Velikost písma; neplatný číselný vstup se vrátí na výchozí hodnotu.
FontNameVerdanaRodina písma. Musí být nainstalována na serveru — Windows Server má méně fontů než desktop.
Opacity800 až 255. Musí být parsovatelná.
Angle-45Rotace ve stupních; neplatný číselný vstup se vrátí na výchozí hodnotu.

Parser očekává přesně šest polí po volitelném ^. Neplatná definice je nahrazena viditelným textem Invalid Watermark místo tichého zmizení.

Rozhodnutí o licenci

Stav licencePoskytnutá vlastní hodnotaVykreslený výsledek
Platná placená licence pro prohlížečNeČistá stránka
Platná placená licence pro prohlížečAnoVlastní vodoznak
Aktivní dočasná/demo licenceNeČistá stránka
Aktivní dočasná/demo licenceAnoVlastní vodoznak
Chybějící, odmítnutá, vypršená, nesprávná verze nebo licence s neplatnou doménouJakákoliEvaluační vodoznak; vlastní hodnota jej nenahrazuje

Stejné rozhodnutí platí pro poskytované stránky i pro exporty anotací. Vlastní vodoznak je funkcí licencované aplikace, nikoli způsobem, jak nahradit evaluační vodoznak.

API anotací

Nahrávání a export anotací na straně serveru. Průvodce je v Anotace.

ČlenÚčel
AnnotationManager GetAnnotationManager(string token)Správce vázaný na rozměry stránky otevřené relace
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight)Správce s explicitními rozměry stránky
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight)Správce nezávislý na relaci
void LoadAnnotationData(string token, AnnotationManager manager)Načte anotace vytvořené v C# do relace
void LoadAnnotationData(string token, string annotationData)Načte zakódovaný obal vrácený metodou AnnotationManager.GetAnnotationData()
void LoadAnnotationXML(string token, XmlDocument annotationXml)Načte anotace z XML
XmlDocument GetAnnotationXML(string token)Exportuje anotace relace jako XML
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default)PDF s vnořenými anotacemi
Task<int> ExportAnnotationsToPngAsync(…)Soubory PNG s vnořenými anotacemi
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default)ZIP soubor s PNG stránkami s vnořenými anotacemi

DICOM metadata

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

V tomto balíčku vždy vrací null a požadavek widgetu na metadata odpovídá 501 Not Implemented: čtení DICOM tagů není k dispozici v .NET Framework. DICOM rendering — stránky, rámečky a animace — funguje. Viz DICOM plugin.

Pomocníci zdrojů — ReferenceCss / ReferenceScripts

Vypíše značky <link> a <script> pro zdroje, které modul zdrojů poskytuje pod DoconutOptions.ResourcesPath, v pořadí závislostí. Soubory pro funkce omezené licencí (Search, Annotation) jsou vypisovány pouze když licence umožňuje.

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 příznaky: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (omezeno vyhledáváním), IncludeAnnotationCss (omezeno anotací).

ScriptConfig příznaky: IncludeJQuery (vyžadováno všemi ostatními), IncludeBootstrap, IncludeViewerScripts (základní skripty prohlížeče), IncludeSearchScripts a IncludeSearchBar (omezeno vyhledáváním), IncludeAnnotationScripts a IncludeAnnotationBar (omezeno anotací).

Obě vrací HTML: zapište je pomocí @Html.Raw(...) v MVC 5 (vytvořte je v kontroleru — pohledy nemají @inject) nebo <%= %> ve Web Forms. Rychlý start ukazuje obojí.

RenderViewer

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

Vrací blok <script>, který inicializuje widget na elementu s id elementId a zobrazí dokument: docViewer({...}) vytvořený z ViewerConfig (výchozí: BasePath: '/', ResPath: 'doconut-res/images'), poté .View(token). Zapište jej po skriptech vieweru. Vygenerovaný skript neuchovává žádnou referenci na objekt vieweru, takže stránka s vlastní lištou by měla widget inicializovat ručně. Viz ViewerConfig.

Web farm

string? AccessToken obsahuje podepsaný tiket vydaný posledním otevřením, když je aktivní distribuovaný režim a UnsafeMode je false; na jediném serveru je null. Pošlete jej widgetu s tokenem: objViewer.View(token, access).

Byla tato stránka užitečná?