Sök
Inbyggd textsökning i Viewer‑kompositionen
Doconut Viewer erbjuder normal Search med hjälp av text som extraheras av formatvisaren eller en textbaserad PDF‑omdirigering. Den kräver licensfunktionen Search.
Aktivera sök‑UI
Search är en Viewer-modul, inte ett fristående verktygsfält. Den kompletta sidan måste inkludera Viewer‑resurserna, Viewer‑verktygsfältet, Viewer‑monteringen och den initierade 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ökresurserna från Viewer; deras taggar genereras endast när licensen beviljar Search. MVC 5‑vyer har ingen @inject, så bygg taggarna i kontrollern och skicka dem via ViewBag, tillsammans med licensflaggan som sidan behöver:
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
ViewBag.ViewerCss = viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
});
ViewBag.ViewerScripts = viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
});
ViewBag.IsSearchEnabled = viewer.IsSearchEnabled;Skriv ut dem i vyn med @Html.Raw(ViewBag.ViewerCss) och @Html.Raw(ViewBag.ViewerScripts). I Web Forms, exponera samma värden från kod‑bakom och skriv ut dem med <%= %>.
Den inbäddade Ribbon anropar samma JavaScript‑metoder som är tillgängliga för ett anpassat UI.
Behåll hela Viewer‑kompositionen synlig i markupen, initiera docViewer först och fäst sedan den licensierade Ribbon:
<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 ((bool)ViewBag.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>Server‑sidans if är viktig: utan Search‑funktionen utelämnar ReferenceScripts Ribbon‑scriptet, så ett oskyddat anrop av doconutSearchBar(...) skulle kasta ett fel och hindra visningssidans start. I Web Forms, skriv samma skydd som <% if (IsSearchEnabled) { %> … <% } %>.
Komponenten injicerar Find-, Options- och Results‑grupper och hanterar sökning, rensning, matchningsantal och föregående/nästa matchningsnavigering. Ett host‑ägt Viewer‑verktygsfält behöver bara växla det:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Dess offentliga API är avsiktligt litet:
| Metod | Syfte |
|---|---|
attach(objViewer) | Koppla Ribbon till den initierade visaren; krävs en gång |
open() / close() | Visa eller dölj Ribbon; stängning rensar också markeringar |
reset() | Rensa den aktuella termen, resultatantalet och markeringarna |
isOpen() | Rapportera om Ribbon ä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/justera visaren när Ribbon ändrar höjd. För den kombinerade Viewer-, Search- och Annotation‑uppstartssekvensen, se Snabbstart.
Sök från JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Det andra argumentet är helord/ exakt matchning. Antalet träffar kommer i callback-funktionen: Search själv går till servern och returnerar inget användbart, så var n = objViewer.Search(keyword, false) alltid läser undefined — och en sida byggd på det sättet rapporterar "nothing found" medan visaren markerar träffarna. Efter callback-funktionen:
| Metod | Resultat |
|---|---|
SearchMatchCount() | Totalt antal individuella träffar i dokumentet. |
SearchSummary(false) | [pageNumber, matchCount]-poster utan ommålning. |
SearchSummary(true) | Samma sammanfattning och målar upp sid- / miniatyrmarkeringar. |
GotoSearchMatch(index) | Navigerar till ett nollbaserat matchningsindex. |
DocImage.axd svarar på search=<term> och exact=true|false med XML. Använd widget‑API:t istället för att själv tolka det interna svaret.
Kontrollera sökfunktion
Initieringssvaret rapporterar:
X-Doconut-Can-Search: 1Efter initiering avslöjar 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, är standardvärdet true.
Tre oberoende portar får inte förväxlas:
| Port | Fråga |
|---|---|
CanSearch() / response header | Har den lösta visaren ett inbyggt index/sökväg? |
AllowSearch | Begärde detta formatkonfigurationsinställning textutdragning där växeln finns? |
LicenseCapability.Search | Är applikationen auktoriserad att utföra sökning och ta emot UI-paketen? |
Ett format kan tekniskt sett vara sökbart medan den aktuella licensen nekar operationen.
Aktivera extraktion per format
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 inbäddade PdfConfig. Båda har standardvärdet false.
Vanliga 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:
// 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() visarförmågan; 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.
Normal sökbeteende
Servern försöker sökkällor i följande ordning:
- Inbyggda
ISearchableViewer‑resultat. - Ett förbyggt
.srh‑sökindex. - 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 returnerar några träffar.
Licensiering och UI‑beteende
En aktiv Tillfällig/Demo‑licens beviljar sökning under sin aktiva period. En saknad licens och ett äldre TRIAL‑fil beviljar ingen sökfunktion. Utan sökning:
ReferenceCssochReferenceScriptsutelämnar sökpakketen.DocImage.axdvägrar sökförfrågningar istället för att returnera resultat.
Styr synligheten för anpassat UI via IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) och använd CanSearch() för det separata format-/sessionsverdictet.
Felsökning
| Symptom | Kontroll |
|---|---|
| Sökfältet saknas | Sökfunktion och IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() är falskt | Formatvisare, vald DefaultRender-väg och initieringssvaretshuvud |
| Sökning returnerar noll för en skannad PDF | Dokumentet har inget textlager; använd en källa med text eller en PDF-projektion som bevarar text |
| Sökning fungerar men markeringarna är förskjutna | Renderingsväg, upplösning, dokumenttransformeringar och extraherade ordboxar |
Var den här sidan hjälpsam?