提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:龚雪|2021-02-07 10:07:09.750|阅读 341 次
概述:本文主要介绍如何利用DevExpress的控件实现对PDF、Word、Excel文档的预览和操作处理。
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
相关链接:
DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。
在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF、Word、Excel等文档,有时候是通过分布式的WCF技术实现数据的显示和处理,因此希望直接预览而不需要下载文件,这样能够给我们提供很多的方便。在DevExpress里面,提供了相应的控件来显示和处理这些文档,本文主要介绍如何利用DevExpress的控件实现对PDF、Word、Excel文档的预览和操作处理。
在较早的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对象实现相关的操作了。
类似于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软件显示的有些不太一样,格式有所损失。
因此如果对于格式要求比较严谨的,建议还是只是做显示为佳,不要保存原有的文档。如果对格式不是特别严格,倒是可以作为一个文档服务器实现文档的新建、保存处理。
对于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 欢迎一起进群讨论
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@hmdbvip.cn
文章转载自:



在嵌入式软件测试领域,对交叉编译代码进行单元测试是一大挑战。Parasoft C/C++test作为专业的C/C++测试工具,能够与劳特巴赫Trace32调试器深度集成。下面会详细介绍如何在C++test中配置Trace32调试器,实现对PowerPC架构程序的单元测试,涵盖环境设置、项目导入到测试执行的全过程。
本文将为大家介绍如何使用DevExpress WinForms数据网格控件实现摘要文本的格式化,欢迎下载最新版组件体验!
Parasoft C/C++test作为一款功能强大的自动化测试工具,为嵌入式开发提供了全面的测试解决方案。特别是在CCS开发环境中,C++test能够无缝集成,为F2812等DSP项目提供专业的单元测试支持。下面将介绍如何在CCS3环境下配置和使用C++test进行F2812项目的单元测试。
在嵌入式开发中,尤其是基于ARM架构的安全关键领域,单元测试是验证代码在目标硬件上运行时行为正确性的关键环节,对于保障最终产品的可靠性至关重要。下面将介绍如何利用Parasoft C/C++test开展单元测试,包括配置、执行及解决可能遇到的许可证问题,完成从静态检查到动态运行的完整测试闭环。
相关产品
优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
最新文章 MORE
永利最大(官方)网站相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@hmdbvip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
永利最大(官方)网站 