在嵌入式 PDFJS 上使用代码进行搜索
Search using code on Embedded PDFJS
我已将 PDFJS
与我的网页集成。我想使用 javascript.
进行搜索
首次搜索时运行良好。但后来我尝试用不同的关键字再次搜索,然后它没有突出显示正确的关键字。
这是我尝试过的:
// search with PDF.js
function searchPDF(td_text)
{
PDFViewerApplication.findBar.open();
PDFViewerApplication.findBar.findField.value = td_text;
PDFViewerApplication.findBar.highlightAll.checked= true;
PDFViewerApplication.findBar.findNextButton.click();
}
function resetPDFSearch()
{
if(PDFViewerApplication.findBar.findField.value != '') {
PDFViewerApplication.findBar.findField.value = '';
PDFViewerApplication.findBar.highlightAll.checked= false;
PDFViewerApplication.findController.reset();
PDFViewerApplication.findBar.close();
PDFViewerApplication.findController.matchCount = 0;
PDFViewerApplication.findController.updateMatch();
}
}
在上面的函数中,当我第一次调用 searchPDF()
时,关键字会正确突出显示。但是,如果我用不同的关键字调用相同的函数,那么它只会显示以前突出显示的关键字。
我尝试创建新函数 resetPDFSearch()
来重置所有以前过滤和突出显示的关键字。但是运气不好。
提前致谢。
经过这么多的头痛和头脑风暴。我来回答如下。
function searchPDF(td_text)
{
PDFView.findBar.open();
$(PDFView.findBar.findField).val(td_text);
var event = document.createEvent('CustomEvent');
event.initCustomEvent('findagain', true, true, {
query: td_text,
caseSensitive: $("#findMatchCase").prop('checked'),
highlightAll: $("#findHighlightAll").prop('checked', true),
findPrevious: undefined
});
PDFViewerApplication.findBar.dispatchEvent('');
return event;
}
不需要resetPDFSearch()
功能。
这个案例适用于我的场景。希望你可能有不同的情况。但是是的,使用 event
我可以搜索任意多次。 :)
可能对以后的人有帮助。
对于那些使用 pdf.viewer.js 的人来说,这是另一个解决方案:
// this method uses the viewer's search functionality to highligt given text
function searchText(txt) {
if (typeof PDFViewerApplication.findController !== 'undefined') {
PDFViewerApplication.findController.executeCommand('find', {
query: txt,
caseSensitive: false,
highlightAll: true,
findPrevious: true
});
}
}
更新: 自 PDFJS 版本 2.13
以来,以下方法不再有效并被删除(弃用):executeCommand
因此上面的示例应该使用更新版本的方法:
// this method uses the viewer's search functionality to highligt given text
function searchText(txt) {
if (typeof PDFViewerApplication !== 'undefined') {
PDFViewerApplication.eventBus.dispatch('find', {
query: txt,
caseSensitive: false,
highlightAll: true,
findPrevious: true
});
}
}
我已将 PDFJS
与我的网页集成。我想使用 javascript.
首次搜索时运行良好。但后来我尝试用不同的关键字再次搜索,然后它没有突出显示正确的关键字。
这是我尝试过的:
// search with PDF.js
function searchPDF(td_text)
{
PDFViewerApplication.findBar.open();
PDFViewerApplication.findBar.findField.value = td_text;
PDFViewerApplication.findBar.highlightAll.checked= true;
PDFViewerApplication.findBar.findNextButton.click();
}
function resetPDFSearch()
{
if(PDFViewerApplication.findBar.findField.value != '') {
PDFViewerApplication.findBar.findField.value = '';
PDFViewerApplication.findBar.highlightAll.checked= false;
PDFViewerApplication.findController.reset();
PDFViewerApplication.findBar.close();
PDFViewerApplication.findController.matchCount = 0;
PDFViewerApplication.findController.updateMatch();
}
}
在上面的函数中,当我第一次调用 searchPDF()
时,关键字会正确突出显示。但是,如果我用不同的关键字调用相同的函数,那么它只会显示以前突出显示的关键字。
我尝试创建新函数 resetPDFSearch()
来重置所有以前过滤和突出显示的关键字。但是运气不好。
提前致谢。
经过这么多的头痛和头脑风暴。我来回答如下。
function searchPDF(td_text)
{
PDFView.findBar.open();
$(PDFView.findBar.findField).val(td_text);
var event = document.createEvent('CustomEvent');
event.initCustomEvent('findagain', true, true, {
query: td_text,
caseSensitive: $("#findMatchCase").prop('checked'),
highlightAll: $("#findHighlightAll").prop('checked', true),
findPrevious: undefined
});
PDFViewerApplication.findBar.dispatchEvent('');
return event;
}
不需要resetPDFSearch()
功能。
这个案例适用于我的场景。希望你可能有不同的情况。但是是的,使用 event
我可以搜索任意多次。 :)
可能对以后的人有帮助。
对于那些使用 pdf.viewer.js 的人来说,这是另一个解决方案:
// this method uses the viewer's search functionality to highligt given text
function searchText(txt) {
if (typeof PDFViewerApplication.findController !== 'undefined') {
PDFViewerApplication.findController.executeCommand('find', {
query: txt,
caseSensitive: false,
highlightAll: true,
findPrevious: true
});
}
}
更新: 自 PDFJS 版本 2.13
以来,以下方法不再有效并被删除(弃用):executeCommand
因此上面的示例应该使用更新版本的方法:
// this method uses the viewer's search functionality to highligt given text
function searchText(txt) {
if (typeof PDFViewerApplication !== 'undefined') {
PDFViewerApplication.eventBus.dispatch('find', {
query: txt,
caseSensitive: false,
highlightAll: true,
findPrevious: true
});
}
}