2021-08-02 14:05:57
在HTML中给PDF页面加水印可通过前端jsPDF库或后端PDFKit库实现,具体方案需根据水印类型、批量需求及文档权限选择。
一、前端方案:使用jsPDF库添加水印适用场景:简单文本水印、单文件处理、无需后端支持。
实现步骤:
引入jsPDF库:在HTML文件中通过CDN或本地引入jsPDF。
创建PDF对象:使用new jsPDF()初始化PDF文档。
添加内容:通过doc.text()或doc.html()添加正文内容。
添加水印:
文本水印:使用doc.text(水印文本, x坐标, y坐标, {options}),设置字体大小、颜色、透明度等。
图片水印:使用doc.addImage(图片路径, 格式, x坐标, y坐标, 宽度, 高度)。
保存PDF:调用doc.save('文件名.pdf')下载文件。
示例代码:
<!DOCTYPE html><html><head> <title>PDF Watermark</title> <script src="注意事项:
水印位置需通过坐标调整,避免遮挡正文。
透明度通过RGBA颜色值控制(如setTextColor(200, 200, 200, 0.5))。
复杂布局建议结合HTML转PDF功能(如doc.html(html字符串))。
适用场景:批量处理、复杂水印(如多页统一水印)、修改受保护PDF。
实现步骤:
安装PDFKit:通过npm install pdfkit安装库。
读取原始PDF:使用fs.readFile()读取文件(需结合pdf-lib等库解析现有PDF)。
创建PDF对象:初始化new PDFDocument()。
添加水印:
文本水印:通过doc.text(水印文本, x, y, {options})设置样式。
图片水印:通过doc.image(图片路径, x, y, {width, height})。
输出文件:使用doc.pipe(fs.createWriteStream('输出.pdf'))保存。
示例代码(生成新PDF并添加水印):
const PDFDocument = require('pdfkit');const fs = require('fs');const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));// 添加正文doc.fontSize(12).text('正文内容', 50, 50);// 添加文本水印(半透明灰色,居中)doc.fillColor(200, 200, 200, 0.5) .fontSize(40) .text('WATERMARK', 100, 150, { align: 'center' });doc.end();处理现有PDF(需结合pdf-lib):
const { PDFDocument, rgb } = require('pdf-lib');const fs = require('fs');async function addWatermark() { const existingPdfBytes = fs.readFileSync('input.pdf'); const pdfDoc = await PDFDocument.load(existingPdfBytes); const pages = pdfDoc.getPages(); pages.forEach(page => { page.drawText('WATERMARK', { x: page.getWidth() / 2 - 50, y: page.getHeight() / 2, size: 40, color: rgb(0.8, 0.8, 0.8, 0.5), // 半透明灰色 }); }); const pdfBytes = await pdfDoc.save(); fs.writeFileSync('output.pdf', pdfBytes);}addWatermark();优势:无需服务器,适合快速生成简单PDF。
局限:无法直接修改现有PDF,水印样式有限。
优势:支持批量处理、复杂水印、修改受保护文件。
局限:需部署Node.js环境,代码复杂度较高。