需求:需要把关键字传入到pdf
预览界面,并高亮展示。
这里使用的是:
1 2
| var url = 'http://127.0.0.1:8080/file/test.txt'; //要预览文件的访问地址 window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(base64Encode(url)));
|
修改代码:
1、修改 onlinePreview
接口
1 2 3 4 5 6 7 8 9 10 11 12
| public class OnlinePreviewController { @GetMapping( "/onlinePreview") public String onlinePreview(String url, String keyword, Model model, HttpServletRequest req) { model.addAttribute("file", fileAttribute); model.addAttribute("keyword", keyword); return filePreview.filePreviewHandle(fileUrl, model, fileAttribute); } }
|
2、前端接收参数,并且高亮
打开 server\src\main\resources\static\pdfjs\web\viewer.js
文件,
找到 getViewerConfiguration()
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function getViewerConfiguration() { let errorWrapper = null; errorWrapper = { container: document.getElementById("errorWrapper"), errorMessage: document.getElementById("errorMessage"), closeButton: document.getElementById("errorClose"), errorMoreInfo: document.getElementById("errorMoreInfo"), moreInfoButton: document.getElementById("errorShowMore"), lessInfoButton: document.getElementById("errorShowLess") }; const queryString = document.location.search.slice(1); const m = /(^|&)keyword=([^&]*)/.exec(queryString); const keyword = m ? decodeURIComponent(m[2]) : ""; if(keyword){ document.getElementById("findInput").value = keyword; } }
|
找到 PDFViewerApplication
对象中的 _initializeViewerComponents
方法,
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| if (!this.supportsIntegratedFind) { this.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, this.l10n); if (PDFViewerApplication.findBar.opened) { PDFViewerApplication.findBar.open(); } else { console.log('PDFViewerApplication.findBar.opened'); PDFViewerApplication.findBar.opened = false; PDFViewerApplication.findBar.open(); }
const highLightStr = appConfig.findBar.findField.value; PDFViewerApplication.findController.executeCommand("find", {query:highLightStr, phraseSearch: false, caseSensitive: false, highlightAll: true, findPrevious: false,}); }
|
3、使前端修改生效
一个比较简单的方式,在 viewer.js
同目录下 viewer.js.map
中直接修改。
因为 viewer.js.map
中的代码为字符串,所以我们需要精确的找到我们修改的位置,把修改的内容复制进去。
本文地址: https://github.com/maxzhao-it/blog/post/d10ffa56/