検索

ビューア構成におけるネイティブテキスト検索

Doconut ビューアは、フォーマットビューアによって抽出されたテキストまたはテキストベースの PDF リダイレクトを使用した通常の検索を提供します。Search ライセンス機能が必要です。

検索 UI を有効にする

検索は ビューア のモジュールであり、スタンドアロンのツールバーではありません。完全なページには ビューアリソース、ビューアツールバー、ビューアマウント、および初期化された objViewer が含まれる必要があります。検索リボンはその後、同じインスタンスにマウントされて添付されます。

検索と注釈は組み込みのライセンス機能であり、AddPlugin<T>() パッケージではありません。注入された Viewer から検索リソースを要求してください。これらのタグは、ライセンスが検索を許可した場合にのみ出力されます。

html
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
    IncludeViewerCss = true,
    IncludeSearchCss = true
}))

@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
    IncludeJQuery = true,
    IncludeViewerScripts = true,
    IncludeSearchScripts = true,
    IncludeSearchBar = true
}))

埋め込みリボンは、カスタム UI で利用可能な同じ JavaScript メソッドを呼び出します。

マークアップ内で完全な ビューア 構成を表示したままにし、まず docViewer を初期化し、次にライセンスされたリボンを添付してください:

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Viewer controls、検索を開くボタンを含む -->
</nav>
<div id="searchBarMount"></div>
<div id="divDocViewer"><div id="div_ctlDoc"></div></div>

<script>
    let searchBar = null;
    let currentToken = '';

    const objViewer = $('#div_ctlDoc').docViewer({
        BasePath: '/',
        ResPath: 'doconut-res/images'
    });

    @if (Viewer.IsSearchEnabled)
    {
        <text>
    searchBar = $('#searchBarMount').doconutSearchBar({
        docId: 'ctlDoc',
        getRequestParams: () => ({ token: currentToken }),
        onStatus: (message) => console.log(message),
        onToast: (message, type) => console.log(type, message),
        onLayout: () => requestAnimationFrame(() => objViewer.Refit())
    });
    searchBar.attach(objViewer);
        </text>
    }
</script>

コンポーネントは Find、Options、Results グループを注入し、検索、クリア、マッチ数、前後のマッチナビゲーションを処理します。ホスト所有の ビューアツールバーはそれを切り替えるだけで構いません:

javascript
searchBar.isOpen() ? searchBar.close() : searchBar.open();

その公開 API は意図的に小さく設計されています:

メソッド目的
attach(objViewer)初期化されたビューアにリボンを接続します; 一度だけ必要です
open() / close()リボンを表示または非表示にします; 閉じるとハイライトもクリアされます
reset()現在の検索語、結果数、ハイライトをクリアします
isOpen()リボンが表示されているかどうかを報告します
setStatus(message)設定されたコールバックを通じてステータスメッセージを転送します

オプションの onToggle(isOpen) コールバックはホストが検索ボタンを同期できるようにし、onLayout はリボンの高さが変わったときにビューアのサイズ変更/再調整を可能にします。ビューア、Search、Annotation の統合起動シーケンスについては、クイックスタート を参照してください。

JavaScript から検索

javascript
objViewer.Search(keyword, false, function (resultCount) {
    console.log('Matches:', resultCount);
});

2 番目の引数は単語全体/完全一致です。コールバックの後:

メソッド結果
SearchMatchCount()ドキュメント内の個別マッチの総数です。
SearchSummary(false)[pageNumber, matchCount] エントリ(再描画なし)。
SearchSummary(true)同じ要約で、ページ/サムネイルのハイライトを描画します。
GotoSearchMatch(index)0 ベースのマッチインデックスへナビゲートします。

ミドルウェアルートは search=<term> と exact=true|false を使用し、XML を返します。内部レスポンスを自分で解析するのではなく、ウィジェット API を使用してください。

検索機能の確認

初期化レスポンスは次のように報告します:

text
X-Doconut-Can-Search: 1

初期化後、objViewer.CanSearch() は同じフォーマット/セッションの判定を公開します。サーバーが 0 を送信した場合は false を返します。レスポンスがない場合、またはヘッダーを省略する古いサーバーの場合は、デフォルトで true になります。

混同してはならない 3 つの独立したゲートがあります:

ゲート質問
CanSearch() / response header解決されたビューアはネイティブインデックス/検索パスを持っていますか?
AllowSearchこのフォーマット設定は、スイッチが存在する場所でテキスト抽出を要求しましたか?
LicenseCapability.Searchアプリケーションは検索を実行し、UI バンドルを受け取る権限がありますか?

フォーマットは技術的には検索可能でも、現在のライセンスがその操作を拒否している場合があります。

フォーマットごとの抽出を有効にする

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // オプション: ユーザーが領域をドラッグしてテキストをコピーできるようにする
});

AllowSearch と AllowCopy は PdfConfig、WordConfig、ExcelConfig、PptConfig に存在します。Office のプロパティはそれらのネストされた PdfConfig に委譲します。両方ともデフォルトで false です。

PDF、Word、Excel、PowerPoint、TXT、Visio、メール、EPUB、MHT 用の標準ネイティブ検索アダプタが存在します。XPS はデフォルトで PDF パスを使用します。HTML と Microsoft Project はテキストベースの PDF リダイレクトの恩恵を受けます:

csharp
// DefaultRender = false → テキストベースの PDF に変換され → 検索可能
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

ネイティブレンダラの場合、CanSearch() はビューア機能を説明しますが、特定のドキュメントに使用可能なテキストが含まれることを保証するものではありません。ページがスキャン画像のみの PDF でも、ネイティブ結果はゼロになる可能性があります。

通常の検索動作

サーバーは次の順序で検索ソースを試みます:

  1. フォーマットのネイティブビューアからの結果。
  2. 事前構築された .srh 検索インデックス。
  3. 検索ソースが存在しない場合のエラー/空の結果。

.srh インデックスは、ドキュメントが共有ストレージから提供される際にページ画像と共に公開される検索アーティファクトです。そのため、ドキュメントを開いたことのないノードでも検索に応答できます — 分散デプロイメント を参照してください。

特定のスキャンドキュメントにテキスト層がなく、結果が返らない場合でも、検索可能なビューアでは CanSearch() が true になることがあります。

ライセンスと UI の動作

有効な Temporary/Demo ライセンスは、期間中に検索機能を付与します。ライセンスが欠如している場合やレガシーな TRIAL ファイルがある場合、検索機能は付与されません。検索がない場合:

  • ReferenceCss と ReferenceScripts は検索バンドルを省略します。
  • ミドルウェアはライセンスされた結果を返す代わりに検索を拒否します。

IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) からカスタム UI の可視性を制御し、別個のフォーマット/セッション判定には CanSearch() を使用してください。

トラブルシューティング

症状確認項目
検索バーがありません検索機能と IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() が false ですフォーマットビューア、選択された DefaultRender パス、そして初期化レスポンスヘッダー
スキャンされた PDF の検索結果がゼロですドキュメントにテキスト層がありません。テキストを含むソースまたはテキストを保持する PDF プロジェクションを使用してください
検索は機能しますがハイライトがずれていますレンダリングパス、解像度、ドキュメント変換、抽出された単語ボックス

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