背景: 有限的资源下,异步并发生成PDF报错,内存不足。
目的: 在有限资源的情况下,并发生成PDF,并且耗费的资源较少(资源:CPU以及内存),并且并发生成PDF的速度不能太慢,生成的PDF样式要丰富,并且生成的PDF内容要完整。
根据我调研的生成pdf的方式(python)有reportlab、pdfkit、xhtml2pdf、django-easy-pdf.
一、reportlab库
这个库可自己绘制各种图表,只是依赖于这个reportlab库,其次字体问题,可以引入字体文件进行解决。
简单的样例:
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph,SimpleDocTemplate
from reportlab.lib import colors
# 字体
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('song', STSONG.ttf))
Style=getSampleStyleSheet()
bt = Style['Normal'] #字体的样式
# bt.fontName='song' #使用的字体
bt.fontSize=14 #字号
bt.wordWrap = 'CJK' #该属性支持自动换行,'CJK'是中文模式换行,用于英文中会截断单词造成阅读困难,可改为'Normal'
bt.firstLineIndent = 32 #该属性支持第一行开头空格
bt.leading = 20 #该属性是设置行距
ct=Style['Normal']
# ct.fontName='song'
ct.fontSize=12
ct.alignment=1