页面PDF预览控件pdf.js使用总结

一、插件下载

下载地址:http://mozilla.github.io/pdf.js/

内含demo页面,打开后显示效果如图所示:

二、使用方法

将控件的相应文件引入

<link rel="stylesheet" href="../../js/plug/pdfjs/web/viewer.css">
<link rel="resource" type="application/l10n" href="../../js/plug/pdfjs/web/locale/locale.properties">
<script src="../../js/plug/pdfjs/build/pdf.js" type="text/javascript"></script>
<script src="../../js/plug/pdfjs/web/viewer.js" type="text/javascript"></script>

页面可在viewer.html的基础上修改

pdf文件引入方法

方法1:修改viewer.js文件,直接将defaultUrl.value修改为项目内引用的pdf文件路径。

defaultUrl: {
	value: '../../js/plug/pdfjs/web/2019.pdf',
	kind: OptionKind.VIEWER
},

方法2:url路径引用。http://127.0.0.1:8020/pdfjs/demo.html?file=20190601.pdf,直接将pdf文件地址作为file的值传给页面,pdf文件须和页面在同一服务器。或者file后跟服务端请求方法,方法返回为pdf文件流。

方法3:推荐。基于方法1修改,将服务端返回的PDF文件流返回给defaultUrl.value

var pdfUrlMine = "";
var PDFData="";
$(function(){
	var productparam = {
		'productId': localStorage.getItem("productId"),
		'loanAcno': sessionStorage.getItem("loanAcno")
	};
	var params = {
		'token': localStorage.getItem("token"),
		'param': JSON.stringify(productparam)
	};
	$.ajax({
		type:"post",
		async:false,
		data: params,
		mimeType: 'text/plain;charset=x-user-defined',
		url:requestUrl + "/contract/getLoanAgreement",
		success:function(data){
			PDFData = data;
			var rawLength = PDFData.length;
			var arrayBf = new ArrayBuffer(rawLength)
			var array = new Uint8Array(arrayBf);
			for(i = 0; i < rawLength; i++) {
				array[i] = PDFData.charCodeAt(i) & 0xff;
			}
			pdfUrlMine = array;
			$("#pmask").remove();
		},
		error: function(xhr, textStatus) {
			$("#pmask").remove();
			mui.toast('系统开小差了,请返回重试');
			console.log('错误');
			console.log(xhr)
			console.log(textStatus)
		},
		complete: function(XMLHttpRequest, status) {
			$("#pmask").remove();
			if(status == 'timeout') {
				mui.toast('提示:网络不稳定');
			}
			if(status == 'error'){
				mui.toast('系统出错了,请刷新后再试');
			}
		}
	});
});

注意:ajax方法中的mimeType: 'text/plain;charset=x-user-defined',

viewer.js文件中需要修改的地方:

//    if (origin !== viewerOrigin && protocol !== 'blob:') {
//      throw new Error('file origin does not match viewer\'s');
//    }

//file = 'file' in params ? params.file : _app_options.AppOptions.get('defaultUrl');
  file = 'file' in params ? params.file : pdfUrlMine;

defaultUrl: {
//	  value: '../../js/plug/pdfjs/web/2019.pdf',
	value:pdfUrlMine,
	kind: OptionKind.VIEWER
},

  cMapUrl: {
//  value: '../web/cmaps/',
	value: '../../js/plug/pdfjs/web/cmaps/',//根据实际路径修改
    kind: OptionKind.API
  },

java服务端代码:返回pdf流

@RequestMapping("/agreementPDF/{type}")	
public void getRemoteFile(@PathVariable("type") String type, HttpServletResponse response) {  
	List<AgreementTemplate> list = agreementTemplateMapper.selectAll();
	List<AgreementTemplate> collect = list.stream().filter(a -> StringUtils.equals(type, a.getType())).collect(Collectors.toList());
	if(ObjectUtils.isEmpty(collect)){
		return;
	}
	AgreementTemplate agreementTemplate = collect.get(0);
	InputStream inputStream = null;  
	try {  
		try {
			File file = new File(agreementTemplate.getUrl());
			FileInputStream fileInputStream = new FileInputStream(file);
			inputStream = new BufferedInputStream(fileInputStream);
			// 取得输入流,并使用Reader读取
			int bytesum = 0;
			int byteread = 0;
			byte[] buffer = new byte[1024];
			// 清空response
			response.reset();
			// 设置response的Header
			response.addHeader("Content-Disposition", "attachment;filename=" + new String(file.getName().getBytes()));
			OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
			response.setContentType("application/octet-stream");
			response.setHeader("Access-Control-Allow-Origin","*");
			bytesum = 0;
			byteread = 0;
			buffer = new byte[1024];
			while ((byteread = inputStream.read(buffer)) != -1) {
				bytesum += byteread;
				toClient.write(buffer, 0, byteread);
			}
			toClient.flush();
			inputStream.close();
			
			toClient.close();
		} catch (Exception e) {  
			e.printStackTrace();
			inputStream = null;  
		}  
	} catch (Exception e) {  
		e.printStackTrace();
		inputStream = null;  
	}  
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,需要在项目中添加 WebView2 和 pdf.js 的引用。 1. 在 WinForm 中添加 Webview2 件: - 在 Visual Studio 中打开 WinForm 项目。 - 在 “工具箱” 中找到 “WebView2” 件,将其拖到窗体上。 2. 使用 WebView2 件加载 pdf.js: - 在窗体上添加一个按钮,命名为 “Load PDF”。 - 在按钮的 Click 事件中,使用 WebView2 件加载 pdf.js: ```csharp private async void btnLoadPDF_Click(object sender, EventArgs e) { await webView21.EnsureCoreWebView2Async(); // 加载 pdf.js string html = $@" <html> <head> <script src=""{Application.StartupPath}\pdfjs-dist\build\pdf.js""></script> </head> <body> <div style=""position: absolute; top: 0; left: 0; right: 0; bottom: 0;""> <canvas id=""pdfCanvas""></canvas> </div> <script> // 加载 PDF 文件 pdfjsLib.getDocument('{Application.StartupPath}\sample.pdf').promise.then(function(pdf) { // 获取第一页并渲染 pdf.getPage(1).then(function(page) { var canvas = document.getElementById('pdfCanvas'); var context = canvas.getContext('2d'); var viewport = page.getViewport({ scale: 1.0 }); canvas.width = viewport.width; canvas.height = viewport.height; var renderContext = { canvasContext: context, viewport: viewport }; page.render(renderContext); }); }); </script> </body> </html>"; webView21.CoreWebView2.NavigateToString(html); } ``` 以上代码中,我们使用pdf.js 的 API 加载了一个名为 “sample.pdf” 的 PDF 文件,并将其渲染到一个名为 “pdfCanvas” 的 Canvas 元素中。 注意:在使用 pdf.js 渲染 PDF 文件时,需要使用 Canvas 元素来显示 PDF 内容。 3. 运行程序,点击 “Load PDF” 按钮,即可看到加载并渲染出了 PDF 文件的第一页。 以上就是使用 WebView2 件和 pdf.js 来显示 PDF 文件的示例代码。需要注意的是,以上代码只是一个示例,实际使用时还需要对代码进行适当的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值