Suche
Native Textsuche in der Viewer-Zusammensetzung
Der Doconut Viewer bietet die normale Search mithilfe von Text, der vom Format-Viewer extrahiert wird, oder einer textbasierten PDF-Umleitung. Sie erfordert die Search Lizenzfähigkeit.
Aktivieren der Such‑UI
Search ist ein Viewer‑Modul, keine eigenständige Symbolleiste. Die komplette Seite muss die Viewer‑Ressourcen, die Viewer‑Symbolleiste, das Viewer‑Mount und das initialisierte objViewer enthalten; das Search Ribbon wird dann eingebunden und an dieselbe Instanz angehängt.
Search und Annotation sind eingebaute lizenzierte Features, nicht AddPlugin<T>()‑Pakete. Fordern Sie die Search‑Ressourcen vom injizierten Viewer an; ihre Tags werden nur ausgegeben, wenn die Lizenz Search gewährt.
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
}))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
}))Das eingebettete Ribbon ruft dieselben JavaScript‑Methoden auf, die einer benutzerdefinierten UI zur Verfügung stehen.
Behalten Sie die komplette Viewer‑Zusammensetzung im Markup sichtbar, initialisieren Sie zuerst docViewer und hängen Sie dann das lizenzierte Ribbon an:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Viewer‑Steuerelemente, einschließlich der Schaltfläche, die die Search öffnet -->
</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>Die Komponente fügt die Gruppen Find, Options und Results ein und verarbeitet Suchen, Leeren, Treffer‑Zählungen sowie die Navigation zu vorherigen/folgenden Treffern. Eine host‑eigene Viewer‑Symbolleiste muss sie nur umschalten:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Ihre öffentliche API ist bewusst klein:
| Methode | Zweck |
|---|---|
attach(objViewer) | Verbinden Sie das Ribbon mit dem initialisierten Viewer; einmalig erforderlich |
open() / close() | Zeigt das Ribbon an oder versteckt es; beim Schließen werden auch Hervorhebungen gelöscht |
reset() | Löscht den aktuellen Begriff, die Ergebnisanzahl und Hervorhebungen |
isOpen() | Gibt zurück, ob das Ribbon sichtbar ist |
setStatus(message) | Leitet eine Statusmeldung über den konfigurierten Rückruf weiter |
Der optionale onToggle(isOpen)‑Callback ermöglicht dem Host, seine Search‑Schaltfläche zu synchronisieren, und onLayout lässt ihn den Viewer neu skalieren/anpassen, wenn das Ribbon die Höhe ändert. Für die kombinierte Viewer‑, Search‑ und Annotation‑Startsequenz siehe Schnellstart.
Suche aus JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Das zweite Argument steht für Ganzwort‑/Exakt‑Übereinstimmung. Nach dem Callback:
| Methode | Ergebnis |
|---|---|
SearchMatchCount() | Gesamtzahl einzelner Treffer im Dokument. |
SearchSummary(false) | Einträge [pageNumber, matchCount] ohne Neuzeichnen. |
SearchSummary(true) | Gleiche Zusammenfassung und malt Seiten-/Thumbnail‑Hervorhebungen. |
GotoSearchMatch(index) | Navigiert zu einem nullbasierten Treffer‑Index. |
Die Middleware‑Route verwendet search=<term> und exact=true|false und liefert XML. Verwenden Sie die Widget‑API, anstatt die interne Antwort selbst zu parsen.
Überprüfen der Suchfähigkeit
X-Doconut-Can-Search: 1Nach der Initialisierung stellt objViewer.CanSearch() dasselbe Format‑/Session‑Urteil bereit. Sie gibt false zurück, wenn der Server 0 sendet; vor der Antwort oder bei einem älteren Server, der den Header weglässt, ist der Standardwert true.
Drei unabhängige Tore dürfen nicht verwechselt werden:
| Tor | Frage |
|---|---|
CanSearch() / Antwort‑Header | Hat der aufgelöste Viewer einen nativen Index-/Suchpfad? |
AllowSearch | Hat diese Formatkonfiguration die Textextraktion angefordert, wo der Schalter vorhanden ist? |
LicenseCapability.Search | Ist die Anwendung autorisiert, die Search auszuführen und die UI‑Pakete zu erhalten? |
Ein Format kann technisch durchsuchbar sein, während die aktuelle Lizenz die Operation verweigert.
Aktivieren der Extraktion pro Format
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // optional: lässt den Benutzer einen Bereich ziehen und dessen Text kopieren
});AllowSearch und AllowCopy existieren auf PdfConfig, WordConfig, ExcelConfig und PptConfig. Die Office‑Eigenschaften delegieren an ihr verschachteltes PdfConfig. Beide haben standardmäßig den Wert false.
Normale native Search‑Adapter existieren für PDF, Word, Excel, PowerPoint, TXT, Visio, E‑Mail, EPUB und MHT. XPS nutzt standardmäßig seinen PDF‑Pfad. HTML und Microsoft Project profitieren von einer textbasierten PDF‑Umleitung:
// DefaultRender = false → konvertiert zu einem textbasierten PDF → durchsuchbar
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Für native Renderer beschreibt CanSearch() die Viewer‑Fähigkeit; sie garantiert nicht, dass ein bestimmtes Dokument nutzbaren Text enthält. Ein PDF, dessen Seiten nur gescannte Bilder sind, kann dennoch null native Ergebnisse liefern.
Normales Suchverhalten
Der Server versucht Suchquellen in dieser Reihenfolge:
- Native
ISearchableViewer‑Ergebnisse. - Ein vorgefertigter
.srh‑Suchindex. - Ein Fehler/Leeres Ergebnis, wenn keine Suchquelle existiert.
CanSearch() kann für einen durchsuchbaren Viewer true sein, selbst wenn ein bestimmtes Dokument keine Textebene hat und daher keine Treffer liefert.
Lizenzierung und UI‑Verhalten
Eine aktive Temporary/Demo‑Lizenz gewährt Search während ihres aktiven Zeitraums. Eine fehlende Lizenz und die Legacy‑TRIAL‑Datei gewähren keine Search‑Fähigkeit. Ohne Search:
ReferenceCssundReferenceScriptslassen die Search‑Bundles weg.- Die Middleware verweigert die Suche, anstatt lizenzierte Ergebnisse zurückzugeben.
Steuern Sie die Sichtbarkeit benutzerdefinierter UI über IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) und verwenden Sie CanSearch() für das separate Format‑/Session‑Urteil.
Fehlersuche
| Symptom | Prüfung |
|---|---|
| Search‑Leiste fehlt | Search‑Fähigkeit und IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() ist false | Format‑Viewer, ausgewählter DefaultRender‑Pfad und Antwort‑Header der Initialisierung |
| Search liefert null für ein gescanntes PDF | Das Dokument hat keine Textebene; verwenden Sie eine textbasierte Quelle oder eine PDF‑Projektion, die Text erhält |
| Search funktioniert, aber Hervorhebungen sind versetzt | Rendering‑Pfad, Auflösung, Dokument‑Transformationen und extrahierte Wortboxen |
War diese Seite hilfreich?