python报告水印怎么弄_Python添加pdf水印

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值