Busca
Busca de texto nativa na composição do Visualizador
O Visualizador Doconut oferece Busca 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 busca
Busca é 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 Busca é então montada e anexada à mesma instância.
Busca e anotação são recursos licenciados incorporados, não pacotes AddPlugin<T>(). Solicite os recursos de busca do Viewer injetado; suas tags são emitidas somente quando a licença concede Busca.
@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 interface personalizada.
Mantenha a composição completa do Visualizador visível na marcação, inicialize docViewer primeiro e, em seguida, anexe a Faixa licenciada:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Controles do visualizador, incluindo o botão que abre a Busca -->
</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 Encontrar, Opções e Resultados e gerencia a busca, limpeza, contagem de correspondências e navegação entre correspondências anterior/próxima. Uma barra de ferramentas do Visualizador 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 Faixa ao visualizador inicializado; necessário uma única vez |
open() / close() | Exibe ou oculta a Faixa; fechar também limpa os 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 Busca, e onLayout permite redimensionar/ajustar o visualizador quando a altura da Faixa muda. Para a sequência de inicialização combinada do Visualizador, Busca e Anotação, veja Início Rápido.
Busca 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 do 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 a capacidade de busca
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() / cabeçalho de resposta | O visualizador resolvido tem um caminho de índice/busca nativo? |
AllowSearch | Esta configuração de formato solicitou extração de texto onde a opção existe? |
LicenseCapability.Search | O aplicativo está autorizado a executar busca 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 // 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 ao seu PdfConfig aninhado. Ambas têm false como padrão.
Adaptadores de busca nativa normais existem para PDF, Word, Excel, PowerPoint, TXT, Visio, email, 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 padrão da Busca
O servidor tenta fontes de busca nesta ordem:
- Resultados nativos de
ISearchableViewer. - Um índice de busca
.srhpré-construído. - Um erro/resultado vazio quando nenhuma fonte de busca existe.
O índice .srh é o artefato de busca publicado junto às 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 a buscas — veja Implantações Distribuídas.
CanSearch() pode ser verdadeiro 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 Busca durante seu período ativo. Uma licença ausente e o arquivo legado TRIAL não concedem capacidade de Busca. Sem Busca:
ReferenceCsseReferenceScriptsomitem os pacotes de busca.- O middleware nega a busca 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.
Solução de Problemas
| Sintoma | Verificação |
|---|---|
| Barra de Busca está ausente | Capacidade de Busca e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() é falso | Visualizador de formato, caminho DefaultRender selecionado e cabeçalho de resposta de inicialização |
| Busca 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 |
| Busca 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?