pdf转图片前端解决方案--pdfjs-dist

748 阅读1分钟

pdfjs-dist

1、安装

cnpm install -S pdfjs-dist

2、引用

import * as pdfjs from "pdfjs-dist"; import * as pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry' pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker

代码层面使用

view=>
<canvas id="pdf_canvas"></canvas>
methods=>

			let file = evt.target.files[0];
			this.pdfName = file.name.substring(0, file.name.lastIndexOf("."));
			var reader = new FileReader();
			reader.readAsDataURL(file); //将文件读取为 DataURL
			console.log(file)

			reader.onload = function () { //文件读取成功完成时触发
				console.log(reader)
				console.log(reader.result)
				const loadingTask = pdfjs.getDocument(reader.result)
				loadingTask.promise.then((pdf) => {
					console.log(pdf)
					console.log(pdf.getPage())
					//处理
					pdf.getPage(1).then((page) => {
						console.log(page)

						const canvas = document.getElementById('pdf_canvas');
						const ctx = canvas.getContext('2d')
						const viewport = page.getViewport({ scale: 4 })
						canvas.height = viewport.height;
						canvas.width = viewport.width;
						const destWidth = 398;
						canvas.style.width = destWidth + 'px';
						canvas.style.height = destWidth * (viewport.height / viewport.width) + 'px';
						page.render({
							canvasContext: ctx,
							viewport,
						})
					})
				})
			}
		},

image.png

========================

pdf有多页处理

			const self = this

			let file = evt.target.files[0];
			this.pdfName = file.name.substring(0, file.name.lastIndexOf("."));
			var reader = new FileReader();
			reader.readAsDataURL(file); //将文件读取为 DataURL

			reader.onload = function () { //文件读取成功完成时触发
				console.log(reader)
				console.log(reader.result)
				const loadingTask = pdfjs.getDocument(reader.result)
				loadingTask.promise.then((pdf) => {
					var pageNum = pdf.numPages;
					console.log("页数:" + pageNum);

					//准备图片
					for (let i = 1; i <= pageNum; i++) {
						let one = i;
						self.imgFiles.push(one);
					}
					console.log(self.imgFiles)

					//处理
					for (let i = 1; i <= pageNum; i++) {
						pdf.getPage(i).then((page) => {
							const canvas = document.getElementById('pdf_canvas_' + i);
							const ctx = canvas.getContext('2d')
							const viewport = page.getViewport({ scale: 4 })
							canvas.height = viewport.height;
							canvas.width = viewport.width;
							const destWidth = 398;
							canvas.style.width = destWidth + 'px';
							canvas.style.height = destWidth * (viewport.height / viewport.width) + 'px';
							page.render({
								canvasContext: ctx,
								viewport,
							})
						})
					}
				})
			}
		}