DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、 表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。
一、PDF的预览和操作
为了演示这些控件的处理,我单独编写了一个例子,用来实现对PDF、Word、Excel等文档的处理。

为了显示PDF文档,我们需要在界面里面添加一个XtraPdfViewer.PdfViewer的控件,这个主要是用来显示PDF的,它有很多属性方法,用来实现对PDF的处理操作,测试界面设计好如下所示。

对PDF,我们一般主要是用来打开文件,另存为,或者预览就可以了。相关的操作代码如下所示。
/// <summary>/// PDF测试显示窗体/// </summary>public partial class PDFViewer : Form{//记录窗体的名称readonly string mainFormText;public PDFViewer(){InitializeComponent();//记录窗体的名称,并实现文档变化事件的处理,方便显示新的文件名称mainFormText = this.Text;pdfViewer1.DocumentChanged += new DevExpress.XtraPdfViewer.PdfDocumentChangedEventHandler(pdfViewer1_DocumentChanged);}/// <summary>/// PDF文档变化后,实现对新文件名称的显示/// </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对象实现相关的操作了。
二、WORD文档的预览和操作
测试例子的界面如下所示。

相关的操作代码,也和PDF的操作类似,不同的是,它在文档变化后,不能很容易从参数里面获取到对应的文档的路径,需要特殊的处理才能得到。
/// <summary>/// WORD控件的测试例子/// </summary>public partial class WordViewer : Form{//记录窗体的名称readonly string mainFormText;public WordViewer(){InitializeComponent();//记录窗体的名称,并实现文档变化事件的处理,方便显示新的文件名称mainFormText = this.Text;this.richEditControl1.DocumentLoaded += new EventHandler(richEditControl1_DocumentLoaded);}/// <summary>/// WORD文档变化后,实现对新文件名称的显示/// </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();}}
加载文档后,界面显示内容如下所示:

文档控件很容易支持打印预览功能,打印预览的界面如下所示

不过话说回来,这个RichEditControl虽然能够较好显示Word文档,不过也有一些字体显示的不是很好,格式和微软的Word软件显示的有些不太一样,格式有所损失。
因此如果对于格式要求比较严谨的,建议还是只是做显示为佳,不要保存原有的文档。如果对格式不是特别严格,倒是可以作为一个文档服务器实现文档的新建、保存处理。
三、Excel文档的预览和操作
对于Excel文档的预览和操作,DevExpress控件在最近版本中增加的XtraSpreadsheet.SpreadsheetControl控件就可以实现Excel的显示和处理操作,这个控件很强大,可以处理很复杂格式的Excel文档,虽然我原来使用了另外一个FarPoint Spread控件组,不过这个XtraSpreadsheet控件组,如果集成在DevExpress也就很方便了。

这个DevExpress的控件,可以在其中进行Excel的新建、保存、打印预览等操作,当然也可以打开我们已有的Excel文件了。
打开文件后,界面效果如下所示。

界面的相关功能操作代码如下所示。
/// <summary>/// Excel控件的测试例子/// </summary>public partial class ExcelViewer : Form{//记录窗体的名称readonly string mainFormText;public ExcelViewer(){InitializeComponent();//记录窗体的名称,并实现文档变化事件的处理,方便显示新的文件名称mainFormText = this.Text;this.spreadsheetControl1.DocumentLoaded += new EventHandler(spreadsheetControl1_DocumentLoaded);}/// <summary>/// 文档变化后,实现对新文件名称的显示/// </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();}}
预览也很方便,和Word的预览操作类似。

以上就是几个常用文档的显示和操作案例,有了这些我们很容易整合到我们的附件管理里面了。
如我在我的《Winform开发框架》、《混合式开发框架里面》使用的通用附件管理模块,就是基于这些特点,实现图片、Excel文档、Word文档和PDF等文档的在线预览和管理操作,界面截图如下所示。

DevExpress技术交流群3:700924826 欢迎一起进群讨论

标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!