CSharpWriter
CSharpWriter 是一个由 C# 编写的 RTF 风格文本编写控件。独立的 RichTextBox 控件,可以保存到 XML 文件。
背景
许多人使用标准的RichTextBox
控件来处理 RTF 风格的文本,但RichTextBox
控件存在许多限制。例如,它不能用于无 GUI 的应用程序,RTF 文件格式难以解析,难以通过编程更改文档内容的某个部分。
什么是 CSharpWriter
CSharpWriter
(简称CSWriter
)是一个不依赖RichTextBox
控件的新型 RTF 风格文档处理引擎。它比RichTextBox
更强大。我们希望它能在 .NET 世界中取代 OpenOffice。它支持
- RTF 风格的文档内容,如文本颜色、背景色、字体。
- DOM,您可以在内存中创建文档,而无需创建 GUI 控件。因此
CSWriter
可用于控制台/ASP.NET 应用程序。 - 独立性。
CSWriter
独立于其他组件。它使用system.drawing.graphics
绘制所有内容和 GUI,并自行处理鼠标和键盘事件。您可以不受技术限制地使用它。 - 易于使用。您可以将控件放置在 Winform 上。它提供了数千个 OOP API。
- 轻量级控件。
CSWriter
是从System.Windows.Forms.UserControl
实现的。它在应用程序 UI 线程中运行,占用内存更少。您可以捕获任何未处理的异常。 - 支持 XML 格式。结果文件比 RTF 格式更容易解析。使用 DOM,您可以创建自己的文件格式。
CSWriter
正在开发中。如果您对CSWriter
有任何想法,可以访问网站[https://github.com/dcsoft-yyf/CSharpWriter]。
如何在 WinForm.NET 中使用 CSharpWriter
与其他 Winform 控件一样,您可以轻松使用CSWriter
。在 VS.NET IDE 中,打开 Winform 设计器,在工具箱的左侧,选择“选择项...”。然后选择文件DCSoft.CSharpWriter.dll,您将在工具箱中看到CSWriterControl
,如下图所示
您可以将CSWriterControl
和CSWriterCommandControler
拖放到窗体上,并将其命名为“myEditControl
”和“myCommandControler
”。接下来,您可以在窗体上添加一些button
/toolstripbutton
或菜单项,选择一个button
,在PropertyGrid
中,您会看到一个名为“在myCommandControler
的CommandName
”的属性项,如下图所示
单击最后的按钮,将显示一个类似这样的对话框
您可以选择一个命令并将其绑定到按钮。然后您可以设计一个如下所示的窗体
打开源编辑器,在form_load
事件源代码中,添加以下代码
private void frmTextUseCommand_Load(object sender, EventArgs e)
{
myEditControl.CommandControler = myCommandControler;
myCommandControler.Start();
}
完成这些操作后,您可以运行应用程序,单击按钮或菜单项来使用CSWriter
。看,就是这么简单。
CSWriter
支持大量命令。您可以通过代码myEditControl.ExecuteCommand("FileOpen", true, null)
打开文件,通过代码myEditControl.ExecuteCommand("FileSaveAs", true,null)
保存文件,通过代码myEditControl.ExecuteCommand("InsertString",false,"Some text content")
在当前位置插入一个string
。
这些命令定义在目录“CSharpWriter\Commands”下的WriterCommandModuleBrowse.cs、WriterCommandModuleEdit.cs、WriterCommandModuleFile.cs、WriterCommandModuleFormat.cs、WriterCommandModuleInsert.cs、WriterCommandModuleSecurity.cs、WriterCommandModuleTools.cs文件中。您可以在这些文件中添加自己的命令。例如,此代码定义了“InsertString
”命令
[WriterCommandDescription("InsertString")]
protected void InsertString(object sender, WriterCommandEventArgs args)
{
if (args.Mode == WriterCommandEventMode.QueryState)
{
args.Enabled = args.DocumentControler != null
&& args.DocumentControler.CanInsertElementAtCurrentPosition(
typeof(DomCharElement));
}
else if (args.Mode == WriterCommandEventMode.Invoke)
{
args.Result = 0;
InsertStringCommandParameter parameter = null;
if (args.Parameter is InsertStringCommandParameter)
{
parameter = (InsertStringCommandParameter)args.Parameter;
}
else
{
parameter = new InsertStringCommandParameter();
if (args.Parameter != null)
{
parameter.Text = Convert.ToString(args.Parameter);
}
}
if (args.ShowUI)
{
using (dlgInputString dlg = new dlgInputString())
{
dlg.InputText = parameter.Text;
if (dlg.ShowDialog(args.EditorControl) == DialogResult.OK)
{
parameter.Text = dlg.InputText;
}
else
{
return;
}
}
}
if (string.IsNullOrEmpty(parameter.Text) == false)
{
args.Result = args.DocumentControler.InsertString(parameter.Text);
}
}
}
在此代码中,“QueryState
”部分检测命令当前是否Enable
。System
将调用此部分来设置Button
/MenuItem.Enable =true
或false
。“Invoke
”部分定义在命令的主体中。
文件格式
目前,CSWriter
支持 XML 文件格式的加载和保存。未来,它将支持 RTF、HTML(MHT)、PDF、BMP、ODF(Open document format)文件格式,并且您可以添加自己的文件格式。
部署
CSWriter
是一个轻量级 GUI 控件组件。所有部分都包含在单个文件“DCSoft.CSharpWriter.dll”中。独立于任何第三方组件。它运行在 MS.NET framework 2.0 SP2 或更高版本上。请注意,您必须添加 SP2,因为CSWriterControl
使用了“CanEnableIme
”属性,该属性在 SP2 中定义(在没有 SP2 的 .NET 2.0 中未定义)。
当您需要更新CSWriter
时,只需覆盖 DLL 文件,重新编译您的源代码即可完成。
支持
CSWriter
提供技术支持。如果您有任何问题或想法,可以在下方留言或访问网站[https://github.com/dcsoft-yyf/CSharpWriter]。
兼容性警告
在此版本中,空格的宽度太小。将来,空格的宽度可能会增加,这将改变文档布局。
路线图
这是路线图
- 对于程序员,目前
CSWriter
支持 WinForm.NET、控制台、Windows 服务。CSWriter
提供了一个基于System.Windows.Forms.UserControl
的CSWriterControl
类型,它自行Paint
文档内容,自行处理鼠标和键盘事件,不依赖任何第三方组件。 - COM 互操作,
CSWriter
将通过System.Runtime.InteropServices
支持 COM 互操作,它将支持 COM 基础开发,如 VB6、VC6、PowerBuidler、Delphi7(XE) 或作为 ActiveControl 托管在 IE 中。 - 对于 Web 程序员,未来
CSWriter
将支持 WEB 开发,如 ASP.NET WebForm/MVC 和 ASP.NET Core。还可以与 JAVA/PHP/Node.js 应用程序配合使用。它将支持 Web 浏览器兼容性等。IE/Edge/Chrome/Safari/Firefox。同一文档在不同 Web 浏览器中具有相同的视图、相同的内容布局和相同的打印结果。 - 对于 GUI 操作员,
CSWriter
就像 MS Word 风格。您可以键入任何char
,支持英语、阿拉伯语、藏语。您可以更改文本字体、颜色、背景色、段落格式。未来将支持表格。 - 性能。我们正在努力进行性能优化。未来,加载包含 1000 页的文档将在 10 秒内完成。流畅处理包含 1000 行的表格。
CSharpWriter 内部
DOM
CSWriter
的核心。DOM 描述文档的任何细节。文档的每个部分都映射到一个类实例。程序员可以创建或删除 DOM 元素,修改元素的属性,这些都可以更新文档视图,就像 JavaScript 通过修改 HTML DOM 更新 HTML 视图一样。DOM 也是可扩展的,未来它将添加新的类型元素类,支持新的行为。创建一个无限的cswriter
。
这是 DOM 中的元素实现树
DOM 定义了一组类,就像 HTML DOM 一样,每种类型的类映射到文档中的一种内容类型。例如,DomDocument
类映射到整个文档。它是编程的主要入口;DomImageElement
映射到文档中的图像,DomCharElement
映射到文档中的字符。
这是 DOM 元素引用树
CSWriter
在内存中构建了一个 DOM 树,每个文档元素实例都放置在tree.[Document]
中,它是访问 DOM 树的唯一入口点。您可以向树中插入/删除元素,系统可以快速更新视图,就像 JavaScript 访问 HTMLDom 一样。
许可证
CSWriter
使用 LGPL-2.1 许可证。如果您想更改许可证类型并将其无限制地用于商业用途,可以通过在下方留言与我联系。