Ответ 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() - действительно единственная функция, которая вам нужна, и для объяснения аргументов она имеет докстры. Я просто никогда не собирался делать с ним больше.