利用Python对PDF进行添加水印
import reportlab
import time
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase.pdfmetrics import registerFont
def create_watermark(content):
"""创建PDF水印模板
"""
c = canvas.Canvas('watermark.pdf')
reportlab.pdfbase.pdfmetrics.registerFont(
reportlab.pdfbase.ttfonts.TTFont('simfang', 'C:/Windows/Fonts/simfang.ttf'))
c.setFont('simfang', 20)
c.saveState()
c.translate(305, 505)
c.rotate(45)
c.drawCentredString(0, 0, content)
c.restoreState()
c.save()
pdf_watermark = PdfFileReader('watermark.pdf')
return pdf_watermark
def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):
pdf_output = PdfFileWriter()
input_stream = open(pdf_file_in, 'rb')
pdf_input = PdfFileReader(input_stream, strict=False)
if pdf_input.getIsEncrypted():
print("文件已被加密")
PDF_Passwd = input("请输入PDF密码:")
try:
pdf_input.decrypt(PDF_Passwd)
except Exception:
print(f"尝试用密码{PDF_Passwd}解密失败.")
return False
pageNum = pdf_input.getNumPages()
mark_stream = open(pdf_file_mark, mode='rb')
pdf_watermark = PdfFileReader(mark_stream, strict=False)
for i in range(pageNum):
page = pdf_input.getPage(i)
page.mergePage(pdf_watermark.getPage(0))
page.compressContentStreams()
pdf_output.addPage(page)
pdf_output.write(open(pdf_file_out, 'wb'))
if __name__ == '__main__':
pdf_file_in = input("请输入需要添加水印的文件:")
Watermark_Str = input("请输入水印文字:")
pdf_file_mark = 'watermark.pdf'
create_watermark(str(Watermark_Str))
pdf_file_out = '水印版.pdf'
add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)
print("水印添加结束,页面将在15秒内关闭!")
time.sleep(15)