在嵌入式 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
            });
        }
    
    }