Skip to content

SignService 1.4.0: штамп в документах Word и исправления по код-ревью - #7

Merged
zaynullinmi merged 3 commits into
mainfrom
claude/ecp-document-signing-service-dbbut0
Oct 20, 2026
Merged

zaynullinmi merged 3 commits into
mainfrom
claude/ecp-document-signing-service-dbbut0

Conversation

@zaynullinmi

Copy link
Copy Markdown
Owner

Штамп в Word (.docx, .docm)

С галочкой «Штамп на документ» документ Word получает ту же плашку, что и PDF: копия «имя (со штампом).docx», по плашке на каждого подписанта (сертификат, владелец, срок, МЧД, дата, логотип) — таблицы в рамке у правого края (WordStamper, Open XML SDK 3.5.1, MIT).

  • Страниц в файле Word нет, поэтому «последняя» и «указанные» — плашки в конце текста; «первая» — в нижнем колонтитуле первой страницы: включается «особый колонтитул первой страницы», прежние шапка и подвал копируются, следующие разделы закрепляют свои колонтитулы и плашку не наследуют; «все» — во все видимые нижние колонтитулы (обычный, первой страницы, чётных), недостающие создаются.
  • Оба режима: подписывается оригинал, копия без подписи пересоздаётся со всеми подписантами; либо «подписывать копию со штампом».
  • DocumentStamper выбирает штамп по формату; для .doc/.rtf/прочих в логе пишется, почему штампа нет. Инструмент «Штамп на PDF/Word…», контекстное меню, фильтр выбора файлов и подписи в интерфейсе — для обоих форматов; в диалоге штампа — пояснение про страницы в Word.

Исправления по код-ревью main

  • Плашки — только по настоящим подписям документа. «Документ подписан» ставится лишь по подписи, которая криптографически проверяется по этому документу; подпись под другой версией файла больше не превращается в плашку. Дата — время подписания из самой подписи, номер МЧД — только у того, кто подписывал по ней (раньше всем ставились текущие дата и МЧД). «Штамп» без подписания находит подписи по содержимому и работает без выбранного сертификата.
  • Подписанная копия со штампом не затирается — ни при подписании (в обоих режимах), ни инструментом «Штамп»: отказ до подписания с объяснением. PDF-копия пишется атомарно.
  • Сбой создания копии после записи подписи — предупреждение в строке файла, а не «Ошибка» подписания (исключённые подписанты и путь .bak не теряются). В режиме «подписывать копию» приложенные подписи оригинала больше не обещаются к объединению с подписью копии.
  • Пакет подписания «заморожен»: пока идёт подписание, параметры подписи, сертификат, МЧД, «Применить ко всем», настройки, «О программе» и состав очереди заблокированы — раньше их можно было переключить после подтверждения рисков. Убранный файл не подписывается, перетащенные во время подписания подписи не прикладываются молча. AddPoaCommand обновляет доступность вместе с IsBusy (кнопка залипала).
  • Перетаскивание папки с недоступной подпапкой больше не обрывается исключением.
  • System.Security.Cryptography.Pkcs 8.0.2 (GHSA-846f-f764-76mx, GHSA-2fmv-rv2c-59x7).
  • Смоук-тест интерфейса больше не пишет снимок в /opt/cursor/artifacts.

Остальные находки ревью (~60) не перепроверялись и в этот PR не входят.

Тесты

  • WordStampTests: проверка схемы OpenXML (OpenXmlValidator) всех копий; конец текста после таблицы документа, две колонки плашек на A4, многоколоночный раздел; .docm; «первая страница» с картинкой в шапке и вторым разделом; уже существующий титульный подвал; «все» с чётными/первой страницей и альбомным разделом; уникальность id рисунков; подписание оригинала и копии, соподписание; даты и МЧД по подписантам; «Штамп» по подписи другой версии (отказ), смешанной подписи и подписи, найденной по содержимому; защита подписанной копии; битый документ.
  • Мутационная проверка ключевых мест (разделитель перед таблицей, закрепление колонтитулов, чётные подвалы, нумерация рисунков, фильтр подписей, МЧД) — тесты падают.
  • Смоук интерфейса: блокировка параметров и очереди во время подписания.
  • Внешний вид копий проверен через LibreOffice → PDF.

Generated by Claude Code

С включённым штампом документы Word получают ту же плашку, что и PDF:
копия «имя (со штампом).docx» с таблицей-плашкой на каждого подписанта
(сертификат, владелец, срок, МЧД, дата, логотип). «Последняя» и «указанные»
страницы — в конце текста, «первая» — в колонтитуле первой страницы
(остальные разделы не меняются), «все» — во всех видимых нижних
колонтитулах. Работают оба режима: копия без подписи и «подписывать копию».

Подписанная копия со штампом больше не перезаписывается ни при подписании,
ни инструментом «Штамп»; PDF-копия пишется атомарно.
System.Security.Cryptography.Pkcs 8.0.2 (GHSA-846f-f764-76mx,
GHSA-2fmv-rv2c-59x7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BtHSRXSuM8qTBTUBe29624
Копия со штампом и инструмент «Штамп» ставят плашку «Документ подписан»
только по подписям, которые криптографически проверяются по документу;
подпись под другой версией больше не превращается в плашку. Дата на
плашке — время подписания из самой подписи, номер МЧД — только у того,
кто подписывает сейчас (раньше всем ставились текущие дата и МЧД).
«Штамп» без подписания находит подписи по содержимому и работает без
выбранного сертификата.

Сбой создания копии после записи подписи — предупреждение в строке
файла, а не «Ошибка» подписания. В режиме «подписывать копию» приложенные
подписи оригинала больше не обещаются к объединению с подписью копии.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BtHSRXSuM8qTBTUBe29624
…апками

Пока идёт подписание, параметры, сертификат, МЧД, «Применить ко всем»,
настройки и состав очереди заблокированы: раньше их можно было сменить
после подтверждения рисков, и следующие файлы подписывались уже с другими
параметрами. Убранный из очереди файл не подписывается, перетащенные во
время подписания подписи не прикладываются молча. AddPoaCommand обновляет
доступность вместе с IsBusy. Перетаскивание папки пропускает недоступные
подпапки. Смоук-тест интерфейса больше не пишет снимок в /opt/cursor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BtHSRXSuM8qTBTUBe29624
@zaynullinmi
zaynullinmi merged commit acc7193 into main Oct 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants