生成水印PDF
首先,生成一个带有水印的 PDF 文件作为底图。
最简单的方式就是生成一张空白图片,在图片上添加水印,然后将水印图片插入到 word 中,最后保存成 PDF 文件即可。
而在图片上添加水印,甚至自定义水印内容、颜色、大小、透明度等操作,在 图片批量加水印!三步轻松搞定! 一文中已经详细介绍过,直接运行一遍代码即可
根据 PDF 文件定义图片的尺寸,一般都是A4纸大小:29.7×21厘米
生成的水印图片如下:
添加水印
涉及到 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)
最后看一下效果吧:
对于文字和表格内容,水印都可以在其下方成功显示,而文中的图片也可以正常显示,不会被水印遮挡
搞定!
代码内容比较少,直接贴在文末供大家参考学习,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)