Visualizador
A classe principal de visualização de documentos
Viewer (namespace Doconut) é o ponto de entrada público para abrir documentos a partir de páginas Razor, controladores MVC, componentes Blazor ou APIs mínimas. É sealed, registrado como um serviço transient por AddDoconut(), e resolvido via injeção de construtor — nunca o construa diretamente.
Viewer não mantém estado por solicitação e intencionalmente não implementa IDisposable: as sessões de documento vivem independentemente no cache de sessão, de modo que descartar o serviço nunca poderia encerrar um documento aberto (veja Conceitos Principais → Como o Visualizador Funciona).
OpenDocumentAsync
Abre um documento e devolve o token de sessão que o widget cliente usa para todas as solicitações subsequentes.
| Sobrecarga | Quando usar |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Abrindo a partir do disco com detecção automática de formato e a configuração padrão do formato |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Você precisa de opções de renderização por formato (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | O documento não é um arquivo no disco (upload, banco de dados, blob). fileInfo deve conter a extensão correta — ela orienta a detecção de formato |
// Abertura simples
string token = await viewer.OpenDocumentAsync(path);
// Com configuração e opções por formato
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// De um upload
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));Exceções a tratar:
LicenseException— uma licença encontrada é rejeitada (a mensagem contém o motivo da rejeição), ou o formato necessita de um recurso de plugin que não está mais concedido. A expiração do calendário sem mensagem de rejeição reverte para renderização com marca d'água em vez de lançar exceção.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— o conteúdo do arquivo está corrompido ou não corresponde à sua extensão.
CloseDocument
void CloseDocument(string token)Remove a sessão do cache (descartando o motor de documento imediatamente), exclui o marcador de segurança e revoga a concessão de acesso. Opcional — a expiração deslizante realiza a mesma limpeza — mas é recomendada para documentos grandes.
GetPageCount
int GetPageCount(string token)Total de páginas da sessão aberta. Lança exceção se o token for desconhecido ou expirado.
DocOptions
Opções independentes de formato por abertura (namespace Doconut):
| Tipo | Propriedade | Padrão | Descrição |
|---|---|---|---|
string | Password | "" | Senha para documentos protegidos (copiada automaticamente para a configuração do formato). |
int | ImageResolution | 0 | Obsoleto. Mantido apenas para compatibilidade — defina ImageResolution na configuração do formato em vez disso. |
string | Watermark | "" | Texto de marca d'água personalizado desenhado nas páginas renderizadas. String de formato: "^Text~Color~FontSize~FontName~Opacity~Angle", por exemplo "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Expiração deslizante da sessão em minutos. |
bool | IsSecured | true | Não aplicado atualmente — reservado. A vinculação de token é controlada globalmente por DoconutOptions.UnsafeMode (veja Conceitos Principais → Sessões & Segurança). |
A classe também expõe propriedades especializadas que estão intencionalmente fora do fluxo normal de visualização em um único host:
| Tipo | Propriedade | Padrão | Descrição |
|---|---|---|---|
bool | IsWebFarm | false | Marca a operação de abertura como um cenário de fazenda web. Use apenas com a arquitetura correspondente de armazenamento/sessão compartilhada. |
string | WebFarmPath | "" | Caminho compartilhado usado pelo fluxo de trabalho especializado de fazenda web. Vazio no visualizador normal de host único. |
bool | EditMode | false | Reservado para o fluxo de trabalho do Editor distribuído separadamente; deixe false para o visualizador padrão. |
Marca d'água personalizada
DocOptions.Watermark usa seis campos separados por til (~). Um ^ opcional no início solicita o layout de todos os cantos:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Campo | Exemplo | Significado |
|---|---|---|
Inicial ^ | ^ | Layout opcional de todos os cantos. Sem ele, a colocação normal da marca d'água é usada. |
| Texto | Confidential | Texto renderizado em cada página. Não pode estar vazio. |
| Cor | Red | Cor nomeada compreendida pela camada de desenho. |
| TamanhoDaFonte | 24 | Tamanho da fonte; entrada numérica inválida recai para o padrão do renderizador. |
| NomeDaFonte | Verdana | Família de fonte solicitada. Certifique-se de que está instalada no ambiente de implantação. |
| Opacidade | 80 | Valor de byte de 0 a 255. Deve ser analisado com sucesso. |
| Ângulo | -45 | Ângulo de rotação em graus; entrada numérica inválida recai para o padrão. |
O analisador espera exatamente seis campos após o ^ opcional. Uma definição inválida é substituída pela alternativa visível Invalid Watermark do SDK em vez de desaparecer silenciosamente.
Decisão de licença
| Estado da licença | Valor personalizado fornecido | Resultado renderizado |
|---|---|---|
| Licença de visualizador paga válida | Não | Página limpa |
| Licença de visualizador paga válida | Sim | Marca d'água personalizada |
| Visualizador base Temporário/Demo ativo | Não | Página limpa do visualizador base |
| Visualizador base Temporário/Demo ativo | Sim | Marca d'água personalizada quando o caminho limpo do visualizador base se aplica |
| Licença ausente, rejeitada, expirada, de versão incorreta ou de domínio inválido | Qualquer | Marca d'água de aplicação/avaliação; o valor personalizado não a substitui |
| Renderização de plugin sob regras de avaliação | Qualquer | Marca d'água de avaliação |
A mesma decisão é aplicada às imagens de página servidas e às exportações de anotações. A saída GIF animada é carimbada quadro a quadro. Uma marca d'água personalizada é, portanto, um recurso de aplicação licenciado, não uma forma de substituir ou suprimir a marca d'água de avaliação.
API de Anotações
Carregamento e exportação de anotações no lado do servidor. O tutorial completo está em Guias → Anotações; a interface é:
| Membro | Propósito |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Gerenciador vinculado às dimensões da página da sessão aberta |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Gerenciador com dimensões de página explícitas |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Gerenciador independente de sessão |
void LoadAnnotationData(string token, AnnotationManager manager) | Carregar anotações construídas em C# na sessão |
void LoadAnnotationData(string token, string annotationData) | Carregar anotações da página codificada/envelope Base64 retornado por AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Carregar anotações de XML |
XmlDocument GetAnnotationXML(string token) | Exportar as anotações da sessão como XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF com anotações incorporadas |
Task<int> ExportAnnotationsToPngAsync(…) | Arquivos PNG com anotações incorporadas |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP de PNGs por página com anotações incorporadas |
Metadados DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Retorna metadados de tags DICOM para sessões abertas através do plugin DICOM; null para documentos não-DICOM.
Auxiliares de recurso — ReferenceCss / ReferenceScripts
Emita as tags <link>/<script> para os recursos incorporados servidos por UseDoconutResources(), na ordem correta de dependência. Pacotes para recursos controlados por licença, como pesquisa e anotação, são emitidos somente quando a licença os habilita, mantendo a interface do cliente consistente com o comportamento do servidor.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + visualizador + pesquisa + anotação
string ReferenceScripts(ScriptConfig? config = null)CssConfig flags: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (controlado por pesquisa), IncludeAnnotationCss (controlado por anotação).
ScriptConfig flags: IncludeJQuery (necessário para todos os outros), IncludeBootstrap, IncludeViewerScripts (núcleo: docViewer.js + divisor + links), IncludeSearchScripts e IncludeSearchBar (controlado por pesquisa), IncludeAnnotationScripts e IncludeAnnotationBar (controlado por anotação).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))GetWorksheetNames
IReadOnlyList<string> GetWorksheetNames(string token)Retorna os nomes das planilhas de uma planilha aberta, na ordem da pasta de trabalho, ou uma lista vazia quando o documento aberto não é uma planilha.
Adicionado em 26.9.0.
Esta página foi útil?