Blazor Server a WebAssembly
Vykreslování probíhá na serveru v obou případech. V Serveru je volání přímé; ve WebAssembly vystavíte volání open jako minimální API endpoint a předáte vrácený token widgetu. Obě varianty jsou jen pár řádků.
Blazor vám poskytuje model komponent a renderovací smyčku, která se příliš nestará o JavaScript třetích stran. Doconut s tím spolupracuje spíše než proti němu: vykreslování probíhá na serveru ve vašem vlastním procesu a widget se připojí k obyčejnému elementu, který ovládáte prostřednictvím normálního interop životního cyklu.
Problém
Klientská cesta znamená zaslání renderovacího enginu do prohlížeče. V Blazor WebAssembly to přímo zvyšuje velikost stažení a pokrývá jen PDF — jakmile někdo nahraje DOCX nebo XLSX, jste zpět na začátku.
Cesta iframe-to-Office znamená, že vaše dokumenty projdou infrastrukturou někoho jiného, což je rozhovor s vaším bezpečnostním týmem, který pravděpodobně nebudete chtít mít dvakrát.
Doconut zvolí třetí cestu. Soubor je rasterizován na obrázky stránek vaším vlastním serverem a Blazor musí hostovat jen div. Váš strom komponent nikdy nepřekresluje prohlížeč, který nevlastní, a diff engine nemá s čím bojovat.
Schopnosti
Vykreslování probíhá na serveru v obou případech. V Serveru je volání přímé; ve WebAssembly vystavíte volání open jako minimální API endpoint a předáte vrácený token widgetu. Obě varianty jsou jen pár řádků.
Inicializujte widget jednou, po prvním vykreslení, pomocí standardního JS interop hooku. Protože Blazor nikdy nevlastní interní DOM prohlížeče, následná překreslení jej nechají nedotčené.
Interactive Server, Interactive WebAssembly nebo Auto. Prohlížeč je řízen neprůhledným tokenem místo stavem komponenty, takže změna renderovacího režimu nemění integraci.
Stejná komponenta otevírá PDF, DOCX, XLSX, PPTX, DWG, MSG a zbytek katalogu. Napíšete jednu stránku prohlížeče, ne jednu pro každou rodinu souborů.
Navigační UI je součástí widgetu. Připojujete prohlížeč, ne stavíte jej z plátna a vstupu pro číslo stránky.
Do prohlížeče se streamuje jen vykreslené obrázky stránek, což je v WebAssembly důležitější, než lidé očekávají — klient je nakonec plně prohlížitelný.
Integrace
doconutHost.mount je několik řádků vašeho vlastního JavaScriptu, který volá $('#div_ctlDoc').docViewer({ ... }) a pak .View(token). Umístění mimo Blazor je úmyslné — DOM widgetu by neměl být něčím, co se renderer snaží sladit.
Podporované platformy
// Program.cs — order matters
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddSession();
app.UseSession(); // before UseDoconut()
app.UseDoconutResources(); // before UseDoconut()
app.UseDoconut();
// Viewer.razor — open server-side, hand the token to the widget
@inject Doconut.Viewer Viewer
@inject IJSRuntime JS
<div id="divDocViewer"><div id="div_ctlDoc"></div></div>
@code {
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender) return;
// Authorize first — the viewer renders whatever you hand it.
string token = await Viewer.OpenDocumentAsync("wwwroot/files/Sample.pdf");
await JS.InvokeVoidAsync("doconutHost.mount", token);
}
}Podrobnosti
Obojí. Vykreslování vždy probíhá na serveru, takže ve WebAssembly přidáte jeden endpoint, který volá OpenDocumentAsync a vrací token. Klient nikdy neparsuje dokument, což je přesně důvod, proč zůstává WASM payload neovlivněn.
Ne, pokud se připojíte do elementu, který Blazor považuje za list. Vykreslete prázdný div a nechte widget jej naplnit přes interop — diff engine nemá žádné děti, které by musel sladit.
Ne. Jedna stránka obsluhuje celý katalog. Formát je detekován z dokumentu, který otevřete, nikoli předem vámi vybraný.
Dočasná licence trvá několik minut k vyžádání a běží zcela na vašem počítači. Důležité soubory jsou ty, které již rozbíjejí váš současný prohlížeč.