• 生成水印PDF


    首先,生成一个带有水印的 PDF 文件作为底图。

    最简单的方式就是生成一张空白图片,在图片上添加水印,然后将水印图片插入到 word 中,最后保存成 PDF 文件即可。

    而在图片上添加水印,甚至自定义水印内容、颜色、大小、透明度等操作,在  图片批量加水印!三步轻松搞定!  一文中已经详细介绍过,直接运行一遍代码即可

    根据 PDF 文件定义图片的尺寸,一般都是A4纸大小:29.7×21厘米

    生成的水印图片如下:

    图片

    添加水印

    涉及到 PDF 文档的读取,写入操作,所以本小节需要先安装 PyPDF2

    安装方式比较简单:

    pip install PyPDF2
    关于 PyPDF2 这个包详细的内容可以阅读官网:https://pythonhosted.org/PyPDF2/

    添加水印的逻辑就是将每一页的 PDF 文档合并到水印 PDF 上,形成一页新的内容

    对于每一页 PDF 都进行同样的合并操作,最终添加到 PdfFileWriter 中即可

    相应的核心代码如下:

    for page_index in range(pdf_reader.getNumPages()):
        current_page = pdf_reader.getPage(page_index)
        # 复制水印PDF
        new_page = copy(watermark_page)
        # 核心代码
        new_page.mergePage(current_page)
        pdf_writer.addPage(new_page)

    这里有一个小细节,完整的 PDF 第一页都是封面,封面一般来说都是不添加水印的

    所以,代码可以这样设置:

    for page_index in range(pdf_reader.getNumPages()):
        current_page = pdf_reader.getPage(page_index)
        # 封面页不添加水印
        if page_index == 0:
            new_page = current_page
        else:
            new_page = copy(watermark_page)
            new_page.mergePage(current_page)
        pdf_writer.addPage(new_page)
    3. 保存水印 PDF

    最后一步就比较简单,直接将对应的 PdfFileWriter 输出成 文件即可

    对应的代码就一行:

    # 保存水印后的文件
    with open(save_filepath, "wb") as out:
        pdf_writer.write(out)

    最后看一下效果吧:

    图片

    对于文字和表格内容,水印都可以在其下方成功显示,而文中的图片也可以正常显示,不会被水印遮挡

    搞定!

     

    代码内容比较少,直接贴在文末供大家参考学习,代码如下:

    import os
    from copy import copy
    from PyPDF2 import PdfFileReader, PdfFileWriter
    
    if __name__ == '__main__':
        dirpath = 'pdf_file'
        filename = '易方达中小盘混合型证券投资基金2020年中期报告'
        filepath = os.path.join(dirpath, filename+'.pdf')
        """添加水印"""
        watermark_filepath = os.path.join(dirpath, 'watermark.pdf')
        save_filepath = os.path.join(dirpath, filename+'【带水印】.pdf')
        """读取PDF水印文件"""
        # 可以先生成一个空白A4大小的png图片,通过 https://mp.weixin.qq.com/s/_oJA6lbsdMlRRsBf6DPxsg 教程的方式给图片加水印,将图片插入到word中并最终生成一个水印PDF文档
        watermark = PdfFileReader(watermark_filepath)
        watermark_page = watermark.getPage(0)
    
        pdf_reader = PdfFileReader(filepath)
        pdf_writer = PdfFileWriter()
    
        for page_index in range(pdf_reader.getNumPages()):
            current_page = pdf_reader.getPage(page_index)
            # 封面页不添加水印
            if page_index == 0:
                new_page = current_page
            else:
                new_page = copy(watermark_page)
                new_page.mergePage(current_page)
            pdf_writer.addPage(new_page)
        # 保存水印后的文件
        with open(save_filepath, "wb") as out:
            pdf_writer.write(out)
    

      

     
  • 相关阅读:
    如何增加学习感悟
    古代到清朝历史及文化
    至少的问题
    两次相遇同一地点
    行测都是选择题总结经验
    DES加密实现的思想及代码
    AES算法
    线性代数中行列与矩阵的联系和区别
    学习phalcon框架按照官网手册搭建第一个项目注册功能
    phpadmin增加使得项目能连接数据库
  • 原文地址:https://www.cnblogs.com/huaobin/p/15995930.html
Copyright © 2020-2023  润新知