بحث

بحث نصي أصلي في تركيبة المشاهد

يوفر Doconut Viewer بحثًا عاديًا باستخدام النص المستخرج من عارض التنسيق أو إعادة توجيه PDF قائم على النص. يتطلب ذلك قدرة ترخيص Search.

تمكين واجهة البحث

Search هو وحدة Viewer، وليس شريط أدوات مستقل. يجب أن تتضمن الصفحة الكاملة موارد Viewer، وشريط أدوات Viewer، وتثبيت Viewer، وobjViewer المبدئ؛ ثم يتم تثبيت شريط Search وربطه بنفس المثيل.

Search والتعليقات التوضيحية هما ميزتان مرخصتان مدمجتان، وليسا حزم AddPlugin<T>(). اطلب موارد البحث من الـ Viewer المُحقن؛ تُصدر العلامات الخاصة بها فقط عندما يمنح الترخيص Search.

html
@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 أولاً، ثم اربط الشريط المرخص:

html
<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 (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 المملوك للمضيف يحتاج فقط إلى تبديله:

javascript
searchBar.isOpen() ? searchBar.close() : searchBar.open();

واجهة برمجة التطبيقات العامة لها صغيرة عمدًا:

الطريقةالغرض
attach(objViewer)ربط الشريط بالعارض المبدئ؛ مطلوب مرة واحدة
open() / close()إظهار أو إخفاء الشريط؛ الإغلاق يزيل أيضًا التحديدات
reset()مسح المصطلح الحالي، وعدد النتائج، والتحديدات
isOpen()إبلاغ ما إذا كان الشريط مرئيًا
setStatus(message)تمرير رسالة حالة عبر رد النداء المكوّن

يتيح رد النداء الاختياري onToggle(isOpen) للمضيف مزامنة زر Search الخاص به، وonLayout يسمح له بإعادة تحجيم/ملاءمة العارض عندما يتغير ارتفاع الشريط. لسلسلة بدء تشغيل Viewer وSearch وAnnotation المدمجة، راجع البدء السريع(Quick Start).

البحث من JavaScript

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. استخدم واجهة برمجة تطبيقات الودجت بدلاً من تحليل الاستجابة الداخلية بنفسك.

التحقق من قدرة البحث

تقرير استجابة التهيئة:

text
X-Doconut-Can-Search: 1

بعد التهيئة، objViewer.CanSearch() يكشف عن نفس حكم التنسيق/الجلسة. تُعيد false عندما يرسل الخادم 0؛ قبل الاستجابة، أو مع خادم أقدم يحذف الرأس، يكون الافتراضي true.

يجب عدم الخلط بين ثلاث بوابات مستقلة:

البوابةالسؤال
CanSearch() / رأس الاستجابةهل يمتلك العارض المحلول فهرسًا/مسار بحث أصلي؟
AllowSearchهل طلب تكوين هذا التنسيق استخراج النص حيث يوجد المفتاح؟
LicenseCapability.Searchهل تم تفويض التطبيق لتنفيذ البحث وتلقي حزم الواجهة؟

يمكن أن يكون التنسيق قابلًا للبحث تقنيًا بينما الترخيص الحالي يمنع العملية.

تمكين الاستخراج حسب التنسيق

csharp
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 قائم على النص:

csharp
// DefaultRender = false → converted to a text-based PDF → searchable
var token = await viewer.OpenDocumentAsync(path, new HtmlConfig { DefaultRender = false });

بالنسبة للمرسّلات الأصلية، CanSearch() يصف قدرة العارض؛ لا يضمن أن المستند يحتوي على نص قابل للاستخدام. يمكن أن ينتج PDF تكون صفحاته صورًا ممسوحة ضوئيًا فقط صفر نتائج أصلية.

سلوك البحث العادي

يحاول الخادم مصادر البحث بالترتيب التالي:

  1. نتائج ISearchableViewer الأصلية.
  2. فهرس بحث .srh مُسبق الإنشاء.
  3. خطأ/نتيجة فارغة عندما لا يوجد مصدر بحث.

فهرس .srh هو قطعة البحث التي تُنشر جنبًا إلى جنب مع صور الصفحات عندما تُخدم المستندات من تخزين مشترك، لذا يمكن لعقدة لم تفتح المستند أبدًا أن تجيب على عمليات البحث — راجع النشر الموزع(Distributed Deployments).

يمكن أن تكون CanSearch() صحيحة لعارض قابل للبحث حتى عندما لا يحتوي مستند ممسوح ضوئيًا معين على طبقة نصية وبالتالي لا يُعيد أي تطابقات.

الترخيص وسلوك الواجهة

ترخيص Temporary/Demo النشط يمنح Search خلال فترته النشطة. الترخيص المفقود وملف TRIAL القديم لا يمنح أي قدرة على Search. بدون Search:

  • ReferenceCss و ReferenceScripts يحذفان حزم البحث.
  • الوسيط يرفض البحث بدلاً من إرجاع النتائج المرخصة.

تحكم في رؤية الواجهة المخصصة من خلال IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) واستخدم CanSearch() للحكم المنفصل على التنسيق/الجلسة.

استكشاف الأخطاء وإصلاحها

العَرَضالتحقق
شريط البحث مفقودقدرة البحث و IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar
CanSearch() خاطئعارض التنسيق، مسار DefaultRender المختار، ورأس استجابة التهيئة
البحث يُعيد صفرًا لملف PDF ممسوح ضوئيًاالمستند لا يحتوي على طبقة نصية؛ استخدم مصدرًا يحتوي نصًا أو إسقاط PDF يحافظ على النص
البحث يعمل لكن التحديدات غير متطابقةمسار العرض، الدقة، تحولات المستند، ومربعات الكلمات المستخرجة

هل كانت هذه الصفحة مفيدة؟