ビューア

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

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)フォーマットごとのレンダリングオプションが必要な場合(PdfConfigWordConfig など)
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default)ドキュメントがディスク上のファイルでない場合(アップロード、データベース、Blob)。fileInfo は正しい拡張子を持つ必要があり、フォーマット検出に使用されます
csharp
// Simple open
string token = await viewer.OpenDocumentAsync(path);

// With per-format config and options
token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig { AllowSearch = true, AllowCopy = true },
    new DocOptions { TimeOut = 30 });

// From an upload
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));

対処すべき例外:

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

CloseDocument(セッションを閉じる)

text
void CloseDocument(string token)

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

GetPageCount(ページ数取得)

text
int GetPageCount(string token)

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

DocOptions(オプション設定)

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

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

クラスは通常のシングルホスト表示フローの外に意図的に配置された、以下のような特殊プロパティも公開しています:

TypePropertyDefaultDescription
boolIsWebFarmfalse開く操作が Web ファーム シナリオであることを示します。対応する共有ストレージ/セッション アーキテクチャと併用してください。
stringWebFarmPath""専用の Web ファーム ワークフローで使用される共有パス。通常のシングルホスト ビューアでは空です。
boolEditModefalse別途配布される Editor ワークフロー用に予約されています。標準ビューアでは false のままにしてください。

Custom watermark(カスタム透かし)

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
    });
FieldExampleMeaning
Leading ^^オプションの全コーナーレイアウト。^ が無い場合は通常の透かし配置が使用されます。
TextConfidential各ページに描画されるテキスト。空であってはなりません。
ColorRed描画レイヤーが理解できる名前付きカラー。
FontSize24フォントサイズ。数値が無効な場合はレンダラのデフォルトにフォールバックします。
FontNameVerdana要求されたフォントファミリ。デプロイ環境にインストールされていることを確認してください。
Opacity800〜255 のバイト値。正しく解析できる必要があります。
Angle-45度単位の回転角度。数値が無効な場合はデフォルトにフォールバックします。

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

ライセンス判定

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

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

アノテーション(サーバー側ロードとエクスポート)

サーバー側のアノテーションのロードとエクスポート。完全な手順は Guides → アノテーション にあります。インターフェースは次のとおりです:

メンバー目的
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 metadata(DICOM メタデータ)

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

このメソッドは API 整合性のために存在しますが、.NET 6 DICOM ビューアは技術タグを提供できません。DICOM セッションでも非 DICOM セッションでも null を返し、DICOM セッションの場合はプラットフォーム制限を説明する一度だけの警告が出力されます。ページ、フレーム、アニメーションのレンダリングは引き続きサポートされています。

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

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

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

CssConfig フラグ: IncludeBootstrapCss(Bootstrap を含める)、IncludeViewerCss(ビューアの CSS を含める)、IncludeSearchCss(検索機能が有効な場合に含める)、IncludeAnnotationCss(アノテーション機能が有効な場合に含める)。

ScriptConfig フラグ: IncludeJQuery(すべてのスクリプトが依存する必須項目)、IncludeBootstrap(Bootstrap を含める)、IncludeViewerScripts(コア: docViewer.js + スプリッタ + リンク)、IncludeSearchScriptsIncludeSearchBar(検索機能が有効な場合に含める)、IncludeAnnotationScriptsIncludeAnnotationBar(アノテーション機能が有効な場合に含める)。

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 }))

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