作者:xiaoyi

不知道你有没有这样的经历:自己辛辛苦苦、通宵熬夜做的 PDF 文档被别人随意拿来传播,更有甚者被用来卖钱。

我们都说传播无罪,但是做这种事的人,你的良心不会痛吗?

今天就来说说如何保护自己的权益,保护自己费尽心血的 PDF 文档。



其实有一个很简单的方法,就是 PDF 水印

图片批量加水印!三步轻松搞定! 的方法很类似,PDF 文档加水印也只需要简单的三步即可完成。

另外,本次的 PDF 文档选择文章 一键爬取基金历年季度报数据!附源码 中爬取到的基金报告,该报告一共 46 页。

ok,下面直接开始!



生成水印PDF

首先,生成一个带有水印的 PDF 文件作为底图。

最简单的方式就是生成一张空白图片,在图片上添加水印,然后将水印图片插入到 word 中,最后保存成 PDF 文件即可。

而在图片上添加水印,甚至自定义水印内容、颜色、大小、透明度等操作,在  图片批量加水印!三步轻松搞定!  一文中已经详细介绍过,直接运行一遍代码即可

根据 PDF 文件定义图片的尺寸,一般都是A4纸大小:29.7×21厘米

生成的水印图片如下:

pythonpdf加水印 python pdf水印_html



添加水印

涉及到 PDF 文档的读取,写入操作,所以本小节需要先安装 PyPDF2

安装方式比较简单:

pip install PyPDF2
关于 PyPDF2 这个包详细的内容可以阅读官网:https://pythonhosted.org/PyPDF2/

添加水印的逻辑就是将每一页的 PDF 文档合并到水印 PDF 上,形成一页新的内容

对于每一页 PDF 都进行同样的合并操作,最终添加到 PdfFileWriter 中即可

相应的核心代码如下:

for page_index in range(pdf_reader.getNumPages()):
    current_page = pdf_reader.getPage(page_index)
    # 复制水印PDF
    new_page = copy(watermark_page)
    # 核心代码
    new_page.mergePage(current_page)
    pdf_writer.addPage(new_page)

这里有一个小细节,完整的 PDF 第一页都是封面,封面一般来说都是不添加水印的

所以,代码可以这样设置:

for page_index in range(pdf_reader.getNumPages()):
    current_page = pdf_reader.getPage(page_index)
    # 封面页不添加水印
    if page_index == 0:
        new_page = current_page
    else:
        new_page = copy(watermark_page)
        new_page.mergePage(current_page)
    pdf_writer.addPage(new_page)



3. 保存水印 PDF

最后一步就比较简单,直接将对应的 PdfFileWriter 输出成 文件即可

对应的代码就一行:

# 保存水印后的文件
with open(save_filepath, "wb") as out:
    pdf_writer.write(out)

最后看一下效果吧:

pythonpdf加水印 python pdf水印_csv_02

对于文字和表格内容,水印都可以在其下方成功显示,而文中的图片也可以正常显示,不会被水印遮挡

搞定!

代码内容比较少,直接贴在文末供大家参考学习,代码如下:

import os
from copy import copy
from PyPDF2 import PdfFileReader, PdfFileWriter

if __name__ == '__main__':
    dirpath = 'pdf_file'
    filename = '易方达中小盘混合型证券投资基金2020年中期报告'
    filepath = os.path.join(dirpath, filename+'.pdf')
    """添加水印"""
    watermark_filepath = os.path.join(dirpath, 'watermark.pdf')
    save_filepath = os.path.join(dirpath, filename+'【带水印】.pdf')
    """读取PDF水印文件"""
    # 可以先生成一个空白A4大小的png图片,通过 https://mp.weixin.qq.com/s/_oJA6lbsdMlRRsBf6DPxsg 教程的方式给图片加水印,将图片插入到word中并最终生成一个水印PDF文档
    watermark = PdfFileReader(watermark_filepath)
    watermark_page = watermark.getPage(0)

    pdf_reader = PdfFileReader(filepath)
    pdf_writer = PdfFileWriter()

    for page_index in range(pdf_reader.getNumPages()):
        current_page = pdf_reader.getPage(page_index)
        # 封面页不添加水印
        if page_index == 0:
            new_page = current_page
        else:
            new_page = copy(watermark_page)
            new_page.mergePage(current_page)
        pdf_writer.addPage(new_page)
    # 保存水印后的文件
    with open(save_filepath, "wb") as out:
        pdf_writer.write(out)



以上就是本节的全部内容,关于PDF 的操作后续会持续分享。

包括:拆分、合并、加密、解密、转换等,基本都是在工作上会用到的,希望在保护大家权益的同时,也希望能够对大家有所帮助。