Ricerca

Ricerca di testo nativa nella composizione del Viewer

La Doconut Viewer fornisce la ricerca normale utilizzando il testo estratto dal visualizzatore del formato o da un reindirizzamento PDF basato su testo. Richiede la capacità di licenza Search.

Abilita l'interfaccia di ricerca

La ricerca è 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 montaggio del Viewer e objViewer inizializzato; il Ribbon di ricerca viene quindi montato e collegato alla stessa istanza.

La ricerca e l'annotazione sono funzionalità con licenza integrate, non pacchetti AddPlugin<T>(). Richiedi le risorse di ricerca dall'Viewer iniettato; i loro tag vengono emessi solo quando la licenza concede la Ricerca.

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

Il ribbon incorporato chiama gli stessi metodi JavaScript disponibili per un'interfaccia personalizzata.

Mantieni la composizione completa del Viewer visibile nel markup, inizializza prima docViewer, e poi collega il Ribbon con licenza:

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Controlli del visualizzatore, incluso il pulsante che apre la Ricerca -->
</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 gestita dall'host deve solo attivarla/disattivarla:

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

La sua API pubblica è intenzionalmente ridotta:

MetodoScopo
attach(objViewer)Collega il Ribbon al viewer inizializzato; richiesto una sola volta
open() / close()Mostra o nascondi il Ribbon; la chiusura cancella anche gli evidenziamenti
reset()Cancella il termine corrente, il conteggio dei risultati e gli evidenziamenti
isOpen()Riporta se il Ribbon è visibile
setStatus(message)Inoltra un messaggio di stato attraverso il callback configurato

Il callback opzionale onToggle(isOpen) consente all'host di sincronizzare il pulsante Ricerca, e onLayout consente di ridimensionare/riadattare il viewer quando l'altezza del Ribbon cambia. Per la sequenza di avvio combinata di Viewer, Ricerca e Annotazione, vedi Guida rapida.

Ricerca da JavaScript

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

Il secondo argomento è la corrispondenza parola intera/esatta. Dopo il callback:

MetodoRisultato
SearchMatchCount()Totale delle corrispondenze individuali nel documento.
SearchSummary(false)[pageNumber, matchCount] voci senza ridisegnare.
SearchSummary(true)Stessa sintesi e dipinge gli evidenziamenti di pagina/miniatura.
GotoSearchMatch(index)Naviga a un indice di corrispondenza basato su zero.

La rotta middleware utilizza search=<term> e exact=true|false e restituisce XML. Usa l'API del widget invece di analizzare manualmente quella risposta interna.

Verifica della capacità di ricerca

La risposta di inizializzazione segnala:

text
X-Doconut-Can-Search: 1

Dopo 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 porte indipendenti non devono essere confuse:

PortaDomanda
CanSearch() / intestazione di rispostaIl viewer risolto ha un percorso di indice/ricerca nativo?
AllowSearchQuesta configurazione del formato ha richiesto l'estrazione del testo dove esiste l'interruttore?
LicenseCapability.SearchL'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

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // opzionale: consente all'utente di trascinare una regione e copiare il suo testo
});

AllowSearch e AllowCopy esistono su PdfConfig, WordConfig, ExcelConfig e PptConfig. Le proprietà di Office delegano ai loro PdfConfig nidificati. Entrambi hanno come predefinito false.

Esistono adattatori di ricerca nativa normali 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:

csharp
// DefaultRender = false → convertito in un PDF basato su testo → ricercabile
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 della ricerca normale

Il server prova le fonti di ricerca in questo ordine:

  1. Risultati dal viewer nativo del formato.
  2. Un indice di ricerca pre-costruito .srh.
  3. Un risultato di errore/vuoto quando non esiste alcuna fonte di ricerca.

L'indice .srh è l'artefatto di ricerca pubblicato insieme alle immagini delle pagine quando i documenti sono serviti da storage condiviso, così un nodo che non ha mai aperto il documento può comunque rispondere alle ricerche — vedi Distribuzioni distribuite.

CanSearch() può essere vero per un viewer ricercabile anche quando un documento scansionato specifico non ha uno strato di testo e quindi non restituisce corrispondenze.

Licenze e comportamento dell'interfaccia

Una licenza Temporanea/Demo attiva concede la Ricerca durante il suo periodo attivo. Una licenza mancante e un file legacy TRIAL non concedono alcuna capacità di Ricerca. Senza Ricerca:

  • ReferenceCss e ReferenceScripts omettono i bundle di ricerca.
  • Il middleware nega la ricerca invece di restituire risultati con licenza.

Gestisci la visibilità dell'interfaccia personalizzata da IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) e usa CanSearch() per il verdetto separato formato/sessione.

Risoluzione dei problemi

SintomoVerifica
La barra di ricerca è mancanteCapacità di ricerca e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() è falsoVisualizzatore del formato, percorso DefaultRender selezionato, e intestazione di risposta di inizializzazione
La ricerca restituisce zero per un PDF scansionatoIl documento non ha uno strato di testo; usa una fonte con testo o una proiezione PDF che preservi il testo
La ricerca funziona ma gli evidenziamenti sono spostatiPercorso di rendering, risoluzione, trasformazioni del documento e riquadri delle parole estratte

Questa pagina è stata utile?