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程序语言快速上手教程
Jul 18 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
利用Python进行异常值分析实例代码
Dec 07 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
Python3.8中使用f-strings调试
May 22 Python
python 猴子补丁(monkey patch)
Jun 26 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
Python识别html主要文本框过程解析
Feb 18 Python
python 多线程死锁问题的解决方案
Aug 25 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网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
php curl 上传文件代码实例
2015/04/27 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
javascript 类定义的4种方法
2009/09/12 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
vue-router 按需加载 component: () => import() 报错的解决
2020/09/22 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python中使用HTMLParser解析html实例
2015/02/08 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
生物科学专业个人求职信范文
2013/12/07 职场文书
教师演讲稿范文
2014/01/08 职场文书
美国留学经济担保书
2014/05/20 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
九华山导游词
2015/02/03 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
sql server 累计求和实现代码
2022/02/28 SQL Server