基于DevExpress实现对PDF、Word、Excel⽂档的预览及操作处
在⼀般的管理系统模块⾥⾯,越来越多的设计到⼀些常⽤⽂档的上传保存操作,其中如PDF、Word、Excel等⽂档,有时候是通过分布式的WCF技术实现数据的显⽰和处理,因此希望直接预览⽽不需要下载⽂件,这样能够给我们提供很多的⽅便。在DevExpress⾥⾯,提供了相应的控件来显⽰和处理这些⽂档,本⽂主要介绍如何利⽤DevExpress的控件实现对PDF、Word、Excel⽂档的预览和操作处理。
1、PDF的预览和操作
在较早的DevExpress的控件⾥⾯,已经提供了对应的PDF⽂档的显⽰控件,不过由于其对PDF格式⽀持不是很好,有些⽂档是Office导出的,也不是很正常阅读,因此很少使⽤,本⽂介绍的DevExpress的PDF查看控件是基于14.1的,测试过很多⽂档,好像都能正常打开,因此也想在系统中⼴泛使⽤了。
为了演⽰这些控件的处理,我单独编写了⼀个例⼦,⽤来实现对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对象实现相关的操作了。
2、WORD⽂档的预览和操作
类似于PDF⽂档,我们对WORD⽂档,也是通过使⽤RichEditControl实现⽂档的显⽰,不过和PDFViewer不同,这个控件可以实现对⽂档的修改和保存操作,这种对于我们提供⽤户对⽂档进⾏编辑很⽅便。
测试例⼦的界⾯如下所⽰。
相关的操作代码,也和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软件显⽰的有些不太⼀样,格式有所损失。
因此如果对于格式要求⽐较严谨的,建议还是只是做显⽰为佳,不要保存原有的⽂档。如果对格式不是特别严格,倒是可以作为⼀个⽂档服务器实现⽂档的新建、保存处理。
3、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>
printformprivate 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等⽂档的在线预览和管理操作,界⾯截图如下所⽰。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。