Python 3.x 从PrettyTable到pdf的表格
我用PrettyTable创建了一个表。我想将输出保存为.pdf文件,但我唯一能做的就是将其保存为.txt 如何将其保存为.pdf文件? 我安装了FPDF库,但我对此感到厌倦Python 3.x 从PrettyTable到pdf的表格,python-3.x,pdf,prettytable,Python 3.x,Pdf,Prettytable,我用PrettyTable创建了一个表。我想将输出保存为.pdf文件,但我唯一能做的就是将其保存为.txt 如何将其保存为.pdf文件? 我安装了FPDF库,但我对此感到厌倦 # my table is saved as 'data' variable name # I saved the table ('data') as .txt file data = x.get_string() with open('nameoffile.txt', 'w') as f: f.write(da
# my table is saved as 'data' variable name
# I saved the table ('data') as .txt file
data = x.get_string()
with open('nameoffile.txt', 'w') as f:
f.write(data)
print(data)
PrettyTable不用于将数据导出到pdf文件。它用于显示ASCII表格 下面的代码是一个自制的方法,可以解决您的问题 假设您有要导出的prettytable:
从prettytable导入prettytable
x=PrettyTable()
x、 字段名称=[“城市名称”、“面积”、“人口”、“年降雨量”]
x、 加上("阿德莱德",12951158259600.5)
x、 添加_行([“布里斯班”,590518575941146.4])
x、 添加_行([“Darwin”,1121209001714.7])
x、 添加_行([“霍巴特”,1357205556619.5])
x、 添加_行([“Sydney”,2058,4336374,1214.8])
x、 增加第二行([“墨尔本”,156663806092646.9])
x、 添加_行([“珀斯”,53861554769869.4])
- 首先,您需要获取表的内容。模块不应该以这种方式工作:它假定您有一个要显示的表内容。让我们做相反的事情:
def从prettytable(数据)获取数据:
"""
从pretty_数据表中获取列表的列表
论据:
:param data:要处理的数据表
:类型数据:PrettyTable
"""
def删除_空间(列表):
"""
删除列表中每个单词的空格
论据:
:param liste:字符串列表
"""
不带空格的列表=[]
对于列表中的mot:#对于列表中的每个单词
不带空格的单词=mot.replace(“”,)#不带空格的单词
不带空格的单词列表。追加(不带空格的单词)#不带空格的单词列表
返回不带空格的列表\u
#获取表格的每一行
string_x=str(x).split('\n')#获取行的列表
header=string_x[1]。拆分(“|”)[1:-1]#列名称
rows=string_x[3:len(string_x)-1]#行列表
每行列出单词=[]
对于行中的行:#对于行中的每个单词
row_resize=row.split(“|”)[1:-1]#删除第一个和最后一个参数
每行列出单词。追加(删除空格(行大小调整))#删除空格
返回标题,每行列出单词
- 然后可以将其导出为pdf文件。这里有一个解决方案:
header,data=get\u data\u from\u prettytable(x)
导出到pdf(标题、数据)
from fpdf import FPDF
def export_to_pdf(header, data):
"""
Create a a table in PDF file from a list of row
:param header: columns name
:param data: List of row (a row = a list of cells)
:param spacing=1:
"""
pdf = FPDF() # New pdf object
pdf.set_font("Arial", size=12) # Font style
epw = pdf.w - 2*pdf.l_margin # Witdh of document
col_width = pdf.w / 4.5 # Column width in table
row_height = pdf.font_size * 1.5 # Row height in table
spacing = 1.3 # Space in each cell
pdf.add_page() # add new page
pdf.cell(epw, 0.0, 'My title', align='C') # create title cell
pdf.ln(row_height*spacing) # Define title line style
# Add header
for item in header: # for each column
pdf.cell(col_width, row_height*spacing, # Add a new cell
txt=item, border=1)
pdf.ln(row_height*spacing) # New line after header
for row in data: # For each row of the table
for item in row: # For each cell in row
pdf.cell(col_width, row_height*spacing, # Add cell
txt=item, border=1)
pdf.ln(row_height*spacing) # Add line at the end of row
pdf.output('simple_demo.pdf') # Create pdf file
pdf.close() # Close file