在很多文檔管理的功能模塊里面,我們往往需要對(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é)误证,希望能夠給你提供靈感和幫助。