Suche

Native Textsuche in der Viewer-Zusammensetzung

Der Doconut Viewer bietet die normale Suche, indem er Text verwendet, der vom Format-Viewer extrahiert wird, oder eine textbasierte PDF-Umleitung. Sie erfordert die Lizenzfähigkeit Search.

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 integrierte lizenzierte Funktionen, keine AddPlugin<T>()‑Pakete. Fordern Sie die Such‑Ressourcen vom injizierten Viewer an; deren Tags werden nur ausgegeben, wenn die Lizenz Search gewährt.

html
@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.

Den kompletten Viewer‑Aufbau im Markup sichtbar lassen, zuerst docViewer initialisieren und anschließend das lizenzierte Ribbon anhängen:

html
<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>

Die Komponente fügt die Gruppen Find, Options und Results ein und übernimmt das Durchsuchen, Leeren, Zählen von Treffern sowie die Navigation zu vorherigen/nächsten Treffern. Eine vom Host verwaltete Viewer‑Symbolleiste muss sie nur umschalten:

javascript
searchBar.isOpen() ? searchBar.close() : searchBar.open();

Die öffentliche API ist bewusst klein gehalten:

MethodeZweck
attach(objViewer)Verbindet 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 Ergebniszahl und Hervorhebungen
isOpen()Gibt an, ob das Ribbon sichtbar ist
setStatus(message)Leitet eine Statusmeldung über den konfigurierten Callback weiter

Der optionale Callback onToggle(isOpen) ermöglicht es dem Host, seinen Search‑Button zu synchronisieren, und onLayout lässt ihn den Viewer neu skalieren bzw. anpassen, wenn das Ribbon die Höhe ändert. Für die kombinierte Startsequenz von Viewer, Search und Annotation siehe den Schnellstart.

Suche aus JavaScript

javascript
objViewer.Search(keyword, false, function (resultCount) {
    console.log('Matches:', resultCount);
});

Der zweite Parameter steht für Ganzwort‑/exakte Übereinstimmung. Nach dem Callback:

MethodeErgebnis
SearchMatchCount()Gesamte einzelne Treffer im Dokument.
SearchSummary(false)[pageNumber, matchCount]‑Einträge ohne Neuzeichnen.
SearchSummary(true)Gleiche Zusammenfassung und malt Seiten‑/Thumbnail‑Hervorhebungen.
GotoSearchMatch(index)Navigiert zu einem nullbasierten Treffer‑Index.

Suchfähigkeit prüfen

Die Initialisierungs‑Antwort liefert den Header:

text
X-Doconut-Can-Search: 1

Nach der Initialisierung gibt objViewer.CanSearch() dasselbe Format‑/Session‑Urteil zurück. Es liefert false, 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:

TorFrage
CanSearch() / Antwort‑HeaderHat der aufgelöste Viewer einen nativen Index‑/Suchpfad?
AllowSearchHat diese Formatkonfiguration die Textextraktion angefordert, wo der Schalter existiert?
LicenseCapability.SearchIst die Anwendung autorisiert, die Suche auszuführen und die UI‑Pakete zu erhalten?

Ein Format kann technisch durchsuchbar sein, während die aktuelle Lizenz den Vorgang verweigert.

Extraktion pro Format aktivieren

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // optional: lets the user drag a region and copy its text
});

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‑Suchadapter 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:

csharp
// DefaultRender = false → converted to a text-based PDF → searchable
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:

  1. Native ISearchableViewer‑Ergebnisse.
  2. Ein vorgefertigter .srh‑Suchindex.
  3. Ein Fehler‑/Leerergebnis, 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 Gültigkeitszeitraums. Fehlt eine Lizenz oder liegt nur die Legacy‑TRIAL‑Datei vor, wird keine Search‑Fähigkeit bereitgestellt. Ohne Search:

  • ReferenceCss und ReferenceScripts lassen die Such‑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

SymptomPrüfung
Suchleiste fehltSuchfähigkeit und IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() ist falseFormat‑Viewer, ausgewählter DefaultRender‑Pfad und Initialisierungs‑Antwort‑Header
Suche liefert null für ein gescanntes PDFDas Dokument hat keine Textebene; verwenden Sie eine texthaltige Quelle oder eine PDF‑Projektion, die Text erhält
Suche funktioniert, aber Hervorhebungen sind versetztRendering‑Pfad, Auflösung, Dokument‑Transformationen und extrahierte Wortboxen

War diese Seite hilfreich?