【问题标题】:Adding Rich Text to an AcroField in iTextSharp在 iTextSharp 中向 AcroField 添加富文本
【发布时间】:2010-11-30 02:16:23
【问题描述】:

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

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

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

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

它仍然标记实际的 XML 代码 到场上,阅读器不会 在标记中将其呈现为富文本 PDF。

对此的工作回应:

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

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

【问题讨论】:

    标签: .net pdf-generation itextsharp


    【解决方案1】:

    不久前,我向 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。

    这样会少很多。

    【讨论】:

    • 我接受这个并希望它是一个有效的答案,但我什至很久没有看过任何相关代码并且无法测试这个。如果其他人看到这一点并可以验证答案,那就太好了!
    • 我尝试使用这种方法没有成功。临时文档为空。代码位于:stackoverflow.com/questions/10397431/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多