การค้นหา
การค้นหาข้อความแบบเนทีฟในโครงสร้าง Viewer
Doconut Viewer ให้การค้นหาแบบปกติโดยใช้ข้อความที่สกัดจากตัวดูรูปแบบหรือการเปลี่ยนเส้นทาง PDF แบบข้อความ. จำเป็นต้องมีความสามารถของใบอนุญาต Search.
เปิดใช้งาน UI การค้นหา
การค้นหาเป็นโมดูลของตัวดู, ไม่ใช่แถบเครื่องมือแบบสแตนด์อโลน. หน้าเต็มต้องรวมทรัพยากรของตัวดู, แถบเครื่องมือของตัวดู, การเมานท์ของตัวดู, และ objViewer ที่ได้เริ่มต้นแล้ว; Ribbon การค้นหาจะถูกเมานท์และแนบกับอินสแตนซ์เดียวกันนั้น.
การค้นหาและคำอธิบายเป็นฟีเจอร์ที่มีใบอนุญาตในตัว, ไม่ใช่แพคเกจ 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 ที่กำหนดเอง.
เก็บโครงสร้างของตัวดูทั้งหมดให้มองเห็นใน markup, เริ่มต้น docViewer ก่อน, แล้วจึงแนบ Ribbon ที่มีใบอนุญาต:
<nav id="toolbar" aria-label="การควบคุมตัวดูเอกสาร">
<!-- 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: '/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 และจัดการการค้นหา, การล้าง, จำนวนการจับคู่, และการนำทางไปยังการจับคู่ก่อนหน้า/ถัดไป. แถบเครื่องมือของตัวดูที่เป็นของโฮสต์เพียงแค่สลับเปิด/ปิดได้:
searchBar.isOpen() ? searchBar.close() : searchBar.open();API สาธารณะของมันถูกออกแบบให้เล็กที่สุดโดยเจตนา:
| เมธอด | วัตถุประสงค์ |
|---|---|
attach(objViewer) | เชื่อมต่อ Ribbon กับ viewer ที่ได้เริ่มต้นแล้ว; จำเป็นต้องทำครั้งเดียว |
open() / close() | แสดงหรือซ่อน Ribbon; การปิดจะลบไฮไลท์ด้วย |
reset() | ล้างคำค้นปัจจุบัน, จำนวนผลลัพธ์, และไฮไลท์ |
isOpen() | รายงานว่า Ribbon แสดงอยู่หรือไม่ |
setStatus(message) | ส่งต่อข้อความสถานะผ่าน callback ที่กำหนด |
callback onToggle(isOpen) ทางเลือกช่วยให้โฮสต์ซิงโครไนซ์ปุ่มการค้นหาของตน, และ onLayout ช่วยให้ปรับขนาด/รีฟิตตัวดูเมื่อความสูงของ Ribbon เปลี่ยน. สำหรับลำดับการเริ่มต้นของตัวดู, การค้นหา, และคำอธิบายที่รวมกัน, ดูที่ เริ่มต้นอย่างเร็ว.
ค้นหาจาก 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 | การตั้งค่า 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() บรรยายความสามารถของตัวดู; มันไม่ได้รับประกันว่าเอกสารใด ๆ จะมีข้อความที่ใช้ได้. PDF ที่หน้าทั้งหมดเป็นภาพสแกนอาจให้ผลลัพธ์เนทีฟเป็นศูนย์ได้เช่นกัน.
พฤติกรรมการค้นหาแบบปกติ
เซิร์ฟเวอร์จะลองแหล่งค้นหาในลำดับนี้:
- ผลลัพธ์
ISearchableViewerแบบเนทีฟ. - ดัชนีการค้นหา
.srhที่สร้างไว้ล่วงหน้า. - ผลลัพธ์ข้อผิดพลาด/ว่างเมื่อไม่มีแหล่งค้นหา.
CanSearch() อาจเป็น true สำหรับตัวดูที่ searchable แม้ว่าเอกสารบางไฟล์จะไม่มีชั้นข้อความและจึงไม่มีการจับคู่ใด ๆ.
การให้สิทธิ์และพฤติกรรม UI
ใบอนุญาต Temporary/Demo ที่ใช้งานอยู่จะให้การค้นหาในช่วงเวลาที่ใช้งาน. หากไม่มีใบอนุญาตและไฟล์ TRIAL เก่า จะไม่มีความสามารถในการค้นหา. หากไม่มีการค้นหา:
ReferenceCssและReferenceScriptsจะละเว้นชุดการค้นหา.- Middleware ปฏิเสธการค้นหาแทนการคืนผลลัพธ์ที่มีใบอนุญาต.
ควบคุมการมองเห็น UI ที่กำหนดเองจาก IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search) และใช้ CanSearch() สำหรับการตัดสินใจของรูปแบบ/เซสชันแยกต่างหาก.
การแก้ไขปัญหา
| อาการ | ตรวจสอบ |
|---|---|
| แถบค้นหาหายไป | ความสามารถในการค้นหาและ IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch() เป็น false | ตัวดูรูปแบบ, เส้นทาง DefaultRender ที่เลือก, และหัวตอบรับการเริ่มต้น |
| การค้นหาส่งคืนศูนย์สำหรับ PDF ที่สแกน | เอกสารไม่มีชั้นข้อความ; ใช้แหล่งที่มีข้อความหรือการฉาย PDF ที่รักษาข้อความไว้ |
| การค้นหาทำงานแต่ไฮไลท์ตำแหน่งผิด | เส้นทางการเรนเดอร์, ความละเอียด, การแปลงเอกสาร, และกล่องคำที่สกัด |
หน้านี้เป็นประโยชน์หรือไม่?