ビューア

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

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

以前の .NET Standard ライブラリは、メモリキャッシュ、HTTP コンテキストアクセッサ、そして 1 つ以上のライセンスパスを受け取る公開コンストラクタを提供していました。そのコンストラクタは廃止され、サービスグラフがこれらの依存関係を供給します。

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

OpenDocumentAsync(ドキュメントの非同期オープン)

ドキュメントを開き、クライアントウィジェットが以降のすべてのリクエストで使用するセッショントークンを返します。すべてのオープンは非同期で行われ、同期的な OpenDocument は存在しません。

オーバーロード使用シーン
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)

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

機能フラグ

メンバー意味
bool IsSearchEnabled現在のライセンスは Search を付与します
bool IsAnnotationEnabled現在のライセンスは Annotation を付与します

これらを Razor ビューで使用して、サーバーが実際に提供する場合にのみ、ライセンスされたリボンを描画します — クイックスタート を参照してください。

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 → Sessions & Security を参照)。

このクラスは、意図的に通常の単一ホスト閲覧フローの外にある専門的なプロパティも公開しています:

型プロパティデフォルト説明
boolIsWebFarmfalseオープン操作を共有ストレージシナリオとしてマークします。大文字小文字に注意してください — 以前のライブラリではこれを IsWebfarm と綴っていました。
stringWebFarmPath""そのワークフローで使用される共有パス。以前は WebfarmPath と綴っていました。通常の単一ホストビューアでは空で、分散デプロイメント で説明されている公開パスでは不要です。
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
    });
フィールド例意味
Leading ^^オプションの全角レイアウト。これがない場合は通常の透かし配置が使用されます。
テキストConfidential各ページに表示されるテキスト。空であってはなりません。
カラーRed描画レイヤーが理解できる名前付きカラー。
フォントサイズ24フォントサイズ。無効な数値入力はレンダラのデフォルトにフォールバックします。
フォント名Verdana要求されたフォントファミリー。デプロイ環境にインストールされていることを確認してください。
不透明度800から255までのバイト値。正しく解析できる必要があります。
角度-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

これらはすべてセッショントークンを受け取ります。以前のライブラリのセッションフリー
GetAnnotationManager(pageWidth, pageHeight) 形状は、セッション外でアノテーションを構築するために残っていますが、ロードするには依然としてトークンが必要です。

DICOM メタデータ

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

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

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

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

text
string ReferenceCss(CssConfig? config = null)      // null → Bootstrap + ビューア + 検索 + アノテーション
string ReferenceScripts(ScriptConfig? config = null)

CssConfig フラグ: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss(検索制御)、IncludeAnnotationCss(注釈制御)。

ScriptConfig フラグ: IncludeJQuery(すべての他のものが必要とする)、IncludeBootstrap、IncludeViewerScripts(コア: docViewer.js + splitter + links)、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 }))

これらのヘルパーは、ブラウザリソースを配信するためにサポートされている方法です。アプリケーションが
docViewer.js、documentLinks.js、docViewer.UI.js を wwwroot にコピーした場合は
出力されたタグからページがレンダリングされるときに、それらのコピーを削除すべきです。

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