Пошук
Рідний текстовий пошук у складі Viewer
Doconut Viewer забезпечує звичайний пошук, використовуючи текст, витягнутий форматом переглядача, або перенаправлення у вигляді текстового PDF. Для цього потрібна ліцензійна можливість Search.
Увімкнути інтерфейс пошуку
Search — це модуль Viewer, а не окрема панель інструментів. Повна сторінка повинна включати ресурси Viewer, панель інструментів Viewer, монтування Viewer та ініціалізований objViewer; потім Search Ribbon монтується та прикріплюється до того ж екземпляра.
Search та анотація є вбудованими ліцензованими функціями, а не пакетами AddPlugin<T>(). Запитуйте ресурси пошуку у інжектованого Viewer; їхні теги генеруються лише коли ліцензія надає Search.
@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, що доступні для користувацького інтерфейсу.
Залиште повний склад Viewer видимим у розмітці, спочатку ініціалізуйте docViewer, а потім прикріпіть ліцензовану Ribbon:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Viewer controls, including the button that opens 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>Компонент інжектує групи Find, Options та Results та обробляє пошук, очищення, підрахунок збігів і навігацію до попереднього/наступного збігу. Панель інструментів Viewer, що належить хосту, лише потребує перемикання її:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Його публічний API навмисно невеликий:
| Метод | Призначення |
|---|---|
attach(objViewer) | Підключає Ribbon до ініціалізованого переглядача; потрібно один раз |
open() / close() | Показує або приховує Ribbon; закриття також очищає підсвічування |
reset() | Очищає поточний запит, кількість результатів та підсвічування |
isOpen() | Повертає, чи видимий Ribbon |
setStatus(message) | Передає повідомлення статусу через налаштований зворотний виклик |
Опціональний зворотний виклик onToggle(isOpen) дозволяє хосту синхронізувати свою кнопку Search, а onLayout — змінювати розмір/підгоняти Viewer, коли висота Ribbon змінюється. Для послідовності запуску комбінованого Viewer, Search та Annotation дивіться Швидкий старт.
Пошук з 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() / response header | Чи має обраний переглядач вбудований індекс/шлях пошуку? |
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 для пошукового переглядача, навіть якщо конкретний сканований документ не має текстового шару і, отже, не повертає збігів.
Ліцензування та поведінка UI
Активна тимчасова/демо‑ліцензія надає Search протягом свого активного періоду. Відсутня ліцензія та застарілий файл TRIAL не надають можливості Search. Без Search:
ReferenceCssтаReferenceScriptsпропускають пакети пошуку.- Проміжне ПЗ відхиляє пошук замість повернення ліцензованих результатів.
Керуйте видимістю користувацького UI за допомогою IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) та використовуйте CanSearch() для окремого рішення щодо формату/сесії.
Устранення неполадок
| Симптом | Перевірка |
|---|---|
| Панель пошуку відсутня | Наявність можливості Search та підключення IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() повертає false | Переглядач формату, обраний шлях DefaultRender та заголовок відповіді ініціалізації |
| Search повертає нуль для сканованого PDF | У документі немає текстового шару; використайте джерело з текстом або PDF‑проекцію, що зберігає текст |
| Search працює, але підсвічування зміщене | Шлях рендерингу, роздільна здатність, перетворення документа та витягнуті рамки слів |
Чи була ця сторінка корисною?