بحث
بحث نصي أصلي في تركيبة العارض
يوفر Doconut Viewer بحثًا عاديًا باستخدام النص المستخرج من عارض التنسيق أو إعادة توجيه PDF قائم على النص. يتطلب ذلك قدرة ترخيص Search.
تمكين واجهة البحث
Search هو وحدة في العارض، وليس شريط أدوات مستقل. يجب أن تشمل الصفحة الكاملة موارد العارض، وشريط أدوات العارض، وتركيب العارض، وobjViewer المهيأ؛ ثم يتم تركيب شريط Search وربطه بنفس المثيل.
Search والتعليقات التوضيحية هي ميزات مرخصة مدمجة، وليست حزم 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
}))الشريط المدمج يستدعي نفس طرق JavaScript المتاحة لواجهة مخصصة.
احتفظ بتركيبة العارض الكاملة مرئية في العلامات، قم بتهيئة docViewer أولاً، ثم أرفق الشريط المرخص:
<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 ويتعامل مع البحث، والمسح، وعدد التطابقات، والتنقل إلى التطابق السابق/التالي. يحتاج شريط أدوات العارض المملوك للمضيف فقط إلى تبديله:
searchBar.isOpen() ? searchBar.close() : searchBar.open();واجهة برمجة التطبيقات العامة لها صغيرة عن قصد:
| الطريقة | الغرض |
|---|---|
attach(objViewer) | ربط الشريط بالعارض المهيأ؛ مطلوب مرة واحدة |
open() / close() | إظهار أو إخفاء الشريط؛ الإغلاق يزيل أيضًا الإبرازات |
reset() | مسح المصطلح الحالي، وعدد النتائج، والإبرازات |
isOpen() | الإبلاغ عما إذا كان الشريط مرئيًا |
setStatus(message) | تمرير رسالة حالة عبر رد الاتصال المكوّن |
يتيح رد الاتصال الاختياري onToggle(isOpen) للمضيف مزامنة زر Search الخاص به، وonLayout يتيح له تعديل حجم/إعادة ملاءمة العارض عندما يتغير ارتفاع الشريط. لسلسلة بدء تشغيل العارض المدمج مع 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. استخدم واجهة برمجة تطبيقات الودجت بدلاً من تحليل الاستجابة الداخلية بنفسك.
التحقق من قدرة البحث
تقرير استجابة التهيئة:
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 // 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() يصف قدرة العارض؛ لا يضمن أن المستند المحدد يحتوي على نص قابل للاستخدام. يمكن أن ينتج PDF تكون صفحاته صورًا ممسوحة ضوئيًا فقط صفر نتائج أصلية.
سلوك البحث العادي
يحاول الخادم مصادر البحث بهذا الترتيب:
- نتائج
ISearchableViewerالأصلية. - فهرس بحث
.srhمُسبق الإنشاء. - خطأ/نتيجة فارغة عندما لا يوجد مصدر بحث.
CanSearch() يمكن أن تكون true لعارض قابل للبحث حتى عندما لا يحتوي مستند ممسوح ضوئيًا معين على طبقة نصية وبالتالي لا يُرجع أي تطابقات.
الترخيص وسلوك الواجهة
ترخيص مؤقت/تجريبي نشط يمنح Search خلال فترة نشاطه. ترخيص مفقود وملف TRIAL القديم لا يمنح أي قدرة على Search. بدون Search:
ReferenceCssوReferenceScriptsيحذفان حزم البحث.- الوسيط يرفض البحث بدلاً من إرجاع النتائج المرخصة.
تحكم في رؤية الواجهة المخصصة عبر IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) واستخدم CanSearch() للحكم المنفصل على التنسيق/الجلسة.
استكشاف الأخطاء وإصلاحها
| العَرَض | التحقق |
|---|---|
| شريط البحث مفقود | قدرة البحث و IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() هو false | عارض التنسيق، مسار DefaultRender المختار، ورأس استجابة التهيئة |
| Search يُعيد صفرًا لملف PDF ممسوح | المستند لا يحتوي على طبقة نصية؛ استخدم مصدرًا يحتوي نصًا أو إسقاط PDF يحافظ على النص |
| Search يعمل لكن الإبرازات غير محاذاة | مسار العرض، الدقة، تحويلات المستند، ومربعات الكلمات المستخرجة |
هل كانت هذه الصفحة مفيدة؟