如何使用Node.js将base64 PNG转PDF?支持多文件批量转换吗?
Node.js 实现Base64格式PNG转PDF方案
核心能力说明
完全支持Base64格式PNG转PDF,也支持多个Base64编码PNG的批量转换,批量场景可实现两种输出:所有PNG合并为单个多页PDF、每个PNG生成独立的单页PDF。
实现准备
选用Node生态稳定的PDF生成依赖:
pdfkit:原生支持位图嵌入的PDF生成库,无需浏览器环境依赖- Node内置
fs模块:完成生成文件的本地写入操作
单张Base64 PNG转PDF实现
核心逻辑
- 剥离Base64字符串的
data:image/png;base64,固定前缀,将剩余编码内容转为二进制Buffer - 初始化PDF文档实例,创建与PNG尺寸完全匹配的空白页面,避免出现多余白边
- 将解码得到的PNG Buffer作为图像源嵌入页面
- 完成文档内容写入后,将PDF流输出为本地文件
示例代码
const PDFDocument = require('pdfkit'); const fs = require('fs'); // 替换为实际使用的Base64 PNG字符串 const base64Png = "data:image/png;base64,这里替换为实际的Base64编码内容"; // 处理Base64为可识别的图像Buffer const cleanBase64 = base64Png.replace(/^data:image\/png;base64,/, ""); const pngBuffer = Buffer.from(cleanBase64, 'base64'); // 初始化PDF,关闭自动创建的默认首页 const doc = new PDFDocument({ autoFirstPage: false }); doc.pipe(fs.createWriteStream('./single-output.pdf')); // 新增匹配PNG尺寸的页面,嵌入图像 doc.addPage({ size: [pngBuffer.width, pngBuffer.height] }); doc.image(pngBuffer, 0, 0); // 结束内容写入,完成PDF生成 doc.end();
多Base64 PNG批量转换实现
根据输出需求可选择两种实现模式:
模式1:所有PNG合并为单个多页PDF
遍历所有Base64 PNG条目,为每个PNG创建独立的PDF页面,最终输出单个包含所有图像的PDF文件。
const PDFDocument = require('pdfkit'); const fs = require('fs'); // 待处理的Base64 PNG数组 const base64PngArray = [ "data:image/png;base64,xxx1", "data:image/png;base64,xxx2", "data:image/png;base64,xxx3" ]; const doc = new PDFDocument({ autoFirstPage: false }); doc.pipe(fs.createWriteStream('./combined-batch-output.pdf')); base64PngArray.forEach(item => { // 逐个处理Base64解码 const cleanBase64 = item.replace(/^data:image\/png;base64,/, ""); const pngBuffer = Buffer.from(cleanBase64, 'base64'); // 每个PNG占独立一页 doc.addPage({ size: [pngBuffer.width, pngBuffer.height] }); doc.image(pngBuffer, 0, 0); }); doc.end();
模式2:每个PNG生成独立PDF文件
遍历Base64数组,对每个条目复用单张转换的逻辑,输出文件按序号命名(如output-1.pdf、output-2.pdf)即可,无需额外依赖。
常见踩坑提醒
- 必须剥离Base64字符串的
data:前缀,否则解码得到的Buffer是损坏的,会触发图像解析错误 - 需要调整边距、自定义页面尺寸时,只需修改
addPage的size参数和image的坐标偏移值即可 - 避免选用仅适配浏览器环境的PDF生成库,这类库在Node环境运行会因缺失浏览器API出现兼容问题
内容的提问来源于stack exchange,提问作者ginad
相关产品推荐
相关产品推荐

