Αναζήτηση

Αναζήτηση κειμένου σε φυσική μορφή στη σύνθεση του Viewer

Ο Doconut Viewer παρέχει κανονική Αναζήτηση χρησιμοποιώντας κείμενο που εξάγεται από τον προβολέα μορφής ή μια ανακατεύθυνση PDF βασισμένη σε κείμενο. Απαιτεί τη δυνατότητα άδειας Search.

Ενεργοποίηση της διεπαφής αναζήτησης

Η Αναζήτηση είναι μονάδα του Viewer, όχι ανεξάρτητη γραμμή εργαλείων. Η πλήρης σελίδα πρέπει να περιλαμβάνει τους πόρους του Viewer, τη γραμμή εργαλείων του Viewer, το mount του Viewer και το αρχικοποιημένο objViewer; η Ribbon της Αναζήτησης στη συνέχεια τοποθετείται και συνδέεται με το ίδιο στιγμιότυπο.

Η Αναζήτηση και η σημείωση είναι ενσωματωμένες αδειοδοτημένες λειτουργίες, όχι πακέτα AddPlugin<T>(). Ζητήστε τους πόρους αναζήτησης από το ενσωματωμένο Viewer; οι ετικέτες τους εκδίδονται μόνο όταν η άδεια χορηγεί Αναζήτηση.

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
}))

Η ενσωματωμένη ribbon καλεί τις ίδιες μεθόδους JavaScript που είναι διαθέσιμες σε προσαρμοσμένη UI.

Διατηρήστε τη πλήρη σύνθεση του Viewer ορατή στο markup, αρχικοποιήστε πρώτα το docViewer και, στη συνέχεια, συνδέστε τη αδειοδοτημένη 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: '/',
        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>

Το στοιχείο ενσωματώνει ομάδες Find, Options και Results και διαχειρίζεται την αναζήτηση, τον καθαρισμό, τους μετρητές αντιστοιχίσεων και την πλοήγηση σε προηγούμενη/επόμενη αντιστοιχία. Μια γραμμή εργαλείων Viewer που ανήκει στον κεντρικό υπολογιστή χρειάζεται μόνο να την εναλλάσσει:

javascript
searchBar.isOpen() ? searchBar.close() : searchBar.open();

Το δημόσιο API του είναι σκόπιμα μικρό:

ΜέθοδοςΣκοπός
attach(objViewer)Συνδέει τη Ribbon με τον αρχικοποιημένο προβολέα· απαιτείται μία φορά
open() / close()Εμφανίζει ή κρύβει τη Ribbon· το κλείσιμο επίσης καθαρίζει τις επισημάνσεις
reset()Καθαρίζει τον τρέχοντα όρο, τον αριθμό αποτελεσμάτων και τις επισημάνσεις
isOpen()Αναφέρει αν η Ribbon είναι ορατή
setStatus(message)Προωθεί ένα μήνυμα κατάστασης μέσω της ρυθμισμένης κλήσης επιστροφής

Η προαιρετική κλήση onToggle(isOpen) επιτρέπει στον κεντρικό υπολογιστή να συγχρονίσει το κουμπί Αναζήτησης, και το onLayout του επιτρέπει να αλλάξει μέγεθος/προσαρμόσει τον προβολέα όταν η Ribbon αλλάζει ύψος. Για τη συνδυασμένη ακολουθία εκκίνησης Viewer, Αναζήτησης και Σημείωσης, δείτε τη Γρήγορη Εκκίνηση(Quick Start).

Αναζήτηση από JavaScript

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

Το δεύτερο όρισμα είναι η αντιστοίχιση ολόκληρης λέξης/ακριβούς αντιστοίχισης. Μετά την κλήση επιστροφής:

ΜέθοδοςΑποτέλεσμα
SearchMatchCount()Συνολικός αριθμός μεμονωμένων αντιστοιχίσεων στο έγγραφο.
SearchSummary(false)Καταχωρήσεις [pageNumber, matchCount] χωρίς επανασχεδίαση.
SearchSummary(true)Ίδια σύνοψη και ζωγραφίζει επισημάνσεις σε σελίδες/μικρογραφίες.
GotoSearchMatch(index)Πλοηγείται σε δείκτη αντιστοιχίας μηδενικής βάσης.

Η διαδρομή μεσαίου λογισμικού χρησιμοποιεί search=<term> και exact=true|false και επιστρέφει XML. Χρησιμοποιήστε το API του widget αντί να αναλύετε εσείς την εσωτερική απόκριση.

Έλεγχος δυνατότητας αναζήτησης

Η απάντηση αρχικοποίησης αναφέρει:

text
X-Doconut-Can-Search: 1

Μετά την αρχικοποίηση, το objViewer.CanSearch() εκθέτει την ίδια απόφαση μορφής/συνεδρίας. Επιστρέφει false όταν ο διακομιστής στέλνει 0; πριν από την απόκριση, ή με παλαιότερο διακομιστή που παραλείπει την κεφαλίδα, προεπιλογή είναι true.

Τρία ανεξάρτητα σημεία δεν πρέπει να συγχέονται:

ΠύληΕρώτηση
CanSearch() / response headerΔιαθέτει ο επιλυμένος προβολέας εγγενή διαδρομή ευρετηρίου/αναζήτησης;
AllowSearchΖήτησε αυτή η διαμόρφωση μορφής εξαγωγή κειμένου όπου υπάρχει το διακόπτη;
LicenseCapability.SearchΕίναι η εφαρμογή εξουσιοδοτημένη να εκτελεί αναζήτηση και να λαμβάνει τα πακέτα UI;

Μια μορφή μπορεί τεχνικά να είναι αναζητήσιμη ενώ η τρέχουσα άδεια αρνείται τη λειτουργία.

Ενεργοποίηση εξαγωγής ανά μορφή

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 και AllowCopy υπάρχουν στα PdfConfig, WordConfig, ExcelConfig και PptConfig. Οι ιδιότητες Office παραπέμπουν στο ενσωματωμένο PdfConfig. Και τα δύο προεπιλογή είναι false.

Οι κανονικοί προσαρμογείς εγγενούς αναζήτησης υπάρχουν για PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB και MHT. Το XPS χρησιμοποιεί την διαδρομή PDF του εξ ορισμού. HTML και Microsoft Project ωφελούνται από μια ανακατεύθυνση PDF βασισμένη σε κείμενο:

csharp
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

Για εγγενείς αποδότες, το CanSearch() περιγράφει τη δυνατότητα του προβολέα· δεν εγγυάται ότι ένα συγκεκριμένο έγγραφο περιέχει κείμενο που μπορεί να χρησιμοποιηθεί. Ένα PDF του οποίου οι σελίδες είναι μόνο σαρωμένες εικόνες μπορεί ακόμη να παράγει μηδενικά εγγενή αποτελέσματα.

Κανονική συμπεριφορά Αναζήτησης

Ο διακομιστής δοκιμάζει πηγές αναζήτησης με αυτή τη σειρά:

  1. Αποτελέσματα εγγενούς ISearchableViewer.
  2. Προκατασκευασμένος δείκτης αναζήτησης .srh.
  3. Σφάλμα/κενό αποτέλεσμα όταν δεν υπάρχει πηγή αναζήτησης.

Ο δείκτης .srh είναι το τεχνητό αντικείμενο αναζήτησης που δημοσιεύεται μαζί με τις εικόνες σελίδων όταν τα έγγραφα εξυπηρετούνται από κοινόχρηστη αποθήκη, ώστε ένας κόμβος που δεν άνοιξε ποτέ το έγγραφο να μπορεί ακόμη να απαντήσει σε αναζητήσεις — δείτε τις Διανεμημένες Αναπτύξεις(Distributed Deployments).

Το CanSearch() μπορεί να είναι αληθές για έναν αναζητήσιμο προβολέα ακόμη και όταν ένα συγκεκριμένο σαρωμένο έγγραφο δεν έχει στρώση κειμένου και επομένως δεν επιστρέφει αντιστοιχίες.

Αδειοδότηση και συμπεριφορά UI

Μία ενεργή άδεια Temporary/Demo χορηγεί Αναζήτηση κατά τη διάρκεια της ενεργής περιόδου. Μια ελλιπής άδεια και το κληροδοτημένο αρχείο TRIAL δεν χορηγούν καμία δυνατότητα Αναζήτησης. Χωρίς Αναζήτηση:

  • Τα ReferenceCss και ReferenceScripts παραλείπουν τα πακέτα αναζήτησης.
  • Το μεσαίο λογισμικό αρνείται την αναζήτηση αντί να επιστρέφει αδειοδοτημένα αποτελέσματα.

Οδηγήστε την ορατότητα προσαρμοσμένης UI από το IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) και χρησιμοποιήστε το CanSearch() για την ξεχωριστή απόφαση μορφής/συνεδρίας.

Επίλυση προβλημάτων

ΣύμπτωμαΈλεγχος
Η γραμμή αναζήτησης λείπειΔυνατότητα αναζήτησης και IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() είναι ψευδέςΠροβολέας μορφής, επιλεγμένη διαδρομή DefaultRender, και κεφαλίδα απόκρισης αρχικοποίησης
Η Αναζήτηση επιστρέφει μηδέν για σαρωμένο PDFΤο έγγραφο δεν έχει στρώση κειμένου· χρησιμοποιήστε πηγή που περιέχει κείμενο ή μια προβολή PDF που διατηρεί το κείμενο
Η Αναζήτηση λειτουργεί αλλά οι επισημάνσεις είναι εκτός θέσηςΔιαδρομή απόδοσης, ανάλυση, μετασχηματισμοί εγγράφου και εξαγόμενα πλαίσια λέξεων

Ήταν αυτή η σελίδα χρήσιμη;