在項(xiàng)目中利用TX Text Control進(jìn)行WORD文檔的編輯顯示處理

在很多文檔管理的功能模塊里面,我們往往需要對(duì)WORD穩(wěn)定進(jìn)行展示腋舌、編輯等處理,而如果使用微軟word控件進(jìn)行處理,需要安裝WORD組件诗宣,而且接口使用也不見(jiàn)得簡(jiǎn)單易用想诅,因此如果有第三方且不用安裝Office的能夠展示W(wǎng)ORD及進(jìn)行編輯来破,那是比較不錯(cuò)的選擇徘禁,TX Text Control就是這樣的控件,本文就是基于這個(gè)控件的使用娘荡,實(shí)現(xiàn)在文檔管理項(xiàng)目中的應(yīng)用炮沐。

1大年、TX Text Control的介紹及使用

TX Text Control是一款功能類似于 MS Word 的文字處理控件翔试,包括文檔創(chuàng)建抹凳、編輯赢底、打印、郵件合并粹庞、格式轉(zhuǎn)換庞溜、拆分合并流码、導(dǎo)入導(dǎo)出、批量生成等功能六敬。廣泛應(yīng)用于企業(yè)文檔管理外构,網(wǎng)站內(nèi)容發(fā)布审编,電子病歷中病案模板創(chuàng)建垒酬、病歷書寫眯亦、修改歷史妻率、連續(xù)打印、病案歸檔等功能的實(shí)現(xiàn)走净。這個(gè)控件主要的功能就是可以作為Word以及其他文檔的編輯器使用伏伯,整體展示的效果非常貼近原生WORD的展示说搅,是一款非常不錯(cuò)的控件套件弄唧。
在我較早的一篇隨筆《文字處理控件TX Text Control的使用》里面霍衫,大概簡(jiǎn)單的介紹了這個(gè)控件的使用敦跌,而且我把這個(gè)版本的英文資源全部漢化并進(jìn)行了編譯使用,基本上所有的功能都是展示正常的中文了辩稽,這樣更適合我們實(shí)際項(xiàng)目的使用了搂誉。
我們?cè)赩S工具欄里面加入對(duì)應(yīng)的控件静檬,可以看到有以下相關(guān)的控件對(duì)象可供使用拂檩,一般情況下我們使用TextControl稻励,然后在其基礎(chǔ)上創(chuàng)建其他RulerBar望抽、ButtonBar煤篙、StatusBar即可毁腿,而如果我們需要合并數(shù)據(jù)(很常用)就需要加入MailMerge控件對(duì)象已烤。


添加控件后胯究,我們可以對(duì)控件的相關(guān)基礎(chǔ)的復(fù)制裕循、粘貼、剪切等操作可以直接利用控件的API即可實(shí)現(xiàn)茧球。
我們這里主要目的是在WInform項(xiàng)目中集成該控件的使用抢埋,就不像上篇那樣介紹使用它編寫一個(gè)完整獨(dú)立的Word處理那樣了揪垄。
如下面就是把相關(guān)的控件拖動(dòng)到自定義控件上的效果饥努。

類代碼如下所示:

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

另外功能按鈕可以自定義酷愧,增加或者減少部分按鈕功能,如下列表所示乍迄。


2闯两、TX Text Control自定義控件的代碼實(shí)現(xiàn)和使用

為了實(shí)現(xiàn)這個(gè)WORD編輯控件的一些按鍵操作漾狼,如全部選擇(Ctrl+A)逊躁、查找(Ctrl+F)擅笔、替換(Ctrl+H)等基礎(chǔ)操作猛们,我們需要在控件代碼中實(shí)現(xiàn)相關(guān)的按鍵事件處理弯淘,這樣我們使用這些按鍵就可以直接調(diào)用控件的內(nèi)置處理窗體了,具體代碼如下所示假勿。

    /// <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;
            }
        }

如查找和替換的內(nèi)置對(duì)話框界面如下所示。




由于WORD文檔數(shù)據(jù)惨寿,我們存儲(chǔ)在數(shù)據(jù)庫(kù)里面一般使用的是二進(jìn)制存儲(chǔ)删窒,因此還需要設(shè)置一個(gè)自定義控件的屬性用來(lái)設(shè)置獲取獲取文檔控件的數(shù)據(jù)的肌索,具體代碼如下所示。

        /// <summary>
        /// 文檔數(shù)據(jù)
        /// </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);
                    }
                }
            }
        }

然后再提供的接口函數(shù),用來(lái)加載本地WORD文檔的數(shù)據(jù)站宗,具體代碼如下所示份乒。

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);
        }
    }
}

然后在文檔管理的功能模塊里面或辖,對(duì)文檔的內(nèi)容進(jìn)行加載和保存即可枣接,如下是文檔展示的項(xiàng)目實(shí)際效果但惶。



編輯WORD文檔的界面效果如下所示,我們可以看到县爬,這個(gè)控件里面展示的Word格式及內(nèi)容都和WORD軟件展示的并無(wú)異樣财喳,非常不錯(cuò),而且速度也很快耳高,比DevExpress的RichTextEdit控件的效果和速度要好很很多泌枪。



以上就是應(yīng)用TX Text Control進(jìn)行WORD文檔的編輯顯示處理的實(shí)際總結(jié)误证,希望能夠給你提供靈感和幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雷厂,一起剝皮案震驚了整個(gè)濱河市改鲫,隨后出現(xiàn)的幾起案子像棘,更是在濱河造成了極大的恐慌壶冒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咸作,居然都是意外死亡记罚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門末早,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)然磷,“玉大人口渔,你說(shuō)我怎么就攤上這事』居” “怎么了业踢?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵知举,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雇锡,道長(zhǎng)锰提,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任边坤,我火速辦了婚禮茧痒,結(jié)果婚禮上旺订,老公的妹妹穿的比我還像新娘。我一直安慰自己耸峭,他們只是感情好淋纲,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布洽瞬。 她就那樣靜靜地躺著裙盾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪为障。 梳的紋絲不亂的頭發(fā)上鳍怨,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天鞋喇,我揣著相機(jī)與錄音侦香,去河邊找鬼。 笑死罐韩,一個(gè)胖子當(dāng)著我的面吹牛散吵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洲愤,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼柬赐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肛宋!你這毒婦竟也來(lái)了酝陈?” 一聲冷哼從身側(cè)響起沉帮,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贫堰,失蹤者是張志新(化名)和其女友劉穎其屏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體川背,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熄云,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年皱碘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了癌椿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缩功,死狀恐怖嫡锌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琳钉,我是刑警寧澤势木,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站歌懒,受9級(jí)特大地震影響啦桌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜及皂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一甫男、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧验烧,春花似錦板驳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至感混,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谱秽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吉执,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缆镣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容