Wyszukiwanie
Natywne wyszukiwanie tekstu w kompozycji Viewer
The Doconut Viewer zapewnia standardowe Search używając tekstu wyodrębnionego przez przeglądarkę formatu lub przekierowanie do PDF opartego na tekście. Wymaga to możliwości licencyjnej Search.
Włącz interfejs wyszukiwania
Search jest modułem Viewer, a nie samodzielnym paskiem narzędzi. Pełna strona musi zawierać zasoby Viewer, pasek narzędzi Viewer, montaż Viewer oraz zainicjowany objViewer; wstążka Search jest następnie montowana i podłączana do tej samej instancji.
Search i adnotacje są wbudowanymi funkcjami licencjonowanymi, a nie pakietami AddPlugin<T>(). Żądaj zasobów wyszukiwania z wstrzykniętego Viewer; ich tagi są emitowane tylko wtedy, gdy licencja przyznaje Search.
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
}))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
}))Wbudowana wstążka wywołuje te same metody JavaScript dostępne dla niestandardowego UI.
Utrzymaj pełną kompozycję Viewer widoczną w znacznikach, najpierw zainicjuj docViewer, a potem podłącz licencjonowaną wstążkę:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Viewer controls, including the button that opens Search -->
</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>Komponent wstrzykuje grupy Find, Options i Results oraz obsługuje wyszukiwanie, czyszczenie, liczenie dopasowań i nawigację do poprzedniego/następnego dopasowania. Pasek narzędzi Viewer należący do hosta musi jedynie przełączać go:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Jego publiczne API jest celowo małe:
| Metoda | Cel |
|---|---|
attach(objViewer) | Połącz wstążkę z zainicjowanym przeglądarką; wymagane jednorazowo |
open() / close() | Pokaż lub ukryj wstążkę; zamknięcie również usuwa podświetlenia |
reset() | Wyczyść bieżący termin, liczbę wyników i podświetlenia |
isOpen() | Zgłoś, czy wstążka jest widoczna |
setStatus(message) | Przekaż komunikat statusu poprzez skonfigurowany callback |
Opcjonalny callback onToggle(isOpen) pozwala hostowi synchronizować przycisk Search, a onLayout umożliwia zmianę rozmiaru/dopasowanie widoku, gdy wstążka zmienia wysokość. Dla połączonej sekwencji uruchamiania Viewer, Search i Annotation zobacz Szybki start(Quick Start).
Wyszukiwanie z JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Drugi argument określa dopasowanie całego słowa/ dokładne. Po wywołaniu zwrotnego:
| Metoda | Wynik |
|---|---|
SearchMatchCount() | Całkowita liczba pojedynczych dopasowań w dokumencie. |
SearchSummary(false) | Wpisy [pageNumber, matchCount] bez ponownego rysowania. |
SearchSummary(true) | Ten sam podsumowanie i rysuje podświetlenia stron/miniatur. |
GotoSearchMatch(index) | Nawiguje do dopasowania o indeksie zerowym. |
Ścieżka pośrednia używa search=<term> i exact=true|false i zwraca XML. Używaj API widgetu zamiast samodzielnie parsować tę wewnętrzną odpowiedź.
Sprawdź możliwość wyszukiwania
Odpowiedź inicjalizacji zgłasza:
X-Doconut-Can-Search: 1Po inicjalizacji objViewer.CanSearch() udostępnia ten sam werdykt formatu/sesji. Zwraca false, gdy serwer wysyła 0; przed odpowiedzią lub przy starszym serwerze, który pomija nagłówek, domyślnie zwraca true.
Trzy niezależne bramki nie powinny być mylone:
| Bramka | Pytanie |
|---|---|
CanSearch() / response header | Czy rozpoznany przeglądacz ma natywną ścieżkę indeksu/wyszukiwania? |
AllowSearch | Czy konfiguracja tego formatu żądała wyodrębnienia tekstu, gdzie istnieje przełącznik? |
LicenseCapability.Search | Czy aplikacja jest upoważniona do wykonywania wyszukiwania i otrzymywania pakietów UI? |
Format może być technicznie przeszukiwalny, podczas gdy bieżąca licencja odmawia tej operacji.
Włącz wyodrębnianie per format
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // optional: lets the user drag a region and copy its text
});AllowSearch i AllowCopy istnieją w PdfConfig, WordConfig, ExcelConfig i PptConfig. Właściwości Office delegują do ich zagnieżdżonego PdfConfig. Obie domyślnie mają wartość false.
Istnieją natywne adaptery wyszukiwania dla PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB i MHT. XPS używa domyślnie swojej ścieżki PDF. HTML i Microsoft Project korzystają z przekierowania do PDF opartego na tekście:
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Dla natywnych rendererów CanSearch() opisuje możliwości przeglądarki; nie gwarantuje, że konkretny dokument zawiera użyteczny tekst. PDF, którego strony są jedynie zeskanowanymi obrazami, może nadal zwracać zero natywnych wyników.
Normalne zachowanie wyszukiwania
Serwer próbuje źródła wyszukiwania w następującej kolejności:
- Natywne wyniki
ISearchableViewer. - Wstępnie zbudowany indeks wyszukiwania
.srh. - Błąd/pusty wynik, gdy nie istnieje źródło wyszukiwania.
Indeks .srh jest artefaktem wyszukiwania publikowanym razem z obrazami stron, gdy dokumenty są serwowane z pamięci współdzielonej, więc węzeł, który nigdy nie otworzył dokumentu, nadal może odpowiadać na zapytania — zobacz Rozproszone wdrożenia(Distributed Deployments).
CanSearch() może być prawdziwe dla przeglądarki obsługującej wyszukiwanie, nawet gdy konkretny zeskanowany dokument nie ma warstwy tekstowej i dlatego nie zwraca dopasowań.
Licencjonowanie i zachowanie UI
Aktywna licencja Temporary/Demo przyznaje Search w okresie jej ważności. Brak licencji oraz starszy plik TRIAL nie przyznają możliwości Search. Bez Search:
ReferenceCssiReferenceScriptspomijają pakiety wyszukiwania.- Pośrednik odrzuca wyszukiwanie zamiast zwracać licencjonowane wyniki.
Steruj widocznością niestandardowego UI za pomocą IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) i używaj CanSearch() dla oddzielnego werdyktu formatu/sesji.
Rozwiązywanie problemów
| Objaw | Sprawdź |
|---|---|
| Pasek wyszukiwania nie jest widoczny | Możliwość wyszukiwania oraz IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() zwraca false | Przeglądarka formatu, wybrana ścieżka DefaultRender oraz nagłówek odpowiedzi inicjalizacji |
| Wyszukiwanie zwraca zero dla zeskanowanego PDF | Dokument nie ma warstwy tekstowej; użyj źródła zawierającego tekst lub projekcji PDF zachowującej tekst |
| Wyszukiwanie działa, ale podświetlenia są przesunięte | Ścieżka renderowania, rozdzielczość, przekształcenia dokumentu i wyodrębnione ramki słów |
Czy ta strona była pomocna?