Pdf. Оглавление. pdf.tocgen
Pdf. Оглавление. pdf.tocgen.
Содержание
1 Общая информация
- Репозиторий: https://github.com/Krasjet/pdf.tocgen
- Сайт: https://krasjet.com/voice/pdf.tocgen/
2 Установка
- Устанавливается как python-пакет:
pipx install pdf.tocgen
3 Рабочий процесс
Пакет pdf.tocgen состоит из 3 отдельных программ:
pdfxmeta
: извлечь метаданные (атрибуты шрифта, позиции) заголовков в создать файл рецепта;pdftocgen
: создать оглавление из рецепта;pdftocio
: импортировать оглавление в документ PDF.
Используем
pdfxmeta
для поиска метаданных заголовков и генерации фильтры заголовков с использованием автоматической настройки:pdfxmeta -p <page> -a 1 in.pdf "Section" >> recipe.toml pdfxmeta -p <page> -a 2 in.pdf "Subsection" >> recipe.toml
- Здесь
<page>
есть номер страницы в файле.
- Здесь
Файл
recipe.toml
будет содержать несколько фильтров заголовков.Пример файла рецепта будет выглядеть так:
[[heading]] level = 1 greedy = true font.name = "Times-Bold" font.size = 19.92530059814453 [[heading]] level = 2 greedy = true font.name = "Times-Bold" font.size = 11.9552001953125
Передадим рецепт программе
pdftocgen
для создания оглавления:pdftocgen in.pdf < recipe.toml
В результате получим текст оглавления следующего вида:
"Preface" 5 "Bottom-up Design" 5 "Plan of the Book" 7 "Examples" 9 "Acknowledgements" 9 "Contents" 11 "The Extensible Language" 14 "1.1 Design by Evolution" 14 "1.2 Programming Bottom-Up" 16 "1.3 Extensible Software" 18 "1.4 Extending Lisp" 19 "1.5 Why Lisp (or When)" 21 "Functions" 22 "2.1 Functions as Data" 22 "2.2 Defining Functions" 23 "2.3 Functional Arguments" 26 "2.4 Functions as Properties" 28 "2.5 Scope" 29 "2.6 Closures" 30 "2.7 Local Functions" 34 "2.8 Tail-Recursion" 35 "2.9 Compilation" 37 "2.10 Functions from Lists" 40 "Functional Programming" 41 "3.1 Functional Design" 41 "3.2 Imperative Outside-In" 46 "3.3 Functional Interfaces" 48 "3.4 Interactive Programming" 50
Его можно сразу импортировать в файл PDF с помощью
pdftocio
:$ pdftocgen in.pdf < recipe.toml | pdftocio -o out.pdf in.pdf
Можно отредактировать оглавление перед его импортом:
pdftocgen in.pdf < recipe.toml > toc pdftocio in.pdf < toc
4 Примеры использования
4.1 pdftocio
Отобразить существующее оглавление PDF-файла в stdout:
pdftocio doc.pdf
Записать существующее оглавление PDF-файла в файл с именем toc:
pdftocio doc.pdf > toc
Записать оглавление из toc-файла в doc.pdf:
pdftocio doc.pdf < toc
Указать имя выходного PDF-файла:
pdftocio -o out.pdf doc.pdf < toc
Скопировать оглавление из doc1.pdf в doc2.pdf:
pdftocio -v doc1.pdf | pdftocio doc2.pdf
- Флаг
-v
помогает сохранить вертикальные позиции заголовков при копировании.
- Флаг
Вывести оглавление для чтения:
pdftocio -H doc.pdf
4.2 pdftocgen
Применить существующий рецепт
rcp.toml
к файлуdoc.pdf
(результат дублируется вstdout
):pdftocgen doc.pdf < rcp.toml
Вывести оглавление в файл с именем
toc
:pdftocgen doc.pdf < rcp.toml > toc
Импортировать созданное оглавление в файл PDF и вывести в doc_out.pdf:
pdftocgen doc.pdf < rcp.toml | pdftocio -o doc_out.pdf doc.pdf
Вывести сгенерированное оглавление для чтения:
pdftocgen -H doc.pdf < rcp.toml
Если вы хотите включить вертикальное положение на странице для каждого заголовка, используйте флаг
-v
:pdftocgen -v doc.pdf < rcp.toml
4.3 pdfxmeta
Искать слово
Anaphoric
во всем PDF:pdfxmeta onlisp.pdf "Anaphoric"
Вывести результат в виде фильтра заголовков с автоматическими настройками:
pdfxmeta -a 1 onlisp.pdf "Anaphoric"
Поиск без учета регистра
Anaphoric
во всем PDF:pdfxmeta -i onlisp.pdf "Anaphoric"
Использование регулярного выражения для поиска без учета регистра
Anaphoric
в PDF-файле:pdfxmeta onlisp.pdf "[Aa]naphoric"
Поиск только на странице 203:
pdfxmeta -p 203 onlisp.pdf "anaphoric"