穿梭于PDF和图片之间:Node.js中的转换艺术

274 阅读2分钟

在我们的数字工作流中,PDF和图片格式扮演着至关重要的角色。PDF提供了一种格式固定、便于分发的文件类型,而图片则是信息展示的直观方式。在某些情况下,我们需要将PDF转换为图片,以便于查看和分享;相反,我们也可能需要将一系列图片合并成PDF,以便于打印和存档。在本文中,我们将探讨如何在Node.js环境中实现PDF与图片之间的转换。

从PDF到图片

要在Node.js中将PDF转换为图片,我们可以借助强大的第三方工具,如ImageMagick和Ghostscript。这些工具都具有处理图像和PDF的强大能力,并且可以通过命令行界面轻松使用。

使用ImageMagick

首先,确保在你的系统上安装了ImageMagick。在Windows上,你可以从官方网站下载安装程序;在Linux上,你可以使用包管理器来安装。

然后,在Node.js项目中安装gm模块:

npm install gm

通过以下代码,我们可以将PDF的每一页转换为单独的PNG图片:

const gm = require('gm');

// 假设我们要转换的PDF文件位于'./files/document.pdf'
gm('./files/document.pdf[0]')
  .setFormat('png')
  .write('./output/page-1.png', function (error) {
    if (!error) console.log('第一页转换成功!');
    else console.error('转换发生错误:', error);
  });

使用Ghostscript

如果你选择使用Ghostscript,同样需要先在你的系统上进行安装。一旦安装完成,你可以使用Node.js的child_process模块来执行Ghostscript命令。

const { exec } = require('child_process');

const gsCommand = 'gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=./output/page-%d.png ./files/document.pdf';

exec(gsCommand, (error, stdout, stderr) => {
  if (error) {
    console.error(`执行出错: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stderr}`);
  console.log('PDF转换成功!');
});

从图片到PDF

将图片转换为PDF的过程在Node.js中同样简单。我们可以使用pdf-lib库来创建PDF文件,并将图片作为页面插入。

首先,安装pdf-lib

npm install pdf-lib

然后,使用以下代码将多张图片合成一个PDF文件:

const { PDFDocument } = require('pdf-lib');
const fs = require('fs');

async function imagesToPDF(imagePaths, outputPath) {
  const pdfDoc = await PDFDocument.create();
  for (const imagePath of imagePaths) {
    const imageBytes = fs.readFileSync(imagePath);
    const image = await pdfDoc.embedPng(imageBytes);
    const page = pdfDoc.addPage([image.width, image.height]);
    page.drawImage(image, {
      x: 0,
      y: 0,
      width: image.width,
      height: image.height,
    });
  }
  const pdfBytes = await pdfDoc.save();
  fs.writeFileSync(outputPath, pdfBytes);
}

const imagePaths = ['./images/image1.png', './images/image2.png', './images/image3.png'];
imagesToPDF(imagePaths, './output/combined.pdf').then(() => {
  console.log('图片合并为PDF成功!');
});

结语

在Node.js中将PDF与图片互转不仅是可能的,而且这个过程可以非常直接和高效。无论是将PDF转换为图片以提高其可访问性,还是将图片合并为PDF以便打印或存档,Node.js配合强大的工具如ImageMagick、Ghostscript以及高质量的库如pdf-lib,都可以帮助我们轻松完成任务。