在 Node.js 中为 PDF 文件添加文字或图片水印,可以使用 pdf-lib
或 pdfkit
等库来操作 PDF 文件。下面是使用 pdf-lib
库为 PDF 文件添加水印的示例代码。
安装 pdf-lib
首先,需要安装 pdf-lib
:
npm install pdf-lib
给 PDF 添加文字水印
以下是一个添加文字水印的示例:
const fs = require('fs');
const { PDFDocument } = require('pdf-lib');
// 读取 PDF 文件
async function addWatermarkToPdf() {
const existingPdfBytes = fs.readFileSync('input.pdf');
// 加载现有的 PDF 文档
const pdfDoc = await PDFDocument.load(existingPdfBytes);
// 获取 PDF 中的所有页面
const pages = pdfDoc.getPages();
// 设置水印的文字
const watermarkText = 'CONFIDENTIAL';
const font = await pdfDoc.embedFont(PDFDocument.Font.Helvetica);
const fontSize = 50;
// 在每一页上添加水印
pages.forEach(page => {
const { width, height } = page.getSize();
page.drawText(watermarkText, {
x: width / 4,
y: height / 2,
font: font,
size: fontSize,
color: rgb(0.75, 0.75, 0.75), // 设置水印的颜色
rotate: degrees(-45), // 设置旋转角度
});
});
// 保存修改后的 PDF 文件
const pdfBytes = await pdfDoc.save();
fs.writeFileSync('output_with_watermark.pdf', pdfBytes);
}
addWatermarkToPdf().then(() => {
console.log('Watermark added successfully!');
}).catch(err => {
console.error('Error adding watermark:', err);
});
给 PDF 添加图片水印
要添加图片水印,首先需要加载图片并将其嵌入到 PDF 中:
const fs = require('fs');
const { PDFDocument } = require('pdf-lib');
async function addImageWatermarkToPdf() {
const existingPdfBytes = fs.readFileSync('input.pdf');
const imageBytes = fs.readFileSync('watermark-image.png'); // 图片水印
const pdfDoc = await PDFDocument.load(existingPdfBytes);
const image = await pdfDoc.embedPng(imageBytes); // 加载图片
const imageDims = image.scale(0.2); // 调整图片大小
const pages = pdfDoc.getPages();
pages.forEach(page => {
const { width, height } = page.getSize();
page.drawImage(image, {
x: width / 4,
y: height / 2,
width: imageDims.width,
height: imageDims.height,
rotate: degrees(-45), // 设置旋转角度
});
});
const pdfBytes = await pdfDoc.save();
fs.writeFileSync('output_with_image_watermark.pdf', pdfBytes);
}
addImageWatermarkToPdf().then(() => {
console.log('Image watermark added successfully!');
}).catch(err => {
console.error('Error adding image watermark:', err);
});
注意事项
- PDF 字体:
pdf-lib
内建了几个字体(如 Helvetica),如果想使用自定义字体,可能需要手动嵌入字体文件。 - 旋转与定位:水印的位置和旋转角度可以根据需要进行调整。
- 图片尺寸:使用
image.scale()
来调整图片水印的大小。
这种方法适用于生成简单的水印,如果需要更复杂的操作,pdf-lib
也提供了更灵活的 API 来操作 PDF 内容。