Подтвердить что ты не робот

Как я могу автоматически заполнить форму PDF в Django/Python?

У меня есть формы PDF, которые я хочу автопопулировать данными из моего веб-приложения Django, а затем предлагаю пользователю загрузить. Какая библиотека python позволяла мне легко заполнять формы PDF? Эти формы предназначены для распечатки.

4b9b3361

Ответ 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.

https://gist.github.com/918403

Ответ 3

Попробуйте reportlab.

Кроме того, возьмите gander в Вывод PDF файлов.


Edit

У меня была другая мысль (но это не поможет, если у вас уже есть файлы PDF, и мне нравится @thraxil answer better).

В начале этого года я работал над проектом, где я создал "сертификаты о завершении" для продолжения учебных курсов. Один из углов, на которые я смотрел, пытался создать PDF файл непосредственно с соответствующей веб-страницы (что-то вроде серверной "Печать в PDF" ).

Один из инструментов, который я нашел, был wkhtmltopdf. Это автономный браузер WebKit, который превратит URL в PDF, и с хорошими результатами.

Идея заключается в том, что вы используете механизм шаблонов django для компоновки страницы, содержащей все, что хотите (включая изображения), передайте url на wkhtmltopdf, возьмите вывод и верните его пользователю.

Мне понравился подход, потому что он очень прост для реализации (просто откройте канал), вам не нужно беспокоиться о том, чтобы файлы исходного PDF файла были доступны для сервера, и вы можете перепроектировать PDF файлы, изменив HTML.