【问题标题】:creating a new PDF from existing PDF in Python在 Python 中从现有 PDF 创建新 PDF
【发布时间】:2012-01-17 07:33:11
【问题描述】:

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

 ABC Corp

Daily Sales Report         Report Date:                                 

SalesName OrderQty ConfirmedQty ShippedQty




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


Daily Sales Report         Report Date: 20120117                        

SalesName OrderQty ConfirmedQty ShippedQty


杰森 1000 900 50


彼得 500 50 450


穆拉利 2000 1000 900


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

【问题讨论】:

标签: python pdf reportlab pypdf


【解决方案1】:

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

您可以查看 html 到 pdf 的 python 解决方案。它也应该是您正在寻找的。​​p>

报告实验室示例:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2023-03-28
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多