Skip to content

metron/tpdf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Logo

Шаблонизация PDF

О проекте

Если в вашем проекте есть бланки 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

Добавить новый документ

  1. Делаем копию каталога с примером документа:
cp libs/tpdf_templates/ZayavlenieNaZagranpasport libs/tpdf_templates/NewName -R
  1. Подменяем в новой директории файл бланка form.pdf на нужный бланк

  2. Удаляем тестовую картинку и добавляем необходимые картинки в подпапку images

  3. В файле fields.json заполняем набор полей, который должен быть впечатан в документ. При этом нужно указать имена полей, размер шрифта и имя шрифта. Координаты полей и максимальную ширину полей можно указать любые в пределах страницы, они будут вычислены автоматически в процессе настройки полей в браузере.

  4. Создаём новый url метод, который будет генерировать новый документ, для этого в файле main.py копируем строку

web.get('/tpdf/example', tpdf.example),

Например на:

web.get('/tpdf/new_name', tpdf.new_name),
  1. В файле handlers/tpdf.py копируем метод example на метод new_name, заполняем в этом методе данными необходимые поля. Обратите внимание, что в основном классе Tpdf можно вычислять новые поля. Например, в класс мы передаём поля last_name, first_name, second_name, а в файле fields.json указываем поле fio, которое вычисляется внутри класса Tpdf на основе первых трёх полей. Так можно поступать не только с ФИО.

  2. Перезапускаем приложение, открываем файл с целью позиционирования полей

http://127.0.0.1:8001/tpdf/positioning?pdf_name=NewName&page_num=1
  1. Позиционируем поля и сохраняем нужные позиции по кнопке, координаты попадут в файл fields.json

  2. Тонкие настройки полей (выравнивание по осям и ширине полей) делаем прямо в файле fields.json, который специально генерируется в удобном для редактирования виде, причём поля сортируются по оси Y.

  3. Открываем итоговый документ, с заполненными данными по адресу

http://127.0.0.1:8001/tpdf/new_name

Добавить новый шрифт

  1. Положить файл шрифта, с расширением ttf в папку static/fonts и можно им пользоваться:
    • Перезапустить приложение
    • Использовать шрифт в файле настроек полей, fields.json из пункта 4 предыдущего раздела документации

Контакт

Аким Негрей - metron19 собака яндекс точка ру - email

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published