2012-01-17 9 views
1

私はPythonのテンプレートとして別のPDFを使用してPDFレポートを作成する方法に苦労しています。 私は毎日レポートを作成するためのテンプレートとして使用できるPDFファイル(Template.pdf)を持っています。 Template.pdfは、次のようになります。Pythonで既存のPDFから新しい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千900


。 (つまり、レポートの行数は固定されていません)。

+0

はすでにこれらのサイトに見ていた:[SnakeletsとPythonのPDF生成](http://www.hoboes.com/Mimsy/hacks/python-pdf-generation/) [ReportLab - オープンソースPDFライブラリ](http://www.reportlab.com/software/opensource/rl-toolkit/)? – gecco

+0

これまでどんなコードがありますか? – razlebe

答えて

2

pdfテンプレートが比較的簡単なので、reportlabを試すことができます。どこからデータを引き出すのか、テンプレートの見た目はどういったものかはわかりませんが、見たり始めるための小さなコードを書いています。あなたがreportlabのユーザーガイドを見れば良いです。

pythonの解決策については、htmlからpdfをご覧ください。あなたが探しているものでなければなりません。

ReportLabの例:

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) 
関連する問題