Как плавно добавить содержимое в существующий документ PDF? - PullRequest
1 голос
/ 01 марта 2012

Требование: У меня есть существующий документ PDF. И я хочу вставить абзац, который является кратким описанием чего-либо, в документ PDF в самом начале (первая страница).

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

Поэтому мне интересно, есть ли лучший способ для достижения этой цели, который плавно вставляет некоторый контент в существующий PDF, как это делается в документе Word?

Спасибо!

EDIT: Почему я получил отрицательный голос?

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

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

PDF - это язык описания страниц ; его цель - указать точно , как будет выглядеть страница, и сделать это настолько мрачно, что каждый читатель PDF на каждой платформе будет производить точно такой же продукт. Это включает в себя не только содержимое страницы (текст, изображения и т. Д.) И форматирование (какой текст выделен жирным шрифтом, а какой - по центру и т. Д.), А также сами шрифты, точные координаты XY каждого объекта и все виды других типов. детали, которые настолько загадочны, что я могу только догадываться, какими они могут быть, и с которыми никому не придется сталкиваться, если они не пишут программу для чтения PDF.

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

Оно того не стоит.

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

Если документы вообще неоднородны, то вам придется настаивать на том, чтобы ваш клиент предоставил вам документы в прозрачном формате; то есть тот, который описывает содержание и форматирование документа, а не детали того, как именно его отобразить. Все, что вы можете редактировать в полнофункциональном текстовом процессоре (простой текст, Rich Text Format, OpenDocument, Office Open XML), подходит. Библиотеки Java существуют для всех этих форматов (хотя я понятия не имею, насколько они хороши), и они поддерживаются как Microsoft Word, так и LibreOffice, поэтому ваши клиенты, вероятно, в первую очередь создали документы в одном из этих форматов.

1 голос
/ 02 марта 2012

Если вам необходимо сжать существующее содержимое PDF, чтобы оно соответствовало новому содержимому, а клиенту не нравится сокращение шрифта, вы не сможете решить проблему таким способом.Поставить противоречивые требования было бы настоящим подвигом.

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

Если ваши исходные PDF-файлы отличаются или являются динамическими, тогда как Taymonуказал, что у вас мало шансов.Если вы будете искать в сети, используя строку поиска типа «назначение PDF», вы найдете полезную справочную информацию о том, почему ее нелегко редактировать.

...