nodejs使用pdfjs-dist将pdf转图片
时间: 2025-03-06 20:05:06 浏览: 24
使用 Node.js 和 pdfjs-dist 实现 PDF 转图片功能
为了实现这一目标,可以采用 pdfjs-dist
库来解析 PDF 文件并提取页面图像数据。由于 2.8.335 版本之后推荐使用 legacy 构建[^1],因此应按照此建议操作。
安装依赖包
首先安装必要的 npm 包:
npm install pdfjs-dist canvas
这里不仅需要 pdfjs-dist
来处理 PDF 文档,还需要 canvas
来绘制和保存图像。
编写转换脚本
下面是一个简单的 JavaScript 示例代码片段用于加载 PDF 并将其每一页渲染成 PNG 图像文件:
const fs = require('fs');
const path = require('path');
const { createCanvas } = require('canvas');
const pdfjsLib = require('pdfjs-dist/legacy/build/pdf.js');
// 设置全局 worker 工作路径 (如果未设置则会尝试自动查找)
global.pdfWorkerSrc = 'node_modules/pdfjs-dist/legacy/build/pdf.worker.min.js';
async function convertPdfToImages(pdfPath) {
const data = fs.readFileSync(pdfPath);
let loadingTask = pdfjsLib.getDocument(data);
let pdfDocument = await loadingTask.promise;
console.log(`Pages: ${pdfDocument.numPages}`);
for(let pageNumber = 1; pageNumber <= pdfDocument.numPages; pageNumber++) {
let page = await pdfDocument.getPage(pageNumber);
// 获取页面尺寸信息
let viewport = page.getViewport({ scale: 2 });
// 创建画布对象
let canvas = createCanvas(viewport.width, viewport.height);
let context = canvas.getContext('2d');
// 准备参数以供 render 方法调用
let renderContext = {
canvasContext: context,
viewport: viewport
};
// 渲染当前页到画布上
await page.render(renderContext).promise;
// 将画布内容导出为PNG格式的数据URL字符串形式
let outFileName = `${path.basename(pdfPath, '.pdf')}_page${pageNumber}.png`;
let imgBuffer = canvas.toBuffer('image/png');
// 写入磁盘作为实际文件存储下来
fs.writeFileSync(outFileName, imgBuffer);
console.log(`Converted Page ${pageNumber} to ${outFileName}`);
}
}
convertPdfToImages('./example.pdf').catch(console.error);
这段程序读取指定位置的 PDF 文件,并逐页渲染至 Canvas 上再另存为独立的 PNG 文件。注意要确保工作环境中已正确配置了环境变量以及所需的字体资源以便于正常显示中文等内容。
相关推荐












