Vyhledávání

Nativní textové vyhledávání v sestavě Vieweru

Viewer Doconut 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.

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

Vyhledávání je modul Vieweru, ne samostatná lišta nástrojů. Celá stránka musí obsahovat zdroje Vieweru, lištu nástrojů Vieweru, umístění Vieweru a inicializovaný objViewer; poté je Ribbon vyhledávání 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 injektovaného Viewer; jejich značky jsou vydány pouze když licence povoluje 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í sestavu Vieweru viditelnou v markupu, nejprve inicializujte docViewer a poté připojte licencovaný Ribbon:

html
<nav id="toolbar" aria-label="Document viewer controls">
    <!-- Ovládací prvky Vieweru, 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: '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 k předchozí/další shodě. Lišta nástrojů Vieweru vlastněná hostitelem ji 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()Vrátí, zda je Ribbon viditelný
setStatus(message)Předá 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 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 zpětném 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 vykresluje zvýraznění stránky/miniaturního náhledu.
GotoSearchMatch(index)Naviguje na shodu s indexem od nuly.

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

Kontrola schopnosti vyhledávání

Inicializační odpověď 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ěněny:

BránaOtázka
CanSearch() / response headerMá vyřešený viewer nativní index/cestu pro vyhledávání?
AllowSearchPožadovala tato konfigurace formátu 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   // 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 používá ve výchozím nastavení svou PDF cestu. HTML a Microsoft Project těží z textového PDF přesměrování:

csharp
// 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é 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í:

  1. Nativní výsledky ISearchableViewer.
  2. Předpřipravený .srh vyhledávací index.
  3. 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í dokument nemá textovou vrstvu a tudíž 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 neposkytují žádnou schopnost 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/sesze.

Řešení problémů

PříznakKontrola
Panel vyhledávání chybíSchopnost vyhledávání a IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() je falseFormá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é rámečky slov

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