文本不适合表单字段(iTextSharp)

时间:2012-11-20 16:23:13

标签: itextsharp scrollbars

我使用Adobe Acrobat Pro创建了一个.PDF文件。该文件有几个文本字段。使用iTextSharp,我可以填充所有字段并邮寄出.PDF。

有一件事让我烦恼 - 其中一些不会在文本框中“适合”。在Adobe中,如果我输入的分配高度更多,滚动条会启动 - 当字体大小未设置为auto且允许多行时会发生这种情况。

但是,当我尝试设置以下属性时:

//qSize is float and set to 15;
//auto size of font is not being set here.
pdfFormFields.SetFieldProperty("notification_desc", "textsize", qSize, null);

// set multiline
pdfFormFields.SetFieldProperty("notification_desc", "setfflags", PdfFormField.FF_MULTILINE, null);

//fill the field
pdfFormFields.SetField("notification_desc", complaintinfo.OWNER_DESC);

然而,在编辑和加盖印章后,滚动条不会出现在最终的.PDF中。

我不确定这是否正确。我想也许我应该创建一个表并用文本填充它,但文档很少或没有引用滚动条....

1 个答案:

答案 0 :(得分:2)

展平文档时,会删除所有交互功能。期望在扁平形式上工作滚动条,类似于期望在打印纸上工作滚动条。这就是为什么你没有对你的问题做出很多回应:这有点荒谬。

当您使用文本填充矩形时,将忽略所有不适合的文本。这就是为什么有些人将字体大小设置为0.在这种情况下,将调整字体大小以使文本适合。我不知道这是否适合您,因为您明确指出字体大小必须为15磅。

如果无法更改字体大小,则不应期望AcroForm表单字段适应内容。 ISO-32000-1清楚地表明:文本字段的坐标是固定的。

您唯一的选择是控制iText如何填补该领域。我举例说明了如何在bookMovieAds.java / MovieAds.cs的上下文中执行此操作。在这个例子中,我向字段询问其坐标:

AcroFields.FieldPosition f = form.GetFieldPositions(TEXT)[0];

此对象为您提供页码f.page和矩形f.position。您可以将这些变量与ColumnText结合使用,以完全按照您想要的方式添加内容(并检查是否已添加所有内容)。

我希望你理解:

  • 在展平的表单上没有滚动条是正常的,
  • 填写字段的标准方式剪辑不适合的内容,
  • 如果您想要自定义结果,则需要进行更多编程。

欲了解更多信息:请参阅“iText in Action - Second Edition”。