Buscar
Búsqueda de texto nativa en la composición del Viewer
El Doconut Viewer proporciona una Search normal usando texto extraído por el visor de formato o una redirección a PDF basada en texto. Requiere la capacidad de licencia Search.
Habilitar la interfaz de búsqueda
Search 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 el objViewer inicializado; luego el Ribbon de Search se monta y se adjunta a esa misma instancia.
Search 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 generan solo cuando la licencia 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
}))El ribbon incrustado llama a los mismos métodos 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">
<!-- 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: '/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>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 anteriores/siguientes. 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; requerido una vez |
open() / close() | Muestra u oculta el Ribbon; cerrar también elimina los resaltados |
reset() | Borra 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 Search, y onLayout le permite redimensionar/ajustar el viewer cuando el Ribbon cambia de altura. Para la secuencia de inicio combinada del Viewer, Search y Annotation, 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) | Entradas [pageNumber, matchCount] sin repintar. |
SearchSummary(true) | Mismo resumen y pinta los 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. Use 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, el valor predeterminado es true.
No deben confundirse tres puertas independientes:
| Puerta | Pregunta |
|---|---|
CanSearch() / encabezado de respuesta | ¿Tiene el viewer resuelto un índice/ruta de búsqueda nativa? |
AllowSearch | ¿Solicitó esta configuración de formato la extracción de texto donde existe el interruptor? |
LicenseCapability.Search | ¿Está la aplicación autorizada a ejecutar búsquedas 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 // optional: lets the user drag a region and copy its text
});AllowSearch y AllowCopy existen en PdfConfig, WordConfig, ExcelConfig y PptConfig. Las propiedades de Office delegan a su PdfConfig anidado. Ambas tienen false por defecto.
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 a PDF basada en texto:
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Para 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 de búsqueda normal
El servidor intenta fuentes de búsqueda en este orden:
- Resultados nativos de
ISearchableViewer. - Un índice de búsqueda
.srhpreconstruido. - Un error/resultado vacío cuando no existe fuente de búsqueda.
CanSearch() puede ser true 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 Search durante su período activo. Una licencia ausente y un archivo TRIAL heredado no otorgan capacidad de Search. Sin Search:
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 separado de formato/sesión.
Solución de problemas
| Síntoma | Verificación |
|---|---|
| La barra de búsqueda falta | Capacidad de Search y IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() es false | Visor de formato, ruta DefaultRender seleccionada y encabezado de respuesta de inicialización |
| Search 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 |
| Search funciona pero los resaltados están desplazados | Ruta de renderizado, resolución, transformaciones del documento y cajas de palabras extraídas |
¿Fue útil esta página?