Αναζήτηση
Αυθεντική αναζήτηση κειμένου στη σύνθεση Viewer
Ο Doconut Viewer παρέχει κανονική Αναζήτηση χρησιμοποιώντας κείμενο που εξάγεται από το format viewer ή μια
ανακατεύθυνση PDF βασισμένη σε κείμενο. Απαιτεί τη δυνατότητα άδειας Search.
Ενεργοποίηση του UI αναζήτησης
Η Αναζήτηση είναι ένα module του Viewer, όχι μια αυτόνομη γραμμή εργαλείων. Η πλήρης σελίδα πρέπει να περιλαμβάνει τα
προγράμματα του Viewer, τη γραμμή εργαλείων Viewer, το mount του Viewer και το αρχικοποιημένο objViewer· η Ribbon
Αναζήτησης στη συνέχεια τοποθετείται και συνδέεται με το ίδιο στιγμιότυπο.
Η Αναζήτηση και η σημείωση είναι ενσωματωμένα χαρακτηριστικά με άδεια, όχι πακέτα AddPlugin<T>(). Ζητήστε τους πόρους αναζήτησης από το ενσωματωμένο Viewer· οι ετικέτες τους εκδίδονται μόνο όταν η άδεια χορηγεί την Αναζήτηση.
@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 με άδεια:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- Έλεγχοι προβολέα, συμπεριλαμβανομένου του κουμπιού που ανοίγει την Αναζήτηση -->
</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 που ανήκει στον κεντρικό υπολογιστή χρειάζεται μόνο να την εναλλάσσει:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Το δημόσιο API του είναι σκόπιμα μικρό:
| Μέθοδος | Σκοπός |
|---|---|
attach(objViewer) | Συνδέει τη Ribbon με τον αρχικοποιημένο viewer· απαιτείται μία φορά |
open() / close() | Εμφανίζει ή κρύβει τη Ribbon· το κλείσιμο επίσης καθαρίζει τις επισημάνσεις |
reset() | Καθαρίζει τον τρέχοντα όρο, τον αριθμό αποτελεσμάτων και τις επισημάνσεις |
isOpen() | Αναφέρει αν η Ribbon είναι ορατή |
setStatus(message) | Προωθεί ένα μήνυμα κατάστασης μέσω της ρυθμισμένης callback |
Η προαιρετική callback onToggle(isOpen) επιτρέπει στον κεντρικό υπολογιστή να συγχρονίσει το κουμπί Αναζήτησης, και
onLayout του επιτρέπει να αλλάξει το μέγεθος/προσαρμογή του viewer όταν η Ribbon αλλάζει ύψος. Για τη συνδυασμένη
ακολουθία εκκίνησης Viewer, Αναζήτησης και Σημείωσης, δείτε
Γρήγορη Εκκίνηση.
Αναζήτηση από JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Το δεύτερο όρισμα είναι αντιστοίχιση ολόκληρης λέξης/ακριβούς. Μετά την callback:
| Μέθοδος | Αποτέλεσμα |
|---|---|
SearchMatchCount() | Συνολικές μεμονωμένες αντιστοιχίσεις στο έγγραφο. |
SearchSummary(false) | καταχωρήσεις [pageNumber, matchCount] χωρίς επανασχεδίαση. |
SearchSummary(true) | Ίδια σύνοψη και ζωγραφίζει επισημάνσεις σελίδας/μικρογραφίας. |
GotoSearchMatch(index) | Πλοηγείται σε δείκτη αντιστοίχισης με βάση το μηδέν. |
Η διαδρομή middleware χρησιμοποιεί τα search=<term> και exact=true|false και επιστρέφει XML. Χρησιμοποιήστε το widget API αντί να αναλύετε εσείς αυτήν την εσωτερική απόκριση.
Έλεγχος δυνατότητας αναζήτησης
Η απάντηση αρχικοποίησης αναφέρει:
X-Doconut-Can-Search: 1Μετά την αρχικοποίηση, το objViewer.CanSearch() εκθέτει την ίδια απόφαση format/session. Επιστρέφει false όταν ο διακομιστής στέλνει 0· πριν από την απόκριση, ή με έναν παλαιότερο διακομιστή που παραλείπει την κεφαλίδα, προεπιλογή είναι true.
Τρία ανεξάρτητα πύλες δεν πρέπει να συγχέονται:
| Πύλη | Ερώτηση |
|---|---|
CanSearch() / response header | Έχει ο επιλυμένος viewer εγγενή διαδρομή ευρετηρίου/αναζήτησης; |
AllowSearch | Ζήτησε αυτή η διαμόρφωση μορφής εξαγωγή κειμένου όπου υπάρχει το διακόπτης; |
LicenseCapability.Search | Είναι η εφαρμογή εξουσιοδοτημένη να εκτελεί αναζήτηση και να λαμβάνει τα UI bundles; |
Μια μορφή μπορεί τεχνικά να είναι αναζητήσιμη ενώ η τρέχουσα άδεια αρνείται τη λειτουργία.
Ενεργοποίηση εξαγωγής ανά μορφή
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 βασισμένη σε κείμενο:
// DefaultRender = false → μετατράπηκε σε PDF κειμένου → αναζητήσιμο
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Για εγγενείς renderers, το CanSearch() περιγράφει τη δυνατότητα του viewer· δεν εγγυάται ότι ένα συγκεκριμένο έγγραφο περιέχει χρήσιμο κείμενο. Ένα PDF του οποίου οι σελίδες είναι μόνο σαρωμένες εικόνες μπορεί ακόμη να παράγει μηδενικά εγγενή αποτελέσματα.
Συμπεριφορά κανονικής Αναζήτησης
Ο διακομιστής δοκιμάζει πηγές αναζήτησης με αυτή τη σειρά:
- Αποτελέσματα από τον εγγενή viewer της μορφής.
- Ένα προ-κατασκευασμένο ευρετήριο αναζήτησης
.srh. - Ένα σφάλμα/κενό αποτέλεσμα όταν δεν υπάρχει πηγή αναζήτησης.
Το ευρετήριο .srh είναι το αντικείμενο αναζήτησης που δημοσιεύεται μαζί με τις εικόνες σελίδων όταν τα έγγραφα
σερβίρονται από κοινόχρηστη αποθήκευση, έτσι ένας κόμβος που ποτέ δεν άνοιξε το έγγραφο μπορεί ακόμη να απαντήσει
σε αναζητήσεις — δείτε Κατανεμημένες Αναπτύξεις.
Το CanSearch() μπορεί να είναι true για έναν αναζητήσιμο
viewer ακόμη και όταν ένα συγκεκριμένο σαρωμένο έγγραφο δεν έχει στρώση κειμένου και επομένως δεν επιστρέφει
αντιστοιχίσεις.
Άδεια και συμπεριφορά UI
Μια ενεργή άδεια Temporary/Demo χορηγεί την Αναζήτηση κατά τη διάρκεια της ενεργής περιόδου της. Μια ελλιπής άδεια και το παλιό αρχείο TRIAL δεν χορηγούν δυνατότητα Αναζήτησης. Χωρίς την Αναζήτηση:
ReferenceCssκαιReferenceScriptsπαραλείπουν τα πακέτα αναζήτησης.- Το middleware αρνείται την αναζήτηση αντί να επιστρέφει τα αδειοδοτημένα αποτελέσματα.
Διαχειριστείτε την ορατότητα του προσαρμοσμένου UI από το IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) και χρησιμοποιήστε το CanSearch() για την ξεχωριστή απόφαση format/session.
Επίλυση προβλημάτων
| Σύμπτωμα | Έλεγχος |
|---|---|
| Η γραμμή αναζήτησης λείπει | Δυνατότητα Αναζήτησης και IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() είναι false | Viewer μορφής, επιλεγμένη διαδρομή DefaultRender, και κεφαλίδα απόκρισης αρχικοποίησης |
| Η Αναζήτηση επιστρέφει μηδέν για ένα σαρωμένο PDF | Το έγγραφο δεν έχει στρώση κειμένου· χρησιμοποιήστε μια πηγή που περιέχει κείμενο ή μια προβολή PDF που διατηρεί το κείμενο |
| Η Αναζήτηση λειτουργεί αλλά οι επισημάνσεις είναι εκτός ευθυγράμμισης | Διαδρομή απόδοσης, ανάλυση, μετασχηματισμοί εγγράφου και εξαγόμενα κουτιά λέξεων |
Ήταν αυτή η σελίδα χρήσιμη;