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