Создайте места назначения для всех закладок в файле PDF с iText API

Вы можете использовать функцию __import__ для динамического импорта модуля, используя имя строки, переданное в командной строке.

mod = sys.argv[1]
command =__import__(mod)
# assuming your pattern has a run method defined. 
command.run()

Обработка ошибок и т. Д. Оставлена ​​в качестве упражнения для читателя

Редактировать: Это будет зависеть от пользовательских плагинов, устанавливаемых через pip. Если вы хотите, чтобы пользователи добавляли плагины в папку без установки, вам нужно добавить эту папку в путь к Python.

7
задан Joris Schellekens 27 October 2017 в 18:23
поделиться

2 ответа

Я просто буду предупреждать Вас впереди, что Вы можете быть разочарованы этим. iText действительно не предназначается, чтобы использоваться в качестве синтаксического анализатора. Это действительно больше для создания совершенно новых документов в формате PDF, но можно взять сильный удар в нем.

Для запуска, с помощью iText, Вы не сможете изменить существующий документ в формате PDF. Что можно сделать, тем не менее, должен сделать копию с дополнительными функциями, которые Вы хотите. (Если кто-то еще знает лучше, сообщите мне, это сводит меня с ума.)

То, что Вы захотите сделать, создают объект PdfReader из входного потока на Вашем исходном файле. Затем создайте объект PdfCopy (который является просто расширенным PdfWriter, который делает получение данных из существующего источника более удобным) для Вашего места назначения.

Насколько я могу сказать, закладки не могут быть получены из iText вообще. Другая библиотека может быть необходима. Я думаю, что jpedal может иметь способность извлечь их (это может получить их как XML-документ, который Вам, вероятно, затем придется проанализировать для получения то, что Вы хотите.) Однако Вы получаете их, можно затем добавить их к java.util. Список и набор, которые перечисляют как схему на PDFCopy. Самими закладками является просто HashMaps с определенным набором ключей. Я не уверен, каковы все значения, но они включают "Заголовок", "Действие" (который, кажется, где Вы указали бы, что это - именованное место назначения, хотя я не знаю то, чем то значение было бы), и "URI" (который используется, если бы это - внешняя ссылка - я подозреваю, что это указало бы имя именованного места назначения, которое Вы связываете с). Снова, специфические особенности трудно найти.

Затем выполните итерации по страницам читателя, импортировав каждую страницу к PdfCopy., эта страница может помочь Вам.

Извините я не более полезен Вам.Удачи.

P.S. Если кто-либо еще знает о лучшем инструменте, это или (L) GPL или лицензируемый BSD, я хотел бы услышать об этом.

3
ответ дан 7 December 2019 в 05:34
поделиться

Продолжение: Я отправил патч к iText несколько месяцев назад (он был теперь принят и является частью ГОЛОВЫ), который добавляет текст, анализирующий возможности к iText. PdfBox (упомянутый ниже) имеет (имел?) проблемы с чтением более новых PDFs, которые используют xref потоки вместо более старого xref формата таблицы.


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

Я также упомяну, что iText действительно имеет способность проанализировать файл PDF, это просто не сильно в парсинге текстового содержания на каждой странице. При рассмотрении доступа к PDF высокоуровневые конструкции (Словари, и т.д....), которые используются для хранения закладок, и т.д...., и Вы не возражаете доставать немного грязные с чтением спецификации PDF, можно абсолютно сделать то, что Вы спрашиваете о (мы делаем это вполне немного сами).

Спецификация PDF является большой, но читаемой по большей части, и Вы не должны волноваться об объеме ее (который приспособлен к фактическому содержанию страницы и представляющий), если все, что Вы пытаетесь сделать, извлечь закладки.

5
ответ дан 7 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: