검색
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은 커스텀 UI에서 사용할 수 있는 동일한 JavaScript 메서드를 호출합니다.
마크업에서 전체 Viewer 구성을 보이도록 유지하고, 먼저 docViewer를 초기화한 다음 라이선스가 적용된 Ribbon을 연결하십시오:
<nav id="toolbar" aria-label="Document viewer controls">
</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을 연결합니다; 한 번만 필요합니다 |
open() / close() | Ribbon을 표시하거나 숨깁니다; 닫을 때 하이라이트도 초기화됩니다 |
reset() | 현재 검색어, 결과 수 및 하이라이트를 초기화합니다 |
isOpen() | Ribbon이 표시 중인지 여부를 반환합니다 |
setStatus(message) | 구성된 콜백을 통해 상태 메시지를 전달합니다 |
옵션인 onToggle(isOpen) 콜백은 호스트가 Search 버튼을 동기화하도록 하고, onLayout은 Ribbon 높이가 변경될 때 뷰어를 재조정/리핏하도록 합니다. 결합된 Viewer, Search 및 Annotation 시작 순서에 대해서는 빠른 시작을 참조하십시오.
JavaScript에서 Search 사용
objViewer.Search(keyword, false, function (resultCount) {
console.log('Matches:', resultCount);
});두 번째 인자는 전체 단어/정확히 일치하는 검색을 의미합니다. 콜백 이후:
| 메서드 | 결과 |
|---|---|
SearchMatchCount() | 문서 내 개별 매치 총합. |
SearchSummary(false) | [pageNumber, matchCount] 항목을 다시 그리기 없이 반환합니다. |
SearchSummary(true) | 동일한 요약을 반환하고 페이지/썸네일 하이라이트를 그립니다. |
GotoSearchMatch(index) | 0부터 시작하는 매치 인덱스로 이동합니다. |
미들웨어 라우트는 search=<term> 및 exact=true|false를 사용하며 XML을 반환합니다. 내부 응답을 직접 파싱하기보다 위젯 API를 사용하십시오.
검색 기능 확인
초기화 응답에 다음이 보고됩니다:
X-Doconut-Can-Search: 1초기화 후 objViewer.CanSearch()는 동일한 포맷/세션 판단을 제공합니다. 서버가 0을 보내면 false를 반환합니다; 응답 이전이거나 헤더를 생략하는 오래된 서버의 경우 기본값은 true입니다.
세 가지 독립적인 게이트를 혼동해서는 안 됩니다:
| 게이트 | 질문 |
|---|---|
CanSearch() / response header | 해당 뷰어가 기본 인덱스/검색 경로를 가지고 있는가? |
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()는 뷰어 기능을 설명하지만 특정 문서에 사용 가능한 텍스트가 포함되어 있음을 보장하지는 않습니다. 페이지가 스캔된 이미지인 PDF는 네이티브 결과가 0일 수 있습니다.
일반 Search 동작
서버는 다음 순서대로 검색 소스를 시도합니다:
- 네이티브
ISearchableViewer결과. - 미리 구축된
.srh검색 인덱스. - 검색 소스가 없을 경우 오류/빈 결과.
CanSearch()는 특정 문서에 텍스트 레이어가 없어 매치가 없더라도 검색 가능한 뷰어에 대해 true일 수 있습니다.
라이선스 및 UI 동작
활성화된 Temporary/Demo 라이선스는 해당 기간 동안 Search를 허용합니다. 라이선스가 없거나 레거시 TRIAL 파일은 Search 기능을 제공하지 않습니다. Search가 없을 경우:
ReferenceCss와ReferenceScripts는 검색 번들을 제외합니다.- 미들웨어는 라이선스가 적용된 결과를 반환하는 대신 검색을 거부합니다.
IDoconutLicenseService.IsCapabilityGranted(LicenseCapability.Search)를 사용해 커스텀 UI 표시 여부를 제어하고, 별도의 포맷/세션 판단을 위해 CanSearch()를 사용하십시오.
문제 해결
| 증상 | 점검 |
|---|---|
| Search 바가 없음 | Search 기능 및 IncludeSearchCss/IncludeSearchScripts/IncludeSearchBar |
CanSearch()가 false | 포맷 뷰어, 선택된 DefaultRender 경로, 초기화 응답 헤더 |
| 스캔된 PDF에서 Search 결과가 0 | 문서에 텍스트 레이어가 없습니다; 텍스트가 포함된 소스나 텍스트를 보존하는 PDF 프로젝션을 사용하십시오. |
| Search는 작동하지만 하이라이트가 어긋남 | 렌더링 경로, 해상도, 문서 변환, 추출된 단어 박스 |
이 페이지가 도움이 되었나요?