如何在PDF表单中对齐右多行文本字段?

问题描述 投票:1回答:3

我创建了一个包含交互式表单字段的pdf模板。 PDF模板由单行文本字段和多行组成。有些左对齐,有些对齐。我想要一些多行字段文本右对齐,但它显示默认的左对齐。我还进行了更改,并在字段属性中选择了右对齐。但仍然没有运气

我正在使用i-text动态填充表单字段。所有对齐设置都在PDF中完成,但多行字段未根据我的模板设计对齐。看图像

enter image description here

此外,当我在Chrome浏览器中预览动态创建的PDF时,对齐方式不会更改为右侧。

与左对齐的字段工作正常。任何人都可以建议我缺少什么?

forms pdf itext text-align pdf-form
3个回答
0
投票

您没有告诉我们您是否需要手动更改对齐的解决方案(使用带GUI的工具)或以编程方式(使用iText)。

如果要手动更改字段的对齐方式,只需在Adobe Acrobat中打开PDF模板(表单),然后选择更改AcroForm字段的选项。从左到右更改对齐方式。

如果要以编程方式更改对齐方式,则应告诉我们您是使用iText 7(您应该使用)还是使用iText 5(您可以使用)。

如果您使用的是iText 7,则对齐设置如下:

PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
Map<String, PdfFormField> fields = form.getFormFields();
PdfFormField field;
field = fields.get("personal.name");
field.setJustification(PdfFormField.ALIGN_LEFT);
field.setValue("Test");
field = fields.get("personal.loginname");
field.setJustification(PdfFormField.ALIGN_CENTER);
field.setValue("Test");
field = fields.get("personal.password");
field.setJustification(PdfFormField.ALIGN_RIGHT);
field.setValue("Test");
field = fields.get("personal.reason");
field.setValue("Test");
pdfDoc.close();

另请参阅官方iText常见问题解答中的How to align AcroFields?

如果您使用的是iText 5,则对齐设置如下:

PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
AcroFields form = stamper.getAcroFields();
AcroFields.Item item;
item = form.getFieldItem("personal.name");
item.getMerged(0).put(PdfName.Q, new PdfNumber(PdfFormField.Q_LEFT));
item = form.getFieldItem("personal.loginname");
item.getMerged(0).put(PdfName.Q, new PdfNumber(PdfFormField.Q_CENTER));
item = form.getFieldItem("personal.password");
item.getMerged(0).put(PdfName.Q, new PdfNumber(PdfFormField.Q_RIGHT));
form.setField("personal.name", "Test");
form.setField("personal.loginname", "Test");
form.setField("personal.password", "Test");
form.setField("personal.reason", "Test");
stamper.close();
reader.close();

另请参阅官方iText常见问题解答中的How to align AcroFields?

如您所见,iText 7代码更优雅,更易于理解。


0
投票

以Itext 7为例,将单行字段更改为多行字段

PdfFormField field;
field = fields.get("personal.name");
field .setCheckType(PdfFormField.FF_MULTILINE);

0
投票

您可以将您的itext版本更新到最新版本,然后问题就可以解决了。

© www.soinside.com 2019 - 2024. All rights reserved.