1

我正在努力如何在 Python 中使用另一个 PDF 作为模板来创建 PDF 报告。我有一个 PDF 文件(Template.pdf),可以用作每天创建报告的模板。Template.pdf 如下所示:

 ABC Corp

Daily Sales Report         Report Date:                                 

销售名称 订单数量 已确认数量 已发货数量




我需要以编程方式填写 ReportDate 和销售数据,并准备 PDF 格式的报告,如下所示:ABC Corp


Daily Sales Report         Report Date: 20120117                        

销售名称 订单数量 已确认数量 已发货数量


杰森 1000 900 50


彼得 500 50 450


穆拉利 2000 1000 900


可以假设没有。销售人员的数量是固定的(即报告中的行数是固定的)。

4

1 回答 1

2

您可以尝试 reportlab,因为您的 pdf 模板相对简单。我不确定您将从哪里提取数据以及您的模板看起来如何,但我编写了一个小代码让您查看或开始使用。如果您可以阅读 reportlab 的用户指南,那就更好了。

您可以查看 html to pdf 以获取 python 解决方案。它也应该是您正在寻找的东西。

报告实验室示例:

import datetime

from reportlab.pdfgen import canvas
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.pagesizes import A4, letter, inch, cm
from reportlab.platypus import Paragraph, SimpleDocTemplate, Table, TableStyle, Spacer, KeepTogether, CondPageBreak
from reportlab.lib import colors
from reportlab.lib.enums import TA_JUSTIFY, TA_LEFT, TA_CENTER
styles = getSampleStyleSheet()

class Sales( object ):
    def __init__(self):
        self.salesname = 'Jason'
        self.orderqty = 1000
        self.confirmqty = 900
        self.shipqty = 50        

jason = Sales()  

# get current date
date = datetime.date.today()
jahr = date.year
monat = date.month
tag = date.day

story = []

# Styles
styleN = styles["BodyText"]
styleN.alignment = TA_LEFT
styleBH = styles["Normal"]
styleBH.alignment = TA_CENTER
styleH = styles["Heading2"]

# Static texts
title = "ABC Corp"
subtitle = "Daily Sales Report"

# Headers
hdescrpcion = Paragraph('''<b>SalesName</b>''', styleBH)
hpartida = Paragraph('''<b>OrderQty</b>''', styleBH)
hcandidad = Paragraph('''<b>ConfirmedQty</b>''', styleBH)
hprecio_unitario = Paragraph('''<b>ShippedQty</b>''', styleBH)

# Date
mydate = Paragraph('''Report Date: '''+str(jahr)+'''-'''+str(monat)+'''-'''+str(tag), styleN)

# 2 col data
data_2col =[[subtitle,mydate]]
table2 = Table(data_2col, colWidths=[5.05 * cm, 5* cm])

# 4 col data
data= [[hdescrpcion, hpartida,hcandidad, hprecio_unitario],
       [jason.salesname, jason.orderqty, jason.confirmqty, jason.shipqty]]

table = Table(data, colWidths=[2.05 * cm, 2.7 * cm, 5 * cm,
                           3* cm])

table.setStyle(TableStyle([
                       ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                       ('BOX', (0,0), (-1,-1), 0.25, colors.black),
                       ]))

story.append(Paragraph(title,styleH))
story.append(Spacer(1, 12))
story.append(table2)
story.append(Spacer(1, 12))
story.append(table)

doc = SimpleDocTemplate('template.pdf',pagesize = A4,rightMargin=18,leftMargin=18,
                        topMargin=18,bottomMargin=18, showBoundary=False, allowSplitting = True)

doc.build(story)
于 2012-04-25T10:01:18.210 回答