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 UI de pesquisa

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 Search.

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, em seguida, anexe a Ribbon licenciada:

html
<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 Localizar, Opções e Resultados e lida com pesquisa, limpeza, contagem de correspondências e navegação de correspondência anterior/próxima. Uma barra de ferramentas do Viewer 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 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()Indica 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

javascript
objViewer.Search(keyword, false, function (resultCount) {
    console.log('Matches:', resultCount);
});

O segundo argumento indica correspondência exata/palavra inteira. 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 a 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() / cabeçalho de respostaO viewer resolvido tem um caminho de índice/pesquisa nativo?
AllowSearchEsta configuração de formato solicitou extração de texto onde o interruptor existe?
LicenseCapability.SearchA aplicação está autorizada 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

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

csharp
// 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 padrão da Pesquisa

O servidor tenta fontes de pesquisa nesta ordem:

  1. Resultados nativos ISearchableViewer.
  2. Um índice de pesquisa .srh pré‑construído.
  3. Um erro/resultado vazio quando não existe fonte de pesquisa.

CanSearch() pode ser true 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 Temporary/Demo ativa concede Search 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.

Solução de Problemas

SintomaVerificação
Barra de pesquisa ausenteCapacidade de pesquisa e IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() é falsoVisualizador 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 que contenha texto ou uma projeção 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?