python+reportlab实战:生成一个带表格图片的PDF

环境:
1.win 64
2.py34
3.reportlab3.1.44

目标:
生成一个简单的PDF报表:含图片,表格,文字

# -*- coding: utf-8 -*-  


from reportlab.pdfgen.canvas import Canvas  
from reportlab.pdfbase import pdfmetrics  
from reportlab.pdfbase.cidfonts import UnicodeCIDFont  
pdfmetrics.registerFont(UnicodeCIDFont('STSong-Light'))
from reportlab.pdfbase.ttfonts import TTFont 
pdfmetrics.registerFont(TTFont('msyh', 'msyh.ttf'))  
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer,Image,Table,TableStyle
import time

def rpt():
    story=[]
    stylesheet=getSampleStyleSheet()
    normalStyle = stylesheet['Normal']

    curr_date = time.strftime("%Y-%m-%d", time.localtime())

    #标题:段落的用法详见reportlab-userguide.pdf中chapter 6 Paragraph
    rpt_title = '<para autoLeading="off" fontSize=15 align=center><b><font face="msyh">XX项目日报%s</font></b><br/><br/><br/></para>' %(curr_date)
    story.append(Paragraph(rpt_title,normalStyle)) 

    text = '''<para autoLeading="off" fontSize=8><font face="msyh" >程度定义:</font><br/>
    <font face="msyh" color=red>1.Blocker:指系统无法执行。</font><br/><font face="msyh" fontsize=7>例如:系统无法启动或退出等</font><br/>
    <font face="msyh" color=orange>2.Critical:指系统崩溃或严重资源不足、应用模块无法启动或异常退出、无法测试、造成系统不稳定。</font><br/>
    <font face="msyh" fontsize=7>例如:各类崩溃、死机、应用无法启动或退出、按键无响应、整屏花屏、死循环、数据丢失、安装错误等
    </font><br/>
    <font face="msyh" color=darkblue>3.Major:指影响系统功能或操作,主要功能存在严重缺陷,但不会影响到系统稳定性、性能缺陷</font><br/><font face="msyh" fontsize=7>例如:功能未做、功能实现与需求不一致、功能错误、声音问题、流程不正确、兼容性问题、查询结果不正确、性能不达标等
    </font><br/>
    <font face="msyh" color=royalblue>4.Minor:指界面显示类问题</font><br/>
    <font face="msyh" fontsize=7>例如:界面错误、边界错误、提示信息错误、翻页错误、兼容性问题、界面样式不统一、别字、排列不整齐,字体不符规范、内容、格式、滚动条等等
    </font><br/>
    <font face="msyh" color=grey>5.Trivial:本状态保留暂时不用</font><br/>
    </para>'''
    story.append(Paragraph(text,normalStyle))

    text = '<para autoLeading="off" fontSize=9><br/><br/><br/><b><font face="msyh">五、BUGLIST:</font></b><br/></para>'
    story.append(Paragraph(text,normalStyle))

    #图片,用法详见reportlab-userguide.pdf中chapter 9.3 Image
    img = Image('D:/python/bugstatdev/img/bug_trend.png')
    img.drawHeight = 20
    img.drawWidth = 28

    #表格数据:用法详见reportlab-userguide.pdf中chapter 7 Table
    component_data= [['模块', '', '', '',img,''],
    ['标记','bug-1','Major','some wrong','open','unresolved'],
    ['','bug-1','Major','some wrong','closed','fixed'], 
    ]
    #创建表格对象,并设定各列宽度
    component_table = Table(component_data, colWidths=[20,50,50, 150, 90, 90])
    #添加表格样式
    component_table.setStyle(TableStyle([
    ('FONTNAME',(0,0),(-1,-1),'msyh'),#字体
    ('FONTSIZE',(0,0),(-1,-1),6),#字体大小
    ('SPAN',(0,0),(3,0)),#合并第一行前三列
    ('BACKGROUND',(0,0),(-1,0), colors.lightskyblue),#设置第一行背景颜色
    ('SPAN',(-1,0),(-2,0)), #合并第一行后两列
    ('ALIGN',(-1,0),(-2,0),'RIGHT'),#对齐
    ('VALIGN',(-1,0),(-2,0),'MIDDLE'),  #对齐
    ('LINEBEFORE',(0,0),(0,-1),0.1,colors.grey),#设置表格左边线颜色为灰色,线宽为0.1
    ('TEXTCOLOR',(0,1),(-2,-1),colors.royalblue),#设置表格内文字颜色
    ('GRID',(0,0),(-1,-1),0.5,colors.red),#设置表格框线为红色,线宽为0.5
    ]))
    story.append(component_table)

    doc = SimpleDocTemplate('D:/python/bugstatdev/rpt/bug.pdf')
    doc.build(story)

if __name__ == '__main__':
    rpt()

输出:
这里写图片描述

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
可以使用 ReportLab 库来生成 PDF 文件,下面是一个示例代码,可以生成一个包含图片和标题的 PDF 文件。首先需要安装 ReportLab 库,可以使用以下命令来安装: ``` pip install reportlab ``` 然后可以使用以下代码来生成 PDF 文件: ```python from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas from reportlab.lib.units import inch from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Image from reportlab.lib.styles import getSampleStyleSheet # 创建一个 PDF 文档对象 pdf = SimpleDocTemplate("example.pdf", pagesize=letter) # 定义样式 styles = getSampleStyleSheet() title_style = styles["Title"] paragraph_style = styles["Normal"] # 创建一个包含图片和标题的列表 elements = [] # 添加标题 title = Paragraph("这是一个标题", title_style) elements.append(title) # 添加图片 im = Image("example.jpg", 6*inch, 4*inch) elements.append(im) # 将列表添加到 PDF 文档中 pdf.build(elements) ``` 在上面的代码中,我们首先创建了一个 `SimpleDocTemplate` 对象,指定了 PDF 文件名和页面大小。然后定义了标题和段落的样式。接着创建一个包含标题和图片的列表,最后将列表添加到 PDF 文档中并保存。在添加图片时,我们使用了 `Image` 类,并指定了图片的文件名和大小。 需要注意的是,上面的示例代码中的图片文件名为 `example.jpg`,需要将其替换为你自己的图片文件名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值