Wyszukiwanie
Natywne wyszukiwanie tekstu w kompozycji Viewer
Doconut Viewer zapewnia standardowe wyszukiwanie przy użyciu tekstu wyodrębnionego przez przeglądarkę formatu lub przekierowania do PDF opartego na tekście. Wymaga uprawnienia licencyjnego 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; Ribbon wyszukiwania jest następnie montowany i podłączany 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 zezwala na 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
}))Osadzony ribbon wywołuje te same metody JavaScript dostępne dla niestandardowego interfejsu użytkownika.
Utrzymaj pełną kompozycję Viewer widoczną w znacznikach, najpierw zainicjuj docViewer, a następnie podłącz licencjonowany Ribbon:
<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: '/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>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 zarządzany przez hosta potrzebuje jedynie przełączenia go:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Jego publiczne API jest celowo małe:
| Metoda | Cel |
|---|---|
attach(objViewer) | Podłącz Ribbon do zainicjowanego viewer; wymagane jednorazowo |
open() / close() | Pokaż lub ukryj Ribbon; zamknięcie również usuwa podświetlenia |
reset() | Wyczyść bieżący termin, liczbę wyników i podświetlenia |
isOpen() | Zgłoś, czy Ribbon jest widoczny |
setStatus(message) | Przekaż komunikat statusu przez skonfigurowany callback |
Opcjonalny callback onToggle(isOpen) pozwala hostowi zsynchronizować przycisk Search, a onLayout umożliwia zmianę rozmiaru/dopasowanie viewer, gdy Ribbon zmienia wysokość. Aby zobaczyć sekwencję uruchamiania połączonych Viewer, Search i Annotation, zobacz Szybki start.
Wyszukiwanie z JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Drugi argument określa dopasowanie całego słowa/ścisłe. Po wywołaniu callbacka:
| Metoda | Wynik |
|---|---|
SearchMatchCount() | Łączna liczba indywidualnych dopasowań w dokumencie. |
SearchSummary(false) | Wpisy [pageNumber, matchCount] bez ponownego renderowania. |
SearchSummary(true) | Ta sama 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żyj API widgetu zamiast samodzielnie parsować tę wewnętrzną odpowiedź.
Sprawdź możliwości wyszukiwania
Odpowiedź inicjalizacji zgłasza:
X-Doconut-Can-Search: 1Po inicjalizacji, objViewer.CanSearch() udostępnia tę samą decyzję 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() / nagłówek odpowiedzi | Czy rozwiązany viewer posiada natywną ścieżkę indeksu/wyszukiwania? |
AllowSearch | Czy ta konfiguracja formatu żądała wyodrębnienia tekstu, gdzie przełącznik istnieje? |
LicenseCapability.Search | Czy aplikacja jest uprawniona 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. Oba domyślnie mają wartość false.
Normalne natywne adaptery wyszukiwania istnieją dla PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB i MHT. XPS domyślnie używa 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 viewer; 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ódeł wyszukiwania w następującej kolejności:
- Natywne wyniki
ISearchableViewer. - Wstępnie zbudowany indeks wyszukiwania
.srh. - Błąd/pusty wynik, gdy nie istnieje żadne źródło wyszukiwania.
CanSearch() może być true dla przeszukiwalnego viewer, nawet gdy konkretny dokument nie ma warstwy tekstowej i w konsekwencji nie zwraca dopasowań.
Licencjonowanie i zachowanie UI
Aktywna licencja Temporary/Demo przyznaje Search w trakcie swojego obowiązywania. 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żyj CanSearch() dla oddzielnej decyzji formatu/sesji.
Rozwiązywanie problemów
| Objaw | Sprawdź |
|---|---|
| Pasek wyszukiwania nie jest widoczny | Możliwość Search oraz IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() jest false | Przeglądarka formatu, wybrana ścieżka DefaultRender oraz nagłówek odpowiedzi inicjalizacji |
| Search zwraca zero dla zeskanowanego PDF | Dokument nie ma warstwy tekstowej; użyj źródła zawierającego tekst lub projekcji PDF zachowującej tekst |
| Search 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?