【问题标题】:Richtextbox to iTextSharpRichtextbox 到 iTextSharp
【发布时间】:2025-12-06 15:10:02
【问题描述】:

上下文

我们需要的是从 WPF 应用程序中捕获一些用户输入(格式化文本),并输出带有一些存储图像的 PDF 和最后一页上的用户输入。

我们的尝试

我们创建 WPF 应用程序,添加 iTextSharp 库,从数据库中恢复图像并将其添加到 PDF。那行得通。现在,对于用户输入,我们从 Extended WPF Toolkit 添加了一个RichTextBox 控件。我们添加这个控件主要是因为它的绑定属性和formatters。基本上我们可以将控件的丰富内容绑定到一个属性上。该绑定正在工作。我们已经有了 RTF 格式,例如(例如):

"{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Segoe UI;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1033\fs18\f2\cf0 \cf0\ql{\f2 {\ltrch This is the }{\b\ltrch RichTextBox}\li0\ri0\sa0\sb0\fi0\ql\par}}}"

问题

问题是,PDF 的实际输出正是之前显示的 RTF,但预期输出(例如)必须是:

"This is the **RichTextBox**\r\n"

这显然是因为我们从控件中插入绑定的 RTF,因为它涉及到 PDF,问题是:我们如何添加该内容并指定它的 RTF?

PS。如果您有其他可行的想法或解决方案(不使用richtextbox 或类似的东西),欢迎您。提前致谢。

【问题讨论】:

    标签: c# wpf pdf-generation itextsharp formatter


    【解决方案1】:

    很遗憾,iTextSharp 不直接支持 RTF 格式anymore。我建议先将 RTF 片段转换为 XHTML,然后将生成的 XHTML 导入最终文档(似乎官方的 HTML 支持是gone away,所以在这种情况下 XHTML 是唯一的选择)。

    简而言之,我建议:

    1. 将 RTF 片段转换为 XHTML;
    2. 将 XHTML 流放入新的 iTextSharp 文档(或直接放入最终文档,如果您愿意);
    3. 将上述文档的内容添加到您要导出为 PDF 的目标文档中。

    更新

    没有将RTF 转换为XHTML 的内置机制,但存在许多开源项目;我将开始将此RTF to HTML 转换器与HTML Agility Pack 耦合(这反过来会将您的HTML 转换为XHTML)。

    但是,坦率地说,整个流程有点复杂,我可能会选择更简单的解决方案,可能是直接在您的项目中使用 HTML editor (alternative),或者像其他人一样恢复到 FlowDocument有建议。

    【讨论】:

    • 当然,我已经读过这方面的内容,但问题是,如何将 RTF 转换为 XHTML?
    • 终于用 Smith HTML 编辑器(而不是 RichTextBox)让它工作了,这实际上比我的想法要好得多。谢谢。
    【解决方案2】:

    WPF 已经有一个很好的 FlowDocument 并且渲染效果很好。所以我们创建了 Xaml 到 PDF 转换器,它处于测试阶段,但大多数字符串、表格和图像都成功转换为 PDF,它是一个开源项目,可在 http://xamltopdf.codeplex.com/ 获得,RTF 可以为您提供 FlowDocument,您可以将其转换为 XAML 和将其传递给 XamlToPDF 转换器。

    【讨论】:

    • 我们不能使用这个。我们使用 iTextSharp 是因为它原生支持您的库所缺乏的数字签名和代码生成功能;不过谢谢。
    • 如何使用它来创建 PDF,然后使用 iTextSharp 对其进行签名?我们将添加签名。您说的是哪种代码生成方式?