Vyhledávání

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

Doconut Viewer poskytuje běžné Search pomocí textu extrahovaného formátovým viewerem nebo textovým PDF přesměrováním. 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, umístění Vieweru a inicializovaný objViewer; Ribbon pro Search je pak připojen a připojen k téže instanci.

Search 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 emitovány pouze když licence povoluje Search.

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 dostupné 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="Ovládací prvky prohlížeče dokumentu">
    <!-- 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 zpracovává vyhledávání, čištění, počty shod a navigaci předchozí/další shoda. Hostitelský panel Vieweru stačí jen 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()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 spouštění kombinovaného Vieweru, Search a Annotation viz Quick 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í zpětné funkce:

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 vykresluje 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žívejte widget API místo ručního parsování interní odpovědi.

Kontrola schopnosti vyhledávání

Inicializační odpověď uvádí:

text
X-Doconut-Can-Search: 1

Po inicializaci objViewer.CanSearch() odhalí 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() / response headerMá vyřešený viewer nativní index/cestu pro vyhledávání?
AllowSearchPožadoval tento formát konfigurace extrakci textu, kde existuje přepínač?
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 vyhledá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. Office vlastnosti delegují na jejich vnořený PdfConfig. Obě výchozí hodnoty jsou false.

Normální nativní adaptér pro vyhledávání existuje pro PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB a MHT. XPS standardně používá svou PDF cestu. HTML a Microsoft Project těží z textové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é texty. PDF, jehož stránky jsou jen naskenované obrázky, může stále vracet nulu 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ý .srh vyhledávací index.
  3. Chyba/prázdný výsledek, když neexistuje žádný vyhledávací zdroj.

CanSearch() může být true pro vyhledávatelný viewer i když konkrétní 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:

  • 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/sesze.

Řešení problémů

ProblémKontrola
Panel vyhledávání chybíSchopnost vyhledávání a IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() je falseFormátový viewer, vybraná cesta DefaultRender a hlavička odpovědi při inicializaci
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í je posunutoCesta renderování, rozlišení, transformace dokumentu a extrahované rámečky slov

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