1、简介
水印通常用于保护文档或指定其所有权。另一方面,它们用于显示文档的状态,例如手稿、草稿等。在本文中,我们将演示如何在 PowerPoint 演示文稿中插入水印。您将学习如何在 Python 中为 PowerPoint PPT 幻灯片添加文本或图像水印。
2、pdf添加水印
2.1 Python代码
2.1.1 PyPDF2
PyPDF2 是一个免费的开源纯 python PDF 库,能够拆分、合并、裁剪和转换 PDF 文件的页面。它还可以添加 PDF 文件的自定义数据、查看选项和密码。PyPDF2 也可以从 PDF 中检索文本和元数据。
pip install PyPDF2
pip install PyPDF2[crypto]
-
(1)制作水印模板页
-
新建一个空白的word文件。ppt页面默认和word都是一样的,A4纸。将word的页面方向设置成横向。
-
添加自定义水印到word里。
-
修改水印的内容和格式等。
-
word水印模板制作完成。
-
另保存为watermark.pdf。
-
-
(2)代码实现添加水印到pdf 编写python代码如下:
import PyPDF2
def add_watermark(water_file, page_pdf):
"""
将水印pdf与pdf的一页进行合并
:param water_file:
:param page_pdf:
:return:
"""
pdfReader = PyPDF2.PdfReader(water_file)
page_pdf.merge_page(pdfReader.pages[0])
page_pdf.compress_content_streams() # 压缩内容
return page_pdf
def add_watermark_all(water_file, pdf_file, out_file):
"""
将水印pdf与pdf进行合并
:param water_file:
:param pdf_file:
:return:
"""
pdfWriter = PyPDF2.PdfWriter() # 用于写pdf
pdfReader = PyPDF2.PdfReader(pdf_file) # 读取pdf内容
# 遍历pdf的每一页,添加水印
for page in range(len(pdfReader.pages)):
page_pdf = add_watermark(water_file, pdfReader.pages[page])
pdfWriter.add_page(page_pdf)
with open(out_file, 'wb') as target_file:
pdfWriter.write(target_file)
if __name__ == '__main__':
pdf_file_mark = 'watermark.pdf'
pdf_file_in = 'test.pdf'
pdf_file_out = 'out.pdf'
add_watermark_all(pdf_file_mark, pdf_file_in, pdf_file_out)
加了水印的pdf文件如下:
另一种方式,不需要word水印模板。
- 安装额外的库reportlab:
pip install reportlab
<font color=blue>若要想ReportLab支持中文,可以去下载SimSun.ttf字体,并把它放在/ python3.8/site-packages/reportlab/fonts文件夹下。字体下载链接:https://github.com/StellarCN/scp_zh/tree/master/fonts
- python代码如下:
from PyPDF2 import PdfReader, PdfWriter
from reportlab.lib.units import cm
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
def create_watermark(content):
"""水印信息"""
# 默认大小为21cm*29.7cm
file_name = "mark.pdf"
c = canvas.Canvas(file_name, pagesize=(30*cm, 30*cm))
# 设置字体
try:
pdfmetrics.registerFont(TTFont('yahei', 'C:\\Windows\\Fonts\\msyhbd.ttf'))
c.setFont('yahei', 50)
# pdfmetrics.registerFont(TTFont("SimSun", "SimSun.ttf"))
# c.setFont("SimSun", 30)
except:
# 默认字体,只能够显示英文
c.setFont("Helvetica", 30)
# 移动坐标原点(坐标系左下为(0,0))
c.translate(10*cm, 5*cm)
# 指定描边的颜色
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)
# 画几个文本,注意坐标系旋转的影响
# c.drawString(0 * cm, 3 * cm, content)
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 = PdfWriter()
input_stream = open(pdf_file_in, 'rb')
pdf_input = PdfReader(input_stream, strict=False)
# 获取PDF文件的页数
pageNum = len(pdf_input.pages)
# 读入水印pdf文件
pdf_watermark = PdfReader(open(pdf_file_mark, 'rb'), strict=False)
# 给每一页打水印
for i in range(pageNum):
page = pdf_input.pages[i]
page.merge_page(pdf_watermark.pages[0])
page.compress_content_streams() # 压缩内容
pdf_output.add_page(page)
pdf_output.write(open(pdf_file_out, 'wb'))
if __name__ == '__main__':
pdf_file_in = 'test.pdf'
pdf_file_out = 'out2.pdf'
pdf_file_mark = create_watermark('爱看书的小沐')
add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)
- 添加的水印的pdf如下:
结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!