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

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

2 years ago

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

当您使用文本填充矩形时,将忽略所有不适合的文本 . 这就是为什么有些人将字体大小设置为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” .