65.9K
CodeProject 正在变化。 阅读更多。
Home

CSharpWriter

starIconstarIconstarIconstarIconstarIcon

5.00/5 (14投票s)

2020年12月17日

LGPL3

5分钟阅读

viewsIcon

12156

downloadIcon

368

CSharpWriter 是一个由 C# 编写的 RTF 风格文本编写控件。独立的 RichTextBox 控件,可以保存到 XML 文件。

背景

许多人使用标准的RichTextBox控件来处理 RTF 风格的文本,但RichTextBox控件存在许多限制。例如,它不能用于无 GUI 的应用程序,RTF 文件格式难以解析,难以通过编程更改文档内容的某个部分。

什么是 CSharpWriter

CSharpWriter(简称CSWriter)是一个不依赖RichTextBox控件的新型 RTF 风格文档处理引擎。它比RichTextBox更强大。我们希望它能在 .NET 世界中取代 OpenOffice。它支持

  1. RTF 风格的文档内容,如文本颜色、背景色、字体。
  2. DOM,您可以在内存中创建文档,而无需创建 GUI 控件。因此CSWriter可用于控制台/ASP.NET 应用程序。
  3. 独立性。CSWriter独立于其他组件。它使用system.drawing.graphics绘制所有内容和 GUI,并自行处理鼠标和键盘事件。您可以不受技术限制地使用它。
  4. 易于使用。您可以将控件放置在 Winform 上。它提供了数千个 OOP API。
  5. 轻量级控件。CSWriter是从System.Windows.Forms.UserControl实现的。它在应用程序 UI 线程中运行,占用内存更少。您可以捕获任何未处理的异常。
  6. 支持 XML 格式。结果文件比 RTF 格式更容易解析。使用 DOM,您可以创建自己的文件格式。
  7. CSWriter正在开发中。如果您对CSWriter有任何想法,可以访问网站[https://github.com/dcsoft-yyf/CSharpWriter]。

如何在 WinForm.NET 中使用 CSharpWriter

与其他 Winform 控件一样,您可以轻松使用CSWriter。在 VS.NET IDE 中,打开 Winform 设计器,在工具箱的左侧,选择“选择项...”。然后选择文件DCSoft.CSharpWriter.dll,您将在工具箱中看到CSWriterControl,如下图所示

您可以将CSWriterControlCSWriterCommandControler拖放到窗体上,并将其命名为“myEditControl”和“myCommandControler”。接下来,您可以在窗体上添加一些button/toolstripbutton或菜单项,选择一个button,在PropertyGrid中,您会看到一个名为“在myCommandControlerCommandName”的属性项,如下图所示

单击最后的按钮,将显示一个类似这样的对话框

您可以选择一个命令并将其绑定到按钮。然后您可以设计一个如下所示的窗体

打开源编辑器,在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.csWriterCommandModuleEdit.csWriterCommandModuleFile.csWriterCommandModuleFormat.csWriterCommandModuleInsert.csWriterCommandModuleSecurity.csWriterCommandModuleTools.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”部分检测命令当前是否EnableSystem将调用此部分来设置Button/MenuItem.Enable =truefalse。“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.UserControlCSWriterControl类型,它自行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 许可证。如果您想更改许可证类型并将其无限制地用于商业用途,可以通过在下方留言与我联系。

© . All rights reserved.