【问题标题】:How to align right multi-line text field in PDF Forms?如何在 PDF 表单中对齐右多行文本字段?
【发布时间】:2017-11-21 17:05:56
【问题描述】:

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

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

而且当我在 chrome 浏览器中预览动态创建的 PDF 时,对齐方式不会向右更改。

左对齐的字段工作正常。谁能建议我缺少什么?

【问题讨论】:

  • 您阅读文档了吗?您使用的是 iText 5 还是 iText 7?

标签: forms pdf itext text-align pdf-form


【解决方案1】:

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

如果您想手动更改字段的对齐方式,只需在 Adob​​e 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 代码更优雅,更易于理解。

【讨论】:

  • 嗨,布鲁诺,我正在使用 iText 7 填充我的 pdf。有什么方法可以在不更改我的 iText 代码的情况下使其工作。
  • 你在 Stack Overflow 上问一个编程问题,我给了你答案(在你的情况下使用 setJustification() 方法)。现在您说您想获得解决方案而无需更改代码?我不确定我是否完全理解你的问题的性质。幸运的是,您始终可以在表单中设置对齐方式。这样,您确实不必更改代码。我已经更新了我的答案。
  • 我已经为 iText 7 尝试了上述代码,但仍然无法正常工作。此外,我的应用程序具有预览功能。用户可以在浏览器 pdf 查看器中预览它。它在预览时显示在左侧,但是如果我下载文件并在 adobe 中打开它,对齐就可以了。
  • 你说 * 如果我下载文件并在 adobe 中打开它,对齐工作。* 这意味着 iText 7 正确执行,但浏览器的 PDF 查看器中的预览软件不支持结盟。您不应该将浏览器的 PDF 查看器中的错误归咎于 iText 7。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多