Nano Hash - криптовалюты, майнинг, программирование

Создайте схемы/TOC для существующего PDF в Python

Я использую pyPdf для объединения нескольких файлов PDF в один. Это прекрасно работает, но мне также нужно добавить оглавление/схемы/закладки в созданный PDF-файл.

pyPdf, похоже, поддерживает только чтение для контуров. Reportlab позволил бы мне создать их, но версия с открытым исходным кодом не поддерживает загрузку PDF-файлов, поэтому добавление контуров в существующий файл не работает.

Есть ли способ добавить контуры в существующий PDF-файл с помощью Python или любой библиотеки, которая позволила бы это сделать?

27.05.2011

  • Внезапно я думаю, что есть по крайней мере не-Python решения для этого, чтобы вы могли создать свой PDF-файл, а затем запустить команду с некоторыми параметрами, чтобы указать, что вы хотите для схемы. Не очень хорошо, но, вероятно, это должно, по крайней мере, позволить вам выполнить работу. 28.05.2011
  • Это может сработать или не сработать для вас, однако попробуйте ссылку pdfrecycle утверждает, что поддерживает индекс и генерация закладок. 02.06.2012

Ответы:


1

У нас была похожая проблема в WeasyPrint: cairo создает PDF-файлы, но не поддерживает закладки/схемы или гиперссылки. В конце концов мы стиснули зубы, прочитали спецификацию PDF и сделали это сами. .

pdf.py от WeasyPrint имеет простой анализатор PDF и средство записи, которое может добавлять/переопределять «объекты» PDF в существующие документы. Он использует механизм «обновления» PDF и добавляет только в конец файла.

Этот модуль был создан только для внутреннего использования, но я открыт для его рефакторинга, чтобы упростить его использование в других проектах.

Однако синтаксический анализатор использует несколько сокращений и не может анализировать все допустимые PDF-файлы. Возможно, его придется адаптировать, если вывод PyPDF не так хорош, как у cairo. Из строки документации модуля:

Вместо того, чтобы пытаться анализировать любой допустимый PDF-файл, мы делаем некоторые предположения, которые справедливы для cairo, чтобы упростить код:

  • Все символы новой строки '\n', а не '\r' или '\r\n'
  • За исключением номера 0 (который всегда свободен) нет «свободных» объектов.
  • Большинство разделителей пробелов состоят из одного пробела 0x20.
  • Объекты косвенного словаря не содержат «>>» в начале строки, за исключением обозначения конца объекта, за которым следует «endobj». (Другими словами, маркеры «>>» для подсловарей имеют отступ.)
  • Дерево страниц плоское: все дочерние узлы корневого узла страницы являются объектами страницы, а не узлами дерева страниц.
27.07.2012

2

Похоже, PyPDF2 может справиться с этой задачей. См. метод addBookmark в документации: https://pythonhosted.org/PyPDF2/PdfFileMerger.html

24.01.2019

3

https://github.com/yutayamato/pdfoutline Я создал библиотеку Python только для того, чтобы добавить схему в существующий файл PDF.

11.03.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..