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