Temas Personalizados

Estilize o visualizador para combinar com seu aplicativo

O visualizador vem com um visual neutro, baseado em Bootstrap, servido a partir dos recursos incorporados (viewer.css, além de folhas de estilo por recurso como searchBar.css e annotationBar.css). A tematização ocorre em três níveis — escolha o mais superficial que lhe atender.

Nível 1 — Configure a interface

Muita da “tematização” é na verdade configuração:

  • ViewerConfig.ShowThumbs = false — sem painel de miniaturas.
  • ViewerConfig.FitType = "height" | "width" — como as páginas preenchem a área de visualização.
  • ViewerConfig.ShowThumbs = false em conjunto com pacotes seletivos de CssConfig/ScriptConfig — mantenha apenas a interface que seu host utiliza.

Nível 2 — Substituir o CSS

Viewer.ReferenceCss() gera tags <link> simples; tudo que você carregar depois delas vence a cascata. Defina tamanho e enquadramento do visualizador a partir da sua própria folha de estilos:

css
/* Your stylesheet, loaded after ReferenceCss() */

/* The two containers you own */
#divDocViewer { width: 100%; height: calc(100vh - 48px); }

/* Widget page cards */
.docPage { max-width: none; }

A página host controla totalmente o layout externo — o widget renderiza dentro de qualquer caixa que você fornecer a #divDocViewer / #div_ctlDoc (o par de contêineres padrão do Quick Start).

Duas regras práticas:

  • Não carregue o Bootstrap duas vezes. Se seu aplicativo já inclui Bootstrap, ignore IncludeBootstrapCss/IncludeBootstrap e deixe o widget herdar o seu — isso por si só faz o visualizador parecer nativo ao seu aplicativo.
  • Inclua apenas os pacotes que você usa. Cada sinalizador CssConfig/ScriptConfig é opcional; menos pacotes, menos estilos para lidar.

Nível 3 — Crie sua própria barra de ferramentas

Para uma experiência totalmente personalizada, controle o widget a partir da sua própria UI — isso é exatamente como o exemplo de referência constrói sua barra de ferramentas principal do Visualizador. Essa barra de ferramentas é a marcação do host mais um auxiliar específico do aplicativo; não é uma Ribbon SDK incorporada. A instância docViewer retornada pela inicialização é a sua superfície de API, junto com seus próprios endpoints:

html
<div id="toolbar">
    <button id="btnOpen">Open</button>
    <button id="btnPrev">‹</button>
    <button id="btnNext">›</button>
    <!-- your design system, your icons -->
</div>
<div id="divDocViewer"><div id="div_ctlDoc"></div></div>

<script>
    const objViewer = $('#div_ctlDoc').docViewer({
        showThumbs: true,
        autoLoad:   false,
        BasePath:   '/',
        ResPath:    'doconut-res/images',
        onViewerReady: () => { /* enable your buttons */ },
        onError: (msg) => console.error('DocViewer:', msg)
    });

    document.getElementById('btnOpen').addEventListener('click', async () => {
        const resp  = await fetch('/api/open?fileName=Sample.pdf', { method: 'POST' });
        const token = await resp.text();
        objViewer.View(token);
    });
</script>

Busca e Anotação são diferentes: seus componentes Ribbon opcionais estão incorporados no SDK (IncludeSearchBar, IncludeAnnotationBar) e geram seu próprio DOM. Você pode usá‑los junto com sua barra de ferramentas personalizada do Visualizador ou ignorá‑los e chamar as APIs subjacentes do widget diretamente. Consulte o pacote completo do Visualizador no Quick Start para a ordem completa de integração.

Modo escuro e RTL

O widget não inclui um tema escuro; uma substituição de Nível 2 que atinge sua classe de modo escuro (ex.: .dark #divDocViewer { … }) em fundos e bordas cobre a maioria das necessidades, já que o conteúdo da página é renderizado como imagens. Para hosts RTL, o visualizador funciona perfeitamente dentro de um layout RTL — mantenha sua própria barra de ferramentas consciente de RTL.

O que não fazer

Não faça fork nem edite as folhas de estilo incorporadas: elas são distribuídas dentro do pacote e são substituídas a cada atualização. Substituições na sua própria folha de estilos sobrevivem às atualizações; edições em viewer.css não.

Esta página foi útil?