nihbf 2024-03-10 18:11 采纳率: 8.3%
浏览 6
已结题

Python将.dbf文件转化成.pdf文件

用pycharm对医学.dbf文件转化成.pdf文件,代码如下:

import dbfread
import pandas as pd
import matplotlib

matplotlib.use('Agg')  # 设置后端
import matplotlib.pyplot as plt
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib.styles import getSampleStyleSheet

# 读取.dbf文件
table = dbfread.DBF('D:\pythonProject\mmse.dbf')

# 转换为DataFrame
df = pd.DataFrame(table)


def df_to_pdf(df, filename):
    # 初始化canvas
    c = canvas.Canvas(filename, pagesize=letter)

    # 设置字体
    plt.rcParams['font.family'] = 'Arial'  # 更换为支持所需字形的字体

    # 设置字体大小等样式
    font_name = 'Helvetica'
    style_sheet = getSampleStyleSheet()
    normal_style = style_sheet['Normal']
    normal_style.fontName = font_name
    data_style = normal_style.clone(name="data_style")
    data_style.fontSize = 10

    # 计算表格布局
    table_data = []
    for idx, row in df.iterrows():
        table_data.append([str(val) for val in row])

    [max([len(str(x)) for x in col]) * 0.75 for col in df.columns]

    # 在PDF上绘制表格
    table_height = len(df.index) * 15
    table_top = 750 - table_height
    c.drawString(30, table_top + 10, " ".join(df.columns))

    y = table_top
    for row in table_data:
        c.drawString(30, y, " ".join(row))
        y -= 20

    # 保存PDF
    c.save()


# 调用函数将DataFrame写入PDF
df_to_pdf(df, 'mmse.pdf')

# 保存图形到文件中
plt.savefig("table.png", bbox_inches='tight', pad_inches=0)

运行之后显示没有错误,但是pdf文件里面是空的,想问问大家应该怎样修改呀?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-10 18:12
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,虽然创建了PDF并尝试将.dbf文件内容写入其中,但实际上并没有绘制任何表格样式或数据。为了将DataFrame中的数据转换成PDF格式的表格,您可以采用以下方式进行修改:

    import dbfread
    import pandas as pd
    from fpdf import FPDF  # 使用fpdf库来创建PDF
    
    # 读取.dbf文件
    table = dbfread.DBF('D:\pythonProject\mmse.dbf')
    df = pd.DataFrame(table)
    
    class PDFTable(FPDF):
        def __init__(self, dataframe):
            super().__init__()
            self.dataframe = dataframe
    
        def table(self, dataframe):
            col_width = [max([len(str(x)) for x in df[col]]) * 0.75 for col in dataframe.columns]
            row_height = 10
    
            for idx, row in dataframe.iterrows():
                for i, (colname, cell) in enumerate(row.iteritems()):
                    self.cell(col_width[i], row_height, str(cell), border=1)
                    self.ln()
    
                # 新的一行开始时,跳过列标题
                if idx == 0:
                    self.ln(sum(col_width))
    
            # 写入列标题
            self.set_y(20)
            for i, colname in enumerate(dataframe.columns):
                self.cell(col_width[i], row_height, colname, border=1, ln=1)
    
        def generate_pdf(self, filename):
            self.add_page()
            self.table(self.dataframe)
            self.output(filename)
    
    # 创建PDF并写入数据
    pdf = PDFTable(df)
    pdf.generate_pdf('mmse.pdf')
    

    这里我使用了fpdf库来直接生成包含表格内容的PDF文档。上述代码首先定义了一个继承自FPDF的类,并添加了一个用于绘制表格的方法。然后,我们实例化这个类,传入DataFrame,并调用generate_pdf方法输出到指定的PDF文件。

    请注意,这段代码可能需要根据实际的.dbf文件内容和排版需求进行微调。同时,确保已经安装了fpdf库,如果没有安装,请使用以下命令安装:

    pip install fpdf
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 创建了问题 3月10日