批量给pdf增加水
-
创建水印pdf文件
from reportlab.pdfgen import canvas from reportlab.lib.units import cm from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from PyPDF2 import PdfFileWriter,PdfFileReader pdfmetrics.registerFont(TTFont('song', 'C:/Windows/Fonts/simsun.ttc'))#宋体 def create_watermark(content): #默认大小为21cm*29.7cm c = canvas.Canvas('Watermark.pdf', pagesize = (30*cm, 30*cm)) # c.translate(10*cm, 10*cm) #移动坐标原点(坐标系左下为(0,0))) c.setFont('song',10)#设置字体为宋体,大小22号 c.setFillColorRGB(0.5,0.5,0.5)#灰色 c.drawString(3*cm, 28.5*cm, content) c.save()#关闭并保存pdf文件
-
需要添加水印的文件
PyPDF2.PdfFileReader(stream,strict = True,warndest = None,overwriteWarnings = True)
参考自:https://blog.csdn.net/xingxtao/article/details/79056341
初始化一个 PdfFileReader 对象,此操作可能需要一些时间,因为 PDF 流的交叉引用表被读入内存。
参数:
stream:File 对象或支持与 File 对象类似的标准读取和查找方法的对象,也可以是表示 PDF 文件路径的字符串。
strict(bool): 确定是否应该警告用户所用的问题,也导致一些可纠正的问题是致命的,默认是 True
warndest : 记录警告的目标(默认是 sys.stderr)PdfFileWriter
这个类支持 PDF 文件,给出其他类生成的页面。
def add_watermark2pdf(input_pdf,output_pdf,watermark_pdf): watermark = PdfFileReader(watermark_pdf)#读取带有水印的pdf文件 watermark_page = watermark.getPage(0)#读取水印pdf的首页 pdf = PdfFileReader(input_pdf,strict=False) pdf_writer = PdfFileWriter() for page in range(pdf.getNumPages()): print('正在处理第%s页'%page) pdf_page = pdf.getPage(page)#获取需要添加水印文件的pdf相应页码的内容 if page < int(pdf.getNumPages()/2): if page % 2 != 0: pdf_page.mergePage(watermark_page)#将水印和添加到pdf中 #将两个页面的内容流合并为一个。从两个页面维护资源引用(即字体)。此页面的mediabox / cropbox / etc不会更改。参数页面的内容流将添加到此页面内容流的末尾,这意味着它将在此页面之后或“页面顶部”绘制。 pdf_writer.addPage(pdf_page)#将合并之后的pdf添加到新的pdf中 else: pdf_writer.addPage(pdf_page) else: pdf_writer.addPage(pdf_page) pdfOutputFile = open(output_pdf,'wb') # pdf_writer.encrypt('scb2018')#设置pdf密码 pdf_writer.write(pdfOutputFile) pdfOutputFile.close()
调用代码
扫描二维码关注公众号,回复: 10811150 查看本文章# -*- coding: utf-8 -*- """ Created on Mon May 20 16:04:52 2019 @author: innduce 此程序用来给pdf文件添加水印 """ import os import shuiyin as sy#将上述两个代码保存为shuiyin.py文件 path = input('请输入需要添加水印文件的路径:') txt = input('请输入需要添加的水印文字:') sy.create_watermark(txt) filename = os.listdir(path) i = 0 for file in filename: if file[-4:] == '.pdf':#仅处理文件夹下后缀名为pdf的文档 if file != 'Watermark.pdf': i += 1 print('********处理第%s个文件中********'%i) sy.add_watermark2pdf(path + '\\'+ file,file + '新.pdf','Watermark.pdf')