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

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

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

Sua API pública é intencionalmente pequena:

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

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

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 visualizador resolvido possui um índice/caminho de pesquisa nativo?
AllowSearchEsta configuração de formato solicitou extração de texto onde a opção está disponível?
LicenseCapability.SearchA 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

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

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

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

  • 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 separado de formato/sessão.

Resolução de problemas

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

Esta página foi útil?