Blazor

Penampil dokumen yang berfungsi di dalam Blazor

Blazor memberi Anda model komponen dan loop render yang tidak terlalu memperhatikan JavaScript pihak ketiga. Doconut bekerja dengan itu bukan melawannya: rendering terjadi di sisi server dalam proses Anda sendiri, dan widget dipasang ke dalam elemen sederhana yang Anda kontrol melalui siklus hidup interop normal.

75
ekstensi file, tanpa parsing klien
2
model hosting yang didukung
0
payload WASM untuk rendering

Masalah

Mengapa pendekatan biasa menyulitkan di Blazor

Rute sisi klien berarti mengirimkan mesin rendering ke dalam browser. Di Blazor WebAssembly hal ini langsung menambah ukuran unduhan Anda, dan hanya mendukung PDF — begitu seseorang mengunggah DOCX atau XLSX Anda kembali ke awal.

Rute iframe-ke-Office berarti dokumen Anda melewati infrastruktur orang lain, yang memerlukan diskusi dengan tim keamanan Anda yang mungkin tidak ingin Anda lakukan dua kali.

Doconut mengambil rute ketiga. File diubah menjadi gambar halaman oleh server Anda sendiri, dan Blazor hanya perlu menampung sebuah div. Pohon komponen Anda tidak pernah merender ulang penampil yang tidak dimilikinya, dan mesin diff tidak memiliki apa pun untuk diperebutkan.

Kemampuan

Apa yang Anda dapatkan dalam aplikasi Blazor

Blazor Server dan WebAssembly

Rendering dilakukan di sisi server dalam kedua kasus. Di Server panggilan langsung; di WebAssembly Anda mengekspos panggilan open sebagai endpoint API minimal dan memberikan token yang dikembalikan ke widget. Keduanya hanya beberapa baris kode.

Dipasang melalui OnAfterRenderAsync

Inisialisasi widget sekali, setelah render pertama, melalui hook interop JS standar. Karena Blazor tidak pernah memiliki DOM internal penampil, render ulang berikutnya tidak menyentuhnya.

Bekerja dengan mode render yang Anda pilih

Interactive Server, Interactive WebAssembly, atau Auto. Penampil dikendalikan oleh token opak bukan oleh state komponen, sehingga mengganti mode render tidak mengubah integrasi.

Tidak ada celah format

Komponen yang sama membuka PDF, DOCX, XLSX, PPTX, DWG, MSG, dan sisanya dalam katalog. Anda menulis satu halaman penampil, bukan satu per jenis file.

Thumbnail, pencarian, dan cetak

UI navigasi disertakan dengan widget. Anda menghubungkan penampil, bukan membangun satu dari kanvas dan input nomor halaman.

Dokumen tetap di server Anda

Tidak ada yang di-stream ke browser kecuali gambar halaman yang dirender, yang lebih penting di WebAssembly daripada yang diperkirakan — klien pada akhirnya dapat diperiksa sepenuhnya.

Integrasi

Program.cs dan halaman Blazor

doconutHost.mount adalah beberapa baris JavaScript Anda sendiri yang memanggil $('#div_ctlDoc').docViewer({ ... }) dan kemudian .View(token). Menjaganya di luar Blazor memang disengaja — DOM widget tidak seharusnya menjadi sesuatu yang coba disesuaikan oleh renderer.

Platform yang didukung

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);
    }
}

Detail

Hal yang perlu diketahui sebelum memulai

  • Widget ini adalah plugin jQuery, sehingga jQuery harus dimuat sebelum skrip penampil.
  • UseSession() dan UseDoconutResources() harus keduanya didaftarkan sebelum UseDoconut().
  • Di WebAssembly panggilan open berada di server — ekspos sebagai endpoint API minimal dan kembalikan hanya token.
  • Token bersifat opak. Jangan menaruhnya dalam query string yang Anda log, dan jangan menyimpannya dalam state komponen lebih lama dari masa hidup halaman.

Pertanyaan yang sering diajukan

Apakah ini bekerja di Blazor WebAssembly, atau hanya Server?

Keduanya. Rendering selalu terjadi di sisi server, jadi di WebAssembly Anda menambahkan satu endpoint yang memanggil OpenDocumentAsync dan mengembalikan token. Klien tidak pernah mem-parsing dokumen, itulah mengapa payload WASM tetap tidak terpengaruh.

Apakah renderer Blazor akan bersaing dengan DOM penampil?

Tidak, asalkan Anda memasangnya ke elemen yang dianggap Blazor sebagai daun. Render sebuah div kosong dan biarkan widget mengisinya melalui interop — mesin diff tidak memiliki anak untuk disesuaikan.

Apakah saya memerlukan halaman penampil terpisah per jenis file?

Tidak. Satu halaman menangani seluruh katalog. Format dideteksi dari dokumen yang Anda buka, bukan dipilih sebelumnya oleh Anda.

Coba dengan dokumen Anda sendiri

Lisensi sementara memerlukan beberapa menit untuk diminta dan berjalan sepenuhnya di mesin Anda sendiri. File yang penting adalah yang sudah mengganggu penampil Anda saat ini.