Java 通过使用iText展平pdf来改变文本的位置

Java 通过使用iText展平pdf来改变文本的位置,java,forms,pdf,itext,Java,Forms,Pdf,Itext,我对PDF中的iText和扁平表单字段有问题 我将带有Acrobat中创建的表单字段的pdf提交到我的java方法。在一个网站上,我创建了一个表单来填充pdf中的表单字段。表单字段已正确填充,但只要我展平文档,文本就会移动到稍微不同的位置。最大的区别出现在多行表单字段中。文本位于左上角字段的边界处。在Acrobat中,在展平文本之前,文本顶部有一个填充 以下是我调用iText方法的java代码: PdfReader template = new PdfReader(templ); XfdfRea

我对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();
PdfReader模板=新的PdfReader(模板);
XfdfReader XfdfReader=新的XfdfReader(xfdf);
OutputStream OutputStream=新文件OutputStream(输出);
PdfStamper压模=新的PdfStamper(模板,outputStream,'\0');
AcroFields form=stamp.getAcroFields();
Set fields=form.getFields().keySet();
表单设置字段(xfdfReader);
stamper.SetFreeTextFlatting(真);
母版。SetFormFlatting(真);
压模关闭();
template.close();
有人知道为什么我放平pdf时文本会移动吗?我怎样才能避免这种情况

我已经尝试了iText的不同版本。从4.X版到5.X版。这种差异在所有版本中都会出现

虽然我尝试在iText的代码中移动表单字段,但是整个字段都在移动,位置的差异更大,而且不可预测

在我的项目中,文本必须与Acrobat中的位置完全相同,因此我必须找到解决此错误行为的方法。我希望有人能帮助我


提前谢谢你的帮助

PDF文件中字段基线的位置多年来一直在更改。根据您使用的Acrobat版本的不同,您甚至会看到差异

除非你知道确切的偏移量,否则你的问题没有解决办法。如果这样做,则可以使用该方法在展平文档时更改所有字段的偏移量


我们创建此方法是为了处理基线与预期不同的特定表单。对于不同的表单,您选择的值可能不同。

PDF文件中字段基线的位置多年来一直在更改。根据您使用的Acrobat版本的不同,您甚至会看到差异。除非你知道确切的偏移量,否则你的问题没有解决办法。如果您这样做,您可以在展平文档时使用更改所有字段的偏移量。@BrunoLowagie谢谢您的提示!!!这是为我找到解决办法的线索。如果你把它作为答案贴出来,我会把它标记为正确的答案。