Pencarian

Pencarian teks asli dalam komposisi Viewer

Doconut Viewer menyediakan Pencarian normal menggunakan teks yang diekstrak oleh penampil format atau pengalihan PDF berbasis teks. Ini memerlukan kemampuan lisensi Search.

Aktifkan UI pencarian

Search adalah modul Viewer, bukan toolbar mandiri. Halaman lengkap harus menyertakan sumber daya Viewer, toolbar Viewer, mount Viewer, dan objViewer yang telah diinisialisasi; Ribbon Search kemudian dipasang dan dilampirkan ke instance yang sama.

Search dan anotasi adalah fitur berlisensi bawaan, bukan paket AddPlugin<T>(). Minta sumber daya pencarian dari Viewer yang disuntikkan; tag mereka hanya dikeluarkan ketika lisensi memberikan Search.

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

Ribbon yang disematkan memanggil metode JavaScript yang sama tersedia untuk UI khusus.

Pertahankan komposisi Viewer lengkap terlihat dalam markup, inisialisasikan docViewer terlebih dahulu, dan kemudian lampirkan Ribbon berlisensi:

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Kontrol Viewer, termasuk tombol yang membuka Search -->
</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: 'doconut',
        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>

Komponen menyuntikkan grup Find, Options, dan Results serta menangani pencarian, pembersihan, hitungan kecocokan, dan navigasi kecocokan sebelumnya/berikutnya. Toolbar Viewer milik host hanya perlu men-toggle-nya:

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

API publiknya sengaja kecil:

MethodPurpose
attach(objViewer)Hubungkan Ribbon ke viewer yang telah diinisialisasi; diperlukan satu kali
open() / close()Tampilkan atau sembunyikan Ribbon; menutup juga menghapus sorotan
reset()Bersihkan istilah saat ini, jumlah hasil, dan sorotan
isOpen()Laporkan apakah Ribbon terlihat
setStatus(message)Teruskan pesan status melalui callback yang dikonfigurasi

Callback opsional onToggle(isOpen) memungkinkan host menyinkronkan tombol Search-nya, dan onLayout memungkinkan ia mengubah ukuran/mengatur ulang viewer ketika tinggi Ribbon berubah. Untuk urutan startup Viewer, Search, dan Annotation yang digabungkan, lihat Panduan Cepat.

Pencarian dari JavaScript

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

Argumen kedua adalah pencocokan kata lengkap/tepat. Setelah callback:

MethodResult
SearchMatchCount()Total kecocokan individu dalam dokumen.
SearchSummary(false)Entri [pageNumber, matchCount] tanpa repaint.
SearchSummary(true)Ringkasan yang sama dan melukis sorotan halaman/thumbnail.
GotoSearchMatch(index)Menavigasi ke indeks kecocokan berbasis nol.

Rute middleware menggunakan search=<term> dan exact=true|false serta mengembalikan XML. Gunakan API widget alih-alih mengurai respons internal itu sendiri.

Periksa kemampuan pencarian

Respons inisialisasi melaporkan:

text
X-Doconut-Can-Search: 1

Setelah inisialisasi, objViewer.CanSearch() menampilkan keputusan format/sesi yang sama. Ia mengembalikan false ketika server mengirim 0; sebelum respons, atau dengan server lama yang menghilangkan header, ia default ke true.

Tiga gerbang independen tidak boleh bingung:

GateQuestion
CanSearch() / response headerApakah viewer yang dipilih memiliki jalur indeks/pencarian asli?
AllowSearchApakah konfigurasi format ini meminta ekstraksi teks di mana saklar tersedia?
LicenseCapability.SearchApakah aplikasi diizinkan untuk menjalankan pencarian dan menerima paket UI?

Sebuah format dapat secara teknis dapat dicari sementara lisensi saat ini menolak operasi tersebut.

Aktifkan ekstraksi per format

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // opsional: memungkinkan pengguna menyeret area dan menyalin teksnya
});

AllowSearch dan AllowCopy ada pada PdfConfig, WordConfig, ExcelConfig, dan PptConfig. Properti Office mendelegasikan ke PdfConfig yang bersarang. Kedua nilai default false.

Adaptor pencarian asli normal ada untuk PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB, dan MHT. XPS menggunakan jalur PDF-nya secara default. HTML dan Microsoft Project mendapat manfaat dari pengalihan PDF berbasis teks:

csharp
// DefaultRender = false → dikonversi menjadi PDF berbasis teks → dapat dicari
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

Untuk renderer asli, CanSearch() menjelaskan kemampuan viewer; itu tidak menjamin dokumen tertentu berisi teks yang dapat digunakan. PDF yang halamannya hanya gambar ter-scan masih dapat menghasilkan nol hasil asli.

Perilaku Pencarian Normal

Server mencoba sumber pencarian dalam urutan ini:

  1. Hasil ISearchableViewer asli.
  2. Indeks pencarian .srh yang sudah dibangun.
  3. Hasil error/kosong ketika tidak ada sumber pencarian.

CanSearch() dapat bernilai true untuk viewer yang dapat dicari bahkan ketika dokumen tertentu tidak memiliki lapisan teks dan oleh karena itu tidak menghasilkan kecocokan.

Lisensi dan perilaku UI

Lisensi Temporary/Demo yang aktif memberikan Search selama periode aktifnya. Lisensi yang hilang dan file TRIAL warisan tidak memberikan kemampuan Search. Tanpa Search:

  • ReferenceCss dan ReferenceScripts tidak menyertakan paket pencarian.
  • Middleware menolak pencarian alih-alih mengembalikan hasil berlisensi.

Kendalikan visibilitas UI khusus dari IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) dan gunakan CanSearch() untuk keputusan format/sesi terpisah.

Pemecahan Masalah

SymptomCheck
Search bar is missingKemampuan Search dan IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() is falseViewer format, jalur DefaultRender yang dipilih, dan header respons inisialisasi
Search returns zero for a scanned PDFDokumen tidak memiliki lapisan teks; gunakan sumber yang berisi teks atau proyeksi PDF yang mempertahankan teks
Search works but highlights are offsetJalur rendering, resolusi, transformasi dokumen, dan kotak kata yang diekstrak

Apakah halaman ini membantu?