【发布时间】:2014-02-24 09:15:06
【问题描述】:
我在使用 iText 和展平 pdf 中的表单域时遇到问题。
我向我的 java 方法提交了一个包含在 Acrobat 中创建的表单字段的 pdf。在一个网站上,我创建了一个表格来填写 pdf 中的表格字段。表单字段已正确填写,但是一旦我将文档展平,文本就会移动到稍微不同的位置。最大的不同体现在多行表单字段中。文本位于左上角字段的边界。在 Acrobat 中和展平之前,文本在顶部有一个填充。
这是我调用 iText 方法的 java 代码:
PdfReader template = new PdfReader(templ);
XfdfReader xfdfReader = new XfdfReader(xfdf);
OutputStream outputStream = new FileOutputStream(output);
PdfStamper stamper = new PdfStamper(template, outputStream, '\0');
AcroFields form = stamper.getAcroFields();
Set<String> fields = form.getFields().keySet();
form.setFields(xfdfReader);
stamper.setFreeTextFlattening(true);
stamper.setFormFlattening(true);
stamper.close();
template.close();
任何人都知道为什么当我展平 pdf 时文本会移动?我怎样才能避免这种情况?
我已经尝试过 iText 的不同版本。从版本 4.X 到 5.X。差异出现在所有版本中。
虽然我尝试在iText的代码中移动表单字段,但是整个字段都在移动,并且位置的差异更大并且无法预测。
在我的项目中,文本必须位于与 Acrobat 中完全相同的位置,因此我必须找到解决此不当行为的方法。我希望有人可以帮助我。
提前感谢您的帮助。
【问题讨论】:
-
PDF 文件中字段基线的位置多年来一直在变化。您甚至会看到取决于您使用的 Acrobat 版本的差异。除非您知道确切的偏移量,否则无法解决您的问题。如果你这样做了,你可以使用api.itextpdf.com/itext/com/itextpdf/text/pdf/…在展平文档时更改所有字段的偏移量。
-
@BrunoLowagie 谢谢你的提示!!!这是为我找到解决方案的线索。如果您将其发布为答案,我会将其标记为正确的。