ビューア

メインのドキュメントビューアクラス

Viewer (namespace Doconut) は、Razor ページ、MVC コントローラー、Blazor コンポーネント、または最小限の API からドキュメントを開くための公開エントリーポイントです。これは sealed で、AddDoconut() によって transient サービスとして登録され、コンストラクタインジェクションで解決されます — 直接インスタンス化しないでください。

Viewer はリクエストごとの状態を保持せず、意図的に IDisposable を実装しません:ドキュメントセッションはセッションキャッシュ内で独立して存在するため、サービスを破棄しても開かれたドキュメントを解放することはできません(Core Concepts → ビューアの仕組み を参照)。

OpenDocumentAsync

ドキュメントを開き、クライアントウィジェットが以降のすべてのリクエストで使用するセッショントークンを返します。

オーバーロード使用条件
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default)ディスクから開く際に自動フォーマット検出とフォーマットのデフォルト設定を使用
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default)フォーマットごとのレンダリングオプションが必要です(PdfConfig、WordConfig、…)
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default)ドキュメントはディスク上のファイルではありません(アップロード、データベース、ブロブ)。fileInfo は正しい拡張子を持つ必要があります — それがフォーマット検出を行います
csharp
// シンプルなオープン
string token = await viewer.OpenDocumentAsync(path);

// フォーマットごとの設定とオプション付き
token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig { AllowSearch = true, AllowCopy = true },
    new DocOptions { TimeOut = 30 });

// アップロードから
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));

対処すべき例外:

  • LicenseException — 見つかったライセンスが拒否された場合(メッセージに拒否理由が含まれます)、またはフォーマットがもはや付与されていないプラグイン機能を必要とする場合。拒否メッセージなしのカレンダー期限切れは、例外をスローする代わりに透かし付きレンダリングにフォールバックします。
  • FormatNotSupportedException — Document format '<extension>' is not supported.
  • InvalidDataException — ファイル内容が破損しているか、拡張子と一致しません。

CloseDocument

text
void CloseDocument(string token)

キャッシュからセッションを削除し(ドキュメントエンジンを即座に破棄)、セキュリティマーカーを削除し、アクセス権を取り消します。オプションとして、スライディング有効期限も同様のクリーンアップを行いますが、大きなドキュメントには推奨されます。

GetPageCount

text
int GetPageCount(string token)

開かれたセッションの総ページ数です。トークンが不明または期限切れの場合は例外をスローします。

DocOptions

オープンごとに適用される、フォーマットに依存しないオプション(namespace Doconut):

型プロパティデフォルト説明
stringPassword""保護されたドキュメントのパスワード(フォーマット設定に自動的にコピーされます)。
intImageResolution0廃止 互換性のためだけに保持されています — 代わりにフォーマット設定で ImageResolution を設定してください。
stringWatermark""レンダリングされたページに描画されるカスタム透かしテキスト。フォーマット文字列: "^Text~Color~FontSize~FontName~Opacity~Angle"、例: "^Sample Copy~Red~24~Verdana~80~-45"。
intTimeOut60セッションのスライディング有効期限(分)。
boolIsSecuredtrue現在は強制されていません — 予約されています。トークンバインディングは DoconutOptions.UnsafeMode によってグローバルに制御されます(Core Concepts → セッションとセキュリティ を参照)。

このクラスは、通常の単一ホスト閲覧フローの外に意図的に配置された、特化したプロパティも公開しています:

型プロパティデフォルト説明
boolIsWebFarmfalseオープン操作をウェブファームシナリオとしてマークします。対応する共有ストレージ/セッションアーキテクチャと併用してください。
stringWebFarmPath""特化したウェブファームワークフローで使用される共有パス。通常の単一ホストビューアでは空です。
boolEditModefalse別途配布されるエディターワークフロー用に予約されています;標準ビューア用に false を残してください。

カスタム透かし

DocOptions.Watermark はチルダ6つで区切られたフィールドを使用します。オプションの先頭 ^ は全コーナーレイアウトを要求します:

text
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig(),
    new DocOptions
    {
        Watermark = "^Confidential~Red~24~Verdana~80~-45",
        TimeOut = 30
    });
フィールド例意味
先頭 ^^オプションの全コーナーレイアウト。これがない場合、通常の透かし配置が使用されます。
TextConfidential各ページに描画されるテキスト。空であってはなりません。
ColorRed描画レイヤーが理解できる名前付きカラー。
FontSize24フォントサイズ。数値が無効な場合はレンダラのデフォルトにフォールバックします。
FontNameVerdana要求されたフォントファミリー。デプロイ環境にインストールされていることを確認してください。
Opacity800〜255 のバイト値。正しく解析できる必要があります。
Angle-45度単位の回転角度。数値が無効な場合はデフォルトにフォールバックします。

パーサはオプションの ^ の後に正確に6つのフィールドがあることを期待します。無効な定義は、黙って消えるのではなく SDK の可視 Invalid Watermark フォールバックに置き換えられます。

ライセンス判定

ライセンス状態カスタム値の提供レンダリング結果
有効な有料ビューアライセンスなしクリーンページ
有効な有料ビューアライセンスありカスタム透かし
アクティブな一時/デモベースビューアなしクリーンベースビューアページ
アクティブな一時/デモベースビューアありクリーンベースビューアパスが適用される場合にカスタム透かし
ライセンスが欠如、拒否、期限切れ、バージョン不一致、またはドメイン不正いずれでも強制/評価透かし;カスタム値は上書きされません
プラグインが評価ルールの下でレンダリングいずれでも評価透かし

同じ判定が配信されたページ画像とアノテーションエクスポートにも適用されます。アニメーション GIF 出力はフレームごとにスタンプが付けられます。したがってカスタム透かしは評価透かしを置き換えたり抑制したりする手段ではなく、ライセンスされたアプリケーション機能です。

アノテーション API

サーバー側のアノテーションの読み込みとエクスポート。完全な手順は Guides → Annotations にあります。概要は次のとおりです:

メンバー目的
AnnotationManager GetAnnotationManager(string token)開いているセッションのページ寸法にバインドされたマネージャ
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight)明示的なページ寸法を持つマネージャ
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight)セッションに依存しないマネージャ
void LoadAnnotationData(string token, AnnotationManager manager)C# で構築されたアノテーションをセッションにロード
void LoadAnnotationData(string token, string annotationData)AnnotationManager.GetAnnotationData() が返すエンコードされたページ/Base64 エンベロープからアノテーションをロード
void LoadAnnotationXML(string token, XmlDocument annotationXml)XML からアノテーションをロード
XmlDocument GetAnnotationXML(string token)セッションのアノテーションを XML としてエクスポート
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default)アノテーションが焼き付けられた PDF
Task<int> ExportAnnotationsToPngAsync(…)アノテーションが焼き付けられた PNG ファイル
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default)ページごとの PNG にアノテーションが焼き付けられた ZIP

DICOM メタデータ

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

DICOM プラグインを通じて開かれたセッションの DICOM タグメタデータを返します。非 DICOM 文書の場合は null を使用します。

リソースヘルパー — ReferenceCss / ReferenceScripts

UseDoconutResources() が提供する埋め込みリソース用に <link>/<script> タグを正しい依存順序で出力します。検索やアノテーションなど、ライセンスで制御される機能のバンドルは ライセンスが有効な場合にのみ 出力され、クライアント UI がサーバー側の動作と一致するように保たれます。

text
string ReferenceCss(CssConfig? config = null)      // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)

CssConfig フラグ: IncludeBootstrapCss、IncludeViewerCss、IncludeSearchCss(検索制御)、IncludeAnnotationCss(アノテーション制御)。

ScriptConfig フラグ: IncludeJQuery(すべての他に必須)、IncludeBootstrap、IncludeViewerScripts(コア: docViewer.js + スプリッタ + リンク)、IncludeSearchScripts と IncludeSearchBar(検索制御)、IncludeAnnotationScripts と IncludeAnnotationBar(アノテーション制御)。

html
@inject Doconut.Viewer Viewer

@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))

ワークシート名の取得

text
IReadOnlyList<string> GetWorksheetNames(string token)

開いているスプレッドシートのワークシート名をブック順に返し、開いているドキュメントがスプレッドシートでない場合は空のリストを返します。

26.9.0 に追加されました。

このページは役に立ちましたか?