Python FPDF如何在创建新页面时分2列显示并且不拆分地址

Python FPDF How to display in 2 columns and to not split addresses when a new page is created

''' 该模块应该从文本文件中读取地址, 将它们分成两列以供打印 A4不干胶纸。

我的代码没问题。但是,我需要它显示在 2 列中 并且在创建新页面时不拆分地址。

地址的大小从 4 到 7 行文本不等。

我检查过其他人的代码,但不知道如何 实现我的目标。任何帮助将非常感激。 '''

import os,sys
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('arial', '', 14)
w = 80

file = open(os.path.join(sys.path[0], 'addressbookMultiPrint.txt'))
for i, line in enumerate(file.readlines()):
    
    if i == 0:
        pdf.cell(w, 3, '', 'TLR', 1)
        
    pdf.cell(w, 7, line, 'LR', 1)
    
    if line == '\n':
        pdf.cell(w, 1, '', 'BLR', 1)
        pdf.cell(w, 3, ' ', 0, 1)
        pdf.cell(w, 3, '', 'TLR', 1)

pdf.output('single.pdf')
os.startfile('single.pdf')#,'print')

最好的方法是使用HTML.

您需要在 HTML 中创建一个 table。

  1. 导入HTMLMixin。不要忘记安装 FPDF2

    pip 安装 fpdf2

    from fpdf import FPDF, HTMLMixin

  2. 现在我们需要所有 HTML 代码的变量

    html = '''
    <table width="100%">
    <tr><th width="50%">Header #1</th><th width="50%">Header #2</th></tr>
    '''

如果你不想让它变得这么宽,你可以在 table 中更改 100%。

th 中,如果某些列应该更宽,您也可以更改 50%,但总计必须为 100%。 (即使你的 table 不是 100%)

  1. 你的代码和数据
html += "<tr><td>" + name + "</td><td>" + surname + "</td></tr>"
  1. 别忘了关闭 table 标签
html += "</table>"
  1. 现在,当所有HTML准备就绪后,将其传递给新的class
class PDF(FPDF, HTMLMixin):
    pass

pdf = FPDF()
pdf.add_page()
pdf.set_font('arial', '', 14)
pdf.write_html(html)
pdf.output('single.pdf', 'F')

更多信息请查看this