如何在Pyfpdf中并排获得MultiCells?

时间:2016-01-21 10:22:53

标签: python-3.x

我正在制作一张大约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')

2 个答案:

答案 0 :(得分:3)

您必须跟踪xy坐标:

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

希望这会有所帮助。