Vyhledávání
Nativní textové vyhledávání v kompozici Vieweru
Doconut Viewer poskytuje běžné vyhledávání pomocí textu extrahovaného formátovým prohlížečem nebo textovým PDF přesměrováním. Vyžaduje licenci Search.
Povolit uživatelské rozhraní vyhledávání
Search je modul Vieweru, nikoli samostatná lišta nástrojů. Celá stránka musí zahrnovat zdroje Vieweru, lištu nástrojů Vieweru, umístění Vieweru a inicializovaný objViewer; Ribbon pro Search je pak namontován a připojen k téže instanci.
Search a anotace jsou vestavěné licencované funkce, ne balíčky AddPlugin<T>(). Požádejte o vyhledávací zdroje z injektovaného Viewer; jejich značky jsou vydány pouze když licence povolí 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
}))Vložený ribbon volá stejné JavaScriptové metody dostupné pro vlastní UI.
Udržujte kompletní kompozici Vieweru viditelnou v markupu, nejprve inicializujte docViewer a poté připojte licencovaný Ribbon:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Ovládací prvky Vieweru, včetně tlačítka, které otevírá 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>Komponenta vkládá skupiny Find, Options a Results a zajišťuje vyhledávání, čištění, počty shod a navigaci předchozí/další shoda. Lišta nástrojů Vieweru vlastněná hostitelem ji potřebuje pouze přepínat:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Jeho veřejné API je úmyslně malé:
| Metoda | Účel |
|---|---|
attach(objViewer) | Připojí Ribbon k inicializovanému vieweru; vyžadováno jednou |
open() / close() | Zobrazí nebo skryje Ribbon; zavření také vymaže zvýraznění |
reset() | Vymaže aktuální termín, počet výsledků a zvýraznění |
isOpen() | Vrátí, zda je Ribbon viditelný |
setStatus(message) | Předá stavovou zprávu přes nakonfigurovaný callback |
Volitelný callback onToggle(isOpen) umožňuje hostiteli synchronizovat jeho tlačítko Search a onLayout mu umožňuje změnit velikost/přizpůsobit viewer, když se výška Ribbonu změní. Pro sekvenci spuštění kombinovaného Vieweru, Search a Annotation viz Rychlý start.
Vyhledávání z JavaScriptu
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Druhý argument určuje vyhledávání celých slov/přesnou shodu. Po callbacku:
| Metoda | Výsledek |
|---|---|
SearchMatchCount() | Celkový počet jednotlivých shod v dokumentu. |
SearchSummary(false) | [pageNumber, matchCount] položky bez překreslování. |
SearchSummary(true) | Stejný souhrn a vykreslí zvýraznění stránek/miniaturních náhledů. |
GotoSearchMatch(index) | Naviguje na shodu s nulovým indexem. |
Middleware route používá search=<term> a exact=true|false a vrací XML. Použijte widget API místo ručního parsování této interní odpovědi.
Zkontrolovat schopnost vyhledávání
Inicializační odpověď uvádí:
X-Doconut-Can-Search: 1Po inicializaci objViewer.CanSearch() poskytuje stejný verdikt formátu/sesí. Vrátí false, když server pošle 0; před odpovědí nebo u staršího serveru, který hlavičku vynechá, výchozí je true.
Nezaměňujte tři nezávislé brány:
| Brána | Otázka |
|---|---|
CanSearch() / response header | Má rozpoznaný viewer nativní index/cestu pro vyhledávání? |
AllowSearch | Požadoval tento formát konfigurace extrakci textu, kde existuje přepínač? |
LicenseCapability.Search | Je aplikace oprávněna provádět vyhledávání a získat UI balíčky? |
Formát může být technicky vyhledávatelný, zatímco aktuální licence operaci zakazuje.
Povolit extrakci podle formátu
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // volitelně: umožňuje uživateli přetáhnout oblast a zkopírovat její text
});AllowSearch a AllowCopy existují v PdfConfig, WordConfig, ExcelConfig a PptConfig. Vlastnosti Office delegují na jejich vnožený PdfConfig. Obě mají výchozí hodnotu false.
Normální nativní vyhledávací adaptéry existují pro PDF, Word, Excel, PowerPoint, TXT, Visio, e‑mail, EPUB a MHT. XPS používá ve výchozím nastavení svou PDF cestu. HTML a Microsoft Project těží z textového PDF přesměrování:
// DefaultRender = false → převedeno na textové PDF → vyhledávatelné
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Pro nativní renderery CanSearch() popisuje schopnost vieweru; nezaručuje, že konkrétní dokument obsahuje použitelné texty. PDF, jehož stránky jsou jen naskenované obrázky, může stále vracet nula nativních výsledků.
Normální chování vyhledávání
Server zkouší zdroje vyhledávání v tomto pořadí:
- Nativní výsledky
ISearchableViewer. - Předpřipravený vyhledávací index
.srh. - Chyba/prázdný výsledek, když neexistuje žádný zdroj vyhledávání.
CanSearch() může být true pro vyhledávatelný viewer, i když konkrétní naskenovaný dokument nemá textovou vrstvu a tudíž nevrací žádné shody.
Licencování a chování UI
Aktivní dočasná/Demo licence poskytuje Search během svého platného období. Chybějící licence a starý soubor TRIAL neposkytují žádnou schopnost Search. Bez Search:
ReferenceCssaReferenceScriptsvynechávají vyhledávací balíčky.- Middleware odmítá vyhledávání místo vrácení licencovaných výsledků.
Řiďte viditelnost vlastního UI pomocí IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) a použijte CanSearch() pro samostatný verdikt formátu/sesí.
Odstraňování potíží
| Příznak | Kontrola |
|---|---|
| Panel vyhledávání chybí | Schopnost Search a IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() je false | Formátový viewer, vybraná cesta DefaultRender a hlavička inicializační odpovědi |
| Search vrací nula pro naskenované PDF | Dokument nemá textovou vrstvu; použijte zdroj s textem nebo PDF projekci, která zachovává text |
| Search funguje, ale zvýraznění jsou posunutá | Cesta renderování, rozlišení, transformace dokumentu a extrahované rámečky slov |
Byla tato stránka užitečná?