решение из ленты заказов

Интерактивное содержание для томов проектной документации

ГОСТ Р 21.101, п. 4.1.5: в электронном томе строки содержания с номерами листов должны быть ссылками. Программа находит лист «Содержание», читает номера листов и ставит на каждую строку кликабельную ссылку на нужную страницу, плюс закладки в боковой панели PDF. Текст, штампы и чертежи не трогаются. 42 тома — одна команда и отчёт по каждому.

Попробуйте на своём томе

Перетащите PDF-том сюда или

Файл никуда не отправляется: разбор и запись ссылок идут прямо в браузере.

Выберите PDF или возьмите образец.

Образец: до и после

Том-образец 5.1 «Система электроснабжения» (14 листов, объект и шифр выдуманы): без ссылоксо ссылками и закладками. Второй образец начинается с обложки без номера — программа сама видит сдвиг на 1: без ссылоксо ссылками.

Как это работает

  1. Ищет в первых страницах лист с заголовком «Содержание» (и его продолжения).
  2. Строка таблицы, которая кончается номером листа, — это запись; строки основной надписи (Изм., Лист, Листов, Стадия) пропускаются, перенос длинного названия приклеивается к своей записи.
  3. Сдвиг «лист → страница PDF» угадывается сам: по тому, на какой странице стоит название из строки. Обложка без номера, вклейка — видно в отчёте, можно задать руками.
  4. На каждую строку ставится ссылка, в боковую панель — закладки двух уровней (разделы и подразделы).
  5. Пачка: python pdf_soderzhanie.py папка_томов\ --out готово\ — все тома и отчёт.csv: сколько строк, сколько ссылок, какой сдвиг, где замечания.
Ядро: pdf_soderzhanie.py (Python, PyMuPDF) и toc-core.js (браузер)

скачать pdf_soderzhanie.py · toc-core.js — 10 тестов: каждая ссылка ведёт на страницу со своим названием, штамп не превращается в ссылку, сдвиг от обложки угадан, текст тома не изменился, браузерное ядро даёт те же ссылки, что Python.

Ваши тома — в тот же день

Прогоняем все тома, по каждому — отчёт и выборочная проверка ссылок глазами. Нестандартное содержание (сканы, картинки вместо текста, свои формы) — скажем сразу, до оплаты.

Обсудить задачу