3

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

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

我在其他地方看到我应该能够插入一些包含格式信息的 xml,但我不知道这个 xml 应该是什么样子。

这是该页面中的部分,它使我相信我想要的东西是可能的:

它仍然将实际的 XML 代码标记到字段上,并且 Reader 不会将其呈现为标记的 PDF 中的富文本。

对此的工作回应:

为此,您必须调用 AcroFields.setGenerateAppearances(false)。请注意,较旧的 Reader 版本不会生成外观。

这个 xml 应该是什么样子,或者有其他方法可以实现吗?

4

1 回答 1

0

不久前,我向 iText 添加了设置字段的富文本值的功能。我没有添加任何渲染代码来支持它。

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

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

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

痛苦,但有效。

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

事实上,通过 HTMLWorker 提供一个 ColumnText 对象以在同一个文档而不是新文档中呈现您的 HTML,然后将其写出并再次读回,您可能会变得更有效率。使用适当的边界框从任何旧页面的 DirectContent 中创建一个 PdfTemplate。

那会少得多。

于 2011-03-16T00:22:02.843 回答