前端使用pdf.js实现pdf转为图片

教程下载地址: 网赚博客http://www.piaodoo.com/创业项目排行榜前十名http://www.piaodoo.com/


PDF.js是一个用于在网页中显示PDF文档的JavaScript库。它是由Mozilla开发的,是一个完全免费、开源的工具。

安装 PDF.js

安装PDF.js有两种方法:

方法1:通过npm安装

可以通过npm安装PDF.js,使用以下命令:

npm install pdfjs-dist

这样就会在你的项目中安装PDF.js。

方法2:手动下载

也可以从官方网站https://mozilla.github.io/pdf.js/getting_started/手动下载PDF.js。下载后,将pdf.js和pdf.worker.js文件放到你的项目中。

前端pdf.js将pdf转为图片,尤其适合电子发票打印

示例代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>PDF文件转图片</title>
		<script type="text/javascript" src="js/jquery-3.6.4.min.js"></script>
	&lt;script type="text/javascript" src="js/2.2.228pdf.min.js"&gt;&lt;/script&gt;
	&lt;script type="text/javascript" src="js/2.2.228.pdf.worker.min.js"&gt;&lt;/script&gt;
	
&lt;!--
	
	
	&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.228/pdf.min.js" integrity="sha512-Q0SyiCpjyVOjMJ28RDpmCxi0Drmc9cr7fBQuW2F5F7yiS0yTWtbbltd+H5BYhaA7Izpm6nyIXAUppQfdm6zt1w==" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
	&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.228/pdf.worker.min.js" integrity="sha512-kxBikBDcUHWvfvzNZVSRe+1mJ2MSHFe5+WVUCdTTUN3oHo/3GWPDUhiO0jtFCUcs+VnSk6BMGYC3IGuwe3qXVg==" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
	 --&gt;
	&lt;script type="text/javascript" src="js/jszip.js"&gt;&lt;/script&gt;
	&lt;script type="text/javascript" src="js/FileSaver.js"&gt;&lt;/script&gt;
	&lt;style type="text/css"&gt;
		button {
			width: 120px;
			height: 30px;
			background: none;
			border: 1px solid #b1afaf;
			border-radius: 5px;
			font-size: 12px;
			font-weight: 1000;
			color: #384240;
			cursor: pointer;
			outline: none;
			margin: 0 0.5%
		}

		button:hover {
			background: #ccc;
		}

		#container {
			width: 65%;
			height: 75%;
			margin-top: 1%;
			border-radius: 2px;
			/*border: 2px solid #a29b9b;*/
		}

		.pdfInfos {
			margin: 0 2%;
		}
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

	&lt;div class="showdata" style="margin-top:1%"&gt;
	    &lt;button id="pdf_tourl"&gt;合并多个pdf为一个&lt;/button&gt;
		&lt;button id="prevpage"&gt;上一页&lt;/button&gt;
		&lt;button id="nextpage"&gt;下一页&lt;/button&gt;
		&lt;button id="exportImg"&gt;导出每一张图片&lt;/button&gt;
		&lt;button onclick="wind_print()"&gt;打印&lt;/button&gt;
		&lt;button onclick="choosePdf()"&gt;选择多个pdf文件&lt;/button&gt;
		&lt;input style="display:none" id='chooseFile' type='file' accept="application/pdf" multiple="multiple"&gt;
	&lt;/div&gt;
	&lt;div  class="showdata" style="margin-top:1%"&gt;
		&lt;span class="pdfInfos"&gt;页码:&lt;span id="currentPages"&gt;&lt;/span&gt;&lt;span id="totalPages"&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class="pdfInfos"&gt;文件名:&lt;span id="fileName"&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class="pdfInfos"&gt;文件大小:&lt;span id="fileSize"&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/div&gt;
	&lt;div style="position: relative;"&gt;
		&lt;div id="container"&gt;&lt;/div&gt;
		&lt;img id="imgloading" style="position: absolute;top: 20%;left: 2%;display:none" src="loading.gif"&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;script&gt;
		$("#pdf_tourl").click(function(){
		alert("可以使用PDF Arranger软件");
		});
		function wind_print(){
		$(".showdata").hide();
		$("#container").css("width","100%");
		$("#container").css("height","100%");
			window.print();
		 $(".showdata").show();
		 $("#container").css("width","65%");
		$("#container").css("height","75%");
		}

	var currentPages, totalPages //声明一个当前页码及总页数变量
	var scale = 2; //设置缩放比例,越大生成图片越清晰
	$('#chooseFile').change(function() {
		var pdfFilePath = $('#chooseFile').val();
		if (pdfFilePath) {
			//$("#imgloading").css('display', 'block');
			$("#container").empty(); //清空上一PDF文件展示图
			currentPages = 1; //重置当前页数
			totalPages = 0; //重置总页数
			debugger
			var filesdata = $('#chooseFile')[0].files; //jquery获取到文件 返回属性的值
			//文件大小
			var fileSize=0;
			for (let i = 0; i &lt; filesdata.length; i++) {
				fileSize += filesdata[i].size;
			}


			var mb;
			if (fileSize) {
				mb = fileSize / 1048576;
				if (mb &gt; 10) {
					alert("文件大小不能&gt;10M");
					return;
				}
			}

			if (filesdata.length === 1) {
				$("#fileName").text(filesdata[0].name);
			} else {
				$("#fileName").text(filesdata[0].name + "等 " + filesdata.length + " 个文件");

			}
			$("#fileSize").text(mb.toFixed(2) + "Mb");


			//reader.readAsDataURL(filesdata[0]); //将文件读取为 DataURL

			for (let j = 0; j &lt; filesdata.length; j++) {
				var reader = new FileReader();
				reader.readAsDataURL(filesdata[j]);


			reader.onload = function(e) { //文件读取成功完成时触发
				pdfjsLib.getDocument(this.result).then(function(pdf) { //调用pdf.js获取文件
					if (pdf) {
						totalPages = pdf.numPages; //获取pdf文件总页数
						$("#currentPages").text("1/");
						$("#totalPages").text(totalPages);
						//遍历动态创建canvas
						for (var i = 1; i &lt;= totalPages; i++) {
							var canvas = document.createElement('canvas');
							var cid=j+i;
							canvas.id = "pageNum" + cid;
							$("#container").append(canvas);
							var context = canvas.getContext('2d');
							renderImg(pdf, i, context);
						}
					}
				});
			};

			}
		}
	});


	//渲染生成图片
	function renderImg(pdfFile, pageNumber, canvasContext) {
		pdfFile.getPage(pageNumber).then(function(page) { //逐页解析PDF
			var viewport = page.getViewport(scale); // 页面缩放比例
			var newcanvas = canvasContext.canvas;
			//设置canvas真实宽高
			newcanvas.width = viewport.width;
			newcanvas.height = viewport.height;
			//设置canvas在浏览中宽高
			newcanvas.style.width = "100%";
			newcanvas.style.height = "100%";
			//默认显示第一页,其他页隐藏
			if (pageNumber != 1) {
				newcanvas.style.display = "none";
			}
			var renderContext = {
				canvasContext: canvasContext,
				viewport: viewport
			};
			page.render(renderContext); //渲染生成
		});
		//$("#imgloading").css('display', 'none');
		return;
	};
	//上一页
	$("#prevpage").click(function() {
		if (!currentPages || currentPages &lt;= 1) {
			return;
		}
		nowpage = currentPages;
		currentPages--;
		$("#currentPages").text(currentPages + "/");
		var prevcanvas = document.getElementById("pageNum" + currentPages);
		var currentcanvas = document.getElementById("pageNum" + nowpage);
		currentcanvas.style.display = "none";
		prevcanvas.style.display = "block";
	})
	//下一页
	$("#nextpage").click(function() {
		if (!currentPages || currentPages &gt;= totalPages) {
			return;
		}
		nowpage = currentPages;
		currentPages++;
		$("#currentPages").text(currentPages + "/");
		var nextcanvas = document.getElementById("pageNum" + currentPages);
		var currentcanvas = document.getElementById("pageNum" + nowpage);
		currentcanvas.style.display = "none";
		nextcanvas.style.display = "block";
	})
	//导出图片
	$("#exportImg").click(function() {
		if (!$('#chooseFile').val()) {
			alert('请先上传pdf文件')
			return false;
		}
		//$("#imgloading").css('display', 'block');
		var zip = new JSZip(); //创建一个JSZip实例
		var images = zip.folder("images"); //创建一个文件夹用来存放图片
		//遍历canvas,将其生成图片放进文件夹images中
		$("canvas").each(function(index, ele) {
			var canvas = document.getElementById("pageNum" + (index + 1));

			//将图片放进文件夹images中
			//参数1为图片名称,参数2为图片数据(格式为base64,需去除base64前缀 data:image/png;base64)
			images.file("photo-" + (index + 1) + ".png", splitBase64(canvas.toDataURL("image/png", 1.0)), {
				base64: true
			});
		})
		//打包下载
		zip.generateAsync({
			type: "blob"
		}).then(function(content) {
			//saveAs(content, "picture.zip"); //saveAs依赖的js文件是FileSaver.js
			saveAs(content, "imgFiles.zip"); //saveAs依赖的js文件是FileSaver.js
			//$("#imgloading").css('display', 'none');
		});
	});
	//截取base64前缀
	function splitBase64(dataurl) {
		var arr = dataurl.split(',')
		return arr[1]
	}

	function choosePdf() {
		$("#chooseFile").click()
	}
&lt;/script&gt;

</html>

效果图

到此这篇关于前端使用pdf.js实现pdf转为图片的文章就介绍到这了,更多相关pdf.js实现pdf转图片内容请搜索网赚博客http://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持网赚博客http://www.piaodoo.com/!

                        友情连接:  

茂名一技http://www.szsyby.net/


茂名一技http://www.enechn.com/


美文集http://www.tpyjn.cn/


手游排行前十名http://www.bjkhrx.com/

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值