Sökning

Inbyggd textsökning i Viewer-sammansättningen

Doconut Viewer tillhandahåller normal Sökning med text som extraheras av formatvisaren eller en textbaserad PDF‑omdirigering. Den kräver Search licenskapacitet.

Aktivera sök‑UI

Sökning är en Viewer-modul, inte ett fristående verktygsfält. Den kompletta sidan måste inkludera Viewer‑resurser, Viewer‑verktygsfält, Viewer‑montering och en initierad objViewer; Search‑Ribbon monteras sedan och fästs på samma instans.

Sökning och annotering är inbyggda licensierade funktioner, inte AddPlugin<T>() paket. Begär sökresurserna från den injicerade Viewer; deras taggar avges endast när licensen beviljar Search.

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
}))

Den inbäddade ribbonen anropar samma JavaScript‑metoder som är tillgängliga för ett anpassat UI.

Behåll den kompletta Viewer‑sammansättningen synlig i markupen, initiera docViewer först och fäst sedan den licensierade Ribbonen:

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Visningskontroller, inklusive knappen som öppnar 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>

Komponenten injicerar grupperna Find, Options och Results och hanterar sökning, rensning, matchningsantal och navigering till föregående/nästa matchning. Ett host‑ägt Viewer‑verktygsfält behöver bara växla den:

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

Dess offentliga API är avsiktligt litet:

MetodSyfte
attach(objViewer)Anslut Ribbonen till den initierade viewern; krävs en gång
open() / close()Visa eller dölj Ribbonen; stängning rensar också markeringar
reset()Rensa det aktuella sökordet, resultatantalet och markeringarna
isOpen()Rapportera om Ribbonen är synlig
setStatus(message)Skicka vidare ett statusmeddelande via den konfigurerade återuppringningen

Den valfria onToggle(isOpen)‑återuppringningen låter hosten synkronisera sin Search‑knapp, och onLayout låter den ändra storlek/återanpassa viewern när Ribbonen ändrar höjd. För den kombinerade Viewer-, Search- och Annotation‑uppstartssekvensen, se Snabbstart.

Sök från JavaScript

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

Det andra argumentet är helord/exakt matchning. Efter återuppringningen:

MetodResultat
SearchMatchCount()Totalt antal individuella matchningar i dokumentet.
SearchSummary(false)[pageNumber, matchCount] poster utan ommålning.
SearchSummary(true)Samma sammanfattning och målar sid-/miniatyrmarkeringar.
GotoSearchMatch(index)Navigerar till ett nollbaserat matchningsindex.

Middleware‑rutten använder search=<term> och exact=true|false och returnerar XML. Använd widget‑API:t istället för att själv parsra det interna svaret.

Kontrollera sökkapacitet

text
X-Doconut-Can-Search: 1

Efter initiering exponerar objViewer.CanSearch() samma format-/sessionsverdict. Den returnerar false när servern skickar 0; före svaret, eller med en äldre server som utelämnar headern, standardas den till true.

Tre oberoende grindar får inte förväxlas:

GrindFråga
CanSearch() / response headerHar den upplösta viewern ett inbyggt index/sökväg?
AllowSearchBegärde denna formatkonfiguration textutdragning där växeln finns?
LicenseCapability.SearchÄr applikationen auktoriserad att utföra sökning och ta emot UI‑paketen?

Ett format kan vara tekniskt sökbart medan den nuvarande licensen nekar operationen.

Aktivera extraktion per format

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // valfritt: låter användaren dra ett område och kopiera dess text
});

AllowSearch och AllowCopy finns på PdfConfig, WordConfig, ExcelConfig och PptConfig. Office‑egenskaperna delegerar till deras nästlade PdfConfig. Båda har standardvärdet false.

Normala inbyggda sök‑adaptrar finns för PDF, Word, Excel, PowerPoint, TXT, Visio, e‑post, EPUB och MHT. XPS använder sin PDF‑väg som standard. HTML och Microsoft Project drar nytta av en textbaserad PDF‑omdirigering:

csharp
// DefaultRender = false → konverteras till en textbaserad PDF → sökbar
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

För inbyggda renderare beskriver CanSearch() viewer‑kapaciteten; den garanterar inte att ett specifikt dokument innehåller användbar text. En PDF vars sidor endast är skannade bilder kan fortfarande ge noll inbyggda resultat.

Normalt sökbeteende

Servern försöker sökkällor i följande ordning:

  1. Resultat från formatets inbyggda viewer.
  2. Ett förbyggt .srh‑sökindex.
  3. Ett fel/tomt resultat när ingen sökkälla finns.

.srh‑indexet är sökartefakten som publiceras tillsammans med sidbilderna när dokument levereras från delat lagring, så en nod som aldrig öppnat dokumentet fortfarande kan svara på sökningar — se Distribuerade distributioner.

CanSearch() kan vara sant för en sökbar viewer även när ett specifikt skannat dokument saknar textlager och därför returnerar inga matchningar.

Licensiering och UI‑beteende

En aktiv Tillfällig/Demo‑licens beviljar Search under sin aktiva period. En saknad licens och en äldre TRIAL‑fil beviljar ingen Search‑kapacitet. Utan Search:

  • ReferenceCss och ReferenceScripts utelämnar sökpakketen.
  • Middleware nekar sökning istället för att returnera licensierade resultat.

Styr anpassad UI‑synlighet från IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) och använd CanSearch() för det separata format-/sessionsverdictet.

Felsökning

SymptomKontroll
Sökfältet saknasSökkapacitet och IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() är falsktFormatvisare, vald DefaultRender‑sökväg och initierings‑responsheader
Search returnerar noll för en skannad PDFDokumentet har inget textlager; använd en textbärande källa eller en PDF‑projektion som bevarar text
Search fungerar men markeringar är förskjutnaRenderingsväg, upplösning, dokumenttransformeringar och extraherade ordboxar

Var den här sidan hjälpsam?