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的Django框架中simple-todo工具的简单使用
May 30 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
Python连接phoenix的方法示例
Sep 29 Python
详解python3中tkinter知识点
Jun 21 Python
python实现搜索文本文件内容脚本
Jun 22 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 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
PHPMailer 中文使用说明小结
2010/01/22 PHP
PHP用mysql数据库存储session的代码
2010/03/05 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
javascript数组去重小结
2016/03/07 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
对Angular中单向数据流的深入理解
2018/03/31 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
自学python用什么系统好
2020/06/23 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
伊琍体标语
2014/06/25 职场文书
临时用工协议书范本
2014/10/29 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
python基础之函数的定义和调用
2021/10/24 Python