Python中通过PyPDF2实现PDF添加水印

Python中通过PyPDF2实现PDF添加水印场景PyPDF2是一个纯pythonPDF库,能够分割、合并、裁剪和转换PDF文件的页面。它还可以向PDF文件中添加自定义数据、查看选项和密码。它可以从PDF检索文本和元数据,还可以将整个文件合并在一起。PyPDF21.26.0文档:https://pythonhosted.org/PyPDF2/实现使用pip安装pypddf2新建文件夹waterPDF在…

大家好,又见面了,我是你们的朋友全栈君。

场景

PyPDF 2是一个纯python PDF库,能够分割、合并、裁剪和转换PDF文件的页面。它还可以向PDF文件中添加自定义数据、查看选项和密码。它可以从PDF检索文本和元数据,还可以将整个文件合并在一起。

PyPDF 2 1.26.0文档:

https://pythonhosted.org/PyPDF2/

实现

使用pip 安装pypddf2

Python中通过PyPDF2实现PDF添加水印Python中通过PyPDF2实现PDF添加水印

新建文件夹waterPDF

在此文件下新建1.pdf用于添加水印

Python中通过PyPDF2实现PDF添加水印Python中通过PyPDF2实现PDF添加水印

再新建watermark.pdf作为要添加的水印的内容

Python中通过PyPDF2实现PDF添加水印Python中通过PyPDF2实现PDF添加水印

再新建waterPDF.py

from PyPDF2 import PdfFileWriter, PdfFileReader

def create_watermark(input_pdf, output, watermark):
    watermark_obj = PdfFileReader(watermark)
    watermark_page = watermark_obj.getPage(0)

    pdf_reader = PdfFileReader(input_pdf)
    pdf_writer = PdfFileWriter()

    # 给所有页面添加水印
    for page in range(pdf_reader.getNumPages()):
        page = pdf_reader.getPage(page)
        page.mergePage(watermark_page)
        pdf_writer.addPage(page)

    with open(output, 'wb') as out:
        pdf_writer.write(out)

if __name__ == '__main__':
    create_watermark(
        input_pdf='1.pdf',
          output='watermarked.pdf',
        watermark='watermark.pdf')

运行效果

Python中通过PyPDF2实现PDF添加水印Python中通过PyPDF2实现PDF添加水印

此时会在文件夹下生成watermarked.pdf

Python中通过PyPDF2实现PDF添加水印Python中通过PyPDF2实现PDF添加水印

 

资源以及代码下载

https://download.csdn.net/download/badao_liumang_qizhi/11146333

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152370.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月23日 下午12:36
下一篇 2022年6月23日 下午12:36


相关推荐

  • Python 逻辑运算符及用法

    Python 逻辑运算符及用法Python 逻辑运算符及用法高中数学中我们就学过逻辑运算 例如 p 为真命题 q 为假命题 那么 p 且 q 为假 p 或 q 为真 非 q 为真 Python 也有类似的逻辑运算 请看下表 逻辑运算符一般和关系运算符结合使用 例如 14 gt 6and45 6 gt 9014 gt 6 结果为 True 成立 45 6 gt 90 结果为 False 不成立 所以整个表达式的结果为 False 也即不成立 再看一个比较实用的例子 age int input 请输入年龄

    2026年3月16日
    2
  • php测试工具_php单元测试

    php测试工具_php单元测试guzzle.png本文将介绍Guzzle,Guzzle在单元测试中的使用。来自Guzzle中文文档的解释:Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTPcookies、上传JSON数据等等。发送同步或异步的请求均使用相同的接口。使用PSR-7接口来请求、响应、分流,允许你使用其…

    2025年6月7日
    4
  • final、权限、内部类

    final、权限、内部类

    2021年5月19日
    120
  • phpstorm2021.5激活码[在线序列号]

    phpstorm2021.5激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    81
  • 线程池拒绝策略应用场景

    线程池拒绝策略应用场景简单回答 中止策略 无特殊场景 丢弃策略 无关紧要的任务 博客阅读量 弃老策略 发布消息 调用者运行策略 不允许失败场景 对性能要求不高 并发量较小 详细回答 1 AbortPolicy 中止策略 丢弃任务并抛出 RejectedExec 异常 这是线程池默认的拒绝策略 在任务不能再提交的时候 抛出异常 及时反馈程序运行状态 如果是比较关键的业务 推荐使用此拒绝策略 这样子在系统不能承载更大的并发量的时候 能够及时的通过异常发现 功能 当触发拒绝策

    2026年3月17日
    2
  • Java 封装的详解

    Java 封装的详解我们日常使用的电脑主机 把 cpu 内存 主板等等都封装到机箱里面去 假如没有机箱的话的出现什么问题 主机 主板全部都散落在一处 然后开机没有开机按钮 那么需要我们直接操作接跳线才能把电脑开启 这样子的话假如操作不慎的话 会让机器损坏危险 那么假如用机箱封装起来的话 那么就不需要这样子做了 体现了封装的 安全特性 你拿电脑去加内存 可以直接给电脑给维修的人 等他加好内存了之后 你拿到的还是那

    2025年7月1日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号