Pesquisa
Pesquisa de texto nativa na composição do Visualizador
O Visualizador Doconut oferece Pesquisa normal usando texto extraído pelo visualizador de formato ou um redirecionamento para PDF baseado em texto. Requer a capacidade de licença Search.
Habilitar a interface de pesquisa
A Pesquisa é um módulo do Visualizador, não uma barra de ferramentas independente. A página completa deve incluir os recursos do Visualizador, a barra de ferramentas do Visualizador, a montagem do Visualizador e o objViewer inicializado; a Faixa de Pesquisa é então montada e anexada à mesma instância.
Pesquisa e anotação são recursos licenciados incorporados, não pacotes AddPlugin<T>(). Solicite os recursos de pesquisa do Viewer injetado; suas tags são emitidas somente quando a licença concede Pesquisa.
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
}))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
}))A faixa incorporada chama os mesmos métodos JavaScript disponíveis para uma UI personalizada.
Manter a composição completa do Visualizador visível no markup, inicializar docViewer primeiro e, em seguida, anexar a Faixa licenciada:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Controles do visualizador, incluindo o botão que abre a Pesquisa -->
</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>O componente injeta os grupos Encontrar, Opções e Resultados e gerencia a pesquisa, limpeza, contagem de correspondências e navegação de correspondência anterior/próxima. Uma barra de ferramentas do Visualizador de propriedade do host só precisa alterná‑la:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Sua API pública é intencionalmente pequena:
| Método | Propósito |
|---|---|
attach(objViewer) | Conecta a Faixa ao visualizador inicializado; necessário uma vez |
open() / close() | Exibe ou oculta a Faixa; fechar também limpa realces |
reset() | Limpa o termo atual, a contagem de resultados e os realces |
isOpen() | Informa se a Faixa está visível |
setStatus(message) | Encaminha uma mensagem de status através do callback configurado |
O callback opcional onToggle(isOpen) permite que o host sincronize seu botão de Pesquisa, e onLayout permite redimensionar/ajustar o visualizador quando a Faixa altera a altura. Para a sequência de inicialização combinada do Visualizador, Pesquisa e Anotação, veja Início rápido.
Pesquisar via JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});O segundo argumento indica correspondência de palavra inteira/exata. Após o callback:
| Método | Resultado |
|---|---|
SearchMatchCount() | Total de correspondências individuais no documento. |
SearchSummary(false) | Entradas [pageNumber, matchCount] sem repintura. |
SearchSummary(true) | Mesmo resumo e pinta realces de página/miniatura. |
GotoSearchMatch(index) | Navega para um índice de correspondência baseado em zero. |
A rota de middleware usa search=<term> e exact=true|false e retorna XML. Use a API do widget em vez de analisar essa resposta interna você mesmo.
Verificar capacidade de pesquisa
A resposta de inicialização relata:
X-Doconut-Can-Search: 1Após a inicialização, objViewer.CanSearch() expõe o mesmo veredicto de formato/sessão. Retorna false quando o servidor envia 0; antes da resposta, ou com um servidor mais antigo que omite o cabeçalho, o padrão é true.
Três portas independentes não devem ser confundidas:
| Porta | Pergunta |
|---|---|
CanSearch() / response header | O visualizador resolvido possui um índice/caminho de pesquisa nativo? |
AllowSearch | Esta configuração de formato solicitou extração de texto onde a opção está disponível? |
LicenseCapability.Search | A aplicação está autorizada a executar pesquisa e receber os pacotes de UI? |
Um formato pode ser tecnicamente pesquisável enquanto a licença atual nega a operação.
Habilitar extração 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 e AllowCopy existem em PdfConfig, WordConfig, ExcelConfig e PptConfig. As propriedades do Office delegam para seu PdfConfig aninhado. Ambas têm false como padrão.
Adaptadores de pesquisa nativa normais existem para PDF, Word, Excel, PowerPoint, TXT, Visio, e‑mail, EPUB e MHT. XPS usa seu caminho PDF por padrão. HTML e Microsoft Project se beneficiam de um redirecionamento para PDF baseado em texto:
// DefaultRender = false → convertido para um PDF baseado em texto → pesquisável
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Para renderizadores nativos, CanSearch() descreve a capacidade do visualizador; não garante que um documento específico contenha texto utilizável. Um PDF cujas páginas são apenas imagens escaneadas ainda pode produzir zero resultados nativos.
Comportamento da pesquisa nativa
O servidor tenta fontes de pesquisa nesta ordem:
- Resultados nativos de
ISearchableViewer. - Um índice de pesquisa
.srhpré-construído. - Um erro/resultado vazio quando nenhuma fonte de pesquisa existe.
CanSearch() pode ser true para um visualizador pesquisável mesmo quando um documento escaneado específico não possui camada de texto e, portanto, não retorna correspondências.
Licenciamento e comportamento da UI
Uma licença Temporária/Demo ativa concede Pesquisa durante seu período ativo. Uma licença ausente e o arquivo legado TRIAL não concedem capacidade de Pesquisa. Sem Pesquisa:
ReferenceCsseReferenceScriptsomitem os pacotes de pesquisa.- O middleware nega a pesquisa em vez de retornar resultados licenciados.
Controle a visibilidade da UI personalizada a partir de IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) e use CanSearch() para o veredicto separado de formato/sessão.
Resolução de problemas
| Sintoma | Verificação |
|---|---|
| A barra de pesquisa está ausente | Capacidade de pesquisa e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() está false | Visualizador de formato, caminho DefaultRender selecionado e cabeçalho de resposta de inicialização |
| A pesquisa retorna zero para um PDF escaneado | O documento não tem camada de texto; use uma fonte que contenha texto ou uma projeção de PDF que preserve o texto |
| A pesquisa funciona mas os realces estão deslocados | Caminho de renderização, resolução, transformações do documento e caixas de palavras extraídas |
Esta página foi útil?