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:
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 |
// 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:
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
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
| Člen | Vrací |
|---|---|
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):
| Typ | Vlastnost | Výchozí | Popis |
|---|---|---|---|
string | Password | "" | Heslo pro chráněné dokumenty (automaticky zkopírováno do konfigurace formátu). |
string | Watermark | "" | Vlastní text vodoznaku vykreslený na stránkách — viz níže. |
int | TimeOut | 60 | Posuvná expirace relace, v minutách. |
string | BrowserId | "" | Webové farmy: prohlížeč, ke kterému je podepsaný tiket vázán. Nastavte jej pomocí DoconutFarmBinding.EnsureBrowserId (viz Relace a zabezpečení). |
string | UserId | "" | Webové farmy: přihlášený uživatel, ke kterému je tiket vázán, z DoconutFarmBinding.ResolveUserId (viz Relace a zabezpečení). |
int | ImageResolution | 0 | Zastaralé. Nastavte ImageResolution místo toho v konfiguraci formátu. |
bool | IsSecured | true | Rezervováno; nevyžadováno. Řízení přístupu je DoconutOptions.UnsafeMode. |
bool | IsWebFarm / string WebFarmPath | false / "" | Uchováváno pro kód migrovaný z klasického balíčku. Nepřepínají režim farmy — to dělá AddDoconutDistributed. |
bool | EditMode | false | Rezervová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~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Pole | Příklad | Význam |
|---|---|---|
Úvodní ^ | ^ | Volitelné rozložení po všech rozích. Bez něj se používá normální umístění. |
| Text | Confidential | Text vykreslený na každé stránce. Nesmí být prázdný. |
| Color | Red | Pojmenovaná barva. |
| FontSize | 24 | Velikost písma; neplatný číselný vstup se vrátí na výchozí hodnotu. |
| FontName | Verdana | Rodina písma. Musí být nainstalována na serveru — Windows Server má méně fontů než desktop. |
| Opacity | 80 | 0 až 255. Musí být parsovatelná. |
| Angle | -45 | Rotace 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 licence | Poskytnutá vlastní hodnota | Vykreslený výsledek |
|---|---|---|
| Platná placená licence pro prohlížeč | Ne | Čistá stránka |
| Platná placená licence pro prohlížeč | Ano | Vlastní vodoznak |
| Aktivní dočasná/demo licence | Ne | Čistá stránka |
| Aktivní dočasná/demo licence | Ano | Vlastní vodoznak |
| Chybějící, odmítnutá, vypršená, nesprávná verze nebo licence s neplatnou doménou | Jakákoli | Evaluač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
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.
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
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á?