جستجو
جستجوی متن بومی در ترکیب Viewer
Viewer Doconut جستجوی عادی را با استفاده از متن استخراجشده توسط Viewer فرمت یا یک تغییر مسیر PDF مبتنی بر متن فراهم میکند. این قابلیت به مجوز Search نیاز دارد.
فعالسازی رابط کاربری جستجو
Search یک ماژول Viewer است، نه یک نوار ابزار مستقل. صفحه کامل باید شامل منابع Viewer، نوار ابزار Viewer، نصب Viewer، و objViewer مقداردهی اولیه شده باشد؛ سپس Ribbon جستجو نصب و به همان نمونه الصاق میشود.
Search و annotation ویژگیهای دارای مجوز داخلی هستند، نه بستههای 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
}))Ribbon جاسازیشده همان متدهای JavaScript در دسترس برای UI سفارشی را فراخوانی میکند.
ترکیب کامل Viewer را در مارکاپ قابل مشاهده نگه دارید، ابتدا docViewer را مقداردهی اولیه کنید، سپس Ribbon دارای مجوز را الصاق کنید:
<nav id="toolbar" aria-label="Document viewer controls">
<!-- کنترلهای Viewer، شامل دکمهای که 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 را تزریق میکند و جستجو، پاکسازی، شمارش تطابقها و ناوبری بهسابقه/بعدی را مدیریت مینماید. نوار ابزار Viewer متعلق به میزبان فقط کافی است آن را باز یا بسته کند:
searchBar.isOpen() ? searchBar.close() : searchBar.open();API عمومی آن بهطور عمدی کوچک است:
| متد | هدف |
|---|---|
attach(objViewer) | Ribbon را به Viewer مقداردهی اولیه شده متصل میکند؛ یک بار مورد نیاز است |
open() / close() | نمایش یا مخفیسازی Ribbon؛ بستن همچنین هایلایتها را پاک میکند |
reset() | واژه جاری، تعداد نتایج و هایلایتها را پاک میکند |
isOpen() | گزارش میدهد که آیا Ribbon قابل مشاهده است یا نه |
setStatus(message) | یک پیام وضعیت را از طریق callback پیکربندیشده ارسال میکند |
تابع بازگشتی اختیاری onToggle(isOpen) به میزبان اجازه میدهد دکمهٔ Search خود را همگامسازی کند، و onLayout به آن امکان میدهد هنگام تغییر ارتفاع Ribbon، Viewer را دوباره اندازهگیری/تنظیم کند. برای توالی راهاندازی ترکیبی Viewer، Search و Annotation، به شروع سریع مراجعه کنید.
جستجو از JavaScript
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});آرگومان دوم مطابقت کامل/کلمهبهکلمه است. پس از فراخوانی بازخورد:
| متد | نتیجه |
|---|---|
SearchMatchCount() | کل تطابقهای منفرد در سند. |
SearchSummary(false) | ورودیهای [pageNumber, matchCount] بدون بازنگری. |
SearchSummary(true) | خلاصه مشابه و هایلایتهای صفحه/تصویر کوچک را میکشد. |
GotoSearchMatch(index) | به ایندکس تطابق صفر‑پایهای میرود. |
مسیر میانی (middleware) از پارامترهای 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
یک مجوز موقت/دموی فعال، در طول دوره فعال خود قابلیت Search را اعطا میکند. عدم وجود مجوز و فایل TRIAL قدیمی هیچ قابلیت Searchی را فراهم نمیکند. بدون Search:
ReferenceCssوReferenceScriptsبستههای جستجو را حذف میکنند.- میانیافزار به جای بازگرداندن نتایج دارای مجوز، جستجو را رد میکند.
قابلیت نمایش UI سفارشی را از IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) کنترل کنید و برای تصمیمگیری جداگانهٔ فرمت/نشست از CanSearch() استفاده کنید.
عیبیابی
| علائم | بررسی |
|---|---|
| نوار جستجو موجود نیست | قابلیت جستجو و IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() نادرست است | Viewer فرمت، مسیر DefaultRender انتخابشده، و هدر پاسخ مقداردهی اولیه |
| جستجو صفر برمیگرداند برای PDF اسکنشده | سند لایه متن ندارد؛ از منبع حاوی متن یا پروژکشن PDF که متن را حفظ میکند استفاده کنید |
| جستجو کار میکند اما هایلایتها جابجا هستند | مسیر رندرینگ، وضوح، تبدیلات سند، و جعبههای کلمه استخراجشده |
آیا این صفحه مفید بود؟