Tìm kiếm
Tìm kiếm văn bản gốc trong thành phần Viewer
Trình Doconut Viewer cung cấp tính năng Tìm kiếm thông thường bằng cách sử dụng văn bản được trích xuất bởi trình xem định dạng hoặc một
chuyển hướng PDF dựa trên văn bản. Nó yêu cầu khả năng giấy phép Search.
Bật giao diện người dùng tìm kiếm
Tìm kiếm là một mô-đun Viewer, không phải là thanh công cụ độc lập. Trang hoàn chỉnh phải bao gồm
các tài nguyên Viewer, thanh công cụ Viewer, gắn Viewer, và objViewer đã được khởi tạo; Tìm kiếm
Ribbon sau đó được gắn và đính kèm vào cùng một thể hiện đó.
Tìm kiếm và chú thích là các tính năng được cấp phép tích hợp sẵn, không phải các gói AddPlugin<T>(). Yêu cầu các tài nguyên tìm kiếm từ Viewer đã được tiêm; các thẻ của chúng chỉ được phát ra khi giấy phép cho phép Tìm kiếm.
@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 nhúng gọi các phương thức JavaScript giống như trong giao diện người dùng tùy chỉnh.
Giữ thành phần Viewer hoàn chỉnh hiển thị trong markup, khởi tạo docViewer trước,
và sau đó đính kèm Ribbon đã được cấp phép:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Các điều khiển Viewer, bao gồm nút mở 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>Thành phần này tiêm các nhóm Find, Options và Results và xử lý việc tìm kiếm, xóa,
đếm số kết quả phù hợp, và điều hướng kết quả trước/sau. Thanh công cụ Viewer thuộc host chỉ cần
để bật/tắt nó:
searchBar.isOpen() ? searchBar.close() : searchBar.open();API công cộng của nó được thiết kế cố ý nhỏ gọn:
| Phương thức | Mục đích |
|---|---|
attach(objViewer) | Kết nối Ribbon với viewer đã được khởi tạo; cần một lần |
open() / close() | Hiển thị hoặc ẩn Ribbon; đóng cũng sẽ xóa các điểm nhấn |
reset() | Xóa thuật ngữ hiện tại, số lượng kết quả và các điểm nhấn |
isOpen() | Báo cáo xem Ribbon có đang hiển thị hay không |
setStatus(message) | Chuyển tiếp một tin nhắn trạng thái qua callback đã cấu hình |
Callback tùy chọn onToggle(isOpen) cho phép host đồng bộ nút Tìm kiếm của mình, và
onLayout cho phép nó thay đổi kích thước/điều chỉnh lại viewer khi Ribbon thay đổi chiều cao. Đối với các Viewer, Tìm kiếm và Annotation khởi động cùng nhau, xem
Bắt đầu nhanh.
Tìm kiếm từ JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Đối số thứ hai là khớp toàn từ/chính xác. Sau callback:
| Phương thức | Kết quả |
|---|---|
SearchMatchCount() | Tổng số kết quả phù hợp riêng lẻ trong tài liệu. |
SearchSummary(false) | [pageNumber, matchCount] mục mà không cần vẽ lại. |
SearchSummary(true) | Cùng bản tóm tắt và vẽ các điểm nhấn trên trang/ảnh thu nhỏ. |
GotoSearchMatch(index) | Điều hướng tới chỉ mục kết quả dựa trên chỉ số bắt đầu từ 0. |
Đường dẫn middleware sử dụng search=<term> và exact=true|false và trả về XML. Hãy sử dụng API widget thay vì tự phân tích phản hồi nội bộ đó.
Kiểm tra khả năng tìm kiếm
Phản hồi khởi tạo báo cáo:
X-Doconut-Can-Search: 1Sau khi khởi tạo, objViewer.CanSearch() tiết lộ cùng một phán quyết định dạng/phiên. Nó trả về false khi máy chủ gửi 0; trước phản hồi, hoặc với máy chủ cũ hơn bỏ qua tiêu đề, nó mặc định là true.
Ba cổng độc lập không được nhầm lẫn:
| Cổng | Câu hỏi |
|---|---|
CanSearch() / response header | Viewer đã giải quyết có đường dẫn chỉ mục/tìm kiếm gốc không? |
AllowSearch | Cấu hình định dạng này có yêu cầu trích xuất văn bản ở nơi công tắc tồn tại không? |
LicenseCapability.Search | Ứng dụng có được cấp quyền thực hiện tìm kiếm và nhận các gói UI không? |
Một định dạng có thể kỹ thuật cho phép tìm kiếm trong khi giấy phép hiện tại từ chối thao tác này.
Bật trích xuất theo định dạng
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // tùy chọn: cho phép người dùng kéo một vùng và sao chép văn bản của nó
});AllowSearch và AllowCopy tồn tại trên PdfConfig, WordConfig, ExcelConfig, và PptConfig. Các thuộc tính Office ủy quyền cho PdfConfig lồng nhau của chúng. Cả hai mặc định là false.
Trình điều hợp tìm kiếm gốc bình thường tồn tại cho PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB và MHT. XPS sử dụng đường dẫn PDF của nó theo mặc định. HTML và Microsoft Project hưởng lợi từ chuyển hướng PDF dựa trên văn bản:
// DefaultRender = false → được chuyển thành PDF dạng văn bản → có thể tìm kiếm
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Đối với các trình render gốc, CanSearch() mô tả khả năng của viewer; nó không đảm bảo rằng một tài liệu cụ thể chứa văn bản có thể sử dụng. Một PDF mà các trang chỉ là hình ảnh quét vẫn có thể cho ra không có kết quả gốc.
Hành vi Tìm kiếm bình thường
Máy chủ thử các nguồn tìm kiếm theo thứ tự này:
- Kết quả
ISearchableViewergốc. - Chỉ mục tìm kiếm
.srhđã được xây dựng trước. - Lỗi/kết quả trống khi không có nguồn tìm kiếm nào tồn tại.
CanSearch() có thể đúng cho một viewer có khả năng tìm kiếm ngay cả khi một tài liệu cụ thể không có
lớp văn bản và do đó không trả về kết quả nào.
Cấp phép và hành vi UI
Giấy phép Temporary/Demo đang hoạt động cho phép Tìm kiếm trong thời gian hiệu lực. Một giấy phép thiếu và tệp legacy TRIAL không cung cấp khả năng Tìm kiếm. Không có Tìm kiếm:
ReferenceCssvàReferenceScriptsbỏ qua các gói tìm kiếm.- Middleware từ chối tìm kiếm thay vì trả về kết quả có giấy phép.
Điều khiển việc hiển thị UI tùy chỉnh từ IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) và sử dụng CanSearch() cho phán quyết định dạng/phiên riêng biệt.
Khắc phục sự cố
| Triệu chứng | Kiểm tra |
|---|---|
| Thanh tìm kiếm bị thiếu | Khả năng tìm kiếm và IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() là false | Trình xem định dạng, đường dẫn DefaultRender đã chọn, và tiêu đề phản hồi khởi tạo |
| Tìm kiếm trả về không có kết quả cho PDF đã quét | Tài liệu không có lớp văn bản; sử dụng nguồn có văn bản hoặc một phép chiếu PDF bảo tồn văn bản |
| Tìm kiếm hoạt động nhưng các điểm nhấn bị lệch | Đường render, độ phân giải, biến đổi tài liệu, và các hộp từ đã trích xuất |
Trang này có hữu ích không?