DevExpress使用教程:PDF、Word、Excel文檔的預(yù)覽及操作處理
在一般的管理系統(tǒng)模塊里面,越來越多的涉及到一些常用文檔的上傳保存操作,其中如PDF、Word、Excel等文檔,有時候是通過分布式的WCF技術(shù)實 現(xiàn)數(shù)據(jù)的顯示和處理,因此希望直接預(yù)覽而不需要下載文件,這樣能夠給我們提供很多的方便。在DevExpress里面,提供了相應(yīng)的控件來顯示和處理這些 文檔,本文主要介紹如何利用DevExpress的控件實現(xiàn)對PDF、Word、Excel文檔的預(yù)覽和操作處理。
| DevExpress最新版下載 |
1、PDF的預(yù)覽和操作
在較早的DevExpress的控件里面,已經(jīng)提供了對應(yīng)的PDF文檔的顯示控件,不過由于其對PDF格式支持不是很好,有些文檔是Office導(dǎo) 出的,也不是很正常閱讀,因此很少使用,本文介紹的DevExpress的PDF查看控件是基于14.1的,測試過很多文檔,好像都能正常打開,因此也想 在系統(tǒng)中廣泛使用了。
為了演示這些控件的處理,我單獨編寫了一個例子,用來實現(xiàn)對PDF、Word、Excel等文檔的處理。
為了顯示PDF文檔,我們需要在界面里面添加一個XtraPdfViewer.PdfViewer的控件,這個主要是用來顯示PDF的,它有很多屬性方法,用來實現(xiàn)對PDF的處理操作,測試界面設(shè)計好如下所示。
對PDF,我們一般主要是用來打開文件,另存為,或者預(yù)覽就可以了。相關(guān)的操作代碼如下所示。
/// <summary> /// PDF測試顯示窗體 /// </summary> public partial class PDFViewer : Form { //記錄窗體的名稱 readonly string mainFormText; public PDFViewer() { InitializeComponent(); //記錄窗體的名稱,并實現(xiàn)文檔變化事件的處理,方便顯示新的文件名稱 mainFormText = this.Text; pdfViewer1.DocumentChanged += new DevExpress.XtraPdfViewer.PdfDocumentChangedEventHandler(pdfViewer1_DocumentChanged); } /// <summary> /// PDF文檔變化后,實現(xiàn)對新文件名稱的顯示 /// </summary> void pdfViewer1_DocumentChanged(object sender, DevExpress.XtraPdfViewer.PdfDocumentChangedEventArgs e) { string fileName = Path.GetFileName(e.DocumentFilePath); if (String.IsNullOrEmpty(fileName)) { Text = mainFormText; } else { Text = fileName + " - " + mainFormText; } } /// <summary> /// 打開PDF文件 /// </summary> private void btnOpenFile_Click(object sender, EventArgs e) { string filePath = FileDialogHelper.OpenPdf(); if (!string.IsNullOrEmpty(filePath)) { this.pdfViewer1.LoadDocument(filePath); } } /// <summary> /// 另存為PDF文件 /// </summary> private void btnSaveAs_Click(object sender, EventArgs e) { string dir = System.Environment.CurrentDirectory; string filePath = FileDialogHelper.SavePdf("", dir); if (!string.IsNullOrEmpty(filePath)) { try { this.pdfViewer1.SaveDocument(filePath); MessageUtil.ShowTips("保存成功"); } catch (Exception ex) { LogTextHelper.Error(ex); MessageUtil.ShowError(ex.Message); } } } /// <summary> /// PDF文件打印 /// </summary> private void btnPreview_Click(object sender, EventArgs e) { this.pdfViewer1.Print(); } }
從上面的代碼,我們可以看到,對于PDF,我們操作起來很方便,主要就是在界面里面加載文件后,就可以對PDFViewer對象實現(xiàn)相關(guān)的操作了。
2、WORD文檔的預(yù)覽和操作
類似于PDF文檔,我們對WORD文檔,也是通過使用RichEditControl實現(xiàn)文檔的顯示,不過和PDFViewer不同,這個控件可以實現(xiàn)對文檔的修改和保存操作,這種對于我們提供用戶對文檔進行編輯很方便。
測試例子的界面如下所示。
相關(guān)的操作代碼,也和PDF的操作類似,不同的是,它在文檔變化后,不能很容易從參數(shù)里面獲取到對應(yīng)的文檔的路徑,需要特殊的處理才能得到。
/// <summary> /// WORD控件的測試例子 /// </summary> public partial class WordViewer : Form { //記錄窗體的名稱 readonly string mainFormText; public WordViewer() { InitializeComponent(); //記錄窗體的名稱,并實現(xiàn)文檔變化事件的處理,方便顯示新的文件名稱 mainFormText = this.Text; this.richEditControl1.DocumentLoaded += new EventHandler(richEditControl1_DocumentLoaded); } /// <summary> /// WORD文檔變化后,實現(xiàn)對新文件名稱的顯示 /// </summary> void richEditControl1_DocumentLoaded(object sender, EventArgs e) { string fileName = Path.GetFileName(this.richEditControl1.Options.DocumentSaveOptions.CurrentFileName); if (String.IsNullOrEmpty(fileName)) { Text = mainFormText; } else { Text = fileName + " - " + mainFormText; } //修改默認字體 DocumentRange range = richEditControl1.Document.Range; CharacterProperties cp = this.richEditControl1.Document.BeginUpdateCharacters(range); cp.FontName = "新宋體"; //cp.FontSize = 12; this.richEditControl1.Document.EndUpdateCharacters(cp); } /// <summary> /// 打開WORD文件 /// </summary> private void btnOpenFile_Click(object sender, EventArgs e) { string filePath = FileDialogHelper.OpenWord(); if (!string.IsNullOrEmpty(filePath)) { richEditControl1.LoadDocument(filePath);//, DocumentFormat.Doc); } } /// <summary> /// 保存WORD文件 /// </summary> private void btnSaveFile_Click(object sender, EventArgs e) { this.richEditControl1.SaveDocument(); } /// <summary> /// 另存為WORD文件 /// </summary> private void btnSaveAs_Click(object sender, EventArgs e) { try { richEditControl1.SaveDocumentAs(); MessageUtil.ShowTips("保存成功"); } catch (Exception ex) { LogTextHelper.Error(ex); MessageUtil.ShowError(ex.Message); } } /// <summary> /// WORD文件打印 /// </summary> private void btnPreview_Click(object sender, EventArgs e) { this.richEditControl1.ShowPrintPreview(); } }
加載文檔后,界面顯示內(nèi)容如下所示:
文檔控件很容易支持打印預(yù)覽功能,打印預(yù)覽的界面如下所示:
不過話說回來,這個RichEditControl雖然能夠較好顯示W(wǎng)ord文檔,不過也有一些字體顯示的不是很好,格式和微軟的Word軟件顯示的有些不太一樣,格式有所損失。
因此如果對于格式要求比較嚴謹?shù)模ㄗh還是只是做顯示為佳,不要保存原有的文檔。如果對格式不是特別嚴格,倒是可以作為一個文檔服務(wù)器實現(xiàn)文檔的新建、保存處理。
3、Excel文檔的預(yù)覽和操作
對于Excel文檔的預(yù)覽和操作,DevExpress控件在最近版本中增加的 XtraSpreadsheet.SpreadsheetControl控件就可以實現(xiàn)Excel的顯示和處理操作,這個控件很強大,可以處理很復(fù)雜格式 的Excel文檔,雖然我原來使用了另外一個FarPoint Spread控件組,不過這個XtraSpreadsheet控件組,如果集成在DevExpress也就很方便了。
這個DevExpress的控件,可以在其中進行Excel的新建、保存、打印預(yù)覽等操作,當然也可以打開我們已有的Excel文件了。
打開文件后,界面效果如下所示。
界面的相關(guān)功能操作代碼如下所示。
/// <summary> /// Excel控件的測試例子 /// </summary> public partial class ExcelViewer : Form { //記錄窗體的名稱 readonly string mainFormText; public ExcelViewer() { InitializeComponent(); //記錄窗體的名稱,并實現(xiàn)文檔變化事件的處理,方便顯示新的文件名稱 mainFormText = this.Text; this.spreadsheetControl1.DocumentLoaded += new EventHandler(spreadsheetControl1_DocumentLoaded); } /// <summary> /// 文檔變化后,實現(xiàn)對新文件名稱的顯示 /// </summary> void spreadsheetControl1_DocumentLoaded(object sender, EventArgs e) { string fileName = Path.GetFileName(this.spreadsheetControl1.Document.Path); if (String.IsNullOrEmpty(fileName)) { Text = mainFormText; } else { Text = fileName + " - " + mainFormText; } } /// <summary> /// 打開Excel文件 /// </summary> private void btnOpenFile_Click(object sender, EventArgs e) { string filePath = FileDialogHelper.OpenExcel(); if (!string.IsNullOrEmpty(filePath)) { IWorkbook workbook = spreadsheetControl1.Document; workbook.LoadDocument(filePath); } } /// <summary> /// 保存Excel文件 /// </summary> private void btnSaveFile_Click(object sender, EventArgs e) { spreadsheetControl1.SaveDocument(); } /// <summary> /// 另存為Excel文件 /// </summary> private void btnSaveAs_Click(object sender, EventArgs e) { string dir = System.Environment.CurrentDirectory; string filePath = FileDialogHelper.SaveExcel("", dir); if (!string.IsNullOrEmpty(filePath)) { try { IWorkbook workbook = spreadsheetControl1.Document; workbook.SaveDocument(filePath); MessageUtil.ShowTips("保存成功"); } catch (Exception ex) { LogTextHelper.Error(ex); MessageUtil.ShowError(ex.Message); } } } /// <summary> /// Excel文件打印 /// </summary> private void btnPreview_Click(object sender, EventArgs e) { this.spreadsheetControl1.ShowPrintPreview(); } }
預(yù)覽也很方便,和Word的預(yù)覽操作類似。
以上就是幾個常用文檔的顯示和操作案例,有了這些我們很容易整合到我們的附件管理里面了。
如我在我的《Winform開發(fā)框架》、《混合式開發(fā)框架里面》使用的通用附件管理模塊,就是基于這些特點,實現(xiàn)圖片、Excel文檔、Word文檔和PDF等文檔的在線預(yù)覽和管理操作,界面截圖如下所示。
本文轉(zhuǎn)載自博客園伍華聰博客
如果您要購買DevExpress或者對產(chǎn)品還存在疑問,請咨詢我們的在線客服>>
慧都學院2017全新DevExpress線下研修班火熱報名中!
- WinForms控件學習+實踐的不二之選——DevExpress WinForm提升班
- 高效的MVVM開發(fā)模式,WPF開發(fā)首選培訓(xùn)平臺——DevExpress WPF提升班
- 手把手將您快速開發(fā)出完美、強大的ASP應(yīng)用程序——DevExpress ASP.NET提升班