reportlab 生成 pdf 文件

环境
  • win10、python3.7、reportlab3.5.56

代码如下:

  • 代码简单,自从参考
# -*- coding:utf-8 -*-
"""
File Name: gen_pdf
Author: 82405
Data: 2020/12/22 16:12
-----------------------
Info:

-----------------------
Change Activity:
    2020/12/22: create
"""
import time
from concurrent import futures
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, \
    PageBreak, Table, TableStyle
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet, LineStyle
from reportlab.lib.units import mm
from reportlab.lib import colors
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

pdfmetrics.registerFont(TTFont('msyh', 'msyh.ttc'))
pdfmetrics.registerFont(TTFont('msyhbd', 'msyhbd.ttc'))

rule = [
    '1、本产品由xxxxxxxxx有限公司和天安财产保险股份有限公司联合承保,仅限在中国大陆有固定居住地(常住)的人士投保。',
    '2、本订单保障地区范围为中国大陆境内(不包含香港、澳门、台湾地区)。',
    '3、本订单投保人为经中国人民银行批准的支付机构;本保单保障被保险人名下的在投保人支付机构开具的账户。',
    '4、本订单保险期限为被保险人在平台发起交易指令时(以该行为所处时间点为准)起168小时内(含)。',
    '5、在保险期限内,被保险人通过保险单载明的非金融机构完成支付,如支付资金实际到达收款人账户的时间超过保险起期后12小时(含12小时)未到账,保险人按照本保单约定的保险金额对被保险人进行赔偿。',
    '6、本保单仅承担因支付平台本身的原因造成的支付到账延迟责任,因下列原因导致的迟延到账损失,保险人不负责赔偿:( 1) 被保险人操作失误;( 2)被保险人自身账户问题;( 3)结算银行否认交易;( 4)支付被依法认定为无效或被撤销的;( 5) 被保险人或收款人交易账户异常(详见条款释义);(6)银行系统原因、中国人民银行支付清算系统原因等其他非支付机构的系统原因。'
]


def gen_pdf():
    """

    :return:
    """
    print('gen_def ... start...')
    story = []
    title_style = ParagraphStyle(name="TitleStyle", fontName="msyhbd", fontSize=10, alignment=TA_CENTER, )
    content_style = ParagraphStyle(name="ContentStyle",
                                   fontName="msyh",
                                   fontSize=7,
                                   alignment=TA_LEFT, )
    content_style_1 = ParagraphStyle(name="ContentStyle",
                                     fontName="msyh",
                                     fontSize=9,
                                     leftIndent=20,
                                     alignment=TA_LEFT, )
    content_style_line = ParagraphStyle(name="ContentStyle",
                                        fontName="msyh",
                                        fontSize=9,
                                        underlineOffset=-3,
                                        alignment=TA_LEFT, )
    content_style_line_1 = ParagraphStyle(name="ContentStyle",
                                          fontName="msyh",
                                          fontSize=7,
                                          underlineOffset=-3,
                                          alignment=TA_LEFT, )
    task_data = [['保险责任', '明细', ''],
                 ['非金融机构支付服务安全保险', '累计赔偿限额', '200元'],
                 ['非金融机构支付服务延迟保险', '累计赔偿限额', '200元']]
    basic_style = TableStyle([('FONTNAME', (0, 0), (-1, -1), 'msyh'),
                              ('FONTSIZE', (0, 0), (-1, -1), 7),
                              ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
                              ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                              ('BOTTOMPADDING', (0, 0), (-1, -1), 4),
                              # 'SPAN' (列,行)坐标
                              ('SPAN', (1, 0), (2, 0)),
                              ('GRID', (0, 0), (-1, -1), 0.5, colors.black),
                              ])
    story.append(Spacer(1, 10 * mm))
    story.append(Paragraph("订单信息", title_style))
    story.append(Spacer(1, 5 * mm))
    story.append(Paragraph("订单类型: 非金融机构支付服务保险", content_style))
    story.append(Spacer(1, 2 * mm))
    story.append(Paragraph("订单编号: <u> {} </u>".format(' 202020020000000000 '), content_style))
    story.append(Spacer(1, 2 * mm))
    story.append(Paragraph("鉴于投保人已向保险人递交投保申请及附件, 并同意按约定交纳保险费, 本公司特提供以下的产品订单信息, 投", content_style_1))
    story.append(Spacer(1, 2 * mm))
    story.append(
        Paragraph("<u>保人可于当晚前往天安财险官网(www.95505.cn) 查询详细的凭证信息。 {} 币种:(人民币/元)</u>".format('&nbsp' * 30),
                  content_style_line))
    story.append(Spacer(1, 2 * mm, isGlue=True))
    story.append(
        Paragraph("投保人: 投保公司 &nbsp&nbsp&nbsp 证件类型:组织机构代码 &nbsp&nbsp&nbsp 证件号码: 130181198510027123", content_style))
    story.append(Paragraph("投保人住所: 上海市虹口区四川北路", content_style))
    story.append(
        Paragraph("被保险人: 张三李四王五 &nbsp&nbsp&nbsp 证件类型: 居民身份证  &nbsp&nbsp&nbsp证件号码: 342624199004132376", content_style))
    story.append(Paragraph("受益人&nbsp&nbsp&nbsp: 张三李四王五 &nbsp&nbsp&nbsp 证件类型: 居民身份证  &nbsp&nbsp&nbsp "
                           "证件号码: 342624199004132376  &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 受益比例: 100%", content_style))
    story.append(Paragraph("保险期间:自北京时间起  2020-12-22 18:00:00 至  2020-12-24 18:0:00 时止", content_style))
    story.append(Paragraph("支付时间:  2020-12-22 18:00:00 约定到账周期: 3 天", content_style))
    story.append(Paragraph("约定到账时间:  2020-12-22 支付方式: 银行汇款 ", content_style))
    story.append(Paragraph("支付对象:  张三李四王五", content_style))
    task_table = Table(task_data, colWidths=[75 * mm, 50 * mm, 40 * mm], rowHeights=8 * mm, style=basic_style)
    story.append(task_table)
    story.append(Paragraph("份数: 1份 {} 被保险人数: 1人".format('&nbsp' * 100), content_style))
    story.append(Paragraph("保险金额总计: (大写)&nbsp&nbsp 贰佰 元 {}小写 {} 200 元".
                           format('&nbsp' * 136, '&nbsp' * 10), content_style))
    story.append(Paragraph("<u>保险费总计&nbsp&nbsp&nbsp: (大写)&nbsp&nbsp 贰佰 元 {} 小写 {} 200 元</u>".
                           format('&nbsp' * 136, '&nbsp' * 10), content_style_line_1))
    story.append(Paragraph("伤残表适用:", content_style))
    story.append(Paragraph("条款适用: 天安财产保险股份有限公司《非金融机构支付服务保险条款》", content_style_line_1))
    story.append(Paragraph(
        "<u>_____________________________________________________________________________________________________________________________________________________</u>",
        content_style_line_1))
    story.append(Paragraph("特别约定:", content_style))
    for item in rule:
        story.append(Paragraph(item, content_style))
    story.append(Paragraph(
        "<u>_____________________________________________________________________________________________________________________________________________________</u>",
        content_style_line_1))
    story.append(Paragraph('保险合同争议解决方式: 诉讼 付款方式:趸缴', content_style))
    doc = SimpleDocTemplate('hello_1.pdf',
                            leftMargin=20 * mm, rightMargin=20 * mm, topMargin=2 * mm, bottomMargin=20 * mm)
    doc.build(story)
    print('...gen_pdf...exit')


gen_pdf()

  • 生成文件如下

image.png

如果对你有帮助,可以点赞支持一下。

### 回答1: reportlab是一个PythonPDF生成库,可以用来生成PDF文件,下面是一个简单的示例代码: ```python from reportlab.pdfgen import canvas # 创建一个PDF文档对象 pdf = canvas.Canvas("example.pdf") # 设置字体 pdf.setFont("Helvetica", 12) # 写入文本 pdf.drawString(100, 750, "Welcome to Reportlab!") # 画一个矩形 pdf.rect(50, 50, 200, 100) # 保存PDF文件 pdf.save() ``` 这个示例代码创建了一个PDF文档对象,设置了字体,写入了文本并画了一个矩形,最后保存PDF文件。 你可以根据自己的需求,修改文本内容、字体、位置、颜色等等。更多的使用方法可以查看reportlab的官方文档。 ### 回答2: Python中的reportlab库可以用于生成PDF文件reportlab是一个强大的工具,可以帮助开发者在Python中创建和定制各种类型的PDF文档。 首先,需要安装reportlab库。可以通过使用pip命令在命令行中运行以下命令来安装reportlab: ```python pip install reportlab ``` 安装完毕后,可以在Python代码中导入reportlab库: ```python from reportlab.pdfgen import canvas ``` 接下来,可以创建一个canvas对象来构建PDF文件。Canvas是reportlab库中最基本的对象之一,它允许开发者在PDF页面上进行各种操作。通过调用canvas对象的方法,可以绘制文本、图片、图形等。 例如,以下代码演示了如何创建一个PDF文件并在其中添加一些文本: ```python from reportlab.pdfgen import canvas # 创建一个canvas对象,指定PDF文件路径和名称 pdf = canvas.Canvas("example.pdf") # 在(100, 750)位置添加一段文本 pdf.setFont('Helvetica', 12) pdf.drawString(100, 750, "Hello, World!") # 关闭canvas对象,保存PDF文件 pdf.save() ``` 运行以上代码后,将在当前目录下生成一个名为example.pdfPDF文件。在该文件中,将添加一个位置在(100, 750)的文本“Hello, World!”。 总结:使用reportlab库中的canvas对象和相应的方法,可以轻松地在Python生成并定制各种类型的PDF文件。以上是一个简单的示例,你可以根据自己的需求进一步扩展和定制PDF文档。 ### 回答3: 使用python中的第三方库ReportLab可以很方便地生成PDF文件ReportLab是一个用于创建PDF文档的强大工具,可以在Python中使用它来生成报告、统计图表、标签等。 首先,在使用ReportLab之前,需通过pip安装ReportLab库。 ``` pip install reportlab ``` 然后,我们需要创建一个画布对象来绘制我们的PDF文件。 ```python from reportlab.pdfgen import canvas # 创建一个PDF文件 pdf = canvas.Canvas("output.pdf") # 绘制文本 pdf.drawString(100, 750, "Hello World!") # 保存PDF文件 pdf.save() ``` 以上示例代码创建了一个名为output.pdfPDF文件,并在画布上绘制了一个"Hello World!"的文本。使用`drawString`方法,可以设置文本的位置和内容。在绘制完所需内容后,通过`save`方法可以保存生成PDF文件。 除了绘制文本,ReportLab还提供了许多其他功能,如绘制图像、绘制表格、设置页面布局等。可以通过查阅ReportLab的官方文档来学习更多相关的用法,进一步定制生成自己需要的PDF文件。 使用ReportLab生成PDF文件是一种简单而强大的方法,可以应用于许多场景,如生成报告、生成标签、生成图表等。无论是个人使用还是商业应用,ReportLab提供了丰富且灵活的功能来满足不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值