通过免费 Node.js 库将 Office Word 与 PowerPoint 转换为 PDF
开源 Node.js PDF 转换 API,用于读取和转换 Office Word 与 PowerPoint 文件为 PDF,支持批量文档转换。
Files2PDF 是什么?
在文档管理的世界里,将文件转换为 PDF 是日常必需。无论是归档旧的演示文稿还是敲定合同,对稳定、不可编辑格式的需求都是普遍的。然而,手动处理数百个文件是一场噩梦。Files2Pdf——一个轻量且强大的 Node.js 包,旨在自动化此过程。该库包含多个重要功能,例如批量文档处理、支持多种文档格式、双模式使用、智能错误处理、目录自动化等。
Files2Pdf 是一个轻量级的 Node.js 包,简化了办公文档——特别是 Microsoft Word 和 PowerPoint 文件——转换为 PDF 格式的过程。不同于需要繁重配置的复杂企业解决方案,Files2Pdf 专注于一件事:高效处理整个文件夹的文档并输出干净、可直接分享的 PDF。该库会自动识别目录中的支持文件,跳过不兼容的文件,防止批处理作业中出现崩溃或错误。
开始使用 Files2Pdf
安装 Files2PDF 模块的最佳方式是通过 npm,请使用以下命令来安装 API。
通过 npm 安装 Files2PDF 库
npm install files2pdf通过 GibHub 安装 Files2PDF 库
git clone "https://github.com/An4s0/Files2Pdf.git" 批量处理功能
开源的 Files2PDF 库包含了多种一次性将多个文件转换为 PDF 文档的功能。其中一个突出特点是能够在一次操作中处理整个文档文件夹。您无需逐个转换文件,只需将 Files2PDF 指向包含多个文档的目录,它会系统地将每个支持的文件转换为 PDF 格式。
如何在 Node.js 应用中将多个文档转换为 PDF 文件?
const { processFolder } = require('files2pdf');
const path = require('path');
const fs = require('fs').promises;
async function convertDocuments(inputPath, outputPath) {
try {
// Verify input folder exists
await fs.access(inputPath);
console.log(`Starting conversion process...`);
console.log(`Input folder: ${inputPath}`);
console.log(`Output folder: ${outputPath}`);
// Process all files in the folder
await processFolder(inputPath, outputPath);
console.log('Conversion completed successfully!');
return { success: true, message: 'All documents converted' };
} catch (error) {
console.error('Conversion failed:', error.message);
return { success: false, error: error.message };
}
}
// Usage example
const inputDir = path.resolve(__dirname, 'documents');
const outputDir = path.resolve(__dirname, 'pdfs');
convertDocuments(inputDir, outputDir)
.then(result => {
if (result.success) {
console.log('Success:', result.message);
} else {
console.log('Failed:', result.error);
}
});
多格式支持
Files2PDF 能够无缝处理传统和现代的 Microsoft Office 格式。该软件包支持 .ppt 和 .pptx 格式的 PowerPoint 文件,以及 .doc 和 .docx 格式的 Word 文档。这种全面的格式支持确保与不同版本 Microsoft Office 创建的文档兼容。以下代码示例展示了如何将文件监控系统用于创建自动文档转换系统,该系统监视目录中新文件并自动进行转换。
如何在 Node.js 中创建文件监控系统,以转换加载到目录中的新文件?
const { processFolder } = require('files2pdf');
const chokidar = require('chokidar');
const path = require('path');
const fs = require('fs').promises;
class DocumentConverter {
constructor(watchDir, outputDir) {
this.watchDir = path.resolve(watchDir);
this.outputDir = path.resolve(outputDir);
this.processing = new Set();
}
async initialize() {
// Ensure output directory exists
await fs.mkdir(this.outputDir, { recursive: true });
// Set up file watcher
const watcher = chokidar.watch(this.watchDir, {
ignored: /(^|[\/\\])\../, // ignore dotfiles
persistent: true,
ignoreInitial: false
});
watcher.on('add', async (filePath) => {
await this.handleNewFile(filePath);
});
console.log(`Watching ${this.watchDir} for new documents...`);
}
async handleNewFile(filePath) {
const ext = path.extname(filePath).toLowerCase();
const supportedFormats = ['.ppt', '.pptx', '.doc', '.docx'];
if (!supportedFormats.includes(ext)) {
return; // Skip unsupported files
}
if (this.processing.has(filePath)) {
return; // Already processing this file
}
this.processing.add(filePath);
console.log(`New file detected: ${path.basename(filePath)}`);
try {
await processFolder(path.dirname(filePath), this.outputDir);
console.log(`Successfully converted: ${path.basename(filePath)}`);
} catch (error) {
console.error(`Error converting ${path.basename(filePath)}:`, error.message);
} finally {
this.processing.delete(filePath);
}
}
}
// Initialize the converter
const converter = new DocumentConverter('./watched-folder', './converted-pdfs');
converter.initialize();
可自定义页面尺寸和方向
一刀切的方式不适用于 PDF。截图可能在横向时效果最佳,而文本文件则更适合纵向。Files2PDF 允许您为整个输出 PDF 定义页面尺寸(例如 A4、Letter)和方向(纵向或横向),确保内容正确显示。
智能文件过滤
开源的 Files2PDF 库使软件开发者能够自动识别并仅处理受支持的文件类型,优雅地跳过不支持的格式而不抛出错误。这种智能过滤机制确保即使在包含混合文件类型的文件夹中工作时,也能平稳运行。