Blazor

Blazor içinde davranan bir belge görüntüleyici

Blazor size bir bileşen modeli ve üçüncü taraf JavaScript'lere pek önem vermeyen bir render döngüsü sunar. Doconut buna karşı değil, onunla birlikte çalışır: renderleme kendi sürecinizde sunucu tarafında gerçekleşir ve widget, normal interop yaşam döngüsü aracılığıyla kontrol ettiğiniz basit bir öğeye monte edilir.

75
dosya uzantıları, istemci ayrıştırması yok
2
desteklenen barındırma modelleri
0
renderleme için WASM yükü

Sorun

Blazor'da geleneksel yaklaşımların neden sorun yarattığı

İstemci tarafı yolu, bir render motorunu tarayıcıya gönderme anlamına gelir. Blazor WebAssembly'de bu doğrudan indirme boyutunuza yansır ve yalnızca PDF'yi kapsar — birisi DOCX veya XLSX yüklediği anda tekrar başa dönersiniz.

iframe-to-Office yolu, belgelerinizin başkasının altyapısı üzerinden geçmesi demektir; bu da muhtemelen iki kez yapmak istemeyeceğiniz bir güvenlik ekibiyle konuşma anlamına gelir.

Doconut üçüncü yolu seçer. Dosya, kendi sunucunuz tarafından sayfa görüntülerine rasterleştirilir ve Blazor sadece bir div barındırmak zorundadır. Bileşen ağacınız asla sahip olmadığı bir görüntüleyiciyi yeniden render etmez ve diff motorunun mücadele edecek bir şeyi olmaz.

Yetenekler

Blazor uygulamasında neler elde edersiniz

Blazor Server ve WebAssembly

Renderleme her iki durumda da sunucu tarafındadır. Server'da çağrı doğrudan yapılır; WebAssembly'de açma çağrısını minimal bir API uç noktası olarak ortaya çıkarır ve dönen token'ı widget'a verirsiniz. İkisi de birkaç satır kod gerektirir.

OnAfterRenderAsync aracılığıyla monte eder

Widget'ı bir kez, ilk render'dan sonra, standart JS interop kancasıyla başlatın. Blazor, görüntüleyicinin iç DOM'unun sahibi olmadığı için sonraki render'lar ona dokunmaz.

Seçtiğiniz render-modu ile çalışır

Interactive Server, Interactive WebAssembly veya Auto. Görüntüleyici, bileşen durumu yerine opak bir token ile yönlendirilir, bu yüzden render modunu değiştirmek entegrasyonu etkilemez.

Format boşlukları yok

Aynı bileşen PDF, DOCX, XLSX, PPTX, DWG, MSG ve katalogdaki diğerlerini açar. Her dosya ailesi için ayrı bir sayfa değil, tek bir görüntüleyici sayfası yazarsınız.

Küçük resimler, arama ve yazdırma

Navigasyon UI'si widget ile birlikte gelir. Bir canvas ve sayfa numarası girişiyle bir görüntüleyici inşa etmiyorsunuz, sadece bir görüntüleyici bağlarsınız.

Belgeler sunucunuzda kalır

Renderlenen sayfa görüntüleri dışında tarayıcıya hiçbir şey akıtılmaz, bu WebAssembly'de beklenenden daha önemlidir — sonuçta istemci tamamen incelenebilir.

Entegrasyon

Program.cs ve bir Blazor sayfası

doconutHost.mount, $('#div_ctlDoc').docViewer({ ... }) çağıran ve ardından .View(token) yapan kendi JavaScript kodunuzun birkaç satırıdır. Bunu Blazor dışına tutmak kasıtlıdır — widget'ın DOM'u renderlayıcının uzlaştırmaya çalışması gereken bir şey olmamalıdır.

Desteklenen platformlar

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

Detaylar

Başlamadan önce bilmeniz gerekenler

  • Widget bir jQuery eklentisidir, bu yüzden jQuery görüntüleyici script'lerinden önce yüklenmelidir.
  • UseSession() ve UseDoconutResources() her ikisi de UseDoconut()'dan önce kaydedilmelidir.
  • WebAssembly'de açma çağrısı sunucuda olmalıdır — bunu minimal bir API uç noktası olarak ortaya çıkarın ve sadece token'ı döndürün.
  • Token opaktır. Günlüğe kaydettiğiniz bir sorgu dizesine koymayın ve sayfa ömründen daha uzun süre bileşen durumunda önbellekleme yapmayın.

Sıkça sorulan sorular

Bu, Blazor WebAssembly'de mi yoksa sadece Server'da mı çalışır?

Her ikisi de. Renderleme her zaman sunucu tarafında gerçekleşir, bu yüzden WebAssembly'de OpenDocumentAsync'i çağıran bir uç nokta ekleyip token'ı döndürürsünüz. İstemci asla bir belge ayrıştırmaz, bu da WASM yükünün etkilenmemesinin tam nedenidir.

Blazor'un renderlayıcısı, görüntüleyicinin DOM'u ile mücadele eder mi?

Hayır, Blazor'un bir yaprak olarak gördüğü bir öğeye monte ettiğiniz sürece. Boş bir div render edin ve widget'ın interop aracılığıyla doldurmasına izin verin — diff motorunun uzlaştıracak çocuğu olmaz.

Dosya türü başına ayrı bir görüntüleyici sayfasına ihtiyacım var mı?

Hayır. Tek bir sayfa tüm katalogu yönetir. Format, önceden seçtiğiniz değil, açtığınız belgeden algılanır.

Kendi belgelerinizde deneyin

Geçici bir lisansın talep edilmesi birkaç dakika sürer ve tamamen kendi bilgisayarınızda çalışır. Önemli dosyalar, mevcut görüntüleyicinizi zaten bozmakta olan dosyalardır.