Αναζήτηση
Αυθεντική αναζήτηση κειμένου στη σύνθεση Viewer
Το Doconut Viewer παρέχει κανονική Αναζήτηση χρησιμοποιώντας κείμενο που εξάγεται από τον προβολέα μορφής ή μια ανακατεύθυνση PDF βασισμένη σε κείμενο. Απαιτεί τη δυνατότητα άδειας Search.
Ενεργοποίηση του UI αναζήτησης
Η Αναζήτηση είναι ένα μοντέλο Viewer, όχι μια αυτόνομη γραμμή εργαλείων. Η πλήρης σελίδα πρέπει να περιλαμβάνει τους πόρους Viewer, τη γραμμή εργαλείων Viewer, το σημείο προσάρτησης 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: '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 που ανήκει στον κεντρικό υπολογιστή χρειάζεται μόνο να την εναλλάσσει:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Το δημόσιο API του είναι σκόπιμα μικρό:
| Μέθοδος | Σκοπός |
|---|---|
attach(objViewer) | Συνδέει τη Ribbon με τον αρχικοποιημένο προβολέα· απαιτείται μία φορά |
open() / close() | Εμφανίζει ή κρύβει τη Ribbon· το κλείσιμο επίσης καθαρίζει τις επισημάνσεις |
reset() | Καθαρίζει τον τρέχοντα όρο, τον αριθμό αποτελεσμάτων και τις επισημάνσεις |
isOpen() | Αναφέρει αν η Ribbon είναι ορατή |
setStatus(message) | Προωθεί ένα μήνυμα κατάστασης μέσω της διαμορφωμένης κλήσης επιστροφής |
Η προαιρετική κλήση επιστροφής onToggle(isOpen) επιτρέπει στον κεντρικό υπολογιστή να συγχρονίσει το κουμπί Αναζήτησης, και το onLayout του επιτρέπει να αλλάξει μέγεθος/προσαρμόσει τον προβολέα όταν η Ribbon αλλάζει ύψος. Για τη συνδυασμένη ακολουθία εκκίνησης Viewer, Αναζήτησης και Σημειώσεων, δείτε Γρήγορη Εκκίνηση.
Αναζήτηση από 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 αντί να αναλύετε εσείς την εσωτερική απόκριση.
Έλεγχος δυνατότητας αναζήτησης
Η απάντηση αρχικοποίησης αναφέρει:
X-Doconut-Can-Search: 1Μετά την αρχικοποίηση, το objViewer.CanSearch() εκθέτει την ίδια απόφαση μορφής/συνεδρίας. Επιστρέφει false όταν ο διακομιστής στέλνει 0; πριν από την απόκριση, ή με έναν παλαιότερο διακομιστή που παραλείπει την κεφαλίδα, η προεπιλογή είναι true.
Τρία ανεξάρτητα σημεία ελέγχου δεν πρέπει να συγχέονται:
| Σημείο | Ερώτηση |
|---|---|
CanSearch() / response header | Έχει ο επιλυμένος προβολέας εγγενή διαδρομή ευρετηρίου/αναζήτησης; |
AllowSearch | Ζήτησε αυτή η διαμόρφωση μορφής εξαγωγή κειμένου όπου υπάρχει το διακόπτης; |
LicenseCapability.Search | Είναι η εφαρμογή εξουσιοδοτημένη να εκτελεί αναζήτηση και να λαμβάνει τα UI πακέτα; |
Μια μορφή μπορεί τεχνικά να είναι αναζητήσιμη ενώ η τρέχουσα άδεια αρνείται τη λειτουργία.
Ενεργοποίηση εξαγωγής ανά μορφή
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 });Για εγγενείς αποτυπωτές, το CanSearch() περιγράφει τη δυνατότητα του προβολέα· δεν εγγυάται ότι ένα συγκεκριμένο έγγραφο περιέχει χρήσιμο κείμενο. Ένα PDF του οποίου οι σελίδες είναι μόνο σαρωμένες εικόνες μπορεί ακόμη να παράγει μηδενικά εγγενή αποτελέσματα.
Συμπεριφορά κανονικής Αναζήτησης
Ο διακομιστής δοκιμάζει πηγές αναζήτησης με αυτή τη σειρά:
- Αποτελέσματα εγγενούς
ISearchableViewer. - Προκατασκευασμένο ευρετήριο αναζήτησης
.srh. - Σφάλμα/κενό αποτέλεσμα όταν δεν υπάρχει πηγή αναζήτησης.
Το CanSearch() μπορεί να είναι true για έναν αναζητήσιμο προβολέα ακόμη και όταν ένα συγκεκριμένο σαρωμένο έγγραφο δεν έχει στρώση κειμένου και επομένως δεν επιστρέφει αντιστοιχίες.
Αδειοδότηση και συμπεριφορά UI
Μια ενεργή άδεια Temporary/Demo παρέχει Αναζήτηση κατά τη διάρκεια της ενεργής περιόδου της. Μια ελλιπής άδεια και το παλιό αρχείο TRIAL δεν παρέχουν δυνατότητα Αναζήτησης. Χωρίς Αναζήτηση:
ReferenceCssκαιReferenceScriptsπαραλείπουν τα πακέτα αναζήτησης.- Το μεσαζόριο αρνείται την αναζήτηση αντί να επιστρέφει αδειοδοτημένα αποτελέσματα.
Διαχειριστείτε την ορατότητα προσαρμοσμένου UI από το IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) και χρησιμοποιήστε το CanSearch() για την ξεχωριστή απόφαση μορφής/συνεδρίας.
Αντιμετώπιση προβλημάτων
| Συμπτωμα | Έλεγχος |
|---|---|
| Η γραμμή αναζήτησης λείπει | Δυνατότητα αναζήτησης και IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() είναι false | Προβολέας μορφής, επιλεγμένη διαδρομή DefaultRender και κεφαλίδα απόκρισης αρχικοποίησης |
| Η Αναζήτηση επιστρέφει μηδέν για ένα σαρωμένο PDF | Το έγγραφο δεν έχει στρώση κειμένου· χρησιμοποιήστε μια πηγή που περιέχει κείμενο ή μια προβολή PDF που διατηρεί το κείμενο |
| Η Αναζήτηση λειτουργεί αλλά οι επισημάνσεις είναι μετατοπισμένες | Διαδρομή απόδοσης, ανάλυση, μετασχηματισμοί εγγράφου και εξαγόμενα κουτιά λέξεων |
Ήταν αυτή η σελίδα χρήσιμη;