MacOS,node脚本,支持批量将pdf文件转换成png后再转换成pdf文件,最后输出的文件pdf和原上传的文件名一致

1.先安装好工具

npm install pdf-poppler image-magick

2.创建node文件,我的文件是pdfs_png_pdfs_2.js

3.并在当前目录下建立文件夹,./path/pdfs(存放需要转换的PDF)   ./path/output(存放转换好的PDF),如下图

具体脚本代码如下:

// 导入文件系统模块
const fs = require('fs');
// 导入子进程执行模块
const { exec } = require('child_process');

/**
 * 将PDF文件转换为PNG图片
 * @param {string} inputPath - 输入PDF文件的路径
 * @param {string} outputDir - 输出PNG图片的目录
 * @returns {Promise<void>} 转换完成的Promise对象
 */
function convertPdfToPng(inputPath, outputDir) {
  return new Promise((resolve, reject) => {
    // 使用exec执行系统命令,先创建输出目录(如果不存在),然后将PDF文件转换为PNG图片
    exec(`mkdir -p ${outputDir} && pdftoppm -png -r 300 ${inputPath} ${outputDir}/%d`, (error) => {
      if (error) {
        reject(error);
      } else {
        resolve();
      }
    });
  });
}

/**
 * 将PNG图片转换回PDF文件
 * @param {string} inputDir - 输入PNG图片的目录
 * @param {string} outputPath - 输出PDF文件的路径
 * @returns {Promise<void>} 转换完成的Promise对象
 */
function convertPngToPdf(inputDir, outputPath) {
  return new Promise((resolve, reject) => {
    // 使用exec执行系统命令,先创建输出目录(如果不存在),然后将PNG图片转换为PDF文件
    exec(`mkdir -p $(dirname ${outputPath}) && convert -density 300 ${inputDir}/*.png -compress lzw ${outputPath}`, (error) => {
      if (error) {
        reject(error);
      } else {
        resolve();
      }
    });
  });
}

/**
 * 批量转换指定目录下的所有PDF文件
 * @param {string} inputDir - 输入PDF文件的目录
 * @param {string} outputDir - 输出转换后的PDF文件的目录
 */
async function convertBatch(inputDir, outputDir) {
  // 读取输入目录下的所有文件,过滤出PDF文件
  const pdfFiles = fs.readdirSync(inputDir).filter(file => file.endsWith('.pdf'));
  for (const file of pdfFiles) {
    // 获取当前PDF文件的完整路径
    const pdfPath = `${inputDir}/${file}`;
    // 生成PNG文件的输出目录
    const pngOutputDir = `${outputDir}/${file.replace('.pdf', '')}`;
    // 将PDF文件转换为PNG图片
    await convertPdfToPng(pdfPath, pngOutputDir);
    // 生成转换后PDF文件的输出路径
    const pdfOutputPath = `${outputDir}/${file.replace('.pdf', '')}.pdf`;
    // 将PNG图片转换回PDF文件
    await convertPngToPdf(pngOutputDir, pdfOutputPath);
    // 删除临时PNG文件和目录
    exec(`rm -rf ${pngOutputDir}`);
  }
}

// 示例:转换/input目录下的所有PDF文件,输出到/output目录
convertBatch('./path/pdfs', './path/output').then(() => {
  console.log('转换完成');
}).catch(error => {
  console.error('转换过程中发生错误:', error);
});

最后在终端一路cd到当前目录,执行node pdfs_png_pdfs_2.js即可

ps:开始我遇到一些错误,比如找不到poppler这些,但是当时没记得截图报错输出以及解决办法,如果你们也遇到问题,不要慌,将报错复制给AI,它会给你解决办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值