Python添加pdf水印
1、创建水印PDF。
1)、创建文字水印pdf文件
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#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' )
|
效果图:
2)、创建图片水印pdf。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#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' )
|
效果图:
2、添加水印。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#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)
|
效果图:
3、这种方式唯一的缺点就是效率极低,不适合大批量文件处理。用PDFlib处理效率会比这种方式高几十倍。可参考:用PDFlib给PDF添加水印(Python)
*** walker ***
本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1378142如需转载请自行联系原作者
RQSLT