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实现统计单词出现的个数
May 28 Python
Python实现带百分比的进度条
Jun 28 Python
Python延时操作实现方法示例
Aug 14 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
python ssh 执行shell命令的示例
Sep 29 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 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里的中文变量说明
2011/07/23 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
董事长秘书工作职责
2014/06/10 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
Win11快速关闭所有广告推荐
2022/04/19 数码科技