Arama

Viewer bileşiminde yerel metin araması

Doconut Viewer, format görüntüleyicisi tarafından çıkarılan metin veya metin tabanlı PDF yönlendirmesi kullanarak normal Arama sağlar. Search lisans yeteneği gerektirir.

Arama UI'sını etkinleştir

Arama, bağımsız bir araç çubuğu değil, bir Viewer modülüdür. Tam sayfa Viewer kaynaklarını, Viewer araç çubuğunu, Viewer montajını ve başlatılmış objViewer'ı içermelidir; ardından Search Ribbon aynı örneğe monte edilir ve eklenir.

Arama ve açıklama, AddPlugin<T>() paketleri değil, yerleşik lisanslı özelliklerdir. Enjekte edilen Viewer'dan arama kaynaklarını isteyin; etiketleri yalnızca lisans Arama izni verdiğinde yayınlanır.

html
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
    IncludeViewerCss = true,
    IncludeSearchCss = true
}))

@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
    IncludeJQuery = true,
    IncludeViewerScripts = true,
    IncludeSearchScripts = true,
    IncludeSearchBar = true
}))

Gömülü ribbon, özel bir UI'da mevcut olan aynı JavaScript yöntemlerini çağırır.

Tam Viewer bileşenini işaretlemede görünür tutun, önce docViewer'ı başlatın ve ardından lisanslı Ribbon'ı ekleyin:

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Viewer kontrolleri, Aramayı açan düğmeyi içeren -->
</nav>
<div id="searchBarMount"></div>
<div id="divDocViewer"><div id="div_ctlDoc"></div></div>

<script>
    let searchBar = null;
    let currentToken = '';

    const objViewer = $('#div_ctlDoc').docViewer({
        BasePath: 'doconut',
        ResPath: 'doconut-res/images'
    });

    @if (Viewer.IsSearchEnabled)
    {
        <text>
    searchBar = $('#searchBarMount').doconutSearchBar({
        docId: 'ctlDoc',
        getRequestParams: () => ({ token: currentToken }),
        onStatus: (message) => console.log(message),
        onToast: (message, type) => console.log(type, message),
        onLayout: () => requestAnimationFrame(() => objViewer.Refit())
    });
    searchBar.attach(objViewer);
        </text>
    }
</script>

Bileşen Find, Options ve Results gruplarını enjekte eder ve aramayı, temizlemeyi, eşleşme sayılarını ve önceki/sonraki eşleşme gezinmesini yönetir. Host sahibi Viewer araç çubuğu sadece bunu açıp kapatmalıdır:

javascript
searchBar.isOpen() ? searchBar.close() : searchBar.open();

Kamu API'si kasıtlı olarak küçüktür:

MethodAmaç
attach(objViewer)Ribbon'ı başlatılmış görüntüleyiciye bağlayın; bir kez gereklidir
open() / close()Ribbon'ı gösterir veya gizler; kapatmak aynı zamanda vurgulamaları temizler
reset()Mevcut terimi, sonuç sayısını ve vurgulamaları temizler
isOpen()Ribbon'ın görünür olup olmadığını raporlar
setStatus(message)Yapılandırılmış geri çağırma aracılığıyla bir durum mesajını iletir

Opsiyonel onToggle(isOpen) geri çağırması, host'un Arama düğmesini senkronize etmesini sağlar ve onLayout Ribbon yüksekliği değiştiğinde görüntüleyiciyi yeniden boyutlandırıp yeniden sığdırmasını sağlar. Birleştirilmiş Viewer, Search ve Annotation başlangıç sırasını görmek için Hızlı Başlangıç bölümüne bakın.

JavaScript'ten Arama

javascript
objViewer.Search(keyword, false, function (resultCount) {
    console.log('Matches:', resultCount);
});

İkinci argüman tam kelime/eşleşme anlamına gelir. Geri çağırmadan sonra:

MethodSonuç
SearchMatchCount()Belgedeki toplam bireysel eşleşmeler.
SearchSummary(false)Yeniden boyutlandırma olmadan [pageNumber, matchCount] girişleri.
SearchSummary(true)Aynı özet ve sayfa/küçük resim vurgularını çizer.
GotoSearchMatch(index)Sıfır tabanlı bir eşleşme indeksine gider.

Ara katman yolu search=<term> ve exact=true|false kullanır ve XML döndürür. İç yanıtı kendiniz ayrıştırmak yerine widget API'sini kullanın.

Arama yeteneğini kontrol et

Başlatma yanıtı şunu raporlar:

text
X-Doconut-Can-Search: 1

Başlatmadan sonra, objViewer.CanSearch() aynı format/oturum kararını gösterir. Sunucu 0 gönderdiğinde false döndürür; yanıt gelmeden veya başlığı atlayan eski bir sunucu ile varsayılan olarak true olur.

Üç bağımsız kapı karıştırılmamalıdır:

GateSoru
CanSearch() / response headerÇözülmüş görüntüleyicinin yerel bir indeks/arama yolu var mı?
AllowSearchBu format yapılandırması, anahtarın bulunduğu yerde metin çıkarımını talep etti mi?
LicenseCapability.SearchUygulama, aramayı yürütmek ve UI paketlerini almak için yetkilendirilmiş mi?

Bir format teknik olarak aranabilir olabilirken mevcut lisans işlemi reddedebilir.

Format başına çıkarımı etkinleştir

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // opsiyonel: kullanıcının bir bölgeyi sürükleyip metnini kopyalamasına izin verir
});

AllowSearch ve AllowCopy PdfConfig, WordConfig, ExcelConfig ve PptConfig üzerinde bulunur. Office özellikleri iç içe PdfConfig'e yönlendirilir. İkisi de varsayılan olarak false değerindedir.

PDF, Word, Excel, PowerPoint, TXT, Visio, e-posta, EPUB ve MHT için normal yerel arama adaptörleri mevcuttur. XPS varsayılan olarak PDF yolunu kullanır. HTML ve Microsoft Project, metin tabanlı PDF yönlendirmesinden faydalanır:

csharp
// DefaultRender = false → metin tabanlı PDF'ye dönüştürülür → aranabilir
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

Yerel renderlayıcılar için CanSearch() görüntüleyici yeteneğini tanımlar; belirli bir belgenin kullanılabilir metin içerdiğini garanti etmez. Sayfaları yalnızca taranmış görüntüler olan bir PDF hâlâ sıfır yerel sonuç üretebilir.

Normal Arama davranışı

Sunucu arama kaynaklarını şu sırayla dener:

  1. Yerel ISearchableViewer sonuçları.
  2. Önceden oluşturulmuş .srh arama indeksi.
  3. Arama kaynağı bulunmadığında hata/boş sonuç.

CanSearch() bir arama yapılabilir viewer için doğru olabilir, ancak belirli bir belgenin metin katmanı yoksa hiçbir eşleşme döndürmez.

Lisanslama ve UI davranışı

Aktif bir Geçici/Demo lisansı, aktif süresi boyunca Arama izni verir. Eksik lisans ve eski TRIAL dosyası Arama yeteneği vermez. Arama olmadan:

  • ReferenceCss ve ReferenceScripts arama paketlerini atlar.
  • Ara katman, lisanslı sonuçları döndürmek yerine aramayı reddeder.

IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) üzerinden özel UI görünürlüğünü yönetin ve ayrı format/oturum kararı için CanSearch() kullanın.

Sorun Giderme

SemptomKontrol
Arama çubuğu eksikArama yeteneği ve IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() yanlışFormat görüntüleyici, seçilen DefaultRender yolu ve başlatma yanıt başlığı
Tarama PDF'si için arama sıfır döndürürBelgenin metin katmanı yok; metin içeren bir kaynak veya metni koruyan bir PDF projeksiyonu kullanın
Arama çalışıyor ancak vurgulamalar kaymışRender yolu, çözünürlük, belge dönüşümleri ve çıkarılan kelime kutuları

Bu sayfa yardımcı oldu mu?