在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));
在此示例中,效果很小。 但是,根据领域的规模,这可能会非常戏剧化。 尤其是在表中可能会令人不快。
有解决方案吗?