Python添加pdf水印

发布时间:2019-09-14 09:46:48编辑:auto阅读(2338)

    0、用到两个扩展模块:ReportLabPyPDF2

    1、创建水印PDF。

    1)、创建文字水印pdf文件

    代码:

    #encoding=utf-8
    #author: walker
    #date: 2014-03-17
    #function: 创建文字水印pdf
    from reportlab.pdfgen import canvas
    from reportlab.lib.units import cm
    def create_watermark(content):
        #默认大小为21cm*29.7cm
        c = canvas.Canvas("mark.pdf", pagesize = (30*cm, 30*cm))
        #移动坐标原点(坐标系左下为(0,0))
        c.translate(10*cm, 5*cm)
                                                                                                                                   
        #设置字体
        c.setFont("Helvetica", 80)
        #指定描边的颜色
        c.setStrokeColorRGB(0, 1, 0)
        #指定填充颜色
        c.setFillColorRGB(0, 1, 0)
        #画一个矩形
        c.rect(cm, cm, 7*cm, 17*cm, fill=1)
                                                                                                                                   
        #旋转45度,坐标系被旋转
        c.rotate(45)
        #指定填充颜色
        c.setFillColorRGB(0.6, 0, 0)
        #设置透明度,1为不透明
        c.setFillAlpha(0.3)
        #画几个文本,注意坐标系旋转的影响
        c.drawString(3*cm, 0*cm, content)
        c.setFillAlpha(0.6)
        c.drawString(6*cm, 3*cm, content)
        c.setFillAlpha(1)
        c.drawString(9*cm, 6*cm, content)
                                                                                                                                   
        #关闭并保存pdf文件
        c.save()
    create_watermark('walker')

    效果图:

    wKioL1MmtY7gLmlHAAAnyxSUB4o111.png

    2)、创建图片水印pdf。

    代码:

    #encoding=utf-8
    #author: walker
    #date: 2014-03-17
    #function: 创建图片水印pdf
    from reportlab.pdfgen import canvas
    from reportlab.lib.units import cm
    def create_watermark(f_jpg):
        f_pdf = 'mark.pdf'
        w_pdf = 20*cm
        h_pdf = 20*cm
                                                                                              
        c = canvas.Canvas(f_pdf, pagesize = (w_pdf, h_pdf))
        c.setFillAlpha(0.3) #设置透明度
        print c.drawImage(f_jpg, 7*cm, 7*cm, 6*cm, 6*cm)    #这里的单位是物理尺寸
        c.save()
    create_watermark('eg.png')

    效果图:

    wKioL1MnpDSDEFwrAAAO8juU39g979.png


    2、添加水印。

    代码:

    #encoding=utf-8
    #author: walker
    #date: 2014-03-18
    #function:给pdf添加水印
    from PyPDF2 import PdfFileWriter, PdfFileReader
    from reportlab.pdfgen import canvas
    #所有路径为绝对路径
    def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):
        pdf_output = PdfFileWriter()
        input_stream = file(pdf_file_in, 'rb')
        pdf_input = PdfFileReader(input_stream)
                                                                                   
        # PDF文件被加密了
        if pdf_input.getIsEncrypted():
            print '该PDF文件被加密了.'
            # 尝试用空密码解密
            try:
                pdf_input.decrypt('')
            except Exception, e:
                print '尝试用空密码解密失败.'
                return False
            else:
                print '用空密码解密成功.'
        # 获取PDF文件的页数
        pageNum = pdf_input.getNumPages()
        #读入水印pdf文件
        pdf_watermark = PdfFileReader(file(pdf_file_mark, 'rb'))
        # 给每一页打水印
        for i in range(pageNum):
            page = pdf_input.getPage(i)
            page.mergePage(pdf_watermark.getPage(0))
            page.compressContentStreams()   #压缩内容
            pdf_output.addPage(page)

    效果图:

    wKiom1MnrYqRqmWpAACf9L-3nXY146.png

    wKioL1MnrWSBsrHhAAChEqREs6g570.png


    3、这种方式唯一的缺点就是效率极低,不适合大批量文件处理。用PDFlib处理效率会比这种方式高几十倍。可参考:用PDFlib给PDF添加水印(Python)



    *** walker ***


关键字

上一篇: python PIL模块

下一篇: GNS3使用小错误整理