Создайте места назначения для всех закладок в PDF-файле с помощью iText API.

StackOverflow https://stackoverflow.com/questions/173495

Вопрос

Я хотел бы написать некоторый (Java) код, который принимает PDF-документ и создает именованные места назначения из всех закладок.Я думаю, что iText API — самый простой способ сделать это, но я никогда раньше не использовал этот API.

Как бы вы написали такой код с помощью iText API?Может ли iText самостоятельно выполнять анализ, необходимый для управления существующими PDF-файлами?Я имею в виду следующие манипуляции:

  • Открыть,
  • Найдите закладки,
  • Создавать направления,
  • Сохранять,
  • Закрывать.

Или есть другой API, который был бы лучше?

Это было полезно?

Решение

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

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

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

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

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

Извините, я не могу вам больше помочь.Удачи.

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

Другие советы

Следовать за:Несколько месяцев назад я отправил патч для iText (теперь он принят и является частью HEAD), который добавляет в iText возможности анализа текста.PdfBox (упомянутый ниже) имеет (был?) проблемы с чтением новых PDF-файлов, в которых используются потоки внешних ссылок вместо старого формата таблицы внешних ссылок.


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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top