Если в вашем проекте есть бланки pdf, в которые необходимо динамически впечатывать данные, то данное, небольшое веб приложение позволит в игровой форме задать необходимые позиции, впечатываемым полям, и выдать заполненный pdf документ.
В общем случае можно формировать комплект документов из нескольких разных бланков, скомпонованных в нужном количестве, в нужном порядке.
Сделайте себе локальную копию проекта. Например:
git clone git@github.com:metron/tpdf.git
cd tpdf
virtualenv venv --no-download
source venv/bin/activate
pip install -r requirements.txt
Запускаем приложение:
python3 main.py
Открываем в браузере, для примера, позиционирование полей тестового бланка (ZayavlenieNaZagranpasport)
http://127.0.0.1:8001/tpdf/positioning?pdf_name=ZayavlenieNaZagranpasport&page_num=1
Настраиваем положение полей в браузере с помощью мышки и сохраняем позиции. Открываем получившийся комплект документов
http://127.0.0.1:8001/tpdf/example
- Делаем копию каталога с примером документа:
cp libs/tpdf_templates/ZayavlenieNaZagranpasport libs/tpdf_templates/NewName -R
-
Подменяем в новой директории файл бланка form.pdf на нужный бланк
-
Удаляем тестовую картинку и добавляем необходимые картинки в подпапку images
-
В файле fields.json заполняем набор полей, который должен быть впечатан в документ. При этом нужно указать имена полей, размер шрифта и имя шрифта. Координаты полей и максимальную ширину полей можно указать любые в пределах страницы, они будут вычислены автоматически в процессе настройки полей в браузере.
-
Создаём новый url метод, который будет генерировать новый документ, для этого в файле main.py копируем строку
web.get('/tpdf/example', tpdf.example),
Например на:
web.get('/tpdf/new_name', tpdf.new_name),
-
В файле handlers/tpdf.py копируем метод example на метод new_name, заполняем в этом методе данными необходимые поля. Обратите внимание, что в основном классе Tpdf можно вычислять новые поля. Например, в класс мы передаём поля last_name, first_name, second_name, а в файле fields.json указываем поле fio, которое вычисляется внутри класса Tpdf на основе первых трёх полей. Так можно поступать не только с ФИО.
-
Перезапускаем приложение, открываем файл с целью позиционирования полей
http://127.0.0.1:8001/tpdf/positioning?pdf_name=NewName&page_num=1
-
Позиционируем поля и сохраняем нужные позиции по кнопке, координаты попадут в файл fields.json
-
Тонкие настройки полей (выравнивание по осям и ширине полей) делаем прямо в файле fields.json, который специально генерируется в удобном для редактирования виде, причём поля сортируются по оси Y.
-
Открываем итоговый документ, с заполненными данными по адресу
http://127.0.0.1:8001/tpdf/new_name
- Положить файл шрифта, с расширением ttf в папку static/fonts и можно им пользоваться:
- Перезапустить приложение
- Использовать шрифт в файле настроек полей, fields.json из пункта 4 предыдущего раздела документации
Аким Негрей - metron19 собака яндекс точка ру - email