Suche

Native Textsuche in der Viewer-Zusammensetzung

Der Doconut Viewer bietet die normale Suche mittels Text, der vom Format-Viewer extrahiert wird, oder einer textbasierten PDF-Umleitung. Er erfordert die Search Lizenzfähigkeit.

Such‑UI aktivieren

Suche ist ein Viewer‑Modul, kein eigenständiges Symbolleisten‑Element. Die komplette Seite muss die Viewer‑Ressourcen, die Viewer‑Symbolleiste, die Viewer‑Einbindung und das initialisierte objViewer enthalten; das Search‑Ribbon wird dann eingebunden und an dieselbe Instanz angehängt.

Suche und Annotation sind integrierte lizenzierte Funktionen, keine AddPlugin<T>()‑Pakete. Fordern Sie die Suchressourcen vom injizierten Viewer an; deren Tags werden nur ausgegeben, wenn die Lizenz Suche 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.

Halten Sie die vollständige Viewer‑Zusammensetzung im Markup sichtbar, initialisieren Sie zuerst docViewer und hängen Sie anschließend das lizenzierte Ribbon an:

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Viewer-Steuerelemente, einschließlich der Schaltfläche, die die Suche ö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: '/',
        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 die Suche, das Löschen, die Trefferzahlen sowie die Navigation zu vorherigen/nächsten Treffern. Eine vom Host verwaltete Viewer‑Symbolleiste muss sie lediglich umschalten:

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

Ihre öffentliche API ist bewusst klein:

MethodeZweck
attach(objViewer)Verbinden Sie das Ribbon mit dem initialisierten Viewer; einmalig erforderlich
open() / close()Zeigt das Ribbon an oder blendet es aus; das Schließen löscht außerdem Hervorhebungen
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 onToggle(isOpen)‑Callback ermöglicht es dem Host, seine Such‑Schaltfläche zu synchronisieren, und onLayout erlaubt es ihm, den Viewer zu skalieren/anzupassen, wenn das Ribbon die Höhe ändert. Für die kombinierte Startsequenz von Viewer, Search und Annotation siehe Schnellstart.

Suche aus JavaScript

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

Das zweite Argument ist die 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.

Die Middleware‑Route verwendet search=<term> und exact=true|false und gibt XML zurück. Verwenden Sie die Widget‑API, anstatt die interne Antwort selbst zu parsen.

Suchfähigkeit prüfen

Die Initialisierungsantwort meldet:

text
X-Doconut-Can-Search: 1

Nach der Initialisierung gibt objViewer.CanSearch() das gleiche Format-/Sitzungsurteil frei. Es gibt false zurück, wenn der Server 0 sendet; vor der Antwort oder bei einem älteren Server, der den Header weglässt, wird standardmäßig true verwendet.

Drei unabhängige Gates dürfen nicht verwechselt werden:

GateFrage
CanSearch() / response 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 die Operation verweigert.

Extraktion pro Format aktivieren

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // optional: ermöglicht dem Benutzer, einen Bereich zu ziehen und dessen Text zu kopieren
});

AllowSearch und AllowCopy existieren auf PdfConfig, WordConfig, ExcelConfig und PptConfig. Die Office‑Eigenschaften delegieren an ihr verschachteltes PdfConfig. Beide defaulten zu false.

Normale native‑Suchadapter existieren für PDF, Word, Excel, PowerPoint, TXT, Visio, E‑Mail, EPUB und MHT. XPS verwendet standardmäßig seinen PDF‑Pfad. HTML und Microsoft Project profitieren von einer textbasierten PDF‑Umleitung:

csharp
// DefaultRender = false → in ein textbasiertes PDF konvertiert → 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.

Verhalten der normalen Suche

Der Server versucht Suchquellen in dieser Reihenfolge:

  1. Native ISearchableViewer‑Ergebnisse.
  2. Ein vorgefertigter .srh‑Suchindex.
  3. Ein Fehler-/Leerergebnis, wenn keine Suchquelle existiert.

Der .srh‑Index ist das Suchartefakt, das zusammen mit den Seitenbildern veröffentlicht wird, wenn Dokumente aus gemeinsamem Speicher bereitgestellt werden, sodass ein Knoten, der das Dokument nie geöffnet hat, dennoch Suchanfragen beantworten kann — siehe Verteilte Bereitstellungen.

CanSearch() kann für einen durchsuchbaren Viewer wahr sein, selbst wenn ein bestimmtes gescanntes Dokument keine Textebene hat und daher keine Treffer zurückgibt.

Lizenzierung und UI‑Verhalten

Eine aktive Temporary/Demo‑Lizenz gewährt Suche während ihres aktiven Zeitraums. Eine fehlende Lizenz und eine veraltete TRIAL‑Datei gewähren keine Such‑Fähigkeit. Ohne Suche:

  • ReferenceCss und ReferenceScripts lassen die Such‑Pakete weg.
  • Die Middleware verweigert die Suche, anstatt lizenzierte Ergebnisse zurückzugeben.

Steuern Sie die Sichtbarkeit der benutzerdefinierten UI über IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) und verwenden Sie CanSearch() für das separate Format‑/Sitzungsurteil.

Fehlersuche

SymptomPrüfung
Suchleiste fehltSuch‑Fähigkeit und IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() ist falschFormat‑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 versetztRender‑Pfad, Auflösung, Dokument‑Transformationen und extrahierte Wort‑Boxen

War diese Seite hilfreich?