На самом деле нет никакого практического способа сделать это. Как и для любого типа документа, теоретически можно вносить любые изменения в PDF, но это скорее похоже на попытку отладки программы без исходного кода; даже незначительное изменение в объектном коде заставит вас перемещать все вокруг, и вам придется редактировать все виды вещей, которые не предназначены для редактирования человеком, поэтому на практике единственное решение - это сделать изменение исходного кода, а затем перекомпилировать его.
PDF - это язык описания страниц ; его цель - указать точно , как будет выглядеть страница, и сделать это настолько мрачно, что каждый читатель PDF на каждой платформе будет производить точно такой же продукт. Это включает в себя не только содержимое страницы (текст, изображения и т. Д.) И форматирование (какой текст выделен жирным шрифтом, а какой - по центру и т. Д.), А также сами шрифты, точные координаты XY каждого объекта и все виды других типов. детали, которые настолько загадочны, что я могу только догадываться, какими они могут быть, и с которыми никому не придется сталкиваться, если они не пишут программу для чтения PDF.
Чтобы добавить абзац текста в существующий PDF-файл, вам необходимо знать каждую его деталь, и вам придется пересчитывать большую часть его, чтобы вместить дополнительный абзац. Что, в дополнение к тому, что он ошеломляет, потребовало бы переизобретения значительного количества нетривиальной логики, чтобы выяснить, где именно все происходит на странице.
Оно того не стоит.
Если все документы, с которыми вы будете иметь дело, имеют точно такой же макет, и у вас есть шаблон или иным образом есть возможность создать такой же, как они, то вы можете программно извлечь текстовое содержимое из PDF, используйте его плюс Ваш новый абзац, чтобы заполнить шаблон, а затем отобразить его в формате PDF. На первом этапе (извлечение текста) популярным выбором является Apache PDFBox , библиотека Java с открытым исходным кодом для работы с документами PDF.
Если документы вообще неоднородны, то вам придется настаивать на том, чтобы ваш клиент предоставил вам документы в прозрачном формате; то есть тот, который описывает содержание и форматирование документа, а не детали того, как именно его отобразить. Все, что вы можете редактировать в полнофункциональном текстовом процессоре (простой текст, Rich Text Format, OpenDocument, Office Open XML), подходит. Библиотеки Java существуют для всех этих форматов (хотя я понятия не имею, насколько они хороши), и они поддерживаются как Microsoft Word, так и LibreOffice, поэтому ваши клиенты, вероятно, в первую очередь создали документы в одном из этих форматов.