随笔---利用Python对PDF进行添加水印

利用Python对PDF进行添加水印

# -*- coding: utf-8 -*-
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水印模板
    """
    # 创建一个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):
    # print(pdf_file_out)
    pdf_output = PdfFileWriter()
    input_stream = open(pdf_file_in, 'rb')
    pdf_input = PdfFileReader(input_stream, strict=False)
    # 获取PDF文件的页数
    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()
    # 读入水印pdf文件
    # print(pdf_file_mark)
    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'  # 添加PDF水印后的文件
    add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)
    print("水印添加结束,页面将在15秒内关闭!")
    time.sleep(15)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值