我正在尝试将 FPDF2 中的表格与格式化的 PDF 一起使用。我的 PDF 类继承了占据页面顶部前 15 毫米左右的 header 方法。我遇到的问题是,当分页时,表格会继续到下一页并与标题重叠。有没有办法让分页时表格继续保持相同的上边距?
def header(self):
if self.page_no() != 1:
self.set_font("Helvetica", "B", 15)
self.set_fill_color(255, 255, 255)
self.set_xy(4, 4)
self.cell(0, 0, f"{self.title}")
self.set_line_width(.25)
self.set_draw_color(r=0, g=31, b=46)
self.line(x1=5, y1=self.header_height, x2=self.w - 5, y2=self.header_height)
def table_page_with_png(self, df: pd.DataFrame, columns: list,
text_align=("CENTER", "CENTER", "CENTER", "LEFT"),
col_widths=(20, 20, 25, 50),
png_padding=(2, 20, 2, 15)):
self.add_page()
self.set_draw_color(50)
self.set_line_width(.5)
self.set_font("Helvetica", '', 10)
working_df = df[columns]
df_to_list = working_df.values.tolist()
df_to_list.insert(0, working_df.columns.values.tolist())
with self.table(borders_layout="SINGLE_TOP_LINE",
text_align=text_align,
col_widths=col_widths,
line_height=2.5) as table:
for i, data_row in enumerate(df_to_list):
row = table.row()
for j, data_cell in enumerate(data_row):
self.set_font("Helvetica", '', 8)
if ".png" in str(data_cell) and i > 0:
row.cell(img=data_cell, img_fill_width=True, padding=png_padding)
else:
data_cell = re.sub("<br>", " ", str(data_cell).strip())
row.cell(data_cell, padding=(1, .5, 1, 1))
谢谢!
尝试明确设置边距。在文档生成过程中,您可以根据需要多次调用此函数。
self.set_top_margin(50)
请参阅此处的边距文档,其中还有一些其他可用功能: https://py-pdf.github.io/fpdf2/Margins.html