pdf.js預覽pdf文檔

1.下載pdf.js

    官網地址:http://mozilla.github.io/pdf.js/

    CSDN地址:https://download.csdn.net/download/qq_37725650/12065917

2.運行示例

    將解壓後的文件夾直接丟到tomcat下 訪問 ip:port/文件夾名稱/web/viewer.html 

    顯示的是 web 文件夾下的compressed.tracemonkey-pldi-09.pdf 

3.修改默認打開PDF 
    我們只用修改viewer.js文件中的pdf路徑參數即可: 
    var DEFAULT_URL = ‘09.pdf’; 
    如果pdf文件與viewer.html不在一層目錄中,改成相對路徑即可: 
    var DEFAULT_URL = ’ ../doc/ 09.pdf’;

4.viewer.html可以通過頁面參數傳值的方式加載pdf文件

    http://127.0.0.1:8080/pdfjs/web/viewer.html?file=09.pdf 
    如果pdf文件與viewer.html不在一層目錄中,改成相對路徑即可: 
    http://127.0.0.1:8080/pdfjs/web/viewer.html?file=../doc/09.pdf 
5.以上都是靜態文件,一般我們都是從服務端獲取,下面介紹如何預覽服務端的文檔

6.服務端代碼

	/**
	 * @date: 2019年12月30日 上午10:43:45
	 * @Description: 預覽文件
	 * @param request
	 * @param response
	 */
	@RequestMapping(value = "/resume/preview", method = RequestMethod.GET)
	public void previewResume(HttpServletRequest request, HttpServletResponse response) {
		String fileName = request.getParameter("fileName");
		String realFileName = request.getParameter("realFileName");
		String fileType = request.getParameter("fileType");// "1"爲臨時文件,非"1"爲正式文件
		String key = request.getParameter("key");
		String moduleName = request.getParameter("moduleName");
		logger.info("previewResume start:fileName={},realFileName={},fileType={}", fileName, realFileName, fileType);
		try {
			if (fileName == null || fileName.equals("")) {
				response.sendError(HttpServletResponse.SC_NOT_FOUND);
				return;
			}
			String dir = null;
			// 下載的是臨時文件
			if (fileType != null && fileType.equals("1")) {
				dir = RequestPathUtils.buildTempFileDirPath() + File.separator + fileName;
			} else {// 下載的是正式文件
				if (moduleName.equals("") || moduleName == null) {// 正式文件必須要模塊名稱
					response.sendError(HttpServletResponse.SC_NOT_FOUND);
					return;
				}
				String serverKey = FileDownloadUtils.buildFileNameKey(fileName);
				if (serverKey.equals(key)) {
					dir = RequestPathUtils.buildFormalFileDirPath(moduleName, fileName) + File.separator + fileName;
				} else {
					response.sendError(HttpServletResponse.SC_NOT_FOUND);
					return;
				}
			}
			// 如果非pdf文檔轉爲pdf
			CommonAttachment attachment = new CommonAttachment(Word2PdfUtil.word2Pdf(dir,
					RequestPathUtils.buildTempFileDirPath() + File.separator + realFileName + ".pdf"));
			if ("pdf".equals(fileName.substring(fileName.indexOf('.') + 1))) {
				attachment = new CommonAttachment(dir);
			}
			if (attachment.getFileSize() > 0) {
				response.setContentType("application/octet-stream");
				response.addHeader("Content-Disposition",
						"attachment; filename=" + URLEncoder.encode(realFileName + ".pdf", "UTF-8"));
				response.resetBuffer();
				response.setContentLength((int) attachment.getFileSize());
				byte[] buf = new byte[4096];
				int readLength;
				ServletOutputStream servletOS = response.getOutputStream();
				InputStream inStream = attachment.getFileInputStream();
				while (((readLength = inStream.read(buf)) != -1)) {
					servletOS.write(buf, 0, readLength);
				}
				inStream.close();
				servletOS.flush();
				servletOS.close();
				response.flushBuffer();
			}
		} catch (Exception e) {
			logger.error("filed to preview pdf", e);
		}
	}

這裏是我項目用到的,可根據修改,其中非pdf文檔轉換可參考下面地址:

https://blog.csdn.net/qq_37725650/article/details/103769113

 7.前臺訪問預覽

    通過a標籤點擊事件:

<a style="text-decoration: none;" οnclick="preview('${resume.resumePath}','${resume.applicantName}簡歷')" href="javascript:void(0);">${resume.applicantName}簡歷.${fn:substringAfter(resume.resumePath, '.')}</a>

    事件方法:

function preview(resumePath,realFileName){
	var url = "${ctx}/recruitment/recruitment/manager/resume/preview?fileName="+resumePath+"&fileType=1&realFileName="+realFileName;
	window.open("${ctx}/resources/pdfjs/web/viewer.html?file="+encodeURIComponent(url))
}

8.注意事項

    後臺地址如有參數,需要編碼:

    encodeURIComponent(url)

    

    點擊此處下載,中文文件名會亂碼,需要進行解碼,修改/pdfjs/web/viewer.js1080行處代碼:

    添加文件名解碼

     這裏文檔屬性,中文也是亂碼:

 需要進行解碼,修改/pdfjs/web/viewer.js6107行處代碼:

發佈了79 篇原創文章 · 獲贊 11 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章