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 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; tag mereka hanya dihasilkan ketika lisensi memberikan Search. Tampilan MVC 5 tidak memiliki @inject, jadi bangun tag di controller dan kirimkan melalui ViewBag, bersama dengan flag lisensi yang dibutuhkan halaman:
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
ViewBag.ViewerCss = viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
});
ViewBag.ViewerScripts = viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
});
ViewBag.IsSearchEnabled = viewer.IsSearchEnabled;Tuliskan mereka di tampilan dengan @Html.Raw(ViewBag.ViewerCss) dan @Html.Raw(ViewBag.ViewerScripts). Di Web Forms, ekspos nilai yang sama dari code-behind dan tulis dengan <%= %>.
Ribbon yang disematkan memanggil metode JavaScript yang sama tersedia untuk UI khusus.
Pertahankan komposisi Viewer lengkap terlihat di markup, inisialisasi docViewer terlebih dahulu, lalu lampirkan Ribbon berlisensi:
<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: '/',
ResPath: 'doconut-res/images'
});
@if ((bool)ViewBag.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>if sisi server penting: tanpa kemampuan Search, ReferenceScripts tidak menyertakan skrip Ribbon, sehingga pemanggilan doconutSearchBar(...) yang tidak dilindungi akan melempar error dan menghentikan halaman viewer dari memulai. Di Web Forms, tuliskan penjagaan yang sama sebagai <% if (IsSearchEnabled) { %> … <% } %>.
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:
searchBar.isOpen() ? searchBar.close() : searchBar.open();API publiknya sengaja kecil:
| Metode | Tujuan |
|---|---|
attach(objViewer) | Menghubungkan Ribbon ke viewer yang diinisialisasi; diperlukan sekali |
open() / close() | Menampilkan atau menyembunyikan Ribbon; menutup juga menghapus sorotan |
reset() | Menghapus istilah saat ini, jumlah hasil, dan sorotan |
isOpen() | Melaporkan apakah Ribbon terlihat |
setStatus(message) | Meneruskan 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 gabungan Viewer, Search, dan Annotation, lihat Panduan Cepat.
Pencarian dari JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Argumen kedua adalah pencocokan kata lengkap/tepat. Jumlah kecocokan tiba di callback: Search sendiri mengirim ke server dan tidak mengembalikan apa pun yang berguna, sehingga var n = objViewer.Search(keyword, false) selalu menghasilkan undefined — dan halaman yang dibangun dengan cara itu melaporkan "nothing found" sementara penampil menyorot kecocokan. Setelah callback:
| Metode | Hasil |
|---|---|
SearchMatchCount() | Total kecocokan individual 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. |
DocImage.axd menjawab search=<term> dan exact=true|false dengan XML. Gunakan API widget daripada mengurai respons internal itu sendiri.
Periksa kemampuan pencarian
Respons inisialisasi melaporkan:
X-Doconut-Can-Search: 1Setelah 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, nilai defaultnya adalah true.
Tiga gerbang independen tidak boleh bingung:
| Gerbang | Pertanyaan |
|---|---|
CanSearch() / response header | Apakah penampil yang terresolusikan memiliki jalur indeks/pencarian native? |
AllowSearch | Apakah format ini dikonfigurasi untuk meminta ekstraksi teks di mana saklarnya tersedia? |
LicenseCapability.Search | Apakah aplikasi diotorisasi 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
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // optional: memungkinkan pengguna menyeret area 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 standar 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 → dikonversi menjadi PDF berbasis teks → dapat dicari
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Untuk renderer native, CanSearch() menggambarkan kemampuan penampil; 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 berikut:
- Hasil
ISearchableViewernative. - Indeks pencarian
.srhyang telah dibangun sebelumnya. - Hasil error/kosong ketika tidak ada sumber pencarian.
CanSearch() dapat bernilai true untuk penampil yang dapat mencari 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 kemampuan Pencarian selama periode aktifnya. Lisensi yang hilang dan file TRIAL warisan tidak memberikan kemampuan Pencarian. Tanpa Pencarian:
ReferenceCssdanReferenceScriptsmenghilangkan paket pencarian.DocImage.axdmenolak permintaan pencarian alih-alih mengembalikan hasil.
Kendalikan visibilitas UI kustom dari IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) dan gunakan CanSearch() untuk keputusan format/sesi terpisah.
Pemecahan Masalah
| Gejala | Periksa |
|---|---|
| Bilah pencarian tidak muncul | 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?