Pesquisa
Pesquisa de texto nativa na composição do Viewer
O Doconut Viewer fornece Pesquisa normal usando texto extraído pelo visualizador de formato ou um redirecionamento de PDF baseado em texto. Requer a capacidade de licença Search.
Habilitar a UI de pesquisa
A Pesquisa é um módulo do Viewer, não uma barra de ferramentas independente. A página completa deve incluir os recursos do Viewer, a barra de ferramentas do Viewer, o ponto de montagem do Viewer e o objViewer inicializado; a Ribbon 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 ribbon incorporada chama os mesmos métodos JavaScript disponíveis para uma UI personalizada.
Mantenha a composição completa do Viewer visível no markup, inicialize docViewer primeiro,
e então anexe a Ribbon licenciada:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Controles do visualizador, incluindo o botão 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>O componente injeta os grupos Find, Options e Results e gerencia a pesquisa, limpeza, contagem de correspondências e navegação de correspondência anterior/próxima. Uma barra de ferramentas do Viewer controlada pelo 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 Ribbon ao viewer inicializado; necessário uma vez |
open() / close() | Mostra ou oculta a Ribbon; fechar também limpa os realces |
reset() | Limpa o termo atual, a contagem de resultados e os realces |
isOpen() | Informa se a Ribbon 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 que ele redimensione/ajuste o viewer quando a altura da Ribbon mudar. Para a sequência de inicialização combinada de Viewer, Pesquisa e Anotação, veja
Início Rápido.
Pesquisa 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) | [pageNumber, matchCount] entradas 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 viewer resolvido possui um caminho de índice/pesquisa nativo? |
AllowSearch | Esta configuração de formato solicitou extração de texto onde a chave existe? |
LicenseCapability.Search | A aplicação está autorizada a executar pesquisa e receber os pacotes 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 // opcional: permite ao usuário arrastar uma região e copiar seu texto
});AllowSearch e AllowCopy existem em PdfConfig, WordConfig, ExcelConfig e PptConfig. As propriedades do Office delegam para seus PdfConfig aninhados. Ambas têm como padrão false.
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 de PDF baseado em texto:
// DefaultRender = false → convertido em 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 viewer; 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 Normal
O servidor tenta fontes de pesquisa nesta ordem:
- Resultados do viewer nativo do formato.
- Um índice de pesquisa
.srhpré-construído. - Um erro/resultado vazio quando nenhuma fonte de pesquisa existe.
O índice .srh é o artefato de pesquisa publicado ao lado das imagens de página quando os documentos
são servidos a partir de armazenamento compartilhado, de modo que um nó que nunca abriu o documento ainda pode responder
às pesquisas — veja Implantações Distribuídas.
CanSearch() pode ser verdadeiro para um viewer pesquisável
mesmo quando um documento escaneado específico não tem 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 um 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 de formato/sessão separado.
Solução de Problemas
| Sintoma | Verificação |
|---|---|
| Barra de pesquisa está ausente | Capacidade de pesquisa e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() é falso | Viewer de formato, caminho DefaultRender selecionado e cabeçalho de resposta de inicialização |
| Pesquisa retorna zero para um PDF escaneado | O documento não tem camada de texto; use uma fonte com texto ou uma projeção de PDF que preserve o texto |
| 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?