Vyhledávání

Nativní textové vyhledávání v kompozici Vieweru

Viewer Doconut poskytuje běžné vyhledávání pomocí textu extrahovaného formátovým prohlížečem nebo textově založeného PDF přesměrování. Vyžaduje licenci Search.

Povolení uživatelského rozhraní vyhledávání

Vyhledávání je modul Vieweru, nikoli samostatná lišta nástrojů. Kompletní stránka musí zahrnovat zdroje Vieweru, panel nástrojů Vieweru, umístění Vieweru a inicializovaný objViewer; Ribbon pro vyhledávání je pak připojen k téže instanci.

Vyhledávání a anotace jsou vestavěné licencované funkce, nikoli balíčky AddPlugin<T>(). Požádejte o vyhledávací zdroje z injektovaného Vieweru; jejich značky jsou emitovány pouze tehdy, když licence povolí vyhledávání.

html
@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, které jsou k dispozici pro vlastní UI.

Udržujte kompletní kompozici Vieweru viditelnou v markupu, nejprve inicializujte docViewer a poté připojte licencovaný Ribbon:

html
<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>

Komponenta vkládá skupiny Find, Options a Results a zpracovává vyhledávání, čištění, počty shod a navigaci předchozí/další shoda. Hostitelský panel Vieweru stačí jen přepnout:

javascript
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 skrze nakonfigurovaný callback

Volitelný callback onToggle(isOpen) umožňuje hostiteli synchronizovat jeho tlačítko vyhledávání a onLayout umožňuje změnit velikost/přizpůsobit viewer, když se výška Ribbonu změní. Pro kombinovanou sekvenci spouštění Vieweru, vyhledávání a anotací viz Rychlý start.

Vyhledávání z JavaScriptu

javascript
objViewer.Search(keyword, false, function (resultCount) {
    console.log('Matches:', resultCount);
});

Druhý argument určuje hledání celých slov/přesnou shodu. Po volání zpětného volání:

MetodaVýsledek
SearchMatchCount()Celkový počet jednotlivých shod v dokumentu.
SearchSummary(false)Záznamy [pageNumber, matchCount] bez překreslování.
SearchSummary(true)Stejný souhrn a vykreslí zvýraznění stránky/miniaturního náhledu.
GotoSearchMatch(index)Přesune na shodu s nulovým indexem.

Middleware route používá search=<term> a exact=true|false a vrací XML. Používejte widget API místo ručního parsování interní odpovědi.

Kontrola schopnosti vyhledávání

Odpověď při inicializaci uvádí:

text
X-Doconut-Can-Search: 1

Po inicializaci objViewer.CanSearch() poskytuje stejný verdikt formátu/sesze. Vrací false, když server pošle 0; před odpovědí nebo u staršího serveru, který hlavičku vynechá, výchozí hodnota je true.

Tři nezávislé brány nesmí být zaměňovány:

BránaOtázka
CanSearch() / odpovědní hlavičkaMá vybraný viewer nativní index/cestu pro vyhledávání?
AllowSearchPožadoval tento formát konfiguraci extrakce textu, kde přepínač existuje?
LicenseCapability.SearchJe 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

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // optional: lets the user drag a region and copy its text
});

AllowSearch a AllowCopy existují na PdfConfig, WordConfig, ExcelConfig a PptConfig. Vlastnosti Office delegují na jejich vnožený PdfConfig. Obě výchozí hodnoty jsou false.

Normální nativní adaptéry pro vyhledávání existují pro PDF, Word, Excel, PowerPoint, TXT, Visio, e‑mail, EPUB a MHT. XPS používá svůj PDF‑cestu ve výchozím nastavení. HTML a Microsoft Project těží z textově založeného PDF přesměrování:

csharp
// DefaultRender = false → converted to a text-based PDF → searchable
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é textové vrstvy. 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í:

  1. Nativní výsledky ISearchableViewer.
  2. Předpřipravený index .srh.
  3. Chyba/prázdný výsledek, když neexistuje žádný zdroj vyhledávání.

CanSearch() může být pravda pro prohledávatelný viewer i v případě, že konkrétní naskenovaný dokument nemá textovou vrstvu a tudíž nevrací žádné shody.

Licencování a chování UI

Aktivní dočasná/demoverze licence povoluje vyhledávání během svého platného období. Chybějící licence a starý soubor TRIAL neumožňují žádnou schopnost vyhledávání. Bez vyhledávání:

  • ReferenceCss a ReferenceScripts vynechají vyhledávací balíčky.
  • Middleware odmítne 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/sesze.

Řešení problémů

ProblémKontrola
Vyhledávací panel chybíSchopnost vyhledávání a IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() je falseFormátový viewer, vybraná cesta DefaultRender a odpovědní hlavička při inicializaci
Vyhledávání vrací nula pro naskenované PDFDokument nemá textovou vrstvu; použijte zdroj s textem nebo PDF projekci, která text zachovává
Vyhledávání funguje, ale zvýraznění je posunutéCesta renderování, rozlišení, transformace dokumentu a extrahované rámečky slov

Byla tato stránka užitečná?