Arama
Viewer bileşeninde 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 gerekir.
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 içermelidir; ardından Arama Ribbon'u aynı örneğe monte edilir ve eklenir.
Arama ve açıklama, yerleşik lisanslı özelliklerdir, AddPlugin<T>() paketleri değildir. Arama kaynaklarını enjekte edilmiş Viewer'dan isteyin; etiketleri yalnızca lisans Arama izni verdiğinde yayınlanır.
@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 için mevcut olan aynı JavaScript yöntemlerini çağırır.
Tam Viewer bileşenini işaretlemede görünür tutun, önce docViewer'i başlatın ve ardından lisanslı Ribbon'u ekleyin:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Görüntüleyici 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: '/',
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 bir Viewer araç çubuğu yalnızca bunu açıp kapatmalıdır:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Kamu API'si kasıtlı olarak küçüktür:
| Yöntem | Amaç |
|---|---|
attach(objViewer) | Ribbon'ı başlatılmış görüntüleyiciye bağlar; 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ı rapor eder |
setStatus(message) | Yapılandırılmış geri arama aracılığıyla bir durum mesajını iletir |
İsteğe bağlı onToggle(isOpen) geri arama, 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ırmasını/refit etmesini sağlar. Birleştirilmiş Viewer, Search ve Annotation başlangıç sırası için, bakınız Hızlı Başlangıç.
JavaScript'ten Arama
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});İkinci argüman tam kelime/eşleşme yapmaktır. Geri aramadan sonra:
| Yöntem | Sonuç |
|---|---|
SearchMatchCount() | Belgede toplam bireysel eşleşmeler. |
SearchSummary(false) | [pageNumber, matchCount] giriş, yeniden boyamadan. |
SearchSummary(true) | Aynı özet ve sayfa/küçük resim vurgularını boyar. |
GotoSearchMatch(index) | Sıfır tabanlı bir eşleşme indeksine gider. |
Ara katman rotası search=<term> ve exact=true|false kullanır ve XML döndürür. Bu iç yanıtı kendiniz ayrıştırmak yerine widget API'sını kullanın.
Arama yeteneğini kontrol et
Başlatma yanıtı rapor eder:
X-Doconut-Can-Search: 1Başlatmadan sonra, objViewer.CanSearch() aynı format/oturum kararını ortaya koyar. Sunucu 0 gönderdiğinde false döndürür; yanıt öncesinde veya başlığı atlayan eski bir sunucu ile, varsayılan olarak true olur.
Üç bağımsız kapı karıştırılmamalıdır:
| Kapı | Soru |
|---|---|
CanSearch() / yanıt başlığı | Çözülmüş görüntüleyicinin yerel bir indeks/arama yolu var mı? |
AllowSearch | Bu format yapılandırması, anahtarın bulunduğu yerde metin çıkarımı talep etti mi? |
LicenseCapability.Search | Uygulama aramayı yürütmek ve UI paketlerini almak için yetkilendirilmiş mi? |
Bir format teknik olarak aranabilir olabilir, ancak mevcut lisans işlemi reddedebilir.
Format başına çıkarımı etkinleştir
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // isteğe bağlı: kullanıcının bir bölgeyi sürüklemesine ve metnini kopyalamasına izin verir
});AllowSearch ve AllowCopy, PdfConfig, WordConfig, ExcelConfig ve PptConfig üzerinde bulunur. Office özellikleri iç içe PdfConfig'lerine delege eder. İkisi de varsayılan olarak false'dır.
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:
// DefaultRender = false → metin tabanlı bir PDF'ye dönüştürüldü → arama yapılabilir
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:
- Formatın yerel görüntüleyicisinden gelen sonuçlar.
- Önceden oluşturulmuş
.srharama indeksi. - Arama kaynağı olmadığında hata/boş sonuç.
.srh indeksi, belgeler paylaşımlı depolamadan sunulduğunda sayfa görüntüleriyle birlikte yayınlanan arama eseridir, bu yüzden belgeyi hiç açmamış bir düğüm bile aramalara yanıt verebilir — bakınız Dağıtılmış Dağıtımlar.
Belirli bir taranmış belgenin metin katmanı olmasa ve bu yüzden eşleşme döndürmese bile, CanSearch() aranabilir bir görüntüleyici için doğru olabilir.
Lisanslama ve UI davranışı
Aktif bir Geçici/Demo lisansı, etkin dönemi boyunca Arama izni verir. Eksik bir lisans ve eski TRIAL dosyası hiçbir Arama yeteneği sağlamaz. Arama olmadan:
ReferenceCssveReferenceScriptsarama 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 kararları için CanSearch() kullanın.
Sorun Giderme
| Semptom | Kontrol |
|---|---|
| Arama çubuğu eksik | Arama yeteneği ve IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() yanlıştır | Format görüntüleyici, seçilen DefaultRender yolu ve başlatma yanıt başlığı |
| Arama, taranmış bir PDF için sıfır döndürür | Belgenin metin katmanı yok; metin içeren bir kaynak veya metni koruyan bir PDF projeksiyonu kullanın |
| Arama çalışıyor ancak vurgulamalar kaymış | Renderleme yolu, çözünürlük, belge dönüşümleri ve çıkarılan kelime kutuları |
Bu sayfa yardımcı oldu mu?