在iTextSharp中将富文本添加到AcroField

时间:2009-09-21 14:08:37

标签: .net pdf-generation itextsharp

我需要使用iTextSharp将一些格式化的文本添加到PDF表单字段中,我似乎无法弄明白。这就是我当前设置字段的方式,但插入文本的某些部分需要是粗体或其他格式。

stamper.AcroFields.SetField("fieldName", "fieldValue")
stamper.FormFlattening = True

我已经看到elsewhere我应该能够插入一些包含格式信息的xml,但我不知道这个xml应该是什么样的。

以下是该页面的部分,让我相信我想要的是可能的:

  

它仍然标记了实际的XML代码   到现场,读者不会   将其渲染为标记中的富文本   PDF。

对此的工作回应:

  

为了工作,你必须打电话   AcroFields.setGenerateAppearances(假)。   请注意,较旧的Reader版本没有   产生外表。

这个xml应该是什么样的,还是有其他方法可以实现这个目标?

1 个答案:

答案 0 :(得分:0)

前段时间,我添加了iText设置字段的富文本值的功能。我没有添加任何渲染代码来备份它。

这意味着通过支持它的PDF查看器(Reader / Acrobat)来查看丰富价值的唯一方法。为了让他们知道他们需要重建所有场地外观,你必须致电acroFields.setGenerateAppearances(false)。这会禁用iText的外观生成,而是请求PDF查看器为您执行此操作。

如果你想在iText [Sharp]中完全使用扁平的富文本,你将不得不做一些棘手的事情:

  1. 在单独的文档中将富文本绘制到PDF页面中。此页面的大小应与字段的大小相匹配。保存(内存流很好)。
  2. 添加新的PushbuttonField,设置为LAYOUT_ICON_ONLY。使用与原始文本字段相同的边界框。将按钮的背景颜色设置为null(透明)。
  3. 创建富文本页面的PdfImportedPage,并将此导入的页面设置为新的PushbuttonField图标(模板)。
  4. 拼合。
  5. 痛苦但有效。

    您可以使用HTMLWorker执行#1并使用原始的富文本/ HTML作为输入。

    事实上,使用一个HTMLWorker提供一个ColumnText对象来渲染你的HTML在同一个文档而不是一个新文件中,然后将其写出并再次读回来,你可能会获得更高效率。使用适当的边界框从任何旧页面的DirectContent中创建PdfTemplate。

    那会少得多。