用reportlab库生成证件的PDF格式文件

reportlab库是用来生成报表的,它可以直接生成PDF格式的报表文件,也可以用来生成证件的PDF格式文件,便于分发和打印。

reportlab生成证件PDF格式文件的基本步骤:

1.建立文件;

2.添加证件信息数据(姓名、性别、照片等。)

3.保存PDF文件;

reportlab库不直接支持中文字体,所以还需要先注册一个或多个中文字体库。

其基本流程源代码如下:

from reportlab.pdfgen import canvas
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from reportlab.lib.units import cm

## 定义注册中文字体字库的方法,此处默认为微软雅黑,
## 字体库文件的存放路径为当前目录,所以直接使用文件名
def set_font(canv,size,font_name='msyh',font_file='msyh.ttf'):
    pdfmetrics.registerFont(TTFont(font_name,font_file))
    canv.setFont(font_name,size)

## 定义PDF文件存放文件名
pdf_path = "d:\\test.pdf"
## 建立文件
canv = canvas.Canvas(pdf_path,pagesize=(20*cm,16*cm))
## 设置字体及字号
set_font(canv,16)
## 写入证件的相关文字信息其位置为x*cm,y*cm
canv.drawString(x*cm,y*cm,info)
## 写入证件的照片信息其位置为xp*cm,yp*cm
canv.drawImage('photo.jpg',xp*cm,yp*cm)
## 设置要添加的水印文字颜色及透明度
canv.setFillColorRGB(180,180,180,alpha=0.3)
## 写入水印文字,这里将水印文字放在证件照上
canv.drawString(xp*cm+cm,yp*cm+0.5*cm,WATERMARK_TXT)
## 完成证件PDF一页
canv.showPage()
## 保存PDF文件
canv.save()

这里值得注意的是:

1.reportlab库中坐标原点为页面的左下角,指定写入位置的坐标时应注意。

2.reportlab库中坐标的度量单位为像素点,使用的分辨率为72dpi,即像素每英寸。所以如果厘米作坐标单位的话,就要使用上面代码中方式,即导入cm,cm实际上是1cm所代表的像素点数,代码中20*cm即20cm所代表的像素数。

3.如果你需要生成大量的证件PDF文件(包括从数据库中查询证件个人信息并生成证件PDF文件),相信你对代码简单改造后完全可以实现。

最后,以下生成的基本样式:


猜你喜欢

转载自blog.csdn.net/cloveses/article/details/79224057