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,它会给你解决办法。