【小沐学写作】PPT、PDF文件添加水印(Python)

文章目录

  • 1、简介
  • 2、ppt添加水印
    • 2.1 PowerPoint幻灯片母版
    • 2.2 iSlide插件(收费)
      • 2.2.1 iSlide简介
      • 2.2.2 iSlide定价
      • 2.2.3 iSlide水印
    • 2.3 Python代码
      • 2.3.1 Aspose.Slides for Python(收费)
  • 3、pdf添加水印
    • 3.1 Python代码
      • 3.1.1 PyPDF2
  • 结语

1、简介

水印通常用于保护文档或指定其所有权。另一方面,它们用于显示文档的状态,例如手稿、草稿等。在本文中,我们将演示如何在 PowerPoint 演示文稿中插入水印。您将学习如何在 Python 中为 PowerPoint PPT 幻灯片添加文本或图像水印。

2、ppt添加水印

2.1 PowerPoint幻灯片母版

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 中,可以在幻灯片中放置文本背景以获取该水印效果。
步骤简述如下:

  1. 若要向所有幻灯片添加水印,选择“视图”>“幻灯片母版”。 滚动到左侧缩略图窗格的顶部,选择第一项“幻灯片母版”。
  2. 选择“插入”>“文本框”,然后在幻灯片母版上单击并拖动鼠标,画出文本框。
  3. 在文本框中键入水印文字(如“草稿”)。
  4. 若要更改水印文本的对齐方式,请在文本框顶部单击并按住旋转图柄,然后向左或向右移动鼠标。
  5. 选中文本框中的文本。 选择浅色字体填充颜色,然后对字体和样式进行任何其他更改。 (如果看不到“ 格式 ”选项卡,请确保已选择文本框。)
  6. 退出“幻灯片母版”。 除标题页外的所有幻灯片都会具有该文本。

详细步骤如下:

  • 1、打开ppt,在菜单栏找到“视图”——“幻灯片母版”
    在这里插入图片描述

  • 2、打开后选择需要加水印的版式。如果想给所有页面都加上水印,可以选择母版,就是最上面那个。
    在这里插入图片描述

  • 3、选择“插入”>“文本框”,然后在幻灯片母版上单击并拖动鼠标,画出文本框。在文本框中键入水印文字(如“内部资料”)。并按住旋转图柄向左或向右移动鼠标。
    在这里插入图片描述

  • 4、退出“幻灯片母版”。一般所有幻灯片都会具有该文本。
    在这里插入图片描述

这个方法有一个缺点,就是添加的水印容易被遮挡。

2.2 iSlide插件(收费)

https://www.islide.cc/

iSlide 是一款基于 PPT 的插件工具,包含 52 个设计辅助功能,9 大在线资源库,超 50 万专业 PPT 模板/素材 支持 macOS 和 Windows 系统(兼容 Office 和 WPS)

2.2.1 iSlide简介

iSlide 专门针对 PPT 编辑过程中的问题,通过功能、模板及课程学习的方式,帮助用户做出改变, 更高效的创建专业 PPT 演示文档。
在这里插入图片描述
即装即用,与 PPT/WPS 软件无缝对接,下载模板直接插入 PPT/WPS 演示文档;简单快捷,会使用 PPT 就能使用 iSlide,节约学习成本。
在这里插入图片描述

2.2.2 iSlide定价

在这里插入图片描述

2.2.3 iSlide水印

借助iSlide插件的【增删水印】功能。批量添加和删除页面水印,可将页面上选中的任意元素(文本框,图形,图片,图标,图表,表格)批量添加到所有页面或指定的页面,并保持位置不变。

  1. 插入水印到PPT中;

  2. 打开【增删水印】,右键点击选中水印,【增加水印】并点击【使用所选形状】;
    在这里插入图片描述

  3. 选择需要添加水印的页面,比如【所选幻灯片】;编辑好水印的内容,通常是文本框,形状,或插入的图片。选择要应用成水印的内容,点击增删水印面板中的“应用”按钮,可以快速将水印内容复制到所有幻灯片页面(或指定页面)。
    在这里插入图片描述

  4. 对于已增加的水印也可以通过“删除水印”的选项,快速清除。打开【增删水印】,左键点击选中水印,【删除水印】并点击【使用所选形状】;选择需要删除水印的页面,比如【所有幻灯片】

iSlide添加的水印会在最上层,不会被遮挡。

2.3 Python代码

2.3.1 Aspose.Slides for Python(收费)

要在 PPT 幻灯片中添加或删除水印,我们将使用 Aspose.Slides for Python via .NET。该库使您能够从 Python 应用程序中无缝地创建和操作 PowerPoint 演示文稿。

  • (1)使用以下 pip 命令从 PyPI 安装库。
pip install aspose.slides
  • (2)实现步骤:
    • 首先,使用 Presentation 类加载 PowerPoint PPT/PPTX。
    • 获取要添加水印的幻灯片的参考。
    • 计算水印的位置。
    • 使用 addautoshape() 方法为水印添加新的自动形状。
    • 使用 addtextframe() 方法将文本框架添加到形状。
    • 设置水印的字体大小、颜色、顺序和旋转角度。
    • 锁定水印以避免删除或修改。
    • 最后,使用 Presentation.save(string, SaveFormat) 方法保存更新的 PowerPoint 文件。
  • (3)测试代码如下:

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)

测试结果如下:
在这里插入图片描述

3、pdf添加水印

3.1 Python代码

3.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

若要想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???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/135086.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

头歌答案--数据持久化(非数据库)

目录 ​编辑 数据持久化(非数据库) 第1关:数据持久化(非数据库) 任务描述 多线程、多进程爬虫 第1关:多线程、多进程爬虫 任务描述 Scrapy爬虫基础 任务描述 MySQL数据库编程 第1关:…

【视觉SLAM十四讲学习笔记】第二讲——初识SLAM

专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲 一个机器人,如果想要探索某一块区域,它至少需要知道两件事: 我在什么地方——定位周围环境是什么样——建图 一方面需要明白自身的状态(即位置)&#…

八种架构设计模式优缺点

目录 1、软件架构 2、架构设计模式 2.1、单库单应用模式 2.2、内容分发模式 2.3、查询分离模式 2.4 微服务模式 2.5 多级缓存模式 1、软件架构 软件架构是指对软件系统整个结构和组成部分之间的关系进行抽象和定义的过程,旨在解决系统设计和实现过程中的复杂…

2023年【汽车驾驶员(高级)】找解析及汽车驾驶员(高级)复审考试

题库来源:安全生产模拟考试一点通公众号小程序 汽车驾驶员(高级)找解析是安全生产模拟考试一点通总题库中生成的一套汽车驾驶员(高级)复审考试,安全生产模拟考试一点通上汽车驾驶员(高级&#…

作业类型7333RG没有为成本中心7333+7000501在年度2023

创建 作业类型KP26 更改成本中心为生产部。 查看作业类型KL02, 可以看到这个有效期已超期,重新创建有效期KL01 但是创建成本要素时报错, 用KA06创建成本要素 返回KL01更正成本要素 这个有效期要注意不要重叠,否则无法创建新的有效期

【博士每天一篇文献-模型】A mechanistic model of connector hubs, modularity and cognition

阅读时间:2023-11-10 1 介绍 年份:2018 作者:Maxwell A. Bertolero, B. T. Thomas Yeo 期刊: nature human behaviour 引用量:180 2 创新点 作者提出了一个机制模型,解释了连接中枢的功能以及其对认知表…

Linux内核有什么之内存管理子系统有什么第七回 —— 小内存分配(5)

接前一篇文章:Linux内核有什么之内存管理子系统有什么第六回 —— 小内存分配(4) 本文内容参考: linux进程虚拟地址空间 《趣谈Linux操作系统 核心原理篇:第四部分 内存管理—— 刘超》 4.6 深入理解 Linux 虚拟内存…

手把手带你创建一个自己的GPTs

大家好,我是五竹。 最近GPT又进行了大升级,这一下又甩了国内AI几条街,具体更新了哪些内容之前的一篇文章中其实已经说过了:ChatGPT 王炸升级!更强版 GPT-4 上线! 其中最重要的一点就是支持自定义GPT&…

【博士每天一篇文献-算法】A pseudo-inverse decomposition-based self-organizing modular echo

阅读时间:2023-11-6 1 介绍 年份:2022 作者:王雷,北京信息科技大学自动化学院 期刊: Applied Soft Computing 引用量:12 提出了一种基于伪逆分解的自组织模块化回声状态(PDSM-ESN&#xff09…

代码随想录算法训练营第四十九天丨 动态规划part12

309.最佳买卖股票时机含冷冻期 思路 相对于动态规划:122.买卖股票的最佳时机II (opens new window),本题加上了一个冷冻期 在动态规划:122.买卖股票的最佳时机II (opens new window)中有两个状态,持有股票后的最多现金&#xf…

一文搞懂设计模式之单例模式

大家好,我是晴天,本周我们一起来学习单例模式。本文将介绍单例模式的基本属性,两种构造单例的方法(饿汉模式和懒汉模式)以及golang自带的sync.Once()方法。 什么是单例模式 GoF对单例模式的定义是:保证一个…

【Linux】WSL安装Kali及基本操作

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍WSL安装Kali及基本操作。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…

<C++> stack queue模拟实现

目录 前言 一、stack的使用 1. 接口说明 2. 例题 二、模拟实现stack 三、queue的使用 四、模拟实现queue 五、deque 总结 前言 LIFO stack 1. 栈是一种容器适配器,专门设计用于在后进先出上下文(后进先出)中运行,其中元素仅从容器…

Linux之基本指令操作

1、whoami whoami:查看当前账号是谁 2、who who:查看当前我的系统当中有哪些用户,当前有哪些人登录了我的机器 3、 pwd pwd:查看我当前所处的目录,就好比Windows下的路径 4、ls ls:查看当前目录下的文件信…

算法导论6:摊还分析,显式与隐式

P258 摊还分析概念 聚合分析,利用它,我们证明对于n,一个n个操作的序列最坏情况下的花费的总时间为T(n),因此,在最坏情况下,每个操作的平均代价(摊还代价)为T(n)/n 举了例子来形容这…

头歌答案Python——JSON基础

目录 ​编辑 Python——JSON基础 第1关:JSON篇:JSON基础知识 任务描述 第2关:JSON篇:使用json库 任务描述 Python——XPath基础 第1关:XPath 路径表达式 任务描述 第2关:XPath 轴定位 任务描述…

SOME/IP 协议介绍(四)RPC协议规范

RPC协议规范 本章描述了SOME/IP的RPC协议。 传输协议绑定 为了传输不同传输协议的SOME/IP消息,可以使用多种传输协议。SOME/IP目前支持UDP和TCP。它们的绑定在以下章节中进行了解释,而第[SIP_RPC_450页,第36页]节讨论了选择哪种传输协议。…

[C国演义] 第十八章

第十八章 最长斐波那契子序列的长度最长等差数列等差序列划分II - 子序列 最长斐波那契子序列的长度 力扣链接 子序列 ⇒ dp[i] — — 以 arr[i] 结尾的所有子序列中, 斐波那契子序列的最长长度子序列 ⇒ 状态转移方程 — — 根据最后一个位置的组成来划分 初始化 — — 根…

海外媒体发稿:彭博社发稿宣传中,5种精准营销方式

在如今的信息发生爆炸时期,营销方式多种多样,但是充分体现精准营销并针对不同用户群体的需求并非易事。下面我们就根据彭博社发稿营销推广为例子,给大家介绍怎样根据不同用户人群方案策划5种精准营销方式。 1.界定总体目标用户人群在制订精准…

Flink SQL 表值聚合函数(Table Aggregate Function)详解

使用场景: 表值聚合函数即 UDTAF,这个函数⽬前只能在 Table API 中使⽤,不能在 SQL API 中使⽤。 函数功能: 在 SQL 表达式中,如果想对数据先分组再进⾏聚合取值: select max(xxx) from source_table gr…