создание нового PDF из существующего PDF в Python - PullRequest
1 голос
/ 17 января 2012

Я изо всех сил пытаюсь создать отчет в формате PDF, используя другой файл PDF в качестве шаблона в Python.У меня есть файл PDF (Template.pdf), который можно использовать в качестве шаблона для создания отчета каждый день.Template.pdf выглядит следующим образом:

 ABC Corp

Daily Sales Report         Report Date:                                 

SalesName OrderQty ConfirmedQty ShippedQty




Мне нужно программно заполнить ReportDateи данные о продажах и подготовьте отчет в формате PDF, как показано ниже: ABC Corp


Daily Sales Report         Report Date: 20120117                        

SalesName OrderQty ConfirmedQty ShippedQty


Jason 1000 900 50


Петр 500 50 450


Мурали 2000 1000 900


Можно предположить, что нет.торгового представителя фиксированы (т. е. количество строк зафиксировано в отчете).

1 Ответ

2 голосов
/ 25 апреля 2012

Вы можете попробовать reportlab, так как ваш шаблон PDF относительно прост.Я не уверен, откуда вы извлекаете свои данные и как точно выглядит ваш шаблон, но я написал небольшой код, чтобы вы могли увидеть или начать работу.Было бы лучше, если бы вы могли просмотреть руководство пользователя reportlab.

Вы можете проверить html в 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)
...