Ricerca
Ricerca testuale nativa nella composizione del Viewer
Il Doconut Viewer fornisce la ricerca normale utilizzando il testo estratto dal visualizzatore di formato o un reindirizzamento PDF basato su testo. Richiede la capacità di licenza Search.
Abilita l'interfaccia di ricerca
Search è un modulo del Viewer, non una barra degli strumenti autonoma. La pagina completa deve includere le risorse del Viewer, la barra degli strumenti del Viewer, il mount del Viewer e objViewer inizializzato; il Ribbon di Search viene quindi montato e collegato alla stessa istanza.
Search e annotazione sono funzionalità con licenza integrate, non pacchetti AddPlugin<T>(). Richiedi le risorse di ricerca dal Viewer iniettato; i loro tag vengono emessi solo quando la licenza concede Search.
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
}))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
}))Il ribbon incorporato chiama gli stessi metodi JavaScript disponibili per un'interfaccia personalizzata.
Mantieni la composizione completa del Viewer visibile nel markup, inizializza docViewer per primo, quindi collega il Ribbon con licenza:
<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: '/',
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>Il componente inietta i gruppi Find, Options e Results e gestisce la ricerca, la cancellazione, i conteggi delle corrispondenze e la navigazione tra corrispondenze precedenti/successive. Una barra degli strumenti del Viewer di proprietà dell'host deve solo attivarla:
searchBar.isOpen() ? searchBar.close() : searchBar.open();La sua API pubblica è intenzionalmente piccola:
| Metodo | Scopo |
|---|---|
attach(objViewer) | Collega il Ribbon al viewer inizializzato; richiesto una sola volta |
open() / close() | Mostra o nasconde il Ribbon; la chiusura cancella anche gli evidenziamenti |
reset() | Cancella il termine corrente, il conteggio dei risultati e gli evidenziamenti |
isOpen() | Restituisce se il Ribbon è visibile |
setStatus(message) | Inoltra un messaggio di stato tramite il callback configurato |
Il callback opzionale onToggle(isOpen) consente all'host di sincronizzare il proprio pulsante Search, e onLayout permette di ridimensionare/riadattare il viewer quando l'altezza del Ribbon cambia. Per la sequenza di avvio combinata di Viewer, Search e Annotation, vedi Avvio rapido.
Ricerca da JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Il secondo argomento indica la corrispondenza parola intera/esatta. Dopo il callback:
| Metodo | Risultato |
|---|---|
SearchMatchCount() | Totale corrispondenze individuali nel documento. |
SearchSummary(false) | Voci [pageNumber, matchCount] senza ridisegno. |
SearchSummary(true) | Stesso riepilogo e dipinge gli evidenziamenti di pagina/miniatura. |
GotoSearchMatch(index) | Naviga a un indice di corrispondenza basato su zero. |
Il percorso middleware utilizza search=<term> e exact=true|false e restituisce XML. Usa l'API del widget anziché analizzare manualmente quella risposta interna.
Verifica la capacità di ricerca
La risposta di inizializzazione riporta:
X-Doconut-Can-Search: 1Dopo l'inizializzazione, objViewer.CanSearch() espone lo stesso verdetto formato/sessione. Restituisce false quando il server invia 0; prima della risposta, o con un server più vecchio che omette l'intestazione, il valore predefinito è true.
Tre cancelli indipendenti non devono essere confusi:
| Cancello | Domanda |
|---|---|
CanSearch() / intestazione di risposta | Il viewer risolto dispone di un indice/percorso di ricerca nativo? |
AllowSearch | Questa configurazione di formato ha richiesto l'estrazione del testo dove esiste l'interruttore? |
LicenseCapability.Search | L'applicazione è autorizzata a eseguire la ricerca e a ricevere i bundle UI? |
Un formato può essere tecnicamente ricercabile mentre la licenza corrente nega l'operazione.
Abilita l'estrazione per formato
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // optional: lets the user drag a region and copy its text
});AllowSearch e AllowCopy esistono su PdfConfig, WordConfig, ExcelConfig e PptConfig. Le proprietà Office delegano al loro PdfConfig nidificato. Entrambe hanno valore predefinito false.
Esistono adattatori di ricerca nativa per PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB e MHT. XPS utilizza il suo percorso PDF per impostazione predefinita. HTML e Microsoft Project beneficiano di un reindirizzamento PDF basato su testo:
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Per i renderer nativi, CanSearch() descrive la capacità del viewer; non garantisce che un documento specifico contenga testo utilizzabile. Un PDF le cui pagine sono solo immagini scansionate può comunque produrre zero risultati nativi.
Comportamento di ricerca normale
Il server tenta le fonti di ricerca in questo ordine:
- Risultati nativi
ISearchableViewer. - Un indice di ricerca
.srhpredefinito. - Un risultato di errore/vuoto quando non esiste alcuna fonte di ricerca.
L'indice .srh è l'artefatto di ricerca pubblicato accanto alle immagini delle pagine quando i documenti sono serviti da storage condiviso, quindi un nodo che non ha mai aperto il documento può comunque rispondere alle ricerche — vedi Distribuzioni distribuite.
CanSearch() può essere true per un viewer ricercabile anche quando un documento scansionato specifico non ha alcuno strato di testo e quindi non restituisce corrispondenze.
Licenze e comportamento UI
Una licenza Temporary/Demo attiva concede Search durante il suo periodo attivo. Una licenza mancante e il file legacy TRIAL non concedono alcuna capacità di Search. Senza Search:
ReferenceCsseReferenceScriptsomettono i bundle di ricerca.- Il middleware nega la ricerca invece di restituire risultati con licenza.
Guida la visibilità dell'interfaccia personalizzata da IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) e usa CanSearch() per il verdetto separato formato/sessione.
Risoluzione dei problemi
| Sintomo | Controllo |
|---|---|
| Barra di ricerca mancante | Capacità di ricerca e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() è falso | Visualizzatore di formato, percorso DefaultRender selezionato e intestazione di risposta di inizializzazione |
| La ricerca restituisce zero per un PDF scansionato | Il documento non ha alcuno strato di testo; usa una fonte con testo o una proiezione PDF che preservi il testo |
| La ricerca funziona ma gli evidenziamenti sono spostati | Percorso di rendering, risoluzione, trasformazioni del documento e riquadri delle parole estratte |
Questa pagina è stata utile?