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

举报
Carl_奕然 发表于 2023/05/09 15:39:35 2023/05/09
【摘要】 网友:reportlab模块的功能,确实可以。

1、 引言


小云:鱼哥,新年快乐!
小鱼:无事不登三宝殿,有啥事,你直说吧…
小云:别说的这么直接,这大过年的…
小鱼:别整没用的,就你那点小心思,我还能不知道。
小云:…

在这里插入图片描述

小云:鄙视就鄙视,只要能帮我解决问题,我然你鄙视三连!
小鱼:…还可以这样,那你说吧,啥事?
小云:就是…就是…
小鱼:能不能不这么磨磨唧唧,赶紧立马撒冷的!!
小云:就是,能不能帮我给pdf文件加个水印…
小鱼:就这…
小云:对,就这!

在这里插入图片描述
小鱼:别整这么无辜又可爱的小表情。
小屌丝:谁曾经还不是个小可爱 ^ ^
小鱼:我擦,破防了,我整还不行嘛!
小屌丝:奈斯 ~ ~

今天我们就来分享 pdf文档如何添加水印。
小鱼分享过图片添加水印的方法,很简单,直接watermark模块的add_watermark 就可以,

如果不知道的,可以看这篇《Python3,2行代码添加水印,发朋友圈,图片再也不怕被盗了!!!》

但是,pdf文件添加水印,就需要用到另外两个库,即:

  • reportlab
  • pikepdf


这两个库有什么特殊的"魔法",可以给pdf添加水印呢?
别走开,稍后回来!

2、指定水印内容输出到pdf文件


2.1 模块安装


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

pip install reportlab



其他方式安装:

2.2 思路

1、要设置水印字体填充:
所以,我们就需要对字体设置一些基本信息,例如:

  • content: 水印文本内容
  • filename: 导出的水印文件名
  • width: 画布宽度,单位:mm
  • height: 画布高度,单位:mm
  • font: 对应注册的字体代号
  • fontsize: 字号大小
  • angle: 旋转角度
  • text_stroke_color_rgb: 文字轮廓rgb色
  • text_fill_color_rgb: 文字填充rgb色
  • text_fill_alpha: 文字透明度


2、输出水印字体到pdf文档


canvas.Canvas.save()方法,把输出的字体保存到pdf文档

2.3 代码示例


直接上代码:

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


from typing import Union,Tuple
from reportlab.lib import units
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import  TTFont

pdfmetrics.registerFont(TTFont('msyh',r'./msyh.ttc'))

'''

用于生成包含content文字内容的水印pdf文件

content: 水印文本内容
filename: 导出的水印文件名
width: 画布宽度,单位:mm
height: 画布高度,单位:mm
font: 对应注册的字体代号
fontsize: 字号大小
angle: 旋转角度
text_stroke_color_rgb: 文字轮廓rgb色
text_fill_color_rgb: 文字填充rgb色
text_fill_alpha: 文字透明度


'''

def create_wartmark(content:str,
                    filename:str,
                    width: Union[int, float],
                    height: Union[int, float],
                    font: str,
                    fontsize: int,
                    angle: Union[int, float] = 45,
                    text_stroke_color_rgb: Tuple[int, int, int] = (0, 0, 0),
                    text_fill_color_rgb: Tuple[int, int, int] = (0, 0, 0),
                    text_fill_alpha: Union[int, float] = 1) -> None:


    #创建PDF文件,指定文件名及尺寸,以像素为单位
    c = canvas.Canvas(f'{filename}.pdf',pagesize=(width*units.mm,height*units.mm))

    #画布平移保证文字完整性
    c.translate(0.1*width*units.mm,0.1*height*units.mm)

    #设置旋转角度
    c.rotate(angle)

    #设置字体大小
    c.setFont(font,fontsize)

    #设置字体轮廓彩色
    c.setStrokeColorRGB(*text_stroke_color_rgb)

    #设置填充色
    c.setFillColorRGB(*text_fill_color_rgb)

    #设置字体透明度
    c.setFillAlpha(text_fill_alpha)

    #绘制字体内容
    c.drawString(0,0,content)

    #保存文件

    c.save()
    
create_wartmark(content='关注carl_奕然,学习更多有趣的python知识',
                 filename='小鱼watermarkDemo',
                 width=200,
                 height=200,
                 font='msyh',
                 fontsize=35,
                 text_fill_alpha=0.3) 


    


运行结果:

在这里插入图片描述

3、拓展


写到这里,reportlab模块的分享就差不多快结束了。

下一篇《Python3,2段代码,给pdf文件添加水印,原来watermark还可以这么玩(二)。》 会介绍 pikepdf模块。

你可以对比感受一下,这两个模块的功能的差异。

我是小鱼:

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

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



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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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