Python 3.x 从PrettyTable到pdf的表格

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

我用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(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