关于pdf:如何基于DevExpress实现对PDF等文档预览及操作处理

75次阅读

共计 5873 个字符,预计需要花费 15 分钟才能阅读完成。

点击获取工具 >>
在个别的管理系统模块外面,越来越多的设计到一些罕用文档的上传保留操作,其中如 PDF、Word、Excel 等文档,有时候是通过分布式的 WCF 技术实现数据的显示和解决,因而心愿间接预览而不须要下载文件,这样可能给咱们提供很多的不便。在 DevExpress 外面,提供了相应的控件来显示和解决这些文档,本文次要介绍如何利用 DevExpress 的控件实现对 PDF、Word、Excel 文档的预览和操作解决。

一、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 对象实现相干的操作了。

二、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 软件显示的有些不太一样,格局有所损失。

因而如果对于格局要求比拟谨严的,倡议还是只是做显示为佳,不要保留原有的文档。如果对格局不是特地严格,倒是能够作为一个文档服务器实现文档的新建、保留解决。

三、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 等文档的在线预览和治理操作,界面截图如下所示。

本文转载自博客园 - 伍华聪

正文完
 0