Blazor

Prohlížeč dokumentů, který funguje uvnitř Blazoru

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.

75
přípony souborů, žádné klientské parsování
2
podporované hostingové modely
0
WASM payload pro vykreslování

Problém

Proč běžné přístupy v Blazoru škodí

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

Co získáte v aplikaci Blazor

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ů.

Připojení přes OnAfterRenderAsync

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é.

Funguje s renderovacím režimem, který jste zvolili

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.

Žádné mezery ve formátech

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ů.

Náhledy, vyhledávání a tisk

Navigační UI je součástí widgetu. Připojujete prohlížeč, ne stavíte jej z plátna a vstupu pro číslo stránky.

Dokumenty zůstávají na vašem serveru

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

Program.cs a stránka Blazor

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

Blazor ServerBlazor WebAssembly.NET 8.NET 6WindowsDocker
csharp
// 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

Co je dobré vědět před začátkem

  • Widget je jQuery plugin, takže jQuery se musí načíst před skripty prohlížeče.
  • UseSession() a UseDoconutResources() musí být oba zaregistrovány před UseDoconut().
  • Ve WebAssembly patří volání open na server — vystavte jej jako minimální API endpoint a vraťte jen token.
  • Token je neprůhledný. Neukládejte jej do dotazového řetězce, který logujete, a neukládejte jej v komponentním stavu déle než životnost stránky.

Často kladené otázky

Funguje to v Blazor WebAssembly, nebo jen v Serveru?

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.

Bude renderer Blazoru bojovat s DOM prohlížeče?

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.

Potřebuji samostatnou stránku prohlížeče pro každý typ souboru?

Ne. Jedna stránka obsluhuje celý katalog. Formát je detekován z dokumentu, který otevřete, nikoli předem vámi vybraný.

Vyzkoušejte to na vlastních dokumentech

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č.