Python3,2段代码,给pdf文件添加水印,原来watermark还可以这么玩(二)。

举报
Carl_奕然 发表于 2023/05/09 15:40:43 2023/05/09
【摘要】 1、水印内容批量输出到pdf文件接上篇《Python3,2段代码,给pdf文件添加水印,原来watermark还可以这么玩(一)。》1.1 模块安装因为pikepdf库是python的第三方库,所以,第一步,安装:pip install pikepdf其他方式安装:《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》《Python3:我低调的只用一行代码,就导入Pyt...

1、水印内容批量输出到pdf文件

接上篇《Python3,2段代码,给pdf文件添加水印,原来watermark还可以这么玩(一)。》


1.1 模块安装


因为pikepdf库是python的第三方库,所以,
第一步,安装:

pip install pikepdf



其他方式安装:

小云:鱼哥,为什么我们还需要安装pikepdf这个模块?
小鱼:因为我们要把已生成的pdf水印覆盖到目标pdf文档。
小云:你的意思是,上面的代码,就仅仅是生成一个水印文档,其他的没有了?
小鱼:对的,你可以使用上面已生成的pdf水印文档,也可以随便找一个pdf文档作为水印文档,去覆盖到目标pdf文档。
小云:还可以这么玩?
小鱼:对的,待会给你演示。

1.2 思路


1、需要准备pdf文件:

  • 目标pdf文件
  • 已生成水印的pdf文件


2、我们把已生成的pdf文档来覆盖到目标pdf文档,同样,需要设置的参数:

  • target_pdf_path:目标pdf文件路径+文件名
  • watermark_pad_path:水印pdf文件路径+文件名
  • nrow:水印平铺的行数
  • ncol:水印平铺的列数
  • skip_pages:需要跳过不添加水印的页数


目标pdf文档:

在这里插入图片描述
1.3 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-02-10
# @Author : carl_DJ


from typing import List
from pikepdf import Pdf,Page,Rectangle


'''
向目标pdf文件批量添加水印
target_pdf_path:目标pdf文件路径+文件名
watermark_pad_path:水印pdf文件路径+文件名
nrow:水印平铺的行数
ncol:水印平铺的列数
skip_pages:需要跳过不添加水印的页数

'''

def add_watemark(target_pdf_path:str,
                 watermark_pdf_path:str,
                 nrow:int,
                 ncol:int,
                 skip_pages:List[int] = []) -> None:

    #选择需要添加水印的pdf文件
    target_pdf = Pdf.open(target_pdf_path)

    #读取水印pdf文件并提取水印
    watermark_pdf = Pdf.open(watermark_pdf_path)
    watermark_page = watermark_pdf.pages[0]

    #遍历目标pdf文件中的所有页,批量添加水印
    for idx,target_page in enumerate(target_pdf.pages):
        for x in range(ncol):
            for y in range(nrow):
                #向目标页指定范围添加水印
                target_page.add_overlay(watermark_page,
                                        Rectangle(target_page.trimbox[2] * x / ncol,
                                        target_page.trimbox[3] * y / nrow,
                                        target_page.trimbox[2] * (x + 1) / ncol,
                                        target_page.trimbox[3] * (y + 1) / nrow
                                        ))
    #保存PDF文件,同时对pdf文件进行重命名,从文件名第7位置写入后缀名
    target_pdf.save(target_pdf_path[:6] + '_已添加水印.pdf')


add_watemark(target_pdf_path='跟小鱼学水印.pdf',
             #把生成的水印示例,添加到目标水印文件中
             watermark_pdf_path='小鱼watermarkDemo.pdf',
             nrow = 3,
             ncol = 2 ,
             skip_pages= [0])



运行结果:

在这里插入图片描述

2、总结


写到这里,今天的分享就差不多快结束了。
今天主要是对reportlab 库和pikepdf库进行了拓展,让添加水印,不在花钱。

整体感受一下,reportlab 库和pikepdf库的差异。

我是小鱼:

  • CSDN 博客专家;
  • 阿里云 专家博主;
  • 51CTO 博客专家;
  • 51认证讲师;
  • 金牌面试官;
  • 职业规划师

关注我,带你学习更多更有趣的Python知识。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。