1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何在Node中将PDF每页转换为图片以及PDF各种操作

如何在Node中将PDF每页转换为图片以及PDF各种操作

时间:2024-05-20 20:24:27

相关推荐

如何在Node中将PDF每页转换为图片以及PDF各种操作

记录如何在node中将PDF每页转换为图片格式

先介绍几个库

1、pdf-lid: 这个库是基于pdf.js和pdfkit的、文档健全、操作方便、Api调用简介。可以对PDF进行提取、编辑、增删改查。 链接地址: pdf-lib 2、pdf2pic: 这个库用于将PDF每页转为图片但是不能进行PDF的一系列加工但是这并不影响他的强大 链接地址:pdf2pic 3、pdf.js: 这个库是一个处理PDF非常强大的库、可以对PDF进行一系列操作、也可用于web端渲染PDF每页。 链接地址:pdf.js 4、pdfmake: 主要生成PDF、可以对生成的内容进行精细化的加工 链接地址: pdfmake文档地址: pdfmake文档 (建议看2.几的文档) 5、pdfkit: 这也是用与生成PDF的一个库、个人觉得生成PDF还是pdfmake方便一点 链接地址:pdfkit文档地址:pdfkit文档

接下来贴一点代码片段如何在node以及web中将PDF文档逐页转换为图片并获取他们的编码数据

Node

在node中我们主要用到两个库pdf-lib、和pdf2pic。

pdf-lib主要用于获取页面的关键信息.

pdf2pic主要用于将pdf转为图片但是使用之前需要先安装两个程序步骤可以按照这个来:安装步骤(必须安装)

话不多说直接上代码:

给大家看下代码目录结构

是不是特别简单

冲冲冲 <-_->

代码

/* 步骤:1、npm init -y2、npm i pdf2pic pdf-lib fs-extra*/const {fromPath, fromBuffer } = require('pdf2pic')const {PDFDocument } = require('pdf-lib')const fs = require('fs')const fsExtra = require('fs-extra') // npm i // pdf-lib要求file必须是Buffer 所以我们先用fs模块获取PDF的Buffer格式const pdfBuffer = fs.readFileSync('hello.pdf') // 这里我们就直接同步获取了const pdfToImage = async (pdfBuffer, savePath) => {try {if (!fsExtra.pathExistsSync(savePath)) fsExtra.ensureDirSync(savePath)const baseOptions = {density: 330, // 图片缩放比例saveFilename: 'untitled', // 图片保存前缀名format: 'png', // 图片格式savePath, // 保存路径}let imgBufferList = [], imgBase64List = []// 获取PDF const pdfDoc = await PDFDocument.load(pdfBuffer, {ignoreEncryption: true }) // ignoreEncryption: true 用于获取加密文档 但是有一定的风险// 获取PDF所有页面const pages = await pdfDoc.getPages()// 循环处理页面达到我们想要的效果(此处我们只是将页面转为图片并存储)for (let [pageIndex, page] of pages.entries()) {// 获取页面的尺寸const {width, height } = await page.getSize()// 接下来开始转换 可以从很多格式转换 具体看这个文档 /yakovmeister/pdf2pic-examplesconst toImageOptions = {...baseOptions, width, height }// 1、保存图片const storeAsImage = fromBuffer(pdfBuffer, toImageOptions);storeAsImage(pageIndex + 1).then(({path }) => {// 获取图片Bufferconst data = fs.readFileSync(path)imgBufferList.push({page: pageIndex + 1, data })if (pageIndex + 1 === pages.length) {console.log(imgBufferList)}}).catch(err => {console.log(`第${pageIndex + 1}页转换失败`);console.log(err)})// 2、直接获取图片的base64 new Promise(async (resolve, reject) => {const [{base64: data }] = await fromBuffer(pdfBuffer, toImageOptions).bulk(pageIndex + 1, true)if (data) resolve({pageIndex, data })else reject()}).then(({data }) => {imgBase64List.push({page: pageIndex + 1, data })if (pageIndex + 1 === pages.length) {console.log(imgBase64List);}}).catch(err => {console.log(`第${pageIndex + 1}页转换失败`);console.log(err)})}} catch (err) {console.log(err);}}pdfToImage(pdfBuffer, './images')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。