在項目中利用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文檔的編輯顯示處理的實際總結,希望能夠給你提供靈感和幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM