Vyhledávání
Nativní textové vyhledávání v sestavení Vieweru
Viewer Doconut poskytuje běžné vyhledávání pomocí textu extrahovaného formátovým prohlížečem nebo textovým přesměrováním PDF. Vyžaduje licenci Search.
Povolení uživatelského rozhraní vyhledávání
Vyhledávání je modul Vieweru, nikoli samostatná lišta nástrojů. Celá stránka musí zahrnovat zdroje Vieweru, lištu nástrojů Vieweru, připojení Vieweru a inicializovaný objViewer; Ribbon pro vyhledávání je poté namontován a připojen k téže instanci.
Vyhledávání a anotace jsou vestavěné licencované funkce, ne balíčky AddPlugin<T>(). Požádejte o vyhledávací zdroje z Viewer; jejich značky jsou generovány pouze tehdy, když licence povoluje vyhledávání. Pohledy MVC 5 nemají @inject, takže vytvořte značky v kontroleru a předejte je přes ViewBag spolu s licenčním příznakem, který stránka potřebuje:
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
ViewBag.ViewerCss = viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
});
ViewBag.ViewerScripts = viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
});
ViewBag.IsSearchEnabled = viewer.IsSearchEnabled;Zapište je do pohledu pomocí @Html.Raw(ViewBag.ViewerCss) a @Html.Raw(ViewBag.ViewerScripts). Ve Web Forms vystavte stejné hodnoty z kódu-behind a zapište je pomocí <%= %>.
Vložený ribbon volá stejné JavaScriptové metody, které jsou k dispozici pro vlastní UI.
Udržujte kompletní sestavení Vieweru viditelné v markupu, nejprve inicializujte docViewer a poté připojte licencovaný Ribbon:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Ovládací prvky prohlížeče, včetně tlačítka, které otevírá vyhledávání -->
</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 ((bool)ViewBag.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>Serverová podmínka if je důležitá: bez schopnosti vyhledávání ReferenceScripts vynechá skript Ribbonu, takže nechráněné volání doconutSearchBar(...) by vyvolalo výjimku a zastavilo načítání stránky Vieweru. Ve Web Forms napište stejnou ochranu jako <% if (IsSearchEnabled) { %> … <% } %>.
Komponenta vkládá skupiny Find, Options a Results a zajišťuje vyhledávání, čištění, počítání shod a navigaci na předchozí/další shodu. Lišta Vieweru vlastněná hostitelem ji stačí 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 prohlížeči; 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řepošle stavovou zprávu prostřednictvím nakonfigurovaného zpětného volání |
Volitelný zpětný volání onToggle(isOpen) umožňuje hostiteli synchronizovat jeho tlačítko vyhledávání a onLayout mu umožňuje změnit velikost/přizpůsobit prohlížeč, když se výška Ribbonu změní. Pro sekvenci spuštění kombinovaného Vieweru, vyhledávání a anotací 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čet shod je předán v callbacku: Search sám odesílá požadavek na server a nevrací nic užitečného, takže var n = objViewer.Search(keyword, false) vždy vrací undefined — a stránka vytvořená tímto způsobem hlásí „nothing found“, zatímco prohlížeč zvýrazní shody. Po callbacku:
| Metoda | Výsledek |
|---|---|
SearchMatchCount() | Celkový počet jednotlivých shod v dokumentu. |
SearchSummary(false) | [pageNumber, matchCount] položky bez překreslení. |
SearchSummary(true) | Stejný souhrn a vykresluje zvýraznění stránky/miniaturního náhledu. |
GotoSearchMatch(index) | Naviguje na shodu s nulovým indexem. |
DocImage.axd odpovídá na search=<term> a exact=true|false pomocí XML. Použijte widget API místo toho, abyste sami parsovali tuto interní odpověď.
Kontrola možnosti vyhledávání
Inicializační odpověď uvádí:
X-Doconut-Can-Search: 1Po inicializaci objViewer.CanSearch() poskytuje stejný formát/sesní verdikt. Vrací false, když server pošle 0; před odpovědí nebo na starším serveru, který hlavičku vynechává, výchozí hodnota je true.
Tři nezávislé brány nesmí být zaměňovány:
| Brána | Otázka |
|---|---|
CanSearch() / response header | Má vyřešený prohlížeč nativní index/výhledovou cestu? |
AllowSearch | Požadovalo toto formátové nastavení 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 prohledávatelný, zatímco aktuální licence operaci zakazuje.
Povolení extrakce podle formátu
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true // volitelné: umožňuje uživateli tá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 ve výchozím nastavení používá svou PDF cestu. HTML a Microsoft Project těží z přesměrování na textové PDF:
// DefaultRender = false → převedeno na textové PDF → prohledávatelné
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Pro nativní renderery CanSearch() popisuje schopnost prohlížeče; nezaručuje, že konkrétní dokument obsahuje použitelné textové údaje. 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 prohlížeč s vyhledáváním, i když konkrétní dokument nemá textovou vrstvu a proto nevrací žádné shody.
Licencování a chování UI
Aktivní dočasná/demo licence poskytuje vyhledávání během svého platného období. Chybějící licence a starý soubor TRIAL neumožňují vyhledávání. Bez vyhledávání:
ReferenceCssaReferenceScriptsvynechávají vyhledávací balíčky.DocImage.axdodmítá požadavky na vyhledávání místo vrácení výsledků.
Řiďte viditelnost vlastního UI pomocí IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) a použijte CanSearch() pro samostatný verdikt formátu/sesce.
Řešení problémů
| Problém | Kontrola |
|---|---|
| Vyhledávací lišta chybí | Schopnost vyhledávání a IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() je false | Prohlížeč formátu, vybraná cesta DefaultRender a inicializační hlavička odpovědi |
| Vyhledávání vrací nulu pro naskenované PDF | Dokument nemá textovou vrstvu; použijte zdroj s textem nebo PDF projekci, která zachovává text |
| Vyhledávání funguje, ale zvýraznění je posunuto | Cesta renderování, rozlišení, transformace dokumentu a extrahované rámečky slov |
Byla tato stránka užitečná?