TableFactory PDFTable仅输出列标题

时间:2016-07-07 18:11:11

标签: python pdf

我尝试使用TableFactory创建一个表格,但几乎没有文档,我只能找到two examplesPDFTable函数确实输出PDF但它似乎没有找到数据!

我的代码:

#Import module components
from TableFactory import *

# Build the data setup required
ids = ['a','b','c','d','e','f','g','h','i']

lon = [-80.15765381, -80.40131378, -80.56086731, -80.52893066,
       -80.24595642, -80.7718277, -80.877388, -79.9454422, -79.84288025]

lat = [ 0.34739658, -0.39966396, -0.91119879,  0.83061123,  0.67057306,
       -0.1843673, -0.18189907,  0.43762371,  0.45526683]

depth = [ 14044, 4942, 7000, 13107,
         6281, 7000, 1172, 4825, 6730]

rows4 = TableRow()
setattr(rows4, 'ids', ids)
setattr(rows4, 'lon', lon)
setattr(rows4, 'lat', lat)
setattr(rows4, 'depth', depth)


invoicerow = RowSpec(ColumnSpec('ids', 'Event ID'),
                     ColumnSpec('lon', 'Longitude'),
                     ColumnSpec('lat', 'Latitude'),
                     ColumnSpec('depth', 'Depth'))

lines = invoicerow.makeall(rows4)

#create the tables
#HTML
HTMLTable('Invoices by Customer',
          'Amount of each invoice, sorted by invoiceid',
          headers=invoicerow).render(lines)

# Excel
SpreadsheetTable('Invoices by Customer',
                 'Amount of each invoice, sorted by invoiceid',
                 headers=invoicerow).render(lines)

# PDF
pdfmaker = PDFTable('My title',
                    headers=invoicerow)

open('invoicetable.pdf', 'wb').write(pdfmaker.render(lines))

但它并没有产生我的预期:

enter image description here

1 个答案:

答案 0 :(得分:1)

你很亲密!这是我稍微改写它的方式:

<input>

基本上,TableFactory需要一个行对象列表,而不是列表列表。我将列列表(#Import module components from collections import namedtuple from TableFactory import * # Build the data setup required ids = ['a','b','c','d','e','f','g','h','i'] lon = [-80.15765381, -80.40131378, -80.56086731, -80.52893066, -80.24595642, -80.7718277 , -80.877388 , -79.9454422 , -79.84288025] lat = [ 0.34739658, -0.39966396, -0.91119879, 0.83061123, 0.67057306, -0.1843673 , -0.18189907, 0.43762371, 0.45526683] depth = [ 14044.31152 , 4942.527294, 7000. , 13107.94449 , 6281.775475, 7000. , 1172.017574, 4825.51527 , 6730.996132] # Make an object that can represent a row in the table. This could be # a full-blown class, or a dict like {'id': 'a', 'lon': 0.3, ...}, etc. DataRow = namedtuple('DataRow', ['id', 'lon', 'lat', 'depth']) # Combine the separate lists together into a list of DataRow objects rows = [DataRow(*_) for _ in zip(ids, lon, lat, depth)] invoicerow = RowSpec(ColumnSpec('id', 'Event ID'), ColumnSpec('lon', 'Longitude'), ColumnSpec('lat', 'Latitude'), ColumnSpec('depth', 'Depth')) lines = invoicerow.makeall(rows) #create the tables #HTML html = HTMLTable('Invoices by Customer', 'Amount of each invoice, sorted by invoiceid', headers=invoicerow).render(lines) # Excel excel = SpreadsheetTable('Invoices by Customer', 'Amount of each invoice, sorted by invoiceid', headers=invoicerow).render(lines) # PDF pdf = PDFTable('Invoices by Customer', 'Amount of each invoice, sorted by invoiceid', headers=invoicerow).render(lines) with open('my.pdf', 'wb') as outfile: outfile.write(pdf) idslonlat)转换为TableFactory可以咀嚼的DataRow对象列表。