Arama
Viewer bileşeninde yerel metin arama
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 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ı Viewer'dan isteyin; etiketleri yalnızca lisans Arama izni verdiğinde üretilir. MVC 5 görünümlerinde @inject yoktur, bu yüzden etiketleri denetleyicide oluşturup ViewBag üzerinden, sayfanın ihtiyaç duyduğu lisans bayrağıyla birlikte aktarın:
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
ViewBag.ViewerCss = viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
});
ViewBag.ViewerScripts = viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
});
ViewBag.IsSearchEnabled = viewer.IsSearchEnabled;Bunları görünüme @Html.Raw(ViewBag.ViewerCss) ve @Html.Raw(ViewBag.ViewerScripts) ile yazın. Web Forms'ta aynı değerleri kod‑arkasından ortaya çıkarın ve <%= %> ile yazın.
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'u ekleyin:
<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: '/',
ResPath: 'doconut-res/images'
});
@if ((bool)ViewBag.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>Sunucu‑tarafı if önemlidir: Arama yeteneği olmadan ReferenceScripts Ribbon betiğini dışarı bırakır, bu yüzden korunmasız bir doconutSearchBar(...) çağrısı hata verir ve Viewer sayfasının başlamasını engeller. Web Forms'ta aynı korumayı <% if (IsSearchEnabled) { %> … <% } %> şeklinde yazın.
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 onu 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'i başlatılmış görüntüleyiciye bağlar; bir kez gereklidir |
open() / close() | Ribbon'i gösterir veya gizler; kapatmak aynı zamanda vurgulamaları temizler |
reset() | Mevcut terimi, sonuç sayısını ve vurgulamaları temizler |
isOpen() | Ribbon'in 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 |
İsteğe bağlı 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ına izin verir. Birleştirilmiş Viewer, Arama ve Açıklama başlangıç sırası için Hızlı Başlangıç bölümüne bakın.
JavaScript'ten Arama
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});İkinci argüman tam kelime/eşleşme kontrolüdür. Eşleşme sayısı geri aramada (callback) gelir: Search kendisi sunucuya gider ve kullanışlı bir şey döndürmez, bu yüzden var n = objViewer.Search(keyword, false) her zaman undefined okur — ve bu şekilde oluşturulmuş bir sayfa "hiçbir şey bulunamadı" rapor ederken görüntüleyici eşleşmeleri vurgular. Geri aramadan sonra:
| Yöntem | Sonuç |
|---|---|
SearchMatchCount() | Belgedeki toplam bireysel eşleşmeler. |
SearchSummary(false) | Yeniden boyamadan [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. |
DocImage.axd search=<term> ve exact=true|false isteklerine XML ile yanıt verir. İç yanıtı kendiniz ayrıştırmak yerine widget API'sini kullanın.
Arama yeteneğini kontrol et
Başlatma yanıtı şunu rapor eder:
X-Doconut-Can-Search: 1Başlatmadan sonra, objViewer.CanSearch() aynı format/oturum sonucunu ortaya koyar. Sunucu 0 gönderdiğinde false döner; yanıt gelmeden önce ya da başlığı atlayan eski bir sunucu ile karşılaşıldığında varsayılan değer true olur.
Üç bağımsız kapı karıştırılmamalıdır:
| Kapı | Soru |
|---|---|
CanSearch() / response header | Çö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ükleyip metnini kopyalamasına izin verir
});AllowSearch ve AllowCopy, PdfConfig, WordConfig, ExcelConfig ve PptConfig üzerinde bulunur. Office özellikleri, iç içe PdfConfig'lerine 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 bağdaştırıcıları vardır. XPS varsayılan olarak PDF yolunu kullanır. HTML ve Microsoft Project, metin tabanlı bir PDF yönlendirmesinden faydalanır:
// DefaultRender = false → metin tabanlı bir 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:
- Yerel
ISearchableViewersonuçları. - Önceden oluşturulmuş bir
.srharama indeksi. - Arama kaynağı bulunmadığında hata/boş sonuç.
CanSearch() aranabilir bir görüntüleyici için doğru olabilir, ancak belirli bir belgenin metin katmanı yoksa eşleşme döndürmez.
Lisanslama ve UI davranışı
Aktif bir Temporary/Demo lisansı, geçerli süresi boyunca Arama özelliğini verir. Eksik bir lisans ve eski TRIAL dosyası hiçbir Arama yeteneği sağlamaz. Arama olmadan:
ReferenceCssveReferenceScriptsarama paketlerini atlar.DocImage.axdsonuç döndürmek yerine arama isteklerini reddeder.
IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) üzerinden özel UI görünürlüğünü yönetin ve ayrı format/oturum sonucunu almak için CanSearch() kullanın.
Sorun Giderme
| Semptom | Kontrol |
|---|---|
| Arama çubuğu eksik | Arama yeteneği ve IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() false | Format görüntüleyicisi, seçilen DefaultRender yolu ve başlatma yanıt başlığı |
| Arama, taranmış bir PDF için sıfır döner | Belgenin metin katmanı yok; metin içeren bir kaynak ya da metni koruyan bir PDF projeksiyonu kullanın |
| Arama çalışıyor ancak vurgular kaymış | Render yolu, çözünürlük, belge dönüşümleri ve çıkarılan kelime kutuları |
Bu sayfa yardımcı oldu mu?