编辑并渲染RichText

时间:2010-03-19 10:59:07

标签: .net winforms richtextbox richtext pdfsharp

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

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