Как предотвратить смещение текстов внутри формы? - PullRequest
0 голосов
/ 08 мая 2019

В 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));

enter image description here На изображении выше вы можете видеть, что текст выложен аккуратно.

enter image description here На изображении выше пользователь начал редактировать поле. Это больше не аккуратно выровнено

enter image description here На изображении выше, пользователь завершил редактирование. Текст не восстановлен в исходное положение.

В этом примере эффект довольно минимален. Но в зависимости от размеров поля это может быть довольно драматично. Особенно в таблицах может быть шум.

Есть ли решение для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...