Vyhledávání

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

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

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

Search je modul Vieweru, nikoli samostatná lišta nástrojů. Celá stránka musí zahrnovat zdroje Vieweru, panel nástrojů Vieweru, připojení Vieweru a inicializovaný objViewer; Ribbon pro vyhledávání je potom namontován a 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 Viewer; jejich značky jsou generová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í uživatelské rozhraní.

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

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Ovládací prvky prohlížeče, 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: '/',
        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čítání shod a navigaci na předchozí/další shodu. Hostitelský panel nástrojů Vieweru jej stačí přepínat:

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()Nahlásí, 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, 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 vyhledávání celých slov/přesnou shodu. Po volání callbacku:

MetodaVý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 vykresluje zvýraznění stránky/miniaturního náhledu.
GotoSearchMatch(index)Naviguje na index shody číslovaný od nuly.

Middleware trasa používá search=<term> a exact=true|false a vrací XML. Použijte widget API místo vlastního parsování této interní odpovědi.

Kontrola schopnosti vyhledávání

Inicializační odpověď hlásí:

text
X-Doconut-Can-Search: 1

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

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

BránaOtázka
CanSearch() / response headerMá vyřešený viewer nativní index/cestu pro vyhledávání?
AllowSearchPožadovalo toto nastavení formátu extrakci textu tam, kde je přepínač?
LicenseCapability.SearchJe aplikace oprávněna provádět vyhledávání a přijímat 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   // volitelné: umožňuje uživateli táhnout oblast a zkopírovat její text
});

AllowSearch a AllowCopy existují na 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 textově založeného přesměrování PDF:

csharp
// 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 vieweru; nezaručuje, že konkrétní dokument obsahuje použitelné textové údaje. PDF, jehož stránky jsou pouze naskenované obrázky, může stále vracet nulové nativní výsledky.

Chování normálního vyhledávání

Server zkouší zdroje vyhledávání v tomto pořadí:

  1. Výsledky z nativního vieweru formátu.
  2. Předpřipravený .srh vyhledávací index.
  3. Chybný/prázdný výsledek, když neexistuje žádný zdroj vyhledávání.

Index .srh je vyhledávací artefakt publikovaný spolu s obrázky stránek, když jsou dokumenty poskytovány ze sdíleného úložiště, takže uzel, který dokument nikdy neotevřel, může stále odpovídat na vyhledávání — viz Distribuovaná nasazení.

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á/Demo licence povoluje vyhledávání během svého platného období. Chybějící licence a starý soubor TRIAL neumožňují žádnou funkci vyhledávání. Bez vyhledávání:

  • ReferenceCss a ReferenceScripts vynechá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/session.

Řešení potíží

PříznakKontrola
Vyhledávací lišta chybíSchopnost vyhledávání a IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() je nepravdaFormátový viewer, vybraná cesta DefaultRender a hlavička inicializační odpovědi
Vyhledávání vrací nulu pro naskenované PDFDokument nemá textovou vrstvu; použijte zdroj s textem nebo PDF projekci, která zachovává text
Vyhledávání funguje, ale zvýraznění jsou posunutáCesta renderování, rozlišení, transformace dokumentu a extrahovaná okénka slov

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