我在使用iText时遇到问题,并在pdfs中展平了表单字段。
我将在Acrobat中创建的表单字段的pdf提交到我的java方法。在网站上,我创建了一个表单来填写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中的文本完全相同,因此我必须找到解决这种不当行为的方法。我希望有人可以帮助我。
提前感谢您的帮助。
答案 0 :(得分:0)
多年来,PDF文件中字段基线的位置已发生变化。您甚至会看到差异,具体取决于您使用的Acrobat版本。
除非您知道确切的偏移,否则没有解决方案。如果这样做,您可以使用setExtraMargin()
方法在展平文档时更改所有字段的偏移量。
我们创建了此方法来处理具有与预期不同的基线的特定表单。对于不同的表单,您选择的值可能会有所不同。