【问题标题】:Different position of text by flatten pdf with iText通过使用 iText 展平 pdf 来放置不同的文本位置
【发布时间】: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 谢谢你的提示!!!这是为我找到解决方案的线索。如果您将其发布为答案,我会将其标记为正确的。

标签: java forms pdf itext


【解决方案1】:

多年来,PDF 文件中字段基线的位置已更改。您甚至会看到取决于您使用的 Acrobat 版本的差异。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2018-02-08
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多