В качестве альтернативы генерации всего pdf с нуля в коде (например, с использованием reportlab, как описано выше - что является вполне разумным решением, а reportlab - отличная библиотека для этого), вы можете заполнить существующую форму pdf, сгенерированнуюкакое-то программное обеспечение для редактирования (например, слово или что-то подобное - я использую Scribus NG ... но учиться это кошмар, и я не очень рекомендую его для обычного пользователя).
Преимущество заполнения существующегоФорма - это то, что вы можете использовать правильный инструмент для редактирования формы, который облегчает создание более профессионально выглядящих форм (также они могут редактироваться графическим дизайнером).Недостатки в том, что он немного сложнее и не является чистым решением на python.
Вы заполняете форму, создавая файл fdf и исключая из python внешний инструмент под названием pdftk.Написание файла в формате PDF - это упражнение, которое я оставлю вам!Fdf - это в основном список значений ключа, где ключ - это идентификатор поля формы (т. Е. Текстовое поле в идентификаторе формы), а значение - это значение, записанное в это поле.
Если вы хотите перейтисделать это таким образом, я предлагаю вам сначала вручную написать свой файл PDF, затем вручную запустить pdftk .. получить его, а затем автоматизировать с помощью Python.Это не красивое решение, но результаты выглядят неплохо.
Вот код, который я использую для исполнения pdftk, что немного поможет с правильным синтаксисом командной строки.
def pdftk(pdf_in, fdf_in, pdf_out):
"""
Run pdftk to fill in pdf_out from the pdf form template and data given.
(only tested on linux)
"""
cmd_line = [pdftk_executable,
pdf_in,
"fill_form",
fdf_in,
"output",
pdf_out,
"verbose"]
# print " ".join(cmd_line)
try:
pdftk_output = subprocess.check_output(cmd_line)
except subprocess.CalledProcessError as e:
pdftk_output = e.output
pdftk_error = True
return