在项目中利用TX Text Control进行WORD文档的编辑显示处理

在很多文档管理的功能模块里面,我们往往需要对WORD稳定进行展示、编辑等处理,而如果使用微软word控件进行处理,需要安装WORD组件,而且接口使用也不见得简单易用,因此如果有第三方且不用安装Office的能够展示WORD及进行编辑,那是比较不错的选择,TX Text Control就是这样的控件,本文就是基于这个控件的使用,实现在文档管理项目中的应用。

1、TX Text Control的介绍及使用

TX Text Control是一款功能类似于 MS Word 的文字处理控件,包括文档创建、编辑、打印、邮件合并、格式转换、拆分合并、导入导出、批量生成等功能。广泛应用于企业文档管理,网站内容发布,电子病历中病案模板创建、病历书写、修改历史、连续打印、病案归档等功能的实现。这个控件主要的功能就是可以作为Word以及其他文档的编辑器使用,整体展示的效果非常贴近原生WORD的展示,是一款非常不错的控件套件。

在我较早的一篇随笔《文字处理控件TX Text Control的使用》里面,大概简单的介绍了这个控件的使用,而且我把这个版本的英文资源全部汉化并进行了编译使用,基本上所有的功能都是展示正常的中文了,这样更适合我们实际项目的使用了。

我们在VS工具栏里面加入对应的控件,可以看到有以下相关的控件对象可供使用,一般情况下我们使用TextControl,然后在其基础上创建其他RulerBar、ButtonBar、StatusBar即可,而如果我们需要合并数据(很常用)就需要加入MailMerge控件对象。

添加控件后,我们可以对控件的相关基础的复制、粘贴、剪切等操作可以直接利用控件的API即可实现。

我们这里主要目的是在WInform项目中集成该控件的使用,就不像上篇那样介绍使用它编写一个完整独立的Word处理那样了。

如下面就是把相关的控件拖动到自定义控件上的效果。

类代码如下所示:

    /// <summary>
    /// 基于TxTextControl控件的自定义控件封装
    /// </summary>
    public partial class TextWordControl : XtraUserControl

另外功能按钮可以自定义,增加或者减少部分按钮功能,如下列表所示。

2、TX Text Control自定义控件的代码实现和使用

为了实现这个WORD编辑控件的一些按键操作,如全部选择(Ctrl+A)、查找(Ctrl+F)、替换(Ctrl+H)等基础操作,我们需要在控件代码中实现相关的按键事件处理,这样我们使用这些按键就可以直接调用控件的内置处理窗体了,具体代码如下所示。

    /// <summary>
    /// 基于TxTextControl控件的自定义控件封装
    /// </summary>
    public partial class TextWordControl : XtraUserControl
    {
        public TextWordControl()
        {
            InitializeComponent();

            InitEvent();
        }

        /// <summary>
        /// 处理控件的事件
        /// </summary>
        private void InitEvent()
        {
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-CN");

            this.textControl1.KeyDown += textControl1_KeyDown;
        }

        void textControl1_KeyDown(object sender, KeyEventArgs e)
        {
            HandleKeyDownEvent(e);
        }

        private void HandleKeyDownEvent(KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Insert:
                    if (e.Control || e.Alt || e.Shift) break;
                    //插入按键操作
                    textControl1.InsertionMode
                       = textControl1.InsertionMode == TXTextControl.InsertionMode.Insert
                       ? TXTextControl.InsertionMode.Overwrite
                       : TXTextControl.InsertionMode.Insert;
                    break;

                case Keys.A:
                    if (!e.Control || e.Alt || e.Shift) break;
                    // Ctrl-A: 全选操作
                    textControl1.SelectAll();
                    break;

                case Keys.F:
                    if (!e.Control || e.Alt || e.Shift) break;
                    // Ctrl-F: 查找操作
                    textControl1.Find();
                    break;

                case Keys.H:
                    if (!e.Control || e.Alt || e.Shift) break;

                    // Ctrl-H: 替换操作
                    textControl1.Replace();
                    break;
            }
        }

如查找和替换的内置对话框界面如下所示。

由于WORD文档数据,我们存储在数据库里面一般使用的是二进制存储,因此还需要设置一个自定义控件的属性用来设置获取获取文档控件的数据的,具体代码如下所示。

        /// <summary>
        /// 文档数据
        /// </summary>
        [Browsable(false)]
        public byte[] DocData
        {
            get
            {
                byte[] docData = null;
                textControl1.Save(out docData, TXTextControl.BinaryStreamType.MSWord);
                return docData;
            }
            set
            {
                if (value != null)
                {
                    try
                    {
                        textControl1.Load(value, TXTextControl.BinaryStreamType.MSWord);
                    }
                    catch(Exception ex)
                    {
                        LogHelper.Error(ex);
                        MessageDxUtil.ShowError(ex.Message);
                    }
                }
            }
        }

然后再提供的接口函数,用来加载本地WORD文档的数据,具体代码如下所示。

        public void LoadData(string file)
        {
            if (!string.IsNullOrEmpty(file))
            {
                try
                {
                    this.textControl1.Load(file, TXTextControl.StreamType.MSWord);
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                    MessageDxUtil.ShowError(ex.Message);
                }
            }
        }

然后在文档管理的功能模块里面,对文档的内容进行加载和保存即可,如下是文档展示的项目实际效果。

编辑WORD文档的界面效果如下所示,我们可以看到,这个控件里面展示的Word格式及内容都和WORD软件展示的并无异样,非常不错,而且速度也很快,比DevExpress的RichTextEdit控件的效果和速度要好很很多。

 本文转自博客园伍华聪的博客,原文链接:在项目中利用TX Text Control进行WORD文档的编辑显示处理,如需转载请自行联系原博主。

时间: 2024-10-02 18:04:52

在项目中利用TX Text Control进行WORD文档的编辑显示处理的相关文章

从 VBA 中使用 Visual Basic .NET 将 Word 文档序列化为 XML

visual|word|xml 从 VBA 中使用 Visual Basic .NET 将 Word 文档序列化为 XML Michael CorningMicrosoft Corporation 2002年10月 适用于:   Microsoft Word 2002   Microsoft Visual Studio .NET 摘要:学习如何在 Microsoft Office Visual Basic for Applications (VBA) 程序中利用 .NET 代码将大型 Word

Word 2013中怎样以副本方式打开Word文档

在Word2013中,"以副本方式"打开Word文档其实就是在相同文件夹中创建一份完全相同的Word文档.并且所创建的Word文档将以"副本+原文件名称"的方式命名.在Word2013中以副本方式打开Word文档的步骤如下所述: 第1步,打开Word2013文档窗口,依次单击"文件"→"打开"按钮.在"打开"选项卡中选中"计算机"选项,并单击"浏览"按钮,如图2013

Win8系统把cad中的文字直接导入到word文档的方法

  Win8系统把cad中的文字直接导入到word文档的方法          具体步骤: 1.在CAD中鼠标双击需要导入的文字,进入修改状态,拖动鼠标把全部文字选中; 2.按下"CTRL+C"粘贴键进行拷贝,这时候会出现提示,但无须理会; 3.打开Word,按下"CTRL+V",这时,我们依旧看不到任何文字,不要急,因为在cad中字体颜色都是白色的,所以这里我们可以按下"CTRL+A"将文字全选,然后点击菜单栏上的"字体颜色"

Word2013中怎样以只读方式打开Word文档

  第1步,打开Word2013窗口,依次单击"文件"→"打开"按钮.在"打开"选项卡中选中"计算机"选项,并单击"浏览"按钮. 文档-word文档打开显示只读"> 第2步,在打开的"打开"对话框中,选中需要打开的Word文档,然后单击"打开"按钮右侧的下拉三角按钮.在打开的菜单中选择"以只读方式打开"选项即可. 在打开的Word2

利用XSL和ASP实现XML文档在线编辑

xml|在线 本文通过一个详细的例子,来阐述了在线编辑XML文档数据的方法.由于Netscape对XML的支持比较弱,因此,要实现跨平台的数据交换,数据的处理必须在服务器端进行.要编辑XML文档,首先要做的事情就是怎样把这些数据提取并显示给访问者,XSL为我们显示XML文件提供了一个很好的解决方案.下面的例子就是利用XSL样式单把XML文档显示出来,供用户进行编辑,然后再把编辑后的数据提交到服务器,在服务器端进行数据的更新.这里采用ASP(Active Server Pages)来完成我们的任务

Win8如何把CAD中的文字直接导入到Word文档

1.在CAD中鼠标双击需要导入的文字,进入修改状态,拖动鼠标把全部文字选中; 2.按下"CTRL+C"粘贴键进行拷贝,这时候会出现提示,但无须理会; 文档-excel导入word文档"> 3.打开Word,按下"CTRL+V",这时,我们依旧看不到任何文字,不要急,因为在cad中字体颜色都是白色的,所以这里我们可以按下"CTRL+A"将文字全选,然后点击菜单栏上的"字体颜色",将颜色修改为黑色; 4.修改完成后

Word2013中怎样以副本方式打开Word文档

  第1步,打开Word2013文档窗口,依次单击"文件"→"打开"按钮.在"打开"选项卡中选中"计算机"选项,并单击"浏览"按钮,如图1所示. 图1 "打开"选项卡 第2步,在"打开"对话框中,找到并选中需要打开的Word文档,然后单击"打开"按钮右侧的下拉三角按钮.在打开的菜单中选择"以副本方式打开"选项即可,如图2所示.

Word2013中如何插入另一篇Word文档

1.打开Word文档,单击"插入"选项卡,在"文本"组里选择"对象". 2.弹出"对象"对话框,单击"由文件创建"选项卡,点"浏览"插入电脑中的文档,勾选上"连接到文件"和"显示为图片",然后"确定". 3.下图是插入另一个文档的效果图,插入的文档可以直接点开看哦.

java中利用Dom4j解析和生成XML文档_java

一.前言 dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异.功能强大.和非常方便使用的特点.   另外xml经常用于数据交换的载体,像调用webservice传递的参数,以及数据做同步操作等等,   所以使用dom4j解析xml是非常有必要的. 二.准备条件 dom4j.jar 下载地址:http://sourceforge.net/projects/dom4j/ 三.使用Dom4j实战 1.解析xml文档 实现思路: <1>根据读取的xml路径,传递给SAX