Αναζήτηση

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

Το Doconut Viewer παρέχει κανονική Αναζήτηση χρησιμοποιώντας κείμενο που εξάγεται από το 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 που είναι διαθέσιμες σε προσαρμοσμένη διεπαφή.

Διατηρήστε τη πλήρη σύνθεση 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: '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>

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

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

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

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

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

Αναζήτηση από 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Έχει ο επιλεγμένος viewer εγγενή ευρετήριο/διαδρομή αναζήτησης;
AllowSearchΖήτησε αυτή η διαμόρφωση μορφής εξαγωγή κειμένου όπου υπάρχει το διακόπτης;
LicenseCapability.SearchΕίναι η εφαρμογή εξουσιοδοτημένη να εκτελεί αναζήτηση και να λαμβάνει τα UI πακέτα;

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

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

csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true   // προαιρετικό: επιτρέπει στον χρήστη να σύρει μια περιοχή και να αντιγράψει το κείμενό της
});

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 → μετατρέπεται σε PDF βασισμένο σε κείμενο → αναζητήσιμο
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

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

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

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

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

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

Άδεια και συμπεριφορά UI

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

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

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

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

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

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