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
@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:

html
<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:

javascript
searchBar.isOpen() ? searchBar.close() : searchBar.open();

Sua API pública é intencionalmente pequena:

MétodoPropó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

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étodoResultado
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:

text
X-Doconut-Can-Search: 1

Apó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:

PortaPergunta
CanSearch() / response headerO viewer resolvido possui um caminho de índice/pesquisa nativo?
AllowSearchEsta configuração de formato solicitou extração de texto onde a chave existe?
LicenseCapability.SearchA 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

csharp
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:

csharp
// 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:

  1. Resultados do viewer nativo do formato.
  2. Um índice de pesquisa .srh pré-construído.
  3. 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:

  • ReferenceCss e ReferenceScripts omitem 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

SintomaVerificação
Barra de pesquisa está ausenteCapacidade de pesquisa e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() é falsoViewer de formato, caminho DefaultRender selecionado e cabeçalho de resposta de inicialização
Pesquisa retorna zero para um PDF escaneadoO 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 deslocadosCaminho de renderização, resolução, transformações do documento e caixas de palavras extraídas

Esta página foi útil?