通过使用iText展平pdf,文本的不同位置

我在使用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)

2 years ago

多年来,PDF文件中字段基线的位置已发生变化 . 您甚至会看到差异,具体取决于您使用的Acrobat版本 .

除非您知道确切的偏移量,否则没有解决方案 . 如果这样做,则可以使用setExtraMargin()方法在展平文档时更改所有字段的偏移量 .

我们创建了这种方法来处理具有与预期不同的基线的特定表单 . 对于不同的表单,您选择的值可能不同 .