חיפוש
חיפוש טקסט מקורי בהרכבת הצופה
ה‑Doconut Viewer מספק חיפוש רגיל באמצעות טקסט שהוצא מצופה הפורמט או הפנייה ל‑PDF מבוסס‑טקסט. הוא דורש את היכולת ברישיון Search.
הפעלת ממשק החיפוש
חיפוש הוא מודול של Viewer, ולא סרגל כלים עצמאי. על הדף המלא לכלול את משאבי ה‑Viewer, סרגל הכלים של ה‑Viewer, הרכבה של ה‑Viewer, ואת objViewer שהאותחל; לאחר מכן ריבון החיפוש מותקן ומחובר לאותו מופע.
חיפוש והערות הם תכונות מורשות מובנות, ולא חבילות 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
}))הריבון המוטמע קורא לאותם מתודות JavaScript הזמינות לממשק משתמש מותאם.
שמור על הרכבת ה‑Viewer המלאה גלויה במרקאפ, אתחל תחילה את docViewer, ולאחר מכן חבר את הריבון המורשה:
<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>הרכיב מכניס קבוצות חיפוש, אפשרויות ותוצאות ומטפל בחיפוש, ניקוי, ספירת התאמות, וניווט התאמה קודמת/הבאה. סרגל כלים של Viewer בבעלות המארח צריך רק להחליף את מצבו:
searchBar.isOpen() ? searchBar.close() : searchBar.open();ה‑API הציבורי שלו מכוון להיות קטן בכוונה:
| מתודה | מטרה |
|---|---|
attach(objViewer) | מחבר את הריבון לצופה שהאותחל; נדרש פעם אחת |
open() / close() | מציג או מסתיר את הריבון; סגירה גם מנקה הדגשות |
reset() | מנקה את המונח הנוכחי, ספירת התוצאות וההדגשות |
isOpen() | מדווח האם הריבון גלוי |
setStatus(message) | מעביר הודעת סטטוס דרך הקריאה חזרה המוגדרת |
הקריאה חזרה האופציונלית onToggle(isOpen) מאפשרת למארח לסנכרן את כפתור החיפוש שלו, ו‑onLayout מאפשרת לו לשנות גודל/להתאים את הצופה כאשר הריבון משנה גובה. עבור רצף האתחול המשולב של 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 של הווידג'ט במקום לנתח את התגובה הפנימית בעצמך.
בדיקת יכולת חיפוש
תשובת האתחול מדווחת:
X-Doconut-Can-Search: 1לאחר האתחול, objViewer.CanSearch() מציג את אותה החלטת פורמט/סשן. הוא מחזיר false כאשר השרת שולח 0; לפני קבלת התשובה, או עם שרת ישן שמוותר על הכותרת, ברירת המחדל היא true.
שלושה שערים עצמאיים אינם צריכים להתבלבל:
| שער | שאלה |
|---|---|
CanSearch() / response header | האם הצופה המיועד כולל אינדקס/נתיב חיפוש מקורי? |
AllowSearch | האם תצורת הפורמט ביקשה חילוץ טקסט במיקום שבו המתג קיים? |
LicenseCapability.Search | האם היישום מורשה לבצע חיפוש ולקבל את חבילות הממשק? |
פורמט יכול להיות טכנית ניתן לחיפוש בעוד שהרישיון הנוכחי דוחה את הפעולה.
הפעלת חילוץ לפי פורמט
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, דוא"ל, 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 עבור צופה שניתן לחיפוש גם כאשר מסמך ספציפי אינו כולל שכבת טקסט ולכן אינו מחזיר התאמות.
רישוי והתנהגות ממשק משתמש
רישיון זמני/דמו פעיל מעניק חיפוש במהלך תקופתו הפעילה. רישיון חסר וקובץ TRIAL מיושן אינם מעניקים יכולת חיפוש. ללא חיפוש:
ReferenceCssו‑ReferenceScriptsמשאירים את חבילות החיפוש.- המידלוור דוחה חיפוש במקום להחזיר תוצאות מורשות.
השג את נראות ה‑UI המותאם באמצעות IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) והשתמש ב‑CanSearch() לקבלת החלטת הפורמט/סשן בנפרד.
פתרון בעיות
| תסמין | בדיקה |
|---|---|
| סרגל החיפוש חסר | יכולת חיפוש ו‑IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() הוא false | צופה הפורמט, נתיב DefaultRender שנבחר, וכותרת תגובת האתחול |
| חיפוש מחזיר אפס עבור PDF סרוק | למסמך אין שכבת טקסט; השתמש במקור עם טקסט או בפרוייקציית PDF ששומרת על הטקסט |
| חיפוש עובד אך ההדגשות משוטטות | נתיב הרינדור, רזולוציה, טרנספורמציות המסמך, ותיבות המילים שהוצאו |
האם דף זה היה מועיל?