Пошук
Вбудований текстовий пошук у складі Viewer
Переглядач Doconut забезпечує звичайний пошук, використовуючи текст, отриманий за допомогою переглядача формату, або перенаправлення на текстовий PDF. Потрібна можливість ліцензії Search.
Увімкнення інтерфейсу пошуку
Search є модулем переглядача, а не окремою панеллю інструментів. Повна сторінка повинна містити ресурси переглядача, панель інструментів переглядача, монтування переглядача та ініціалізований objViewer; після цього стрічка пошуку монтується та приєднується до того ж екземпляра.
Пошук та анотація є вбудованими функціями за ліцензією, а не пакетами AddPlugin<T>(). Запитуйте ресурси пошуку у інжектованого переглядача; їхні теги генеруються лише коли ліцензія надає пошук.
@Html.Raw(Viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
}))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
}))Вбудована стрічка викликає ті ж методи JavaScript, які доступні для користувацького інтерфейсу.
Залиште повний склад переглядача видимим у розмітці, спочатку ініціалізуйте docViewer, а потім приєднайте ліцензовану стрічку:
<nav id="toolbar" aria-label="Document 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: '/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>Компонент інжектує групи Find, Options та Results і обробляє пошук, очищення, підрахунок збігів та навігацію попередній/наступний збіг. Панель інструментів переглядача, що належить хосту, лише потребує перемикання її:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Його публічний API навмисно невеликий:
| Метод | Призначення |
|---|---|
attach(objViewer) | Підключити стрічку до ініціалізованого переглядача; потрібно один раз |
open() / close() | Показати або сховати стрічку; закриття також очищає підсвічування |
reset() | Очистити поточний запит, кількість результатів та підсвічування |
isOpen() | Повернути, чи стрічка видима |
setStatus(message) | Передати повідомлення про статус через налаштований зворотний виклик |
Необов'язковий зворотний виклик onToggle(isOpen) дозволяє хосту синхронізувати кнопку пошуку, а onLayout — змінювати розмір/переналаштовувати переглядач, коли висота стрічки змінюється. Для послідовності запуску комбінованих переглядач, пошуку та анотації дивіться Швидкий старт.
Пошук з JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Другий аргумент — пошук за цілим словом/точний збіг. Після зворотного виклику:
| Метод | Результат |
|---|---|
SearchMatchCount() | Загальна кількість окремих збігів у документі. |
SearchSummary(false) | Записи [pageNumber, matchCount] без перерисовки. |
SearchSummary(true) | Той самий підсумок і малює підсвічування сторінок/мініатюр. |
GotoSearchMatch(index) | Переходить до збігу за індексом, починаючи з нуля. |
Маршрут проміжного ПЗ використовує search=<term> та exact=true|false і повертає XML. Використовуйте API віджету замість власного парсингу внутрішньої відповіді.
Перевірка можливості пошуку
Відповідь ініціалізації повідомляє:
X-Doconut-Can-Search: 1Після ініціалізації objViewer.CanSearch() повертає той самий результат щодо формату/сесії. Він повертає false, коли сервер надсилає 0; до отримання відповіді або на старих серверах, які не включають заголовок, значення за замовчуванням — true.
Три незалежні перевірки не слід плутати:
| Перевірка | Питання |
|---|---|
CanSearch() / заголовок відповіді | Чи має визначений переглядач вбудований індекс/шлях пошуку? |
AllowSearch | Чи запитувала ця конфігурація формату витяг тексту, де існує перемикач? |
LicenseCapability.Search | Чи дозволено застосунку виконувати пошук і отримувати UI‑пакети? |
Формат може бути технічно пошуковим, хоча поточна ліцензія забороняє операцію.
Увімкнення витягування за форматом
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // optional: lets the user drag a region and copy its text
});AllowSearch та AllowCopy існують у PdfConfig, WordConfig, ExcelConfig та PptConfig. Властивості Office делегують своїм вкладеним PdfConfig. Обидва за замовчуванням false.
Звичайні адаптери вбудованого пошуку існують для PDF, Word, Excel, PowerPoint, TXT, Visio, електронної пошти, EPUB та MHT. XPS за замовчуванням використовує свій PDF‑шлях. HTML та Microsoft Project отримують переваги від перенаправлення на текстовий PDF:
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Для вбудованих рендерерів CanSearch() описує можливості переглядача; це не гарантує, що конкретний документ містить придатний текст. PDF, сторінки якого є лише сканованими зображеннями, може все одно повертати нульові результати.
Звичайна поведінка пошуку
Сервер пробує джерела пошуку у такому порядку:
- Результати вбудованого
ISearchableViewer. - Попередньо створений індекс пошуку
.srh. - Помилка/порожній результат, коли жодного джерела пошуку не існує.
CanSearch() може бути true для переглядача з можливістю пошуку, навіть якщо конкретний документ не має текстового шару і, відповідно, не повертає збігів.
Ліцензування та поведінка інтерфейсу
Активна тимчасова/демо‑ліцензія надає пошук протягом свого активного періоду. Відсутня ліцензія та застарілий файл TRIAL не надають можливості пошуку. Без пошуку:
ReferenceCssтаReferenceScriptsне включають пакети пошуку.- Проміжне ПЗ відхиляє пошук замість повернення ліцензованих результатів.
Керуйте видимістю користувацького інтерфейсу за допомогою IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) та використовуйте CanSearch() для окремого рішення щодо формату/сесії.
Устранення проблем
| Симптом | Перевірка |
|---|---|
| Панель пошуку відсутня | Наявність можливості пошуку та IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() повертає false | Переглядач формату, обраний шлях DefaultRender та заголовок відповіді ініціалізації |
| Пошук повертає нуль для сканованого PDF | Документ не має текстового шару; використайте джерело з текстом або проекцію PDF, що зберігає текст |
| Пошук працює, але підсвічування зміщене | Шлях рендерингу, роздільна здатність, трансформації документа та видобуті блоки слів |
Чи була ця сторінка корисною?