Pencarian
Pencarian teks asli dalam komposisi Viewer
The 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
Pencarian adalah modul Viewer, bukan toolbar mandiri. Halaman lengkap harus menyertakan sumber daya Viewer, toolbar Viewer, mount Viewer, dan objViewer yang telah diinisialisasi; Ribbon Pencarian kemudian dipasang dan dilampirkan ke instance yang sama.
Pencarian 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 Pencarian.
@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, inisialisasi docViewer terlebih dahulu, lalu lampirkan Ribbon berlisensi:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Kontrol penampil, 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: '/',
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 yang dimiliki host hanya perlu mengaktifkannya:
searchBar.isOpen() ? searchBar.close() : searchBar.open();API publiknya sengaja kecil:
| Metode | Tujuan |
|---|---|
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 Pencariannya, dan onLayout memungkinkan host mengubah ukuran/menyesuaikan viewer ketika tinggi Ribbon berubah. Untuk urutan startup gabungan Viewer, Pencarian, dan Anotasi, lihat Panduan Cepat.
Pencarian dari JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Argumen kedua adalah pencocokan kata lengkap/tepat. Setelah callback:
| Metode | Hasil |
|---|---|
SearchMatchCount() | Total kecocokan individu dalam dokumen. |
SearchSummary(false) | Entri [pageNumber, matchCount] tanpa repainting. |
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 tersebut sendiri.
Periksa kemampuan pencarian
Respons inisialisasi melaporkan:
X-Doconut-Can-Search: 1Setelah inisialisasi, objViewer.CanSearch() mengekspos keputusan format/sesi yang sama. Ia mengembalikan false ketika server mengirim 0; sebelum respons, atau dengan server lama yang menghilangkan header, secara default menjadi true.
Tiga gerbang independen tidak boleh bingung:
| Gerbang | Pertanyaan |
|---|---|
CanSearch() / response header | Apakah viewer yang terresolusi memiliki jalur indeks/pencarian native? |
AllowSearch | Apakah konfigurasi format ini meminta ekstraksi teks di mana saklarnya ada? |
LicenseCapability.Search | Apakah aplikasi diotorisasi untuk menjalankan pencarian dan menerima bundel UI? |
Sebuah format dapat secara teknis dapat dicari sementara lisensi saat ini menolak operasi tersebut.
Aktifkan ekstraksi per format
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // opsional: memungkinkan pengguna menyeret suatu wilayah dan menyalin teksnya
});AllowSearch dan AllowCopy ada pada PdfConfig, WordConfig, ExcelConfig, dan PptConfig. Properti Office mendelegasikan ke PdfConfig yang bersarang. Keduanya default ke false.
Adaptor pencarian native 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:
// DefaultRender = false → diubah menjadi PDF berbasis teks → dapat dicari
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Untuk renderer native, CanSearch() menjelaskan kemampuan viewer; itu tidak menjamin bahwa dokumen tertentu berisi teks yang dapat digunakan. PDF yang halamannya hanya gambar hasil pemindaian masih dapat menghasilkan nol hasil native.
Perilaku Pencarian Normal
Server mencoba sumber pencarian dalam urutan ini:
- Hasil dari viewer native format.
- Indeks pencarian
.srhyang sudah dibangun sebelumnya. - Kesalahan/hasil kosong ketika tidak ada sumber pencarian.
Indeks .srh adalah artefak pencarian yang dipublikasikan bersamaan dengan gambar halaman ketika dokumen dilayani dari penyimpanan bersama, sehingga node yang tidak pernah membuka dokumen masih dapat menjawab pencarian — lihat Penyebaran Terdistribusi.
CanSearch() dapat bernilai true untuk viewer yang dapat dicari bahkan ketika dokumen hasil pemindaian tertentu tidak memiliki lapisan teks dan oleh karena itu tidak mengembalikan kecocokan.
Lisensi dan perilaku UI
Lisensi Temporary/Demo yang aktif memberikan Pencarian selama periode aktifnya. Lisensi yang hilang dan file legacy TRIAL tidak memberikan kemampuan Pencarian. Tanpa Pencarian:
ReferenceCssdanReferenceScriptsmenghilangkan bundel 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
| Gejala | Periksa |
|---|---|
| Bar pencarian tidak ada | Kemampuan pencarian dan IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() bernilai false | Penampil format, jalur DefaultRender yang dipilih, dan header respons inisialisasi |
| Pencarian mengembalikan nol untuk PDF yang dipindai | Dokumen tidak memiliki lapisan teks; gunakan sumber yang berisi teks atau proyeksi PDF yang mempertahankan teks |
| Pencarian berfungsi tetapi sorotan bergeser | Jalur rendering, resolusi, transformasi dokumen, dan kotak kata yang diekstrak |
Apakah halaman ini membantu?