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

问题描述

''' 该模块应该从文本文件中读取地址, 将它们分成两列,准备打印 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,' ',1)

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

解决方法

最好的方法是使用 HTML

你需要用 HTML 制作一个表格。

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

    pip install 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>
    '''

如果您不想让它变得如此宽,您可以在表格中更改 100%。

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

  1. 带有数据的代码
html += "<tr><td>" + name + "</td><td>" + surname + "</td></tr>"
  1. 不要忘记关闭表格标签
html += "</table>"
  1. 现在,当所有 HTML 准备就绪后,将其传递给新类
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