文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python添加pdf水印

2023-01-31 06:26

关注

0、用到两个扩展模块:ReportLab、PyPDF2。

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 ***


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯