Búsqueda
Búsqueda de texto nativa en la composición del Viewer
El Doconut Viewer proporciona Búsqueda normal usando texto extraído por el visor de formato o una redirección de PDF basada en texto. Requiere la capacidad de licencia Search.
Habilitar la interfaz de búsqueda
La Búsqueda es un módulo del Viewer, no una barra de herramientas independiente. La página completa debe incluir los recursos del Viewer, la barra de herramientas del Viewer, el montaje del Viewer y objViewer inicializado; el Ribbon de Búsqueda se monta y se adjunta a esa misma instancia.
La Búsqueda y la anotación son funciones con licencia incorporadas, no paquetes AddPlugin<T>(). Solicite los recursos de búsqueda del Viewer inyectado; sus etiquetas se emiten solo cuando la licencia otorga Búsqueda.
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
}))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
}))El ribbon incrustado llama a los mismos métodos de JavaScript disponibles para una UI personalizada.
Mantenga la composición completa del Viewer visible en el marcado, inicialice docViewer primero y luego adjunte el Ribbon con licencia:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Controles del visor, incluyendo el botón que abre 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>El componente inyecta los grupos Find, Options y Results y maneja la búsqueda, la limpieza, el recuento de coincidencias y la navegación a coincidencias anterior/siguiente. Una barra de herramientas del Viewer administrada por el host solo necesita alternarla:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Su API pública es intencionalmente pequeña:
| Método | Propósito |
|---|---|
attach(objViewer) | Conecta el Ribbon al viewer inicializado; se requiere una vez |
open() / close() | Muestra u oculta el Ribbon; cerrar también elimina los resaltados |
reset() | Limpia el término actual, el recuento de resultados y los resaltados |
isOpen() | Informa si el Ribbon está visible |
setStatus(message) | Reenvía un mensaje de estado a través del callback configurado |
El callback opcional onToggle(isOpen) permite al host sincronizar su botón de Búsqueda, y onLayout le permite redimensionar/ajustar el viewer cuando el Ribbon cambia de altura. Para la secuencia de inicio combinada del Viewer, Búsqueda y Anotación, vea Inicio rápido.
Búsqueda desde JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});El segundo argumento es coincidencia de palabra completa/exacta. Después del callback:
| Método | Resultado |
|---|---|
SearchMatchCount() | Total de coincidencias individuales en el documento. |
SearchSummary(false) | [pageNumber, matchCount] entradas sin repintar. |
SearchSummary(true) | Mismo resumen y pinta resaltados de página/miniatura. |
GotoSearchMatch(index) | Navega a un índice de coincidencia basado en cero. |
La ruta del middleware usa search=<term> y exact=true|false y devuelve XML. Utilice la API del widget en lugar de analizar esa respuesta interna usted mismo.
Verificar la capacidad de búsqueda
La respuesta de inicialización informa:
X-Doconut-Can-Search: 1Después de la inicialización, objViewer.CanSearch() expone el mismo veredicto de formato/sesión. Devuelve false cuando el servidor envía 0; antes de la respuesta, o con un servidor más antiguo que omite el encabezado, por defecto es true.
No se deben confundir tres puertas independientes:
| Puerta | Pregunta |
|---|---|
CanSearch() / response header | ¿Tiene el viewer resuelto un índice/ruta de búsqueda nativo? |
AllowSearch | ¿Solicitó esta configuración de formato la extracción de texto donde existe el interruptor? |
LicenseCapability.Search | ¿Está la aplicación autorizada para ejecutar la búsqueda y recibir los paquetes UI? |
Un formato puede ser técnicamente buscable mientras la licencia actual niega la operación.
Habilitar extracción por formato
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // opcional: permite al usuario arrastrar una región y copiar su texto
});AllowSearch y AllowCopy existen en PdfConfig, WordConfig, ExcelConfig y PptConfig. Las propiedades de Office delegan a sus PdfConfig anidados. Ambos por defecto son false.
Existen adaptadores de búsqueda nativa normales para PDF, Word, Excel, PowerPoint, TXT, Visio, correo electrónico, EPUB y MHT. XPS usa su ruta PDF por defecto. HTML y Microsoft Project se benefician de una redirección de PDF basada en texto:
// DefaultRender = false → convertido a un PDF basado en texto → buscable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Para los renderizadores nativos, CanSearch() describe la capacidad del viewer; no garantiza que un documento particular contenga texto utilizable. Un PDF cuyas páginas son solo imágenes escaneadas aún puede producir cero resultados nativos.
Comportamiento normal de la Búsqueda
El servidor intenta fuentes de búsqueda en este orden:
- Resultados del visor nativo del formato.
- Un índice de búsqueda
.srhpreconstruido. - Un error/resultado vacío cuando no existe fuente de búsqueda.
El índice .srh es el artefacto de búsqueda publicado junto a las imágenes de página cuando los documentos se sirven desde almacenamiento compartido, por lo que un nodo que nunca abrió el documento aún puede responder búsquedas — vea Despliegues distribuidos.
CanSearch() puede ser verdadero para un viewer buscable incluso cuando un documento escaneado particular no tiene capa de texto y, por lo tanto, no devuelve coincidencias.
Licenciamiento y comportamiento de la UI
Una licencia Temporal/Demo activa otorga Búsqueda durante su período activo. Una licencia faltante y un archivo legacy TRIAL no otorgan capacidad de Búsqueda. Sin Búsqueda:
ReferenceCssyReferenceScriptsomiten los paquetes de búsqueda.- El middleware niega la búsqueda en lugar de devolver resultados con licencia.
Controle la visibilidad de la UI personalizada desde IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) y use CanSearch() para el veredicto de formato/sesión separado.
Solución de problemas
| Síntoma | Verificación |
|---|---|
| Falta la barra de búsqueda | capacidad de búsqueda y IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() es falso | Visor de formato, ruta DefaultRender seleccionada y encabezado de respuesta de inicialización |
| Búsqueda devuelve cero para un PDF escaneado | El documento no tiene capa de texto; use una fuente con texto o una proyección PDF que preserve el texto |
| Búsqueda funciona pero los resaltados están desalineados | Ruta de renderizado, resolución, transformaciones del documento y cajas de palabras extraídas |
¿Fue útil esta página?