В iText 7 вы можете создавать формы acro, как описано в https://itextpdf.com/en/resources/books/itext-7-jump-start-tutorial-java/chapter-4-making-pdf-interactive.
Вы также можете предоставить полю значение, которое может редактировать пользователь.
Но когда вы это сделаете, текст сместится, как только пользователь войдет в это поле.
Когда пользователь завершит редактирование, текст не сместится обратно в исходное положение.
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Document document = new Document(pdfDoc);
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
document.add(new Paragraph("Form").setTextAlignment(TextAlignment.CENTER).setFontSize(16));
document.add(new Paragraph("Full Name").setFontSize(12));
Rectangle rect = new Rectangle(99, 753.5F, 425, 15);
// I provide a default value of
PdfTextFormField nameField = PdfTextFormField.createText(pdfDoc, rect, "name", "My default name");
form.addField(nameField);
// I draw some shapes to make the problem more obvious.
float offset = 65;
rect.setX(rect.getX() - offset);
rect.setWidth(rect.getWidth() + offset);
new PdfCanvas(pdfDoc.getLastPage())
.rectangle(rect)
.setStrokeColor(ColorConstants.BLACK)
.setLineWidth(0.5F)
.moveTo(rect.getX(), rect.getY() + 4)
.lineTo(rect.getX() + rect.getWidth(), rect.getY() + 4)
.stroke();
pdfDoc.close();
Desktop.getDesktop().open(new File(DEST));
На изображении выше вы можете видеть, что текст выложен аккуратно.
На изображении выше пользователь начал редактировать поле. Это больше не аккуратно выровнено
На изображении выше, пользователь завершил редактирование. Текст не восстановлен в исходное положение.
В этом примере эффект довольно минимален.
Но в зависимости от размеров поля это может быть довольно драматично.
Особенно в таблицах может быть шум.
Есть ли решение для этого?