Αναζήτηση
Αυθεντική αναζήτηση κειμένου στη σύνθεση του Viewer
Ο Doconut Viewer παρέχει κανονική Αναζήτηση χρησιμοποιώντας κείμενο που εξάγεται από τον προβολέα μορφής ή μια ανακατεύθυνση PDF βασισμένη σε κείμενο. Απαιτεί τη δυνατότητα άδειας Search.
Ενεργοποίηση της διεπαφής αναζήτησης
Η Αναζήτηση είναι ένα module του Viewer, όχι μια αυτόνομη γραμμή εργαλείων. Η πλήρης σελίδα πρέπει να περιλαμβάνει τους πόρους του Viewer, τη γραμμή εργαλείων του Viewer, το mount του Viewer και το αρχικοποιημένο objViewer; η Ribbon Αναζήτησης στη συνέχεια τοποθετείται και συνδέεται με το ίδιο παράδειγμα.
Η Αναζήτηση και η σημείωση είναι ενσωματωμένα χαρακτηριστικά με άδεια, όχι πακέτα AddPlugin<T>(). Ζητήστε τους πόρους αναζήτησης από το Viewer; οι ετικέτες τους εκδίδονται μόνο όταν η άδεια παρέχει Αναζήτηση. Οι προβολές MVC 5 δεν έχουν @inject, επομένως δημιουργήστε τις ετικέτες στον ελεγκτή και περάστε τις μέσω ViewBag, μαζί με τη σημαία άδειας που χρειάζεται η σελίδα:
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
ViewBag.ViewerCss = viewer.ReferenceCss(new CssConfig
{
IncludeViewerCss = true,
IncludeSearchCss = true
});
ViewBag.ViewerScripts = viewer.ReferenceScripts(new ScriptConfig
{
IncludeJQuery = true,
IncludeViewerScripts = true,
IncludeSearchScripts = true,
IncludeSearchBar = true
});
ViewBag.IsSearchEnabled = viewer.IsSearchEnabled;Γράψτε τα στην προβολή με @Html.Raw(ViewBag.ViewerCss) και @Html.Raw(ViewBag.ViewerScripts). Σε Web Forms, εκθέστε τις ίδιες τιμές από τον κώδικα‑behind και γράψτε τις με <%= %>.
Η ενσωματωμένη ribbon καλεί τις ίδιες μεθόδους JavaScript που είναι διαθέσιμες σε προσαρμοσμένο UI.
Διατηρήστε τη πλήρη σύνθεση του Viewer ορατή στο markup, αρχικοποιήστε πρώτα το docViewer και, στη συνέχεια, συνδέστε τη ρυθμιζόμενη Ribbon:
<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 ((bool)ViewBag.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>Η συνθήκη στο server‑side if έχει σημασία: χωρίς τη δυνατότητα Αναζήτησης, το ReferenceScripts παραλείπει το script της Ribbon, οπότε μια μη προστατευμένη κλήση doconutSearchBar(...) θα προκαλέσει σφάλμα και θα εμποδίσει την εκκίνηση της σελίδας του viewer. Σε Web Forms, γράψτε την ίδια προστασία ως <% if (IsSearchEnabled) { %> … <% } %>.
Το στοιχείο ενσωματώνει ομάδες Find, Options και Results και διαχειρίζεται την αναζήτηση, το καθάρισμα, τους μετρητές αντιστοιχίσεων και την πλοήγηση σε προηγούμενη/επόμενη αντιστοιχία. Μια γραμμή εργαλείων Viewer που ανήκει στον κεντρικό σύστημα χρειάζεται μόνο να την εναλλάσσει:
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
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});Το δεύτερο όρισμα είναι η αντιστοίχιση ολόκληρης λέξης/ακριβούς. Ο αριθμός των αντιστοιχίσεων φτάνει στην κλήση επιστροφής: Search ίδιο πηγαίνει στον διακομιστή και δεν επιστρέφει κάτι χρήσιμο, έτσι var n = objViewer.Search(keyword, false) πάντα διαβάζει undefined — και μια σελίδα που δημιουργείται με αυτόν τον τρόπο αναφέρει «δεν βρέθηκε τίποτα» ενώ ο προβολέας επισημαίνει τις αντιστοιχίσεις. Μετά την κλήση επιστροφής:
| Μέθοδος | Αποτέλεσμα |
|---|---|
SearchMatchCount() | Συνολικές μεμονωμένες αντιστοιχίσεις στο έγγραφο. |
SearchSummary(false) | Καταχωρήσεις [pageNumber, matchCount] χωρίς επανασχεδίαση. |
SearchSummary(true) | Ίδιο σύνολο και ζωγραφίζει επισημάνσεις σελίδας/μικρογραφίας. |
GotoSearchMatch(index) | Πλοηγείται σε δείκτη αντιστοιχίας με βάση το μηδέν. |
DocImage.axd απαντά σε 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 // 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 βασισμένο σε κείμενο:
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });Για εγγενείς αποτυπωτές, το CanSearch() περιγράφει τη δυνατότητα του προβολέα· δεν εγγυάται ότι ένα συγκεκριμένο έγγραφο περιέχει χρήσιμο κείμενο. Ένα PDF του οποίου οι σελίδες είναι μόνο σαρωμένες εικόνες μπορεί ακόμη να παράγει μηδενικά εγγενή αποτελέσματα.
Κανονική συμπεριφορά αναζήτησης
Ο διακομιστής δοκιμάζει πηγές αναζήτησης με αυτή τη σειρά:
- Αποτελέσματα εγγενούς
ISearchableViewer. - Προκατασκευασμένο ευρετήριο αναζήτησης
.srh. - Σφάλμα/κενό αποτέλεσμα όταν δεν υπάρχει πηγή αναζήτησης.
Το CanSearch() μπορεί να είναι true για έναν προβολέα με δυνατότητα αναζήτησης ακόμη και όταν ένα συγκεκριμένο έγγραφο δεν έχει στρώση κειμένου και επομένως δεν επιστρέφει αντιστοιχίσεις.
Άδειες και συμπεριφορά UI
Μια ενεργή άδεια Temporary/Demo παρέχει Αναζήτηση κατά τη διάρκεια της ενεργής περιόδου της. Μια ελλιπής άδεια και το παλιό αρχείο TRIAL δεν παρέχουν δυνατότητα Αναζήτησης. Χωρίς Αναζήτηση:
ReferenceCssκαιReferenceScriptsπαραλείπουν τα πακέτα αναζήτησης.DocImage.axdαρνείται αιτήματα αναζήτησης αντί να επιστρέφει αποτελέσματα.
Διαχειριστείτε την ορατότητα προσαρμοσμένου UI από το IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) και χρησιμοποιήστε το CanSearch() για το ξεχωριστό αποτέλεσμα μορφής/συνεδρίας.
Επίλυση προβλημάτων
| Σύμπτωμα | Έλεγχος |
|---|---|
| Η γραμμή αναζήτησης λείπει | Δυνατότητα αναζήτησης και IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() είναι false | Προβολέας μορφής, επιλεγμένη διαδρομή DefaultRender και κεφαλίδα απόκρισης εκκίνησης |
| Η αναζήτηση επιστρέφει μηδέν για ένα σαρωμένο PDF | Το έγγραφο δεν έχει στρώση κειμένου· χρησιμοποιήστε πηγή που περιέχει κείμενο ή μια προβολή PDF που διατηρεί το κείμενο |
| Η αναζήτηση λειτουργεί αλλά οι επισημάνσεις είναι μετατοπισμένες | Διαδρομή απόδοσης, ανάλυση, μετασχηματισμοί εγγράφου και εξαγόμενα κουτιά λέξεων |
Ήταν αυτή η σελίδα χρήσιμη;