Sök

Inbyggd textsökning i Viewer-sammansättningen

Doconut Viewer erbjuder vanlig sökning med text som extraheras av format‑visaren eller en text‑baserad PDF‑omdirigering. Den kräver licenskapaciteten Search.

Aktivera sök‑UI

Search ä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.

Search och annotation är inbyggda licensierade funktioner, inte AddPlugin<T>()‑paket. Begär sök‑resurserna från den injicerade Viewer; deras taggar emitteras 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 Ribbon‑en 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 Ribbon‑en:

html
<nav id="toolbar" aria-label="Dokumentvisarens kontroller">
    <!-- Visarkontroller, 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: '/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>

Komponenten injicerar grupperna Find, Options och Results samt hanterar sökning, rensning, matchningsantal och navigering mellan föregående/nästa match. 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 Ribbon till den initierade visaren; krävs en gång
open() / close()Visa eller dölja Ribbon; stängning rensar även markeringar
reset()Rensa det aktuella sökordet, resultatantalet och markeringarna
isOpen()Rapportera om Ribbon är synlig
setStatus(message)Skicka ett statusmeddelande via den konfigurerade återuppringningen

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

Sök från JavaScript

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

Det andra argumentet anger hel‑ord/exakt matchning. Efter återuppringningen:

MetodResultat
SearchMatchCount()Totalt antal individuella matchningar i dokumentet.
SearchSummary(false)Poster [pageNumber, matchCount] utan ommålning.
SearchSummary(true)Samma sammanfattning men målar sid‑/miniature‑markeringar.
GotoSearchMatch(index)Navigerar till en noll‑baserad matchnings‑index.

Middleware‑rutten använder search=<term> och exact=true|false och returnerar XML. Använd widget‑API:t snarare än att själv tolka det interna svaret.

Kontrollera sökkapacitet

Initieringssvaret rapporterar:

text
X-Doconut-Can-Search: 1

Efter initiering exponerar objViewer.CanSearch() samma format‑/sessions‑verdict. Den returnerar false när servern skickar 0; före svaret, eller med en äldre server som utelämnar headern, är standardvärdet true.

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

GrindFråga
CanSearch() / svarshuvudHar den lösta visaren en inbyggd index‑/sökväg?
AllowSearchBegärde detta formatkonfigurationsinställning textutdrag där växeln finns?
LicenseCapability.SearchÄr applikationen auktoriserad att utföra sökning och erhålla UI‑paketen?

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

Aktivera extraktion per format

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 och AllowCopy finns på PdfConfig, WordConfig, ExcelConfig och PptConfig. Office‑egenskaperna delegaterar till deras inbäddade 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 text‑baserad PDF‑omdirigering:

csharp
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

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

Normalt sökbeteende

Servern provar sökkällor i följande ordning:

  1. Inbyggda ISearchableViewer‑resultat.
  2. Ett förbyggt .srh‑sökindex.
  3. Ett fel‑/tomt resultat när ingen sökkälla finns.

CanSearch() kan vara true för en sökbar visare även när ett specifikt dokument saknar textlager och därför inte ger några 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ök‑paketen.
  • Middleware nekar sökning istället för att returnera licensierade resultat.

Styr anpassad UI‑synlighet via IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) och använd CanSearch() för det separata format‑/sessions‑verdictet.

Felsökning

SymptomKontroll
Sökfältet saknasSök‑kapacitet och IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() är falseFormat‑visare, valt DefaultRender‑sökväg och initieringssvarets header
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 ord‑boxar

Var den här sidan till hjälp?