pdf增加水印

方法一:word版本的水印

首先用WPS做一个水印文件

然后另存为水印.pdf文件

from PyPDF2 import PdfReader,PdfWriter
# 导⼊包含⼀个⽔印的pdf⽂件,只要有⼀⻚即可
watermark_pdf=PdfReader('水印.pdf')
# 获取第⼀⻚

watermake = watermark_pdf.pages[0]
# 把想要加⽔印的pdf⽂件加载进来
input_pdf=PdfReader('test.pdf')
# 创建⼀个writer对象,⼀会⼉⽤来写新⽣成的pdf
writer=PdfWriter()
page = len(input_pdf.pages)
# 逐⻚读取pdf内的内容
for i in range(page):
    page=input_pdf.pages[i]
# 将当前⻚与⽔印⻚合并
    page.merge_page(watermake)
# 将当前⻚加⼊到待写⼊区域
    writer.add_page(page)
# 将全部合并完的pdf保存到⽂件
with open('test含水印.pdf','wb') as f:
    writer.write(f)

方法二:安装额外的库reportlab

安装:pip install reportlab

放到要运行的文件夹下面

若要想ReportLab支持中文,可以去下载SimSun.ttf字体,并把它放在/ python3.8/site-packages/reportlab/fonts文件夹下。字体下载链接:https://github.com/StellarCN/scp_zh/tree/master/fonts

电脑自带的字体

C:\\Windows\\Fonts\\msyhbd.ttf'

from PyPDF2 import PdfReader, PdfWriter
from reportlab.lib.units import cm
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont


def create_watermark(content):
    """水印信息"""
    # 默认大小为21cm*29.7cm
    file_name = "mark.pdf"

    c = canvas.Canvas(file_name, pagesize=(30 * cm, 30 * cm))

    # 设置字体
    try:
        pdfmetrics.registerFont(TTFont('yahei', 'C:\\Windows\\Fonts\\AdobeHeitiStd-Regular.otf'))
        # pdfmetrics.registerFont(TTFont('yahei', 'C:\\Windows\\Fonts\\msyhbd.ttf')) #可能电脑里没有这种字体,程序运行后只显示方块
        c.setFont('yahei', 50)
        # pdfmetrics.registerFont(TTFont("SimSun", "SimSun.ttf"))
        # c.setFont("SimSun", 30)
    except:
        # 默认字体,只能够显示英文
        c.setFont("Helvetica", 30)

    # 移动坐标原点(坐标系左下为(0,0))
    c.translate(10 * cm, 5 * cm)
    # 指定描边的颜色
    c.setStrokeColorRGB(0, 1, 0)
    # 指定填充颜色
    c.setFillColorRGB(0, 1, 0)
    # 旋转45度,坐标系被旋转
    c.rotate(30)
    # 指定填充颜色
    c.setFillColorRGB(0, 0, 0, 0.1)
    # 设置透明度,1为不透明
    # c.setFillAlpha(0.1)
    # 画几个文本,注意坐标系旋转的影响
    # c.drawString(0 * cm, 3 * cm, content)
    for i in range(5):
        for j in range(10):
            a = 10 * (i - 1)
            b = 5 * (j - 2)
            c.drawString(a * cm, b * cm, content)
            c.setFillAlpha(0.1)
    # 关闭并保存pdf文件
    c.save()
    return file_name


def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):
    """把水印添加到pdf中"""
    pdf_output = PdfWriter()
    input_stream = open(pdf_file_in, 'rb')
    pdf_input = PdfReader(input_stream, strict=False)

    # 获取PDF文件的页数
    pageNum = len(pdf_input.pages)

    # 读入水印pdf文件
    pdf_watermark = PdfReader(open(pdf_file_mark, 'rb'), strict=False)
    # 给每一页打水印
    for i in range(pageNum):
        page = pdf_input.pages[i]
        page.merge_page(pdf_watermark.pages[0])
        page.compress_content_streams()  # 压缩内容
        pdf_output.add_page(page)
    pdf_output.write(open(pdf_file_out, 'wb'))


if __name__ == '__main__':
    pdf_file_in = 'test.pdf'
    pdf_file_out = 'out2.pdf'
    pdf_file_mark = create_watermark('confidential')  #输入英文,该库默认不支持中文
    add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)

效果:

其它

1 一页横的pdf分割成两页竖着的pdf

PyPDF2 | 利用 Python 实现 PDF 分割-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值