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 requisição e intencionalmente não implementa IDisposable: as sessões de documento vivem independentemente no cache de sessões, 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 uma capacidade de plugin que não está mais concedida. Expiração de 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)Remova 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 por abertura, independentes de formato (namespace Doconut):
| Tipo | Propriedade | Padrão | Descrição |
|---|---|---|---|
string | Password | "" | Senha para documentos protegidos (copiada automaticamente para a configuração de formato). |
int | ImageResolution | 0 | Obsoleto. Mantido apenas para compatibilidade — defina ImageResolution na configuração de 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 web-farm. Use apenas com a arquitetura de armazenamento/sessão compartilhada correspondente. |
string | WebFarmPath | "" | Caminho compartilhado usado pelo fluxo de trabalho especializado de web-farm. 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 |
|---|---|---|
Início ^ | ^ | Layout de todos os cantos opcional. 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. |
| Tamanho da Fonte | 24 | Tamanho da fonte; entrada numérica inválida reverte para o padrão do renderizador. |
| Nome da Fonte | 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 reverte 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 errada 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 animado é carimbada quadro a quadro. Portanto, uma marca d'água personalizada é um recurso de aplicação licenciado, não um meio 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 criadas 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)O método está presente para alinhamento da API, mas o visualizador DICOM .NET 6 não pode fornecer tags técnicas. Ele retorna null para sessões DICOM e não-DICOM; em uma sessão DICOM ele também grava um aviso único explicando a limitação da plataforma. A renderização de página, quadro e animação continua suportada.
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 apenas 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 por 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?