【问题标题】:Edit and render RichText编辑和渲染富文本
【发布时间】:2010-03-19 10:59:06
【问题描述】:

我们有一个应用程序(用于楼宇自动化的自定义网络管理工具)支持打印标签,您可以剪下这些标签并将其插入设备的前显示屏。在该工具的早期版本(不是我公司开发的)中,该应用程序只是将字符串推送到一个 Excel 文件中,然后现场技术人员可以操作该文件(如格式化文本)。我们在新版本中没有这样做,因为很难(不可能)保持 Excel 文件同步,并避免绑定到外部应用程序(更不用说不同版本的 Excel)。

我们使用PDFSharp 来呈现标签。它具有类似 System.Drawing 的界面,但可以输出到 System.Drawing.Graphics(屏幕/打印机)以及 PDF 文件,这是必需的。

后来,引入了基本格式,如字体系列、样式、大小、颜色,它们将应用于一个标签(即恰好一个字符串)。现在客户希望能够将这些格式应用于字符串中的单个字符。我认为最简单的方法是支持 RichText 的一个子集。不过,这并不像我想象的那么容易。

当前编辑器只为您要编辑的标签显示一个文本框,字体设置为标签的字体。我想我只是用 RichTextBox 替换它,并更新格式化按钮以使用 RichTextBox 格式化属性。相当容易。但是,我需要绘制文本。我知道您可以让 RichTextBox 绘制到 HDC 或 System.Drawing.Graphics - 但如前所述,我需要它来使用 PDFSharp。渲染位图不是一种选择,因为 PDF 不能很大,而且标签很多。不幸的是,我无法让 RichTextBox 告诉我文本的布局——只要我知道在哪里绘制什么,我就可以手动进行实际渲染。这是第一个问题:如何从 RichTextBox 中获取正确布局的富文本度量?或者有什么方法可以将富文本转换为可以轻松手动绘制的矢量图形格式

我知道NRTFTree 可以用来解析和操作RichText。文档很糟糕(实际上我不知道,它是西班牙语),但我想我可以让它工作。据我了解,它也不会提供布局。正因为如此,我想我必须编写一个自定义编辑控件(记住,它基本上只是一个或两个带有基本 RTF 格式的行标签,而不是一个成熟的编辑控件——更像是在 PowerPoint 中编辑一个文本框)并编写使用 PDFSharp 而不是 System.Drawing 进行绘图的自定义文本布局逻辑。 是否有任何现有的解决方案(即使是部分解决方案)可用于编辑或手动布局(或两者兼有)?

或者有没有我没有看到的完全不同的方法?如果将标签文本作为 RTF 导出到 CSV 文件中,然后在 Excel 中导入,则会保留格式。

对于编辑部分,我需要它在 Windows 窗体中工作。除此之外,我认为它与 Windows 窗体无关。

【问题讨论】:

    标签: .net winforms richtextbox richtext pdfsharp


    【解决方案1】:

    或者有没有我没有看到的完全不同的方法?

    要从剪贴板导入 RTF,我们使用隐藏的 RichEntryField,将整个文本粘贴到其中,选择第一个字符并查询我们支持的格式(字体、大小、粗体、斜体、下划线...),选择第二个字符并查询格式...

    这不是您要寻找的简单解决方案,但您不必自己解析 RTF。

    【讨论】:

    • 感谢您的意见,听起来是一个务实的解决方案。虽然不能解决手动布局的需要,也不能解决如何将其放入 PDFSharp :)
    • 我现在接受这个。我手动实现了布局算法,对此我很满意,尽管 PDFsharp 和 GDI+ 的渲染似乎略有不同。我们的测试适用于我们打算支持的所有情况。
    猜你喜欢
    • 2021-08-12
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多