我正在制作一张大约10个细胞的表格,其中有标题。除非我使用multi_cell选项,否则它们不适合整个页面。但是,我无法弄清楚如何并排获得多个单元。当我创建一个新的时,它会自动转到下一行
from fpdf import FPDF
import webbrowser
pdf=FPDF()
pdf.add_page()
pdf.set_font('Arial','B',16)
pdf.multi_cell(40,10,'Hello World!,how are you today',1,0)
pdf.multi_cell(100,10,'This cell needs to beside the other',1,0)
pdf.output('tuto1.pdf','F')
webbrowser.open_new('tuto1.pdf')
答案 0 :(得分:3)
您必须跟踪x
和y
坐标:
from fpdf import FPDF
import webbrowser
pdf=FPDF()
pdf.add_page()
pdf.set_font('Arial','B',16)
# Save top coordinate
top = pdf.y
# Calculate x position of next cell
offset = pdf.x + 40
pdf.multi_cell(40,10,'Hello World!,how are you today',1,0)
# Reset y coordinate
pdf.y = top
# Move to computed offset
pdf.x = offset
pdf.multi_cell(100,10,'This cell needs to beside the other',1,0)
pdf.output('tuto1.pdf','F')
webbrowser.open_new('tuto1.pdf')
答案 1 :(得分:0)
注意:这是解决上述问题的另一种方法
对于我的要求,我需要某些列具有较高的列宽度,而某些列具有较低的宽度。所有列的固定列宽使我的表格超出了pdf边距。多单元格自动换行并增加某些列的高度,而不是每列的高度。因此,我的方法是使用枚举函数,并根据需要动态调整列宽,如下所示。
data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]]
## row1, row2, etc are the rows from csv
for row in data1:
for x,y in enumerate(row):
if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
else:
pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
希望这会有所帮助。