我创建了一个包含交互式表单字段的pdf模板。 PDF模板由单行文本字段和多行组成。有些左对齐,有些对齐。我想要一些多行字段文本右对齐,但它显示默认的左对齐。我还进行了更改,并在字段属性中选择了正确的对齐方式。但仍然没有运气
我正在使用i-text动态填充表单字段。所有对齐设置都在PDF中完成,但多行字段未根据我的模板设计对齐。见图像
当我在Chrome浏览器中预览动态创建的PDF时,对齐方式也没有改变到右边。
与左对齐的字段工作正常。任何人都可以建议我缺少什么吗?
答案 0 :(得分: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代码更优雅,更易于理解。
答案 1 :(得分:0)
以Itext 7为例,将单行字段更改为多行字段
PdfFormField field;
field = fields.get("personal.name");
field .setCheckType(PdfFormField.FF_MULTILINE);
答案 2 :(得分:0)
您可以将itext版本更新到最新版本,然后就可以解决问题。