UNPKG

lc-pdf-to-png

Version:

Convert PDF to PNG image object on the web page

92 lines (78 loc) 1.81 kB
import * as PDFJS from "pdfjs-dist/es5/build/pdf.js"; PDFJS.GlobalWorkerOptions.workerSrc = import( "pdfjs-dist/build/pdf.worker.entry" ); let pdfFile = null; const pngList = []; let pageNum = 0; let pdf = null; let pages = 0; let callback = null; const start = (file, fn) => { callback = fn pdfFile = file if ( pdfFile) { const reader = new FileReader(); reader.onload = e => { const data = new Uint8Array(e.target.result); getPng(data); }; reader.readAsArrayBuffer(pdfFile); } }; const getPng = (data) =>{ PDFJS.getDocument(data).promise.then(v => { pages = v.numPages; pdf = v; getPngList(); }); } const getPngList = () => { if (pages < pageNum) { callback() return; } pdf.getPage(pageNum++).then(page => { const cvs = document.createElement("canvas"); const context = cvs.getContext("2d"); // 设置缩放比例 const scale = devicePixelRatio; const viewport = page.getViewport({ scale }); cvs.width = viewport.width * scale; cvs.height = viewport.height * scale; context.scale(scale, scale); page .render({ canvasContext: context, viewport: viewport }) .promise.then(() => { cvs.toBlob(blob => { const imageFile = new File( [blob], `page_${_this.pageNum}.png`, { type: "image/png" }, "image/png", 1.0 ); pngList.push({ url: cvs.toDataURL(), name: `page_${pageNum}.png`, file: imageFile }); getPngList(); // 可以用于下载或上传 }, "image/png"); }); }); } const getPage = (pageNum) => { if(!pdf) return return pdf.getPage(pageNum) } module.exports = { start, getPage };