У меня есть формы PDF, которые я хочу автопопулировать данными из моего веб-приложения Django, а затем предлагаю пользователю загрузить. Какая библиотека python позволяла мне легко заполнять формы PDF? Эти формы предназначены для распечатки.
Как я могу автоматически заполнить форму PDF в Django/Python?
Ответ 1
Reportlab отлично работает, если вы создаете очень динамичные PDF файлы и должны программно контролировать все это: данные и макет.
Чтобы просто заполнить формы в существующих PDF файлах, reportlab является излишним, и вам в основном придется перестраивать PDF с нуля в reportlab вместо того, чтобы просто делать PDF файл с уже сформированной формой.
PDF-формы работают с FDF. Я портировал PHP FDF-библиотеку на Python некоторое время назад, когда мне пришлось это сделать, и выпустил ее как fdfgen. Я использую это для генерации файла fdf с данными для формы, затем используйте pdftk, чтобы вставить fdf в PDF-форму и сгенерировать вывод.
Весь процесс работает следующим образом:
- Вы (или дизайнер) разрабатываете PDF в Acrobat или что-то еще, и отмечаете поля формы и обратите внимание на имена полей (я точно не знаю, как это делается, наш дизайнер делает этот шаг). Скажем, ваша форма имеет поля "имя" и "телефон".
-
Используйте fdfgen для создания файла FDF:
from fdfgen import forge_fdf fields = [('name','John Smith'),('telephone','555-1234')] fdf = forge_fdf("",fields,[],[],[]) fdf_file = open("data.fdf","w") fdf_file.write(fdf) fdf_file.close()
-
Затем вы запускаете pdftk для слияния и сглаживания:
pdftk form.pdf fill_form data.fdf output output.pdf flatten
и заполненный, сплющенный (что означает, что больше нет редактируемых полей формы). pdf будет в output.pdf.
Это немного сложно, и pdftk может быть больно для установки (требуется Java-стек, а на Ubuntu 9.10 есть ошибки), но это самый простой процесс, который я смог придумать и рабочий процесс удобен (т.е. наши дизайнеры могут сделать все изменения макета в формате PDF, который они хотят, и пока они не меняют названия полей, я могу отбросить их и все будет работать).
Извиняюсь за отсутствие документов по fdfgen. forge_fdf() - действительно единственная функция, которая вам нужна, и для объяснения аргументов она имеет докстры. Я просто никогда не собирался делать с ним больше.
Ответ 2
Также посмотрите на этот сегмент кода, который является готовым решением для создания PDF-представления в django, которое основывается на решении Thraxil выше. Благодаря github пользователь zyegfryed.
Ответ 3
Попробуйте reportlab.
Кроме того, возьмите gander в Вывод PDF файлов.
Edit
У меня была другая мысль (но это не поможет, если у вас уже есть файлы PDF, и мне нравится @thraxil answer better).
В начале этого года я работал над проектом, где я создал "сертификаты о завершении" для продолжения учебных курсов. Один из углов, на которые я смотрел, пытался создать PDF файл непосредственно с соответствующей веб-страницы (что-то вроде серверной "Печать в PDF" ).
Один из инструментов, который я нашел, был wkhtmltopdf. Это автономный браузер WebKit, который превратит URL в PDF, и с хорошими результатами.
Идея заключается в том, что вы используете механизм шаблонов django для компоновки страницы, содержащей все, что хотите (включая изображения), передайте url на wkhtmltopdf, возьмите вывод и верните его пользователю.
Мне понравился подход, потому что он очень прост для реализации (просто откройте канал), вам не нужно беспокоиться о том, чтобы файлы исходного PDF файла были доступны для сервера, и вы можете перепроектировать PDF файлы, изменив HTML.