首页 > 其他分享 >【小沐学写作】PDF文件添加水印(PyPDF2)

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

时间:2024-01-03 21:00:43浏览次数:36  
标签:watermark 水印 PyPDF2 小沐学 file pdf PDF page

1、简介

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

2、pdf添加水印

2.1 Python代码

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

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

标签:watermark,水印,PyPDF2,小沐学,file,pdf,PDF,page
From: https://blog.51cto.com/fish/9089094

相关文章

  • 【小沐学写作】PPT、PDF文件添加水印(Python)
    1、简介水印通常用于保护文档或指定其所有权。另一方面,它们用于显示文档的状态,例如手稿、草稿等。在本文中,我们将演示如何在PowerPoint演示文稿中插入水印。您将学习如何在Python中为PowerPointPPT幻灯片添加文本或图像水印。2、ppt添加水印2.1PowerPoint幻灯片母版htt......
  • javafx中PDF文件的展示(转图片)
    try{//加载pdf文件PDDocumentdocument=PDDocument.load(file);//将pdf转换成图片PDFRendererrenderer=newPDFRenderer(document);//获取pdf的页数intnumberOfPages=document.getNumberOfPages();PDFRendererpdfRenderer=newPDF......
  • PDF文档转换工具箱流量主小程序开发
    PDF转换小助手,不仅是文件格式转换的利器,更是一位得力的助手。它精通PDF与各类文档间的自由转换,如Word、Excel、PowerPoint等。转换选项丰富多样,满足您对文件保护、页面设置、图像品质等细致要求。处理大量文件?没问题!它支持批量转换,轻松应对。除了转换,PDF转换小助手还具备强大的编辑......
  • 【小沐学CAD】虚拟仿真开发工具:GL Studio(行业)
    1、简介https://disti.com/gl-studio/https://ww2.mathworks.cn/products/connections/product_detail/gl-studio.htmlDiSTI是HMI软件、虚拟驾驶舱、仪表、信息娱乐、集群显示器和嵌入式UI解决方案的领先提供商。GLStudio是HMI&UI/UXDesignSoftware。2、应用行业......
  • 【专题】2023年中国消费者洞察白皮书报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33375原文出处:拓端数据部落公众号在疫情后的时代,中国的消费市场正在逐步复苏。政策和社会共同努力,全面提振消费者的信心。与此同时,供给侧正在采用新的内容营销模式,品牌、电商直播和信息平台注重科普专业知识,将品质和创新作为核心竞争力。居民消费......
  • Go 语言实现读取 pdf 文件内容
    本篇介绍一个如何在go语言环境下,如何解析/读取pdf文件内容从而进行一些业务逻辑。本篇将会介绍两种方案,可以按自己的需求进行对比和最终选择。1.背景最近在帮朋友做一个小的程序,帮他减少一些人工繁琐的工作,将一些机器可以做的事情交给机器,提高效率他效率。需求也相对简......
  • Vb.net 使用Webview2显示pdf文件
    使用webview2显示PDF文件需要wvliulanqi--Webview2控件的 AwaitWv2.EnsureCoreWebView2Async函数来启动浏览器否则会报错注意Div的宽度高度PrivateSubButton1_ClickAsync(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimstrPathAs......
  • wkhtmltopdf 使用记录
    1、下载安装后,在安装目录能找到两个exe,我这里只用到了pdf。下载地址:https://www.alipan.com/s/nK8bSrpFeH8,这是我自己的网盘。2、在exe目录执行命令:http://192.168.101.4:8080/print.html?adviceIds=1691643171508896425%2C1691643171508896426&patientId=1704026869843139220 ......
  • 在Adobe Acrobat上如何做PDF文档签名
    AdobeAcrobat如何做PDF文档签名?PDF文档签名是指对PDF文档进行基于证书的数字签名,类似于传统的手写签名,可标识签名文档的人员。与手写签名不同,数字签名难以伪造,因为其包含签名者唯一的加密信息。为PDF文档进行基于证书的数字签名,不仅能保护文档不被篡改,同时验证文档签名者真实身份,......
  • 界面控件DevExpress WinForms PDF Viewer,让应用轻松显示PDF文档(二)
    DevExpressWinForms的PDFViewer(查看器)控件使用户可以轻松地在Windows应用程序中直接显示PDF文档,而无需在最终用户的机器上安装外部PDF阅读器。在上文中(点击这里回顾>>)我们为大家介绍了嵌入式PDF查看器、如何浏览PDF文件等,本文将继续介绍PDFViewer的打印、表单功能等,持续关注我......