Python实现给PDF添加水印的方法


Posted in Python onJanuary 25, 2021

前言

利用 PyPDF2 处理 PDF 文件,相关文档:https://pythonhosted.org/PyPDF2/

本文针对 仅有 PDF 文件,而无相关 PDF 编辑器的情况下,给 PDF 添加水印。

一、前期准备

安装 PyPDF2 ,命令提示框输入:

pip install PyPDF2

新建 watermark.pdf 文件
实际的水印,可以在此文件里修改水印文字的字体和位置。
实现步骤: 新建 watermark.word ,【设计】 → \to → 【水印】【自定义水印】 → \to → 【文字水印】输入【文字】,修改【字体】、【自号】、【颜色】和【板式】

Python实现给PDF添加水印的方法

Python实现给PDF添加水印的方法

效果

Python实现给PDF添加水印的方法

另存为 watermark.pdf

watermark.pdf.py 文件放在同一目录下

Python实现给PDF添加水印的方法

二、代码实现

// =============================================
# @Time  : 2021-01-24
# @Author : AXYZdong
# @CSDN  : https://axyzdong.blog.csdn.net/
# @FileName: PDFset.py
# @Software: Python IDE
// =============================================
from PyPDF2 import PdfFileReader, PdfFileWriter

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

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

  # 读入水印pdf文件
  pdf_watermark = PdfFileReader(open(pdf_file_mark, 'rb'), 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 = '基于matlab的控制系统与仿真-1_AXYZdong的博客-CSDN博客.pdf'
  pdf_file_out = 'watermarked.pdf'
  pdf_file_mark = 'watermark.pdf'
  add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)

效果

Python实现给PDF添加水印的方法 

三、其他方法

// =============================================
# @Time  : 2021-01-24
# @Author : AXYZdong
# @CSDN  : https://axyzdong.blog.csdn.net/
# @FileName: PDFSet.py
# @Software: Python IDE
// =============================================
from PyPDF2 import PdfFileReader, PdfFileWriter
from reportlab.lib.units import cm
from reportlab.pdfgen import canvas


def create_watermark(content):
  """水印信息"""
  # 默认大小为21cm*29.7cm
  file_name = "mark.pdf"
  c = canvas.Canvas(file_name, pagesize=(30*cm, 30*cm))
  # 移动坐标原点(坐标系左下为(0,0))
  c.translate(10*cm, 5*cm)

  # 设置字体
  c.setFont("Helvetica", 30)
  # 指定描边的颜色
  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)
  # 画几个文本,注意坐标系旋转的影响
  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 = PdfFileWriter()
  input_stream = open(pdf_file_in, 'rb')
  pdf_input = PdfFileReader(input_stream, strict=False)

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

  # 读入水印pdf文件
  pdf_watermark = PdfFileReader(open(pdf_file_mark, 'rb'), 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 = '基于matlab的控制系统与仿真-1_AXYZdong的博客-CSDN博客.pdf'
  pdf_file_out = 'watermarked.pdf'
  pdf_file_mark = create_watermark('CSDN@AXYZdong')
  add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)

效果

Python实现给PDF添加水印的方法

四、总结

  •  Python通过PyPDF2实现PDF添加水印,实际上就是将两个PDF文件合并实现添加水印;
  • 第一种方法的水印文件是通过 word 另存为 PDF,第二种方法是自动创建一个 PDF 文件;
  • 第二种方法与第一种相比,水印的字体不能随意改变,不支持中文,省去了方法一中手动生成 PDF 水印的步骤;
  • 第一种方法可以任意修改水印的位置和字体。

参考文献

[1]:python pdf加水印
[2]:Python中通过PyPDF2实现PDF添加水印

到此这篇关于Python实现给PDF添加水印的方法的文章就介绍到这了,更多相关Python PDF添加水印内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
在Python中使用元类的教程
Apr 28 Python
为Python的web框架编写前端模版的教程
Apr 30 Python
详解Python文本操作相关模块
Jun 22 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
python 读取二进制 显示图片案例
Apr 24 Python
python中sympy库求常微分方程的用法
Apr 28 Python
在Django中自定义filter并在template中的使用详解
May 19 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 #Python
numba提升python运行速度的实例方法
Jan 25 #Python
python中K-means算法基础知识点
Jan 25 #Python
python中HTMLParser模块知识点总结
Jan 25 #Python
pycharm配置QtDesigner的超详细方法
Jan 25 #Python
Python扫描端口的实现
Jan 25 #Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 #Python
You might like
PHP 批量删除 sql语句
2009/06/05 PHP
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP数据类型的总结分析
2013/06/13 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
python如何实现反向迭代
2018/03/20 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
python实现拼接图片
2020/03/23 Python
PHP如何自定义函数
2016/09/16 面试题
生产部厂长职位说明书
2014/03/03 职场文书
婚假请假条怎么写
2014/04/10 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
万里长城导游词
2015/01/30 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
python实现高效的遗传算法
2021/04/07 Python
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
go web 预防跨站脚本的实现方式
2021/06/11 Golang
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
Java中的随机数Random
2022/03/17 Java/Android