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 PDF baseado em texto. Requer a capacidade de licença Search.
Habilitar a interface 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, a 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.
Manter a composição completa do Viewer visível no markup, inicializar docViewer primeiro e, em seguida, anexar a Ribbon licenciada:
<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>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() | Exibe 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 redimensionar/ajustar o viewer quando a altura da Ribbon muda. Para a sequência de inicialização combinada do 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) | 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 a 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() / cabeçalho de resposta | O viewer resolvido tem um caminho de índice/pesquisa nativo? |
AllowSearch | Esta configuração de formato solicitou extração de texto onde o interruptor existe? |
LicenseCapability.Search | O aplicativo está autorizado a executar a 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 ao seu PdfConfig aninhado. Ambas têm false como padrão.
Adaptadores nativos de pesquisa 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 PDF baseado em texto:
// DefaultRender = false → converted to a text-based PDF → searchable
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 normal da Pesquisa
O servidor tenta fontes de pesquisa nesta ordem:
- Resultados nativos
ISearchableViewer. - Um índice de pesquisa
.srhpré-construído. - Um erro/resultado vazio quando nenhuma fonte de pesquisa existe.
CanSearch() pode ser true para um viewer pesquisável mesmo quando um documento 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 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.
Solução de Problemas
| Sintoma | Verificação |
|---|---|
| Barra de pesquisa ausente | Capacidade de pesquisa e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() é false | Visualizador 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 que contenha texto ou uma projeção 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?