การค้นหา
การค้นหาข้อความแบบเนทีฟในส่วนประกอบ Viewer
Doconut Viewer ให้การค้นหาแบบปกติโดยใช้ข้อความที่สกัดจากตัวดูฟอร์แมตหรือ
การเปลี่ยนเส้นทาง PDF แบบข้อความ. จำเป็นต้องมีความสามารถของใบอนุญาต Search.
เปิดใช้งาน UI การค้นหา
Search เป็นโมดูลของ Viewer ไม่ใช่แถบเครื่องมือแบบแยกส่วน หน้าเต็มต้องรวม
ทรัพยากร Viewer, แถบเครื่องมือ Viewer, การเมานท์ Viewer, และ objViewer ที่ถูกเริ่มต้น; Search
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 ทั้งหมดให้มองเห็นใน markup, เริ่มต้น 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: '/',
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) ทางเลือกทำให้โฮสต์ซิงโครไนซ์ปุ่ม Search ของมัน, และ
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) | นำทางไปยังดัชนีการจับคู่ที่เริ่มจากศูนย์. |
เส้นทาง middleware ใช้ search=<term> และ exact=true|false และคืนค่า XML. ใช้ widget API แทนการพาร์เซสตอบกลับภายในนั้นด้วยตนเอง.
ตรวจสอบความสามารถในการค้นหา
การตอบกลับการเริ่มต้นรายงานว่า:
X-Doconut-Can-Search: 1หลังจากการเริ่มต้น, objViewer.CanSearch() เปิดเผยคำตัดสินรูปแบบ/เซสชันเดียวกัน. มันคืนค่า false เมื่อเซิร์ฟเวอร์ส่ง 0; ก่อนการตอบกลับ, หรือกับเซิร์ฟเวอร์เก่าที่ละเว้นหัว, ค่าเริ่มต้นคือ true.
ต้องไม่สับสนกับประตูอิสระสามประตู:
| ประตู | คำถาม |
|---|---|
CanSearch() / response header | Viewer ที่แก้ไขแล้วมีเส้นทางดัชนี/การค้นหาแบบเนทีฟหรือไม่? |
AllowSearch | การกำหนดค่าฟอร์แมตนี้ได้ร้องขอการสกัดข้อความที่สวิตช์มีอยู่หรือไม่? |
LicenseCapability.Search | แอปพลิเคชันได้รับอนุญาตให้ดำเนินการค้นหาและรับ UI bundles หรือไม่? |
ฟอร์แมตอาจสามารถค้นหาได้ทางเทคนิคในขณะที่ใบอนุญาตปัจจุบันปฏิเสธการดำเนินการ.
เปิดใช้งานการสกัดต่อฟอร์แมต
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() อธิบายความสามารถของ viewer; มันไม่ได้รับประกันว่าเอกสารเฉพาะจะมีข้อความที่ใช้ได้. PDF ที่หน้าของมันเป็นเพียงภาพสแกนก็อาจให้ผลลัพธ์เนทีฟเป็นศูนย์ได้.
พฤติกรรมการค้นหาแบบปกติ
เซิร์ฟเวอร์จะลองแหล่งค้นหาในลำดับนี้:
- ผลลัพธ์จาก viewer เนทีฟของฟอร์แมต.
- ดัชนีการค้นหา
.srhที่สร้างไว้ล่วงหน้า. - ผลลัพธ์ข้อผิดพลาด/ว่างเมื่อไม่มีแหล่งค้นหา.
ดัชนี .srh เป็นศิลปะการค้นหาที่เผยแพร่พร้อมกับภาพหน้าเมื่อเอกสาร
ถูกให้บริการจากที่เก็บร่วม, ดังนั้นโหนดที่ไม่เคยเปิดเอกสารก็ยังสามารถตอบ
การค้นหา — ดู การปรับใช้แบบกระจาย.
CanSearch() สามารถเป็นจริงสำหรับ viewer ที่สามารถค้นหาได้
แม้เอกสารสแกนเฉพาะไม่มีเลเยอร์ข้อความและดังนั้นจึงคืนค่า
ไม่มีการจับคู่.
การให้ใบอนุญาตและพฤติกรรม UI
ใบอนุญาต Temporary/Demo ที่ใช้งานอยู่ให้สิทธิ์ Search ในช่วงเวลาที่ใช้งาน. ใบอนุญาตที่หายไปและไฟล์ TRIAL แบบเก่าไม่ให้ความสามารถ Search. หากไม่มี Search:
ReferenceCssและReferenceScriptsไม่รวม bundles การค้นหา.- middleware ปฏิเสธการค้นหาแทนที่จะคืนผลลัพธ์ที่มีใบอนุญาต.
ควบคุมการมองเห็น UI แบบกำหนดเองจาก IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) และใช้ CanSearch() สำหรับคำตัดสินฟอร์แมต/เซสชันแยกต่างหาก.
การแก้ไขปัญหา
| อาการ | ตรวจสอบ |
|---|---|
| แถบ Search หายไป | ความสามารถ Search และ IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() เป็นเท็จ | Viewer ฟอร์แมต, เส้นทาง DefaultRender ที่เลือก, และหัวตอบกลับการเริ่มต้น |
| Search คืนค่าเป็นศูนย์สำหรับ PDF ที่สแกน | เอกสารไม่มีเลเยอร์ข้อความ; ใช้แหล่งที่มีข้อความหรือการฉาย PDF ที่รักษาข้อความไว้ |
| Search ทำงานแต่ไฮไลท์ตำแหน่งผิด | เส้นทางการเรนเดอร์, ความละเอียด, การแปลงเอกสาร, และกล่องคำที่สกัด |
หน้านี้เป็นประโยชน์หรือไม่?