جستجو
جستجوی متنی بومی در ترکیب Viewer
Viewer Doconut جستجوی عادی را با استفاده از متنی که توسط Viewer فرمت استخراج میشود یا یک تغییر مسیر PDF مبتنی بر متن فراهم میکند. این قابلیت نیاز به مجوز Search دارد.
فعالسازی رابط کاربری جستجو
Search یک ماژول Viewer است، نه یک نوار ابزار مستقل. صفحه کامل باید شامل منابع Viewer، نوار ابزار Viewer، محل نصب Viewer و objViewer مقداردهی اولیه باشد؛ سپس Ribbon جستجو نصب و به همان نمونه متصل میشود.
Search و annotation ویژگیهای دارای مجوز داخلی هستند، نه بستههای 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
}))Ribbon تعبیهشده همان متدهای JavaScript موجود برای یک UI سفارشی را فراخوانی میکند.
نگه داشتن ترکیب کامل Viewer در مارکآپ، ابتدا مقداردهی اولیه docViewer و سپس اتصال Ribbon دارای مجوز:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- کنترلهای Viewer، شامل دکمهای که جستجو را باز میکند -->
</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);
});آرگومان دوم برای مطابقت کامل/کلمهبهکلمه است. پس از callback:
| متد | نتیجه |
|---|---|
SearchMatchCount() | کل تعداد مطابقتهای منفرد در سند. |
SearchSummary(false) | ورودیهای [pageNumber, matchCount] بدون بازنقاشی. |
SearchSummary(true) | خلاصه مشابه و رنگآمیزی هایلایتهای صفحه/تصویر کوچک. |
GotoSearchMatch(index) | به اندیس مطابقت صفر‑پایهای میرود. |
مسیر میانیافزار از search=<term> و exact=true|false استفاده میکند و XML برمیگرداند. به جای تجزیه پاسخ داخلی، از API ویجت استفاده کنید.
بررسی قابلیت جستجو
پاسخ مقداردهی اولیه گزارش میدهد:
X-Doconut-Can-Search: 1پس از مقداردهی اولیه، objViewer.CanSearch() همان verdict فرمت/نشست را نشان میدهد. وقتی سرور 0 بفرستد false برمیگرداند؛ قبل از دریافت پاسخ یا در سرورهای قدیمی که این هدر را حذف میکنند، بهصورت پیشفرض true است.
سه دروازه مستقل نباید با هم اشتباه شوند:
| دروازه | سؤال |
|---|---|
CanSearch() / response header | آیا Viewer حلشده دارای مسیر ایندکس/جستجوی بومی است؟ |
AllowSearch | آیا این پیکربندی فرمت درخواست استخراج متن را داشته که سوئیچ موجود باشد؟ |
LicenseCapability.Search | آیا برنامه مجاز به اجرای جستجو و دریافت بستههای UI است؟ |
یک فرمت میتواند از نظر فنی قابل جستجو باشد در حالی که مجوز فعلی عملیات را رد میکند.
فعالسازی استخراج برای هر فرمت
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() قابلیت Viewer را توصیف میکند؛ تضمین نمیکند سند خاصی متن قابل استفاده داشته باشد. یک PDF که صفحاتش فقط تصاویر اسکنشده هستند میتواند همچنان صفر نتیجه بومی تولید کند.
رفتار جستجوی عادی
سرور منابع جستجو را به این ترتیب امتحان میکند:
- نتایج بومی
ISearchableViewer. - یک ایندکس جستجوی پیشساخته
.srh. - یک نتیجه خطا/خالی وقتی منبع جستجویی وجود ندارد.
CanSearch() میتواند برای یک Viewer قابل جستجو true باشد حتی وقتی سند اسکنشده خاصی لایه متنی ندارد و بنابراین هیچ مطابقتی برنمیگرداند.
مجوزدهی و رفتار UI
یک مجوز فعال Temporary/Demo در دوره فعال خود جستجو را میدهد. یک مجوز گمشده و فایل legacy TRIAL هیچ قابلیت جستجویی فراهم نمیکند. بدون جستجو:
ReferenceCssوReferenceScriptsبستههای جستجو را حذف میکنند.- میانهافزار جستجو را رد میکند به جای بازگرداندن نتایج دارای مجوز.
قابلیت نمایش UI سفارشی را از IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) هدایت کنید و برای verdict جداگانه فرمت/نشست از CanSearch() استفاده کنید.
عیبیابی
| علائم | بررسی |
|---|---|
| نوار جستجو موجود نیست | قابلیت جستجو و IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() غلط است | Viewer فرمت، مسیر DefaultRender انتخابشده، و هدر پاسخ مقداردهی اولیه |
| جستجو برای PDF اسکنشده صفر برمیگرداند | سند لایه متنی ندارد؛ از منبع متنی استفاده کنید یا یک پروژکشن PDF که متن را حفظ میکند |
| جستجو کار میکند اما هایلایتها جابجا هستند | مسیر رندر، وضوح، تبدیلهای سند، و جعبههای کلمه استخراجشده |
آیا این صفحه مفید بود؟