Пошук
Рідний текстовий пошук у складі Viewer
The Doconut Viewer забезпечує звичайний пошук, використовуючи текст, отриманий від переглядача формату, або перенаправлення PDF на основі тексту. Для цього потрібна можливість ліцензії Search.
Увімкнути інтерфейс пошуку
Пошук — це модуль Viewer, а не окрема панель інструментів. Повна сторінка повинна містити ресурси Viewer, панель інструментів Viewer, монтування Viewer та ініціалізований objViewer; після цього Ribbon пошуку монтується та під’єднується до того ж екземпляра.
Пошук і анотація — це вбудовані ліцензовані функції, а не пакети AddPlugin<T>(). Запросіть ресурси пошуку у впровадженого Viewer; їхні теги генеруються лише коли ліцензія надає Пошук.
@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 викликає ті ж JavaScript‑методи, які доступні для користувацького інтерфейсу.
Залиште повний склад Viewer видимим у розмітці, спочатку ініціалізуйте docViewer, а потім під’єднайте ліцензований Ribbon:
<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: '/',
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) дозволяє хосту синхронізувати кнопку Пошук, а onLayout — змінювати розмір/перепідлаштовувати переглядач, коли висота 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 // необов’язково: дозволяє користувачеві виділити область і скопіювати її текст
});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 → перетворюється у PDF на основі тексту → з можливістю пошуку
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Для рідних рендерерів, CanSearch() описує можливість переглядача; це не гарантує, що конкретний документ містить придатний текст. PDF, сторінки якого лише скановані зображення, все одно може давати нульові рідні результати.
Поведінка звичайного пошуку
Сервер пробує джерела пошуку у такому порядку:
- Результати від рідного переглядача формату.
- Попередньо створений індекс пошуку
.srh. - Помилка/порожній результат, коли жодне джерело пошуку не існує.
Індекс .srh — це артефакт пошуку, опублікований разом із зображеннями сторінок, коли документи подаються зі спільного сховища, тому вузол, який ніколи не відкривав документ, все ще може відповідати на пошуки — дивіться Розподілені розгортання.
CanSearch() може бути true для переглядача з можливістю пошуку, навіть коли конкретний сканований документ не має текстового шару і, отже, не повертає збігів.
Ліцензування та поведінка інтерфейсу
Активна тимчасова/демо‑ліцензія надає Пошук протягом свого активного періоду. Відсутня ліцензія та застарілий файл TRIAL не надають можливості Пошуку. Без Пошуку:
ReferenceCssтаReferenceScriptsпропускають пакети пошуку.- Проміжне ПЗ відхиляє пошук замість повернення ліцензованих результатів.
Керуйте видимістю користувацького інтерфейсу через IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) і використовуйте CanSearch() для окремого вердикту формату/сесії.
Усунення неполадок
| Симптом | Перевірка |
|---|---|
| Панель пошуку відсутня | Можливість пошуку та IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() є false | Переглядач формату, обраний шлях DefaultRender та заголовок відповіді ініціалізації |
| Пошук повертає нуль для сканованого PDF | Документ не має текстового шару; використайте джерело з текстом або проекцію PDF, що зберігає текст |
| Пошук працює, але підсвічування зміщене | Шлях рендерингу, роздільна здатність, трансформації документа та видобуті блоки слів |
Чи була ця сторінка корисною?