חיפוש
חיפוש טקסט מקורי בהרכבת Viewer
ה-Doconut Viewer מספק חיפוש רגיל באמצעות טקסט שהוצא מצופה הפורמט או הפנייה ל‑PDF מבוסס טקסט. הוא דורש את יכולת הרישיון Search.
הפעלת ממשק המשתמש של החיפוש
ה‑Search הוא מודול של Viewer, ולא סרגל כלים נפרד. על העמוד המלא לכלול את משאבי ה‑Viewer, סרגל הכלים של Viewer, הרכבה של Viewer, ואת objViewer שהאותחל; לאחר מכן ה‑Search Ribbon מותקן ומחובר לאותו מופע.
ה‑Search וה‑annotation הם תכונות מורשות מובנות, לא חבילות AddPlugin<T>(). יש לבקש את משאבי החיפוש מה‑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 הזמינות לממשק מותאם אישית.
שמור על הרכבת Viewer המלאה גלויה במרקאפ, אתחל תחילה את 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: '/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 ל‑viewer שהאותחל; נדרש רק פעם אחת |
open() / close() | מציג או מסתיר את ה‑Ribbon; סגירה גם מנקה הדגשות |
reset() | מנקה את המונח הנוכחי, ספירת תוצאות והדגשות |
isOpen() | מדווח האם ה‑Ribbon גלוי |
setStatus(message) | מעביר הודעת מצב דרך ה‑callback המוגדר |
ה‑callback האופציונלי onToggle(isOpen) מאפשר למארח לסנכרן את כפתור החיפוש שלו, ו‑onLayout מאפשר שינוי גודל/התאמת ה‑viewer כאשר ה‑Ribbon משנה גובה. עבור רצף האתחול המשולב של Viewer, Search ו‑Annotation, ראה את התחלה מהירה.
חיפוש מ‑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() / כותרת תגובה | האם ל‑viewer המיועד יש אינדקס/נתיב חיפוש מקורי? |
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, דוא"ל, 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() מתאר את יכולת ה‑viewer; הוא אינו מבטיח שמסמך מסוים מכיל טקסט שמיש. PDF שבו הדפים הם רק תמונות סרוקות עדיין יכול להחזיר אפס תוצאות מקומיות.
התנהגות חיפוש רגילה
השרת מנסה מקורות חיפוש בסדר הבא:
- תוצאות
ISearchableViewerמקורי. - אינדקס חיפוש
.srhשנבנה מראש. - שגיאה/תוצאה ריקה כאשר אין מקור חיפוש.
CanSearch() יכול להיות true עבור viewer שניתן לחיפוש גם כאשר מסמך סרוק ספציפי חסר שכבת טקסט ולכן אינו מחזיר התאמות.
רישוי והתנהגות ממשק משתמש
רישיון Temporary/Demo פעיל מעניק Search במהלך תקופתו הפעילה. קובץ רישיון חסר וקובץ TRIAL ישן אינם מעניקים יכולת Search. ללא Search:
ReferenceCssו‑ReferenceScriptsמשאירים את חבילות החיפוש.- המידלוור דוחה חיפוש במקום להחזיר תוצאות מורשות.
הפעלת נראות UI מותאמת אישית דרך IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) והשתמש ב‑CanSearch() עבור פסק הדין של הפורמט/הסשן בנפרד.
פתרון בעיות
| סימפטום | בדיקה |
|---|---|
| סרגל החיפוש חסר | יכולת חיפוש ו‑IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() מחזיר false | מציג הצופה, נתיב DefaultRender שנבחר, וכותרת תגובת האתחול |
| חיפוש מחזיר אפס עבור PDF סרוק | המסמך חסר שכבת טקסט; השתמש במקור עם טקסט או בפרוייקציית PDF ששומרת טקסט |
| חיפוש עובד אך ההדגשות מוזזות | נתיב רינדור, רזולוציה, טרנספורמציות מסמך, ותיבות מילים מחולצות |
האם דף זה היה מועיל?