جستجو
جستجوی متنی بومی در ترکیب Viewer
Viewer Doconut جستجوی عادی را با استفاده از متنی که توسط فرمت ویور استخراج میشود یا یک تغییر مسیر 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 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 متعلق به میزبان فقط کافی است آن را تغییر وضعیت دهد:
searchBar.isOpen() ? searchBar.close() : searchBar.open();API عمومی آن بهصورت عمدی کوچک است:
| متد | هدف |
|---|---|
attach(objViewer) | Ribbon را به Viewer مقداردهی اولیه شده متصل میکند؛ فقط یک بار لازم است |
open() / close() | نمایش یا مخفیسازی Ribbon؛ بستن همچنین هایلایتها را پاک میکند |
reset() | پاکسازی عبارت جاری، تعداد نتایج و هایلایتها |
isOpen() | گزارش میدهد که آیا Ribbon قابل مشاهده است یا نه |
setStatus(message) | ارسال پیام وضعیت از طریق کالبک پیکربندیشده |
کالبک اختیاری onToggle(isOpen) به میزبان امکان همگامسازی دکمه جستجو را میدهد و 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) | به اندیس تطابق صفر‑پایهای میرود. |
مسیر میانیافزار از search=<term> و exact=true|false استفاده میکند و XML برمیگرداند. بهجای تجزیهٔ پاسخ داخلی، از API ویجت استفاده کنید.
بررسی قابلیت جستجو
پاسخ مقداردهی اولیه گزارش میدهد:
X-Doconut-Can-Search: 1پس از مقداردهی اولیه، objViewer.CanSearch() همان حکم فرمت/نشست را نشان میدهد. وقتی سرور 0 بفرستد false برمیگرداند؛ قبل از دریافت پاسخ یا با سروری که این هدر را حذف کرده باشد، بهصورت پیشفرض true است.
سه دروازهٔ مستقل باید با هم اشتباه گرفته نشوند:
| دروازه | سؤال |
|---|---|
CanSearch() / هدر پاسخ | آیا Viewer حلشده دارای مسیر ایندکس/جستجوی بومی است؟ |
AllowSearch | آیا این پیکربندی فرمت درخواست استخراج متن را در جایی که سوئیچ موجود است، داشته است؟ |
LicenseCapability.Search | آیا برنامه مجاز به اجرای جستجو و دریافت بستههای UI است؟ |
یک فرمت میتواند از نظر فنی جستجوپذیر باشد در حالی که مجوز فعلی عملیات را رد میکند.
فعالسازی استخراج بر اساس فرمت
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() قابلیت Viewer را توصیف میکند؛ تضمین نمیکند که سند خاصی متن قابل استفاده داشته باشد. یک PDF که صفحاتش فقط تصاویر اسکنشده هستند میتواند همچنان صفر نتیجه بومی تولید کند.
رفتار جستجوی عادی
سرور منابع جستجو را به این ترتیب امتحان میکند:
- نتایج بومی
ISearchableViewer. - یک ایندکس جستجوی پیشساخته
.srh. - یک خطا/نتیجه خالی وقتی منبع جستجویی وجود ندارد.
ایندکس .srh یک اثر جستجو است که همراه با تصاویر صفحه هنگام سرویسدهی اسناد از ذخیرهسازی مشترک منتشر میشود، بنابراین گرهای که هرگز سند را باز نکرده است نیز میتواند به جستجوها پاسخ دهد — به استقرارهای توزیعشده مراجعه کنید.
CanSearch() میتواند برای یک Viewer جستجوپذیر true باشد حتی وقتی سند اسکنشده خاصی لایهٔ متنی ندارد و بنابراین هیچ تطابقی برنمیگرداند.
مجوزدهی و رفتار UI
یک مجوز موقت/دموی فعال، در دورهٔ فعال خود جستجو را فراهم میکند. یک مجوز مفقود و فایل TRIAL قدیمی هیچ قابلیت جستجویی را اعطا نمیکند. بدون جستجو:
ReferenceCssوReferenceScriptsبستههای جستجو را حذف میکنند.- میانیافزار جستجو را رد میکند به جای بازگرداندن نتایج دارای مجوز.
قابلیت نمایش UI سفارشی را از IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) کنترل کنید و برای حکم جداگانهٔ فرمت/نشست از CanSearch() استفاده کنید.
عیبیابی
| علائم | بررسی |
|---|---|
| نوار جستجو موجود نیست | قابلیت جستجو و IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() برابر false است | ویور فرمت، مسیر DefaultRender انتخابشده، و هدر پاسخ مقداردهی اولیه |
| جستجو برای یک PDF اسکنشده صفر برمیگرداند | سند لایه متنی ندارد؛ از منبع حاوی متن یا یک پروجکشن PDF که متن را حفظ میکند استفاده کنید |
| جستجو کار میکند اما هایلایتها جابجا هستند | مسیر رندر، وضوح، تبدیلهای سند، و جعبههای کلمات استخراجشده |
آیا این صفحه مفید بود؟