水印通常用于保护文档或指定其所有权。另一方面,它们用于显示文档的状态,例如手稿、草稿等。在本文中,我们将演示如何在 PowerPoint 演示文稿中插入水印。您将学习如何在 Python 中为 PowerPoint PPT 幻灯片添加文本或图像水印。
https://support.microsoft.com/zh-cn/office/%E5%90%91%E5%B9%BB%E7%81%AF%E7%89%87%E6%B7%BB%E5%8A%A0%E6%B0%B4%E5%8D%B0-1246244d-f465-4e4f-b9f9-49acdae00ff1
在 PowerPoint 中,可以在幻灯片中放置文本背景以获取该水印效果。
步骤简述如下:
详细步骤如下:
这个方法有一个缺点,就是添加的水印容易被遮挡。
https://www.islide.cc/
iSlide 是一款基于 PPT 的插件工具,包含 52 个设计辅助功能,9 大在线资源库,超 50 万专业 PPT 模板/素材 支持 macOS 和 Windows 系统(兼容 Office 和 WPS)
iSlide 专门针对 PPT 编辑过程中的问题,通过功能、模板及课程学习的方式,帮助用户做出改变, 更高效的创建专业 PPT 演示文档。
即装即用,与 PPT/WPS 软件无缝对接,下载模板直接插入 PPT/WPS 演示文档;简单快捷,会使用 PPT 就能使用 iSlide,节约学习成本。
借助iSlide插件的【增删水印】功能。批量添加和删除页面水印,可将页面上选中的任意元素(文本框,图形,图片,图标,图表,表格)批量添加到所有页面或指定的页面,并保持位置不变。
插入水印到PPT中;
选择需要添加水印的页面,比如【所选幻灯片】;编辑好水印的内容,通常是文本框,形状,或插入的图片。选择要应用成水印的内容,点击增删水印面板中的“应用”按钮,可以快速将水印内容复制到所有幻灯片页面(或指定页面)。
对于已增加的水印也可以通过“删除水印”的选项,快速清除。打开【增删水印】,左键点击选中水印,【删除水印】并点击【使用所选形状】;选择需要删除水印的页面,比如【所有幻灯片】
iSlide添加的水印会在最上层,不会被遮挡。
要在 PPT 幻灯片中添加或删除水印,我们将使用 Aspose.Slides for Python via .NET。该库使您能够从 Python 应用程序中无缝地创建和操作 PowerPoint 演示文稿。
pip install aspose.slides
import aspose.slides as slides
import aspose.pydrawing as drawing
# 加载演示
with slides.Presentation("d:\\test.pptx") as presentation:
# 选择幻灯片
# slide = presentation.slides[0]
slide = presentation.masters[0]
# 设置水印位置
center = drawing.PointF(presentation.slide_size.size.width / 2, presentation.slide_size.size.height / 2)
width = 600
height = 500
x = center.x - width / 2
y = center.y - height / 2
# 加水印
watermarkShape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, x, y, height, width)
watermarkShape.name = "watermark"
watermarkShape.fill_format.fill_type = slides.FillType.NO_FILL
watermarkShape.line_format.fill_format.fill_type = slides.FillType.NO_FILL
print(dir(drawing.Color))
# 设置水印文字、字体和颜色
watermarkTextFrame = watermarkShape.add_text_frame("内部资料2023年")
watermarkPortion = watermarkTextFrame.paragraphs[0].portions[0]
watermarkPortion.portion_format.font_height = 91
watermarkPortion.portion_format.fill_format.fill_type = slides.FillType.SOLID
watermarkPortion.portion_format.fill_format.solid_fill_color.color = drawing.Color.light_gray
# 锁定水印避免修改
watermarkShape.shape_lock.select_locked = True
watermarkShape.shape_lock.size_locked = True
watermarkShape.shape_lock.text_locked = True
watermarkShape.shape_lock.position_locked = True
watermarkShape.shape_lock.grouping_locked = True
# 设置旋转
watermarkShape.rotation = -45
# 发回
slide.shapes.reorder(0, watermarkShape)
# 保存演示文稿
presentation.save("d:\\out.pptx", slides.export.SaveFormat.PPTX)
PyPDF2 是一个免费的开源纯 python PDF 库,能够拆分、合并、裁剪和转换 PDF 文件的页面。它还可以添加 PDF 文件的自定义数据、查看选项和密码。PyPDF2 也可以从 PDF 中检索文本和元数据。
pip install PyPDF2
pip install PyPDF2[crypto]
(1)制作水印模板页
(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)
另一种方式,不需要word水印模板。
pip install reportlab
若要想ReportLab支持中文,可以去下载SimSun.ttf字体,并把它放在/ python3.8/site-packages/reportlab/fonts文件夹下。字体下载链接:https://github.com/StellarCN/scp_zh/tree/master/fonts
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)
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!