No description
- Python 100%
| .gitignore | ||
| AGENTS.md | ||
| gui.py | ||
| LICENSE | ||
| main.py | ||
| README.md | ||
| requirements.txt | ||
shtamp
Наложение штампов электронной подписи на PDF-документы.
Извлекает данные подписантов из отсоединённой подписи (PKCS#7 DER / CAdES), верифицирует время подписания через КриптоПро CSP и размещает визуальный штамп на каждой странице PDF. При нескольких подписях штампы укладываются стопкой в правом нижнем углу.
Зависимости
Системные
- КриптоПро CSP — утилита
cryptcpпо пути/opt/cprocsp/bin/amd64/cryptcp(верификация и извлечение времени подписания) - OpenSSL — разбор сертификатов из PKCS#7
- Шрифты Liberation Sans —
/usr/share/fonts/liberation-sans-fonts/LiberationSans-{Regular,Bold}.ttf tkinter— для графического интерфейса
Python
- Python 3.10+
reportlab— отрисовка штамповpypdf— чтение и запись PDFcustomtkinter— GUI
Установка
python -m venv venv
source venv/bin/activate
pip install reportlab pypdf customtkinter
Использование
CLI:
python main.py <документ.pdf> <подпись.sig> [--output <результат.pdf>]
GUI:
python gui.py
или:
python main.py --gui
Файл подписи — отсоединённая PKCS#7 DER-подпись (расширение .sig или .p7s).
По умолчанию результат сохраняется рядом с исходником как <имя>_stamped.pdf.
Пример:
python main.py contract.pdf contract.pdf.sig
# Результат: contract_stamped.pdf
python main.py contract.pdf contract.pdf.sig --output signed.pdf
Штамп
На каждой странице в правом нижнем углу размещается штамп для каждой подписи:
┌──────────────────────────────────────────────────────────────┐
│ ДОКУМЕНТ ПОДПИСАН ЭЛЕКТРОННОЙ ПОДПИСЬЮ │
│ Сертификат: 525A81716AB59F24...1B96FD9E │
│ Владелец: ИВАНОВ ИВАН ИВАНОВИЧ, │
│ ГЕНЕРАЛЬНЫЙ ДИРЕКТОР, ООО "..." │
│ Действителен: с 21.04.2025 по 21.07.2026 │
│ Выдан: Федеральная налоговая служба │
│ Подписан: 13.02.2026 09:02:48 UTC │
└──────────────────────────────────────────────────────────────┘
Сейчас подписанты определяются по выводу cryptcp verify, а не просто по наличию SNILS/ИНН в сертификате. Это позволяет не включать в штамп вложенные служебные или timestamp-сертификаты.