代码之家  ›  专栏  ›  技术社区  ›  Ryan Versaw

在ITextSharp中将格式文本添加到AcroField

  •  3
  • Ryan Versaw  · 技术社区  · 16 年前

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

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

    我见过 elsewhere 我应该能够插入一些包含格式信息的XML,但是我不知道这个XML应该是什么样子。

    这是那一页的一部分,它让我相信我想要的是可能的:

    它仍然标记实际的XML代码 到现场,读者不会 将其呈现为图章中的格式文本 PDF格式。

    对此的工作回应是:

    为了工作你得打电话 acrofilds.setGenerateAppearances(错误)。 请注意,旧版本的阅读器没有 生成外观。

    这个XML应该是什么样子的,或者有其他的方法来实现它吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Mark Storer    14 年前

    不久前,我向IText添加了设置字段的富文本值的功能。我没有添加任何渲染代码来备份这个。

    这意味着查看富值的唯一方法是通过支持它的PDF查看器(reader/acrobat)。为了让他们知道他们需要重建所有的外场形象,你必须打电话给 acroFields.setGenerateAppearances(false) . 这将禁用IText的外观生成,并要求PDF查看器为您生成外观。

    如果你想的话 扁平格式文本 完全在IText[夏普]内,你必须做些棘手的事情:

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

    痛苦,但有效。

    您可以对htmlworker执行1操作,并使用原始的富文本/html作为输入。

    事实上,如果一个htmlworker提供一个columntext对象来在同一个文档中呈现HTML,而不是一个新的文档,那么您可能会获得更高的效率,然后将其写出并重新读取。使用适当的边界框从任何旧页的DirectContent提取pdfemplate。

    那就不会那么糟糕了。