前言

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

一、前期准备

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

pip install PyPDF2

新建 watermark.pdf 文件 实际的水印,可以在此文件里修改水印文字的字体和位置。

实现步骤:

新建 watermark.word ,【设计】 → \to→ 【水印】

【自定义水印】 → \to→ 【文字水印】

输入【文字】,修改【字体】、【自号】、【颜色】和【板式】

效果

另存为 watermark.pdf

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

二、代码实现

// =============================================

# @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)

效果

三、其他方法

// =============================================

# @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通过PyPDF2实现PDF添加水印,实际上就是将两个PDF文件合并实现添加水印;

第一种方法的水印文件是通过 word 另存为 PDF,第二种方法是自动创建一个 PDF 文件;

第二种方法与第一种相比,水印的字体不能随意改变,不支持中文,省去了方法一中手动生成 PDF 水印的步骤;

第一种方法可以任意修改水印的位置和字体。

作者:AXYZdong

[拿走不谢!Python 3.9 官方中文文档,限时领!] (http://dwz.date/dE6v)

[限时!速领!14张高清Python速查表,效率提升必备!] (http://dwz.date/dE6w)

[GitHub标星3W+,80个Python案例,带你轻松玩转Python学习!] (http://dwz.date/dE64)

吾爱破解python处理wps文件_太赞了!用Python实现WPS会员功能相关推荐

  1. python如何调用文件_如何调用另一个python文件中的代码

    原博文 2017-07-10 15:56 − 无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了"hello world"),通常情况下,我们都需要在一个文件中调用另 ...

  2. python画画代码大全_太赞了,微软正式推出 Python 零基础教程!

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub!Python 可以说是当今世界最火的编程语言之一了.数据科学家和人工智能从业者们 ...

  3. python操作xls文件_【转】使用Python操作XLS文件

    我在网上找了下,发现至少有两种方法,第一种是直接操作excle的com库,当然python自带的lib里面已经给我们封装好了实现,直接使用就可以 了,win32com.client,这种方法甚至可以直 ...

  4. python 吾爱破解_吾爱破解邀请码获取器|吾爱优惠码生成器 Python版_最火软件站...

    吾爱破解论坛是一个非常棒的资源交流论坛,里面有很多大神分享非常实用的各种工具,而且都是免费的,但是注册吾爱破解论坛需要邀请码,这款工具能够帮助用户生成常见的优惠码和激活码,让你轻松加入吾爱论坛的阵营. ...

  5. 吾爱破解培训第一课作业密码_如何实现您的第一个无密码登录系统

    吾爱破解培训第一课作业密码 You may have heard that there are 360 Million Reasons to Destroy All Passwords and tha ...

  6. 吾爱破解 2023 春节解题领红包之 Web 题解

    (图作者 | 吾爱破解@Ps出来的小赵) 文章目录 题目简介 初级难度 flag1 flag2 flag3 flag4 flagA 中级难度 flag5 flag6 flag7 flag8 flagB ...

  7. 【JS 逆向百例】吾爱破解2022春节解题领红包之番外篇 Web 中级题解

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 逆向目标 本次逆向的目标来源于吾爱破解 2022 春节解题领红包之番外篇 Web 中级题,吾爱破解每年都会有派送红包活动(送吾爱 ...

  8. B站微博吾爱破解知乎热榜软件

    简介: B站微博吾爱破解知乎热榜软件能够帮助用户获取各个网站的最新热门信息,让用户可以在B站.知乎.微博.贴吧等知名网络论坛或平台上,直接截取各种热点信息,热榜信息或者相关热点内容,通过其中的列表用户 ...

  9. 推荐4款吾爱破解热门软件

    吾爱破解论坛是一个非常老牌的软件技术交流地, 虽然经过多次整改,人气不如从前但也依旧能找到很多好玩好用的东西, 小编不少分享的软件都是在这个论坛找到的 今天又收集了4款吾爱上比较火的小工具,都很实用! ...

最新文章

  1. git_修改git历史提交记录
  2. c++控制台下输出sin函数图形
  3. 牛客 - Gaming with Mia(dp)
  4. android 安装应用程序apk安装不了
  5. js初化加载页面时ajax会调用两次的原因_在前端开发中,有哪些因素会导致页面卡顿
  6. python 从列表中随机选择_使用条件Python从列表中随机选择
  7. [GCN+FocalLoss] 从数据角度分析实验 of Semi-supervised classification with graph convolutional networks
  8. k-means算法概述
  9. Python微信打飞机游戏编程学习笔记04
  10. STM32H7+LAN8720A之ETH与LWIP配置问题(End)
  11. pr cpu100%_培训 | 秀米编辑器、Ps、Pr软件使用讲座
  12. 5.3 上兴远程控制
  13. sqrt mysql_详解MySQL中的SQRT函数的使用方法_MySQL
  14. 荣耀3x android 5.0,华为荣耀3X畅玩版_EMUI2.3_Android4.4_完整
  15. 花落谁家---再见熊节
  16. 杰理强制升级工具4.0使用和原理解析
  17. Selenium中级 | 在Selenium中模拟键盘操作
  18. java 获取对象属性值为空或者非空的属性名称
  19. 基于动态径向基函数(DRBF)代理模型的优化策略
  20. 如何使用AspNetPager分页控件对动态查询的结果进行分页

热门文章

  1. 科目二需要注意的点(笔记包含图片讲解)
  2. 2008 php5.6 mysql_MySQL_win2008 R2 WEB环境配置之MYSQL 5.6.22安装版安装配置方法,版本选择 因为MySql的版本越来 - phpStudy...
  3. 【docker问题】Client.Timeout exceeded while awaiting header
  4. 《金融怪杰》读书笔记
  5. 设计模式学习资料推荐
  6. TP5集成支付宝h5支付接口
  7. SQL查询语句练习(一)
  8. GitHub图片不能正常显示的解决办法
  9. 微信小程序 上滑加载和下拉刷新
  10. 【echarts】柱状图正负值双色