批量给pdf增加水印

批量给pdf增加水

  • 创建水印pdf文件

    from reportlab.pdfgen import canvas
    from reportlab.lib.units import cm
    from reportlab.pdfbase import pdfmetrics 
    from reportlab.pdfbase.ttfonts import TTFont 
    from PyPDF2 import PdfFileWriter,PdfFileReader
    
    pdfmetrics.registerFont(TTFont('song', 'C:/Windows/Fonts/simsun.ttc'))#宋体
    
    def create_watermark(content):
        #默认大小为21cm*29.7cm
        c = canvas.Canvas('Watermark.pdf', pagesize = (30*cm, 30*cm))   
    #    c.translate(10*cm, 10*cm) #移动坐标原点(坐标系左下为(0,0)))                                                                                                                             
        c.setFont('song',10)#设置字体为宋体,大小22号
        c.setFillColorRGB(0.5,0.5,0.5)#灰色                                                                                                                         
        c.drawString(3*cm, 28.5*cm, content)
        c.save()#关闭并保存pdf文件
    
  • 需要添加水印的文件

    PyPDF2.PdfFileReader(stream,strict = True,warndest = None,overwriteWarnings = True)
    

    参考自:https://blog.csdn.net/xingxtao/article/details/79056341

    初始化一个 PdfFileReader 对象,此操作可能需要一些时间,因为 PDF 流的交叉引用表被读入内存。

    参数:

    stream:File 对象或支持与 File 对象类似的标准读取和查找方法的对象,也可以是表示 PDF 文件路径的字符串。
    strict(bool): 确定是否应该警告用户所用的问题,也导致一些可纠正的问题是致命的,默认是 True
    warndest : 记录警告的目标(默认是 sys.stderr)

    1558346792875PdfFileWriter

    这个类支持 PDF 文件,给出其他类生成的页面。

    1558347012200

    def add_watermark2pdf(input_pdf,output_pdf,watermark_pdf):
        watermark = PdfFileReader(watermark_pdf)#读取带有水印的pdf文件
        watermark_page = watermark.getPage(0)#读取水印pdf的首页
        pdf = PdfFileReader(input_pdf,strict=False)
        pdf_writer = PdfFileWriter()
        for page in range(pdf.getNumPages()):
            print('正在处理第%s页'%page)
            pdf_page = pdf.getPage(page)#获取需要添加水印文件的pdf相应页码的内容
            if page < int(pdf.getNumPages()/2):
                if page % 2 != 0:
                    pdf_page.mergePage(watermark_page)#将水印和添加到pdf中
      #将两个页面的内容流合并为一个。从两个页面维护资源引用(即字体)。此页面的mediabox / cropbox / etc不会更改。参数页面的内容流将添加到此页面内容流的末尾,这意味着它将在此页面之后或“页面顶部”绘制。
                    pdf_writer.addPage(pdf_page)#将合并之后的pdf添加到新的pdf中
                else:
                    pdf_writer.addPage(pdf_page)
            else:
                pdf_writer.addPage(pdf_page)
        pdfOutputFile = open(output_pdf,'wb')   
    #    pdf_writer.encrypt('scb2018')#设置pdf密码
        pdf_writer.write(pdfOutputFile)
        pdfOutputFile.close()
    

    调用代码

    扫描二维码关注公众号,回复: 10811150 查看本文章
    # -*- coding: utf-8 -*-
    """
    Created on Mon May 20 16:04:52 2019
    
    @author: innduce
    此程序用来给pdf文件添加水印
    """
    import os
    import shuiyin as sy#将上述两个代码保存为shuiyin.py文件
    path = input('请输入需要添加水印文件的路径:')
    txt = input('请输入需要添加的水印文字:')
    sy.create_watermark(txt)
    filename = os.listdir(path)
    i = 0 
    for file in filename:
        if file[-4:] == '.pdf':#仅处理文件夹下后缀名为pdf的文档
            if file != 'Watermark.pdf':
                i += 1
                print('********处理第%s个文件中********'%i)
                sy.add_watermark2pdf(path + '\\'+ file,file + '新.pdf','Watermark.pdf')
    
    
发布了22 篇原创文章 · 获赞 59 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_43245453/article/details/90452016