介绍


安装

PIP


中文字体

模块默认不支持中文, 如果使用中文需要注册
首先下载字体ttf文件
然后使用下面代码来注册
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('fun1', fun1.ttf))
字体文件可以在http://www.zhaozi.cn/s/all/ttf/下载。

例子

输出文字


1#-*- coding:utf-8 -*-
2from reportlab.lib.styles import getSampleStyleSheet
3from reportlab.platypus import Paragraph,SimpleDocTemplate
4from reportlab.lib import  colors
5
6from reportlab.pdfbase import pdfmetrics
7from reportlab.pdfbase.ttfonts import TTFont
8
9
10def main():
11    Style=getSampleStyleSheet()
12
13    bt = Style['Normal']     #字体的样式
14    bt.fontName='fun1'       #使用的字体
15    bt.fontSize=14           #字号
16    bt.wordWrap = 'CJK'      #该属性支持自动换行,'CJK'是中文模式换行,用于英文中会截断单词造成阅读困难,可改为'Normal'
17    bt.firstLineIndent = 32  #该属性支持第一行开头空格
18    bt.leading = 20          #该属性是设置行距
19
20    ct=Style['Normal']
21    ct.fontName='fun1'
22    ct.fontSize=12
23    ct.alignment=1           #居中
24    ct.textColor = colors.red
25
26    # 输出一个段落,格式在ct中定义了
27    t = Paragraph('hello', bt)
28    pdf = SimpleDocTemplate('hello.pdf')
29    pdf.multiBuild([t])
30
31if __name__ == '__main__': 
32    # 注册字体
33    pdfmetrics.registerFont(TTFont('fun1', 'fun1.ttf'))
34    main()
#-*- coding:utf-8 -*-

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





def main():

    Style=getSampleStyleSheet()



    bt = Style['Normal']     #字体的样式

    bt.fontName='fun1'       #使用的字体

    bt.fontSize=14           #字号

    bt.wordWrap = 'CJK'      #该属性支持自动换行,'CJK'是中文模式换行,用于英文中会截断单词造成阅读困难,可改为'Normal'

    bt.firstLineIndent = 32  #该属性支持第一行开头空格

    bt.leading = 20          #该属性是设置行距



    ct=Style['Normal']

    ct.fontName='fun1'

    ct.fontSize=12

    ct.alignment=1           #居中

    ct.textColor = colors.red



    # 输出一个段落,格式在ct中定义了

    t = Paragraph('hello', bt)

    pdf = SimpleDocTemplate('hello.pdf')

    pdf.multiBuild([t])



if __name__ == '__main__': 

    # 注册字体

    pdfmetrics.registerFont(TTFont('fun1', 'fun1.ttf'))

    main()

表格


1#-*- coding:utf-8 -*-
2from reportlab.lib.styles import getSampleStyleSheet
3from reportlab.platypus import Paragraph,SimpleDocTemplate
4from reportlab.lib import  colors
5
6from reportlab.pdfbase import pdfmetrics
7from reportlab.pdfbase.ttfonts import TTFont
8
9from reportlab.platypus import  Table
10from reportlab.platypus import Paragraph, SimpleDocTemplate, Table,TableStyle
11from reportlab.lib.units import inch
12from reportlab.lib import colors
13
14def table_model(data):
15    width = 7.2  # 总宽度
16    colWidths = (width / len(data[0])) * inch   # 每列的宽度
17    dis_list = []
18    for x in data:
19        # dis_list.append(map(lambda i: Paragraph('%s' % i, cn), x))
20        dis_list.append(x)
21
22    style = [
23        # ('FONTNAME', (0, 0), (-1, -1), 'song'),  # 字体
24        ('FONTSIZE', (0, 0), (-1, 0), 15),  # 字体大小
25        ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#d5dae6')),  # 设置第一行背景颜色
26        ('BACKGROUND', (0, 1), (-1, 1), colors.HexColor('#d5dae6')),  # 设置第二行背景颜色
27
28        # 合并 ('SPAN',(第一个方格的左上角坐标),(第二个方格的左上角坐标)),合并后的值为靠上一行的值,按照长方形合并
29        ('SPAN',(0,0),(0,1)),
30        ('SPAN',(1,0),(2,0)),
31        ('SPAN',(3,0),(4,0)),
32        ('SPAN',(5,0),(7,0)),
33
34        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 对齐
35        ('VALIGN', (-1, 0), (-2, 0), 'MIDDLE'),  # 对齐
36        ('LINEBEFORE', (0, 0), (0, -1), 0.1, colors.grey),  # 设置表格左边线颜色为灰色,线宽为0.1
37        ('TEXTCOLOR', (0, 0), (-1, 0), colors.royalblue),  # 设置表格内文字颜色
38        ('TEXTCOLOR', (0, -1), (-1, -1), colors.red),  # 设置表格内文字颜色
39        ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),  # 设置表格框线为grey色,线宽为0.5
40    ]
41
42    component_table = Table(dis_list, colWidths=colWidths,style=style)
43
44    return component_table
45    
46def main():
47    Style=getSampleStyleSheet()
48    n = Style['Normal']
49    data = [[0,1,2,3,4,5,6,7],
50            [00,11,22,33,44,55,66,77],
51            [000,111,222,333,444,555,666,777],
52            [0000,1111, 2222, 3333, 4444, 5555, 6666, 7777],]
53    z = table_model(data)
54    pdf = SimpleDocTemplate('tableDemo1.pdf')
55    pdf.multiBuild([Paragraph('Title',n),z])
56
57if __name__ == '__main__': 
58    # 注册字体
59    pdfmetrics.registerFont(TTFont('fun1', 'fun1.ttf'))
60    main()
#-*- coding:utf-8 -*-

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



from reportlab.platypus import  Table

from reportlab.platypus import Paragraph, SimpleDocTemplate, Table,TableStyle

from reportlab.lib.units import inch

from reportlab.lib import colors



def table_model(data):

    width = 7.2  # 总宽度

    colWidths = (width / len(data[0])) * inch   # 每列的宽度

    dis_list = []

    for x in data:

        # dis_list.append(map(lambda i: Paragraph('%s' % i, cn), x))

        dis_list.append(x)



    style = [

        # ('FONTNAME', (0, 0), (-1, -1), 'song'),  # 字体

        ('FONTSIZE', (0, 0), (-1, 0), 15),  # 字体大小

        ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#d5dae6')),  # 设置第一行背景颜色

        ('BACKGROUND', (0, 1), (-1, 1), colors.HexColor('#d5dae6')),  # 设置第二行背景颜色



        # 合并 ('SPAN',(第一个方格的左上角坐标),(第二个方格的左上角坐标)),合并后的值为靠上一行的值,按照长方形合并

        ('SPAN',(0,0),(0,1)),

        ('SPAN',(1,0),(2,0)),

        ('SPAN',(3,0),(4,0)),

        ('SPAN',(5,0),(7,0)),



        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 对齐

        ('VALIGN', (-1, 0), (-2, 0), 'MIDDLE'),  # 对齐

        ('LINEBEFORE', (0, 0), (0, -1), 0.1, colors.grey),  # 设置表格左边线颜色为灰色,线宽为0.1

        ('TEXTCOLOR', (0, 0), (-1, 0), colors.royalblue),  # 设置表格内文字颜色

        ('TEXTCOLOR', (0, -1), (-1, -1), colors.red),  # 设置表格内文字颜色

        ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),  # 设置表格框线为grey色,线宽为0.5

    ]



    component_table = Table(dis_list, colWidths=colWidths,style=style)



    return component_table

    

def main():

    Style=getSampleStyleSheet()

    n = Style['Normal']

    data = [[0,1,2,3,4,5,6,7],

            [00,11,22,33,44,55,66,77],

            [000,111,222,333,444,555,666,777],

            [0000,1111, 2222, 3333, 4444, 5555, 6666, 7777],]

    z = table_model(data)

    pdf = SimpleDocTemplate('tableDemo1.pdf')

    pdf.multiBuild([Paragraph('Title',n),z])



if __name__ == '__main__': 

    # 注册字体

    pdfmetrics.registerFont(TTFont('fun1', 'fun1.ttf'))

    main()


图片转pdf


1#-*- coding:utf-8 -*-
2from reportlab.lib.styles import getSampleStyleSheet
3from reportlab.platypus import Paragraph,SimpleDocTemplate
4from reportlab.lib import  colors
5
6from reportlab.pdfbase import pdfmetrics
7from reportlab.pdfbase.ttfonts import TTFont
8
9import os
10import sys
11
12from reportlab.lib.pagesizes import A4, landscape
13from reportlab.pdfgen import canvas
14
15
16def main():
17    filename = sys.argv[1]
18    f_jpg = filename+'.jpg'
19    print "  input file name", f_jpg
20    conpdf(filename)
21
22def conpdf(filename):
23    f_pdf = filename+'.pdf'
24    print "  output file name", f_pdf
25    f = filename+'.jpg'
26    (w, h) = landscape(A4)   # 得到A4纸的宽度和高度
27    c = canvas.Canvas(f_pdf, pagesize = landscape(A4))
28    c.drawImage(f, 0, 0, w, h)
29    c.save()
30    print "  Done!!"
31    
32
33if __name__ == '__main__': 
34    # 注册字体
35    pdfmetrics.registerFont(TTFont('fun1', 'fun1.ttf'))
36    main()
#-*- coding:utf-8 -*-

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



import os

import sys



from reportlab.lib.pagesizes import A4, landscape

from reportlab.pdfgen import canvas





def main():

    filename = sys.argv[1]

    f_jpg = filename+'.jpg'

    print "  input file name", f_jpg

    conpdf(filename)



def conpdf(filename):

    f_pdf = filename+'.pdf'

    print "  output file name", f_pdf

    f = filename+'.jpg'

    (w, h) = landscape(A4)   # 得到A4纸的宽度和高度

    c = canvas.Canvas(f_pdf, pagesize = landscape(A4))

    c.drawImage(f, 0, 0, w, h)

    c.save()

    print "  Done!!"

    



if __name__ == '__main__': 

    # 注册字体

    pdfmetrics.registerFont(TTFont('fun1', 'fun1.ttf'))

    main()



如果有任何问题请发邮件到 isteps@126.com


广告内容, 如果不忙, 跪求点击