Αναζήτηση
Αυθεντική αναζήτηση κειμένου στη σύνθεση του Viewer
Το Doconut Viewer παρέχει κανονική Search χρησιμοποιώντας κείμενο που εξάγεται από το format viewer ή μια ανακατεύθυνση PDF βασισμένη σε κείμενο. Απαιτεί τη δυνατότητα άδειας Search.
Ενεργοποίηση της διεπαφής Search UI
Η Search είναι ένα module του Viewer, όχι μια αυτόνομη γραμμή εργαλείων. Η πλήρης σελίδα πρέπει να περιλαμβάνει τους πόρους του Viewer, τη γραμμή εργαλείων Viewer, το mount του Viewer και το αρχικοποιημένο objViewer; η Ribbon της Search στη συνέχεια τοποθετείται και συνδέεται με το ίδιο αντικείμενο.
Η Search και η annotation είναι ενσωματωμένες δυνατότητες με άδεια, όχι πακέτα AddPlugin<T>(). Ζητήστε τους πόρους της αναζήτησης από το injected Viewer; οι ετικέτες τους εκδίδονται μόνο όταν η άδεια χορηγεί Search.
@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 και, στη συνέχεια, συνδέστε τη licensed Ribbon:
<nav id="toolbar" aria-label="Έλεγχοι προβολής εγγράφου">
<!-- 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>Το component ενσωματώνει ομάδες Find, Options και Results και διαχειρίζεται την αναζήτηση, τον καθαρισμό, τους μετρητές αντιστοιχίσεων και την πλοήγηση σε προηγούμενη/επόμενη αντιστοίχηση. Μια γραμμή εργαλείων Viewer που ανήκει στον host χρειάζεται μόνο να την εναλλάσσει:
searchBar.isOpen() ? searchBar.close() : searchBar.open();Το δημόσιο API του είναι σκόπιμα μικρό:
| Μέθοδος | Σκοπός |
|---|---|
attach(objViewer) | Συνδέει τη Ribbon με τον αρχικοποιημένο viewer· απαιτείται μία φορά |
open() / close() | Εμφανίζει ή κρύβει τη Ribbon· το κλείσιμο αφαιρεί επίσης τις επισημάνσεις |
reset() | Καθαρίζει τον τρέχοντα όρο, τον αριθμό αποτελεσμάτων και τις επισημάνσεις |
isOpen() | Αναφέρει αν η Ribbon είναι ορατή |
setStatus(message) | Προωθεί ένα μήνυμα κατάστασης μέσω του ρυθμισμένου callback |
Το προαιρετικό callback onToggle(isOpen) επιτρέπει στο host να συγχρονίσει το κουμπί Search, και το onLayout του επιτρέπει να αλλάξει μέγεθος/προσαρμόσει τον viewer όταν η Ribbon αλλάζει ύψος. Για τη συνδυασμένη ακολουθία εκκίνησης Viewer, Search και Annotation, δείτε το Γρήγορη Εκκίνηση.
Αναζήτηση από 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() εκθέτει το ίδιο verdict μορφής/συνεδρίας. Επιστρέφει false όταν ο διακομιστής στέλνει 0; πριν από την απόκριση, ή με παλαιότερο διακομιστή που παραλείπει την κεφαλίδα, προεπιλογή είναι true.
Τρία ανεξάρτητα σημεία ελέγχου δεν πρέπει να συγχέονται:
| Σημείο ελέγχου | Ερώτηση |
|---|---|
CanSearch() / κεφαλίδα απόκρισης | Έχει ο resolved viewer εγγενή διαδρομή/δείκτη αναζήτησης; |
AllowSearch | Ζήτησε αυτή η διαμόρφωση μορφής εξαγωγή κειμένου όπου υπάρχει το διακόπτη; |
LicenseCapability.Search | Έχει η εφαρμογή εξουσιοδότηση να εκτελεί αναζήτηση και να λαμβάνει τα UI bundles; |
Μια μορφή μπορεί τεχνικά να είναι αναζητήσιμη ενώ η τρέχουσα άδεια αρνείται τη λειτουργία.
Ενεργοποίηση εξαγωγής ανά μορφή
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.
Υπάρχουν προσαρμογείς native-search για PDF, Word, Excel, PowerPoint, TXT, Visio, email, EPUB και MHT. Το XPS χρησιμοποιεί την διαδρομή PDF του από προεπιλογή. HTML και Microsoft Project ωφελούνται από ανακατεύθυνση PDF βασισμένη σε κείμενο:
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Για native renderers, το CanSearch() περιγράφει τη δυνατότητα του viewer· δεν εγγυάται ότι ένα συγκεκριμένο έγγραφο περιέχει χρήσιμο κείμενο. Ένα PDF του οποίου οι σελίδες είναι μόνο σαρωμένες εικόνες μπορεί ακόμη να παράγει μηδενικά εγγενή αποτελέσματα.
Κανονική συμπεριφορά Search
Ο διακομιστής δοκιμάζει πηγές αναζήτησης με αυτή τη σειρά:
- Αποτελέσματα native
ISearchableViewer. - Προκατασκευασμένος δείκτης
.srh. - Σφάλμα/κενό αποτέλεσμα όταν δεν υπάρχει πηγή αναζήτησης.
Το CanSearch() μπορεί να είναι true για έναν searchable viewer ακόμη και όταν ένα συγκεκριμένο σαρωμένο έγγραφο δεν έχει στρώση κειμένου και επομένως δεν επιστρέφει αντιστοιχίσεις.
Άδειες και συμπεριφορά UI
Μια ενεργή άδεια Temporary/Demo χορηγεί Search κατά τη διάρκεια της ενεργής περιόδου της. Μια ελλιπής άδεια και το legacy αρχείο TRIAL δεν χορηγούν δυνατότητα Search. Χωρίς Search:
ReferenceCssκαιReferenceScriptsπαραλείπουν τα search bundles.- Το middleware αρνείται την αναζήτηση αντί να επιστρέφει licensed αποτελέσματα.
Οδηγήστε την ορατότητα προσαρμοσμένης UI από IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) και χρησιμοποιήστε το CanSearch() για το ξεχωριστό verdict μορφής/συνεδρίας.
Αντιμετώπιση προβλημάτων
| Συμπτωμα | Έλεγχος |
|---|---|
| Η γραμμή αναζήτησης λείπει | Δυνατότητα Search και IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() είναι false | Viewer μορφής, επιλεγμένη διαδρομή DefaultRender, και κεφαλίδα απόκρισης αρχικοποίησης |
| Η Search επιστρέφει μηδέν για σαρωμένο PDF | Το έγγραφο δεν έχει στρώση κειμένου· χρησιμοποιήστε πηγή με κείμενο ή μια προβολή PDF που διατηρεί το κείμενο |
| Η Search λειτουργεί αλλά οι επισημάνσεις είναι μετατοπισμένες | Διαδρομή rendering, ανάλυση, μετασχηματισμοί εγγράφου, και εξαγόμενα κουτιά λέξεων |
Ήταν αυτή η σελίδα χρήσιμη;