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算法学习之桶排序算法实例(分块排序)
Dec 18 Python
在Python中使用成员运算符的示例
May 13 Python
最大K个数问题的Python版解法总结
Jun 16 Python
Python Queue模块详细介绍及实例
Dec 27 Python
python字典DICT类型合并详解
Aug 17 Python
python 以16进制打印输出的方法
Jul 09 Python
对PyTorch torch.stack的实例讲解
Jul 30 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
Python3实现飞机大战游戏
Apr 24 Python
django 数据库返回queryset实现封装为字典
May 19 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
matplotlib相关系统目录获取方式小结
Feb 03 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开发文件系统实例讲解
2006/10/09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
javascript常用的方法分享
2015/07/01 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
详解Python中的文件操作
2021/01/14 Python
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
如何写一个自定义标签
2012/12/28 面试题
北京振戎融通Java面试题
2015/09/03 面试题
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
护士实习自荐信
2015/03/06 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python