[Python]对PDF加个水印

[toc]
最近需要对PDF添加动态水印来对打印的文件做标记,但PDF修改功能极为复杂,开源的PDF库也很少支持对PDF直接修改,多数只能从零创建。不过好在PyPDF2支持两个PDF叠加,可以变相实现加水印的目的。下面是方法。

代码

from PyPDF2 import PdfFileReader, PdfFileWriter
from reportlab.pdfgen import canvas
import time
import sys
output = PdfFileWriter()
inputfile=open(sys.argv[1], "rb")
pdfFileReader = PdfFileReader(inputfile)
pageCount = pdfFileReader.getNumPages()
markfile=open("mark.pdf", "wb")
c = canvas.Canvas(markfile)
c.drawString(50,50,"Printed on "+time.strftime("%Y-%m-%d %H:%M:%S",  time.localtime(time.time())))
c.save()
markfile.close()
markfile=open("mark.pdf", "rb")
mark = PdfFileReader(markfile)
markpage=mark.getPage(0)
for index in range(0, pageCount):
    pageObj = pdfFileReader.getPage(index)
    pageObj.mergePage(markpage)
    output.addPage(pageObj)
markfile.close()
outputStream = file(sys.argv[1].replace('.pdf','-')+"output.pdf", "wb")
output.write(outputStream)
inputfile.close()

解读

  • 首先动态生成一个含有水印的PDF
  • 创建一个输出文件
  • 遍历原PDF,将页面提取出来与水印PDF合并,添加到新的文件
  • 保存输出文件

踩坑请注意

  • 水印创建了记得关闭
  • 源文件一定要在最后关闭,不然会乱码
  • canvase 0,0在页面左下角,x增加是向上,y增加是向右

发表评论

电子邮件地址不会被公开。 必填项已用*标注