ОБРАБОТКА PDF — ДЕМОНСТРАЦИОННЫЙ ПРОЕКТ
Все данные синтетические. Это не клиентский заказ и не подтверждение опыта работы с реальным клиентом.

Откройте index.html локально. Статическая страница предназначена для /portfolio/pdf-processing/; assets/ и downloads/ размещаются рядом. Внешних шрифтов, скриптов, API и сетевых запросов нет. Ссылка ../ ведёт к родительскому портфолио после встраивания.

БЫЛО: downloads/input.pdf — 3-страничный цифровой PDF с выделяемым текстом: три таблицы,24 позиции, примечания и смешанное оформление строк. downloads/input-layout.docx — синтетический авторский исходник, из которого получен входной PDF. source-data.json фиксирует контрольные исходные данные.
СТАЛО: downloads/processed.docx — настоящий редактируемый Word с тремя таблицами и именованными стилями. downloads/processed.pdf — PDF, реально экспортированный LibreOffice Writer. materials.csv — извлечённые24 строки; totals.csv — проверенные итоги разделов и общий итог.

РЕАЛЬНЫЙ ПУТЬ: stdlib Python создаёт синтетический OOXML → установленный LibreOffice экспортирует входной PDF → pdftotext -layout извлекает текст PDF → парсер извлекает24 строки → Decimal проверяет каждое quantity×unit_price=amount → CSV и новый OOXML с единым оформлением → LibreOffice экспортирует чистый PDF → Poppler повторно читает и сравнивает данные.
Это НЕ OCR. Сканы, рукопись, произвольные сканированные книги и460страниц не обрабатывались. Парсер ограничен структурой этого цифрового примера, не универсален.

ПРОВЕРКИ:24 уникальных кода,24/24 строки без потерь;216 единиц; Север608.16,Центр1368.24,Юг2280.24,всего4256.64 руб. CSV хранит десятичную точку и UTF-8 BOM. Не полагайтесь на автоматическую локаль Excel: при необходимости выберите запятую как разделитель столбцов и точку как десятичный разделитель. Это учебные суммы, не наша цена услуги.
Сохранены все названия, числа, три содержательных примечания и итоги. Пометки версий черновика убраны, служебные подписи и оформление изменены намеренно. Не заявляется побайтовое равенство всего PDF-текста, визуальная идентичность или приёмка конкретной типографией. Структура DOCX проверена через XML, открытие — через LibreOffice Writer; Microsoft Word отдельно не запускался.
Превью assets/input-1..3.png и processed-1..3.png получены реальным Poppler-render каждого PDF. Все6 страниц просмотрены: текст читаем, существенной обрезки не обнаружено. На маленьком экране можно открыть полный PNG/PDF по ссылке. HTML responsive CSS подготовлен, браузерный screenshot страницы отдельно не выполнялся.

ВОСПРОИЗВЕДЕНИЕ: python3 -I build.py
Требуются уже установленные LibreOffice24.2,Poppler24.02,Python3. Без installs/network/model. build.py создаёт только синтетические файлы и собственные LO userprofiles в этой папке. COMMANDS.json содержит фактические argv/exit коды. Повторная сборка может менять PDF metadata и SHA; опубликованные SHA относятся к текущим файлам.
checks.json содержит проверки данных; SHA256SUMS.json — контрольные суммы пакета. Архив включает исходник, результат, CSV, код, страницу, превью и этот README. ZIP — упаковка, а не доказательство визуальной идентичности.
Публикация не выполнена. Босс отдельно проверяет и включает пакет в общий каталог перед передачей владельцу сайта.
