Да.
Вы пытаетесь изменить существующий PDF с помощью PdfWriter
, когда вы должны использовать PdfStamper
.
Добавление текста с помощью штампа гораздо менее тривиально, чемДелая это с PdfWriter
и Document
.
Вам необходимо создать ColumnText
объект и получить PdfContentByte
, вызвав myStamper.getOverContent(pageNum)
.
Вы добавляете абзацы/ chunks / etc к ColumnText
и передать ему PdfContentByte
(и некоторые позиционные параметры) для рисования текста.
В качестве альтернативы, вы можете создать отдельный PDF с вашим текстом (и всем остальным)затем используйте PdfStamper
& PdfImportedPage
, чтобы импортировать эти страницы и записать их поверх существующих.Фоны страниц PDF прозрачны, пока вы не нарисуете что-то поверх них, поэтому текст (и прочее) будет отображаться поверх существующей страницы.Это заметно менее эффективно, так как второй документ необходимо преобразовать в байтовый массив в синтаксисе PDF (если вы используете ByteArrayOutputStream
вместо записи в файл, что было бы еще медленнее), снова проанализировать, а затемдобавлен в исходный документ и записан во второй раз.
Стоит немного дополнительных усилий, чтобы использовать ColumnText
.
Вам также необходимо написать свой верхний и нижний колонтитулы непосредственно с помощью PdfContentByte
звонки, но вы должны сделать это уже в вашем PdfPageEvent
, поэтому эти изменения должны быть довольно простыми.