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