#python #fpdf
#python #fpdf
Вопрос:
«‘ Модуль должен считывать адреса из текстового файла, раскладывать их в две колонки, готовые для печати на самоклеящейся бумаге формата А4.
Код, который у меня есть, в порядке. Но мне нужно, чтобы он отображался в 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')
Ответ №1:
Лучший способ — использовать HTML.
Вам нужно сделать таблицу в HTML.
- Импортируйте HTMLMixin. Не забудьте установить FPDF2
pip install fpdf2
from fpdf import FPDF, HTMLMixin
- Теперь нам нужна переменная со всем HTML-кодом
html = '''
<table width="100%">
<tr><th width="50%">Header #1</th><th width="50%">Header #2</th></tr>
'''
Вы можете изменить 100% в таблице, если не хотите делать ее такой широкой.
В th вы также можете изменить 50%, если некоторые столбцы должны быть шире, но в целом это должно быть 100%. (Даже если ваша таблица не на 100%)
- Ваш код с данными
html = "<tr><td>" name "</td><td>" surname "</td></tr>"
- Не забудьте закрыть тег таблицы
html = "</table>"
- Теперь, когда весь 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')
Для получения дополнительной информации проверьте это