【小沐学写作】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 = 600height = 500x = center.x - width / 2y = 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_FILLwatermarkShape.line_format.fill_format.fill_type = slides.FillType.NO_FILLprint(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.SOLIDwatermarkPortion.portion_format.fill_format.solid_fill_color.color = drawing.Color.light_gray# 锁定水印避免修改watermarkShape.shape_lock.select_locked = TruewatermarkShape.shape_lock.size_locked = TruewatermarkShape.shape_lock.text_locked = TruewatermarkShape.shape_lock.position_locked = TruewatermarkShape.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 PyPDF2def 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_pdfdef add_watermark_all(water_file, pdf_file, out_file):"""将水印pdf与pdf进行合并:param water_file::param pdf_file::return:"""pdfWriter = PyPDF2.PdfWriter()      # 用于写pdfpdfReader = 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 TTFontdef create_watermark(content):"""水印信息"""# 默认大小为21cm*29.7cmfile_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_namedef 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???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Longhorn跨AZ实现存储高可用

Longhorn跨AZ实现存储高可用 longhorn基础组件功能及其作用这里就不做介绍了 方案一 Longhorn跨AZ的高可用的就是一个PVC的replicas 均匀打散的不同的AZ区域之间,这样当某个AZ挂掉后,engine会立即使用另外一个数据副本,并重建这个副本&…

《红蓝攻防对抗实战》十一.内网穿透之利用SSH协议进行隧道穿透

利用DNS协议进行隧道穿透 一.前言二.前文推荐三. 利用SSH协议进行隧道穿透1.SSH隧道-本地端口转发2.SSH隧道-远程端口转发3.SSH隧道-动态端口转发 四.本篇总结 一.前言 SSH(Secure Shell)协议是一种加密的网络传输协议,它可以在不安全的网络…

在CMake中打印日志信息

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...) (无) :重要消息 STATUS :非重要消息 WARNING:CMake 警告, 会继续执行 AUTHOR_WARNING:CMake 警告 (dev), 会继续执行 SEN…

代码随想录 Day43 动态规划11 LeetCode T309 买卖股票的最佳时期含冷冻期 T714买卖股票的最佳时机含手续费

LeetCode T309 买卖股票的最佳时机含冷冻期 题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 题目思路: 这题其实就是将卖出的状态拆分成三个状态 1.前两天就卖出并一直保持卖出的状态 2.今天卖出的状态 3.今天是冷冻期的状态 当然还有一个…

一个java文件的JVM之旅

准备 我是小C同学编写得一个java文件,如何实现我的功能呢?需要去JVM(Java Virtual Machine)这个地方旅行。 变身 我高高兴兴的来到JVM,想要开始JVM之旅,它确说:“现在的我还不能进去,需要做一次转换&#x…

【左程云算法全讲7】二叉树基础

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考…

数据库数据恢复—无备份,未开启binlog的MySQL误删除怎么恢复数据

数据库数据恢复环境: 一台本地windows sever操作系统服务器,服务器上部署mysql数据库单实例,引擎类型为innodb,表内数据存储所使用表空间类型为独立表空间。无数据库备份,未开启binlog。 数据库故障&分析&#xf…

玩了个锤子游戏小程序搭建流程:探索深度与逻辑的结合

随着移动互联网的普及,小程序已经成为了越来越多用户的选择。在这个背景下,玩了个锤子游戏小程序应运而生,它为用户提供了一个全新的游戏体验。那么,如何搭建这样一个小程序呢?本文将为大家详细介绍玩了个锤子游戏小程…

一文图解爬虫(spider)

—引导语 互联网(Internet)进化到今天,已然成为爬虫(Spider)编制的天下。从个体升级为组合、从组合联结为网络。因为有爬虫,我们可以更迅速地触达新鲜“网事”。 那么爬虫究竟如何工作的呢?允许…

守护进程daemon(),C 库函数asctime、localtime,UDEV的配置文件,开机自启动,自动挂载U盘

一、守护进程 二、daemon()函数 三、C 库函数asctime、localtime 四、设置守护进程开机自启动 五、守护进程应用 编写判断守护进程是否在运行的程序 守护进程不让控制程序退出 把相关守护进程设置成开机自启动 六、dmesg 七、UDEV的配置文件(udev的rules编写&am…

clang插件对llvm源码插桩,分析函数调用日志(1)--google镜像

tick_plot__compile.ipynb 时长边界_时上链异数: 长短函数调用链列表 0. 用matplotlib找系统中字体文件大于1MB的 中文字体通常很大,这样过滤出的 通常有中文字体 结果中 看名字 ‘AR PL UMing CN’ 果然是中文字体 from matplotlib.font_manager import fontManag…

景联文科技助力金融机构强化身份验证,提供高质量人像采集服务

随着社会的数字化和智能化进程的加速,人像采集在金融机构身份认证领域中发挥重要作用,为人们的生活带来更多便利和安全保障。 金融机构在身份验证上的痛点主要包括以下方面: 身份盗用和欺诈风险:传统身份验证方式可能存在漏洞&am…

【已解决】ModuleNotFoundError: No module named ‘sklearn‘

问题描述 Traceback (most recent call last): File "/home/visionx/nickle/temp/SimCLR/linear_evaluation.py", line 210, in <module> from sklearn.manifold import TSNE ModuleNotFoundError: No module named sklearn 解决办法 pip install numpy…

体验前所未有的显示器管理体验:BetterDisplay Pro Mac

在现代的数字化时代&#xff0c;显示器是我们日常生活和工作中不可或缺的一部分。从笔记本电脑到台式机&#xff0c;从平板电脑到手机&#xff0c;几乎所有的电子设备都配备了显示器。然而&#xff0c;对于专业人士和从事设计行业的人来说&#xff0c;仅仅依靠系统自带的显示器…

基于SpringBoot+Vue+mysql卓越导师双选系统设计与实现

博主介绍&#xff1a;✌Csdn特邀作者、博客专家、博客云专家、B站程序阿龙带小白做毕设系列&#xff0c;项目讲解、B站粉丝排行榜前列、专注于Java技术领域和毕业项目实战✌ 系统说明简介&#xff1a; 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较…

自适应AI chatGPT智能聊天创作官网html源码/最新AI创作系统/ChatGPT商业版网站源码

源码简介&#xff1a; 自适应AI chatGPT智能聊天创作官网html源码&#xff0c;这是最新AI创作系统&#xff0c;作为ChatGPT商业版网站源码&#xff0c;它是支持创作、编写、翻译、写代码等。是一个智能聊天系统项目源码。 注意&#xff1a;这个只是网站html源码&#xff0c;要…

SpringCloud——消息总线——Bus

1.什么是总线&#xff1f; 我们在微服务的项目中&#xff0c;通常会构建一个共同的消息主题&#xff0c;然后需要的服务可以连接上来&#xff0c;该主题中产生的消息会被监听和消费&#xff0c;这种我们称为消息总线。 SpringCloud Bus 配合SpringCloud Config使用可以实现配置…

xss 盲打

XSS 盲打 为什么教盲打&#xff0c;是因为处于被动&#xff0c;要等待受害者触发 1.利用存储型XSS 先将代码写入留言。同时kali开启端口监听&#xff08;下面IP是kali的&#xff09; <script>document.write(\<img src\"http://10.9.47.79/\document.cookie\\&qu…

Jenkins 部署.net core 项目 - NU1301错误

/root/.jenkins/workspace/householdess/services/host/fdbatt.monitor.HttpApi.Host/fdbatt.monitor.HttpApi.Host.csproj : error NU1301: 本地源“/root/.jenkins/workspace/householdess/​http:/x.x.x.x:9081/repository/nuget.org-proxy/index.json”不存在。 [/root/.je…