在线预览Office文件【效果类似百度文库】
引言
结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前项目中是用到公司购买的Ntko控件,该控件每次浏览文件时则会提示安装信任插件,很繁琐,而且浏览效果不好。 提到Office文件在线预览,那么效果最好的应该就是百度文库的效果了,所以今天就忙里偷闲自己搞了下。
用到知识点
1、Office文件转化为Pdf文件。直接用.Net类库:Microsoft.Office.Interop.Excel、Microsoft.Office.Interop.Powerpoint、Microsoft.Office.Interop.Word、Office。 我本机装的office2013,所以我选择的是12.0的。
2、使用SwfTools将Pdf文件转化为Swf文件。
3、使用众所周知的FlexPaper浏览Swf文件(预览时有水印,不知道怎么去掉)。
Demo过程中遇到的问题
1、提示:"无法嵌入互操作类型Microsoft.Office.Interop.Word.ApplicationClass,请改用使用的接口"
解决:右键Dll,嵌入互操作类型改为false即可。
2、用到MsoTriState.msoTrue枚举类型参数时需要饮用Office.dll。 我一开始就没引用这个文件。
3、生成Swf文件时需要传入完整的路径,我一开始只传入了路径,没有swf文件名,试了几次没成功。
效果图

转化代码
public class OfficeHelper
{
/// <summary>
/// Word to Pdf
/// </summary>
/// <param name="srcFilePath"></param>
/// <param name="targetFilePath"></param>
/// <returns></returns>
public static bool WordToPdf(string srcFilePath, string targetFilePath)
{
bool rs = false;
Microsoft.Office.Interop.Word.WdExportFormat exportFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF;
Microsoft.Office.Interop.Word.ApplicationClass application = null; Microsoft.Office.Interop.Word.Document document = null; try
{
application = new Microsoft.Office.Interop.Word.ApplicationClass();
application.Visible = false;
document = application.Documents.Open(srcFilePath);
document.SaveAs();
document.ExportAsFixedFormat(targetFilePath, exportFormat); rs = true;
}
catch (Exception)
{
rs = false;
throw;
}
finally
{
if (document != null)
{
document.Close();
document = null;
} if (application != null)
{
application.Quit();
application = null;
} GC.Collect();
GC.WaitForPendingFinalizers();
} return rs;
} /// <summary>
/// Excel To Pdf
/// </summary>
/// <param name="srcFilePath"></param>
/// <param name="targetFilePath"></param>
/// <returns></returns>
public static bool ExcelToPdf(string srcFilePath, string targetFilePath)
{
bool rs = false;
Microsoft.Office.Interop.Excel.XlFixedFormatType exportFormat = Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF;
Microsoft.Office.Interop.Excel.ApplicationClass application = null; Microsoft.Office.Interop.Excel.Workbook document = null; try
{
application = new Microsoft.Office.Interop.Excel.ApplicationClass();
application.Visible = false;
document = application.Workbooks.Open(srcFilePath);
document.SaveAs();
document.ExportAsFixedFormat(exportFormat, targetFilePath); rs = true;
}
catch (Exception)
{
rs = false;
throw;
}
finally
{
if (document != null)
{
document.Close();
document = null;
} if (application != null)
{
application.Quit();
application = null;
} GC.Collect();
GC.WaitForPendingFinalizers();
} return rs;
} /// <summary>
/// PPT To Pdf
/// </summary>
/// <param name="srcFilePath"></param>
/// <param name="targetFilePath"></param>
/// <returns></returns>
public static bool PptToPdf(string srcFilePath, string targetFilePath)
{
bool result;
Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType targetFileType = Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF;
object missing = Type.Missing;
Microsoft.Office.Interop.PowerPoint.ApplicationClass application = null;
Microsoft.Office.Interop.PowerPoint.Presentation persentation = null;
try
{
application = new Microsoft.Office.Interop.PowerPoint.ApplicationClass(); persentation = application.Presentations.Open(srcFilePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
persentation.SaveAs(targetFilePath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue); result = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
result = false;
}
finally
{
if (persentation != null)
{
persentation.Close();
persentation = null;
}
if (application != null)
{
application.Quit();
application = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
return result;
} /// <summary>
/// Pdf To Swf
/// </summary>
/// <param name="swfTools">Swf转化工具路径</param>
/// <param name="srcFilePath"></param>
/// <param name="targetFilePath"></param>
/// <returns></returns>
public static bool PdfToSwf(string toolsPath, string cmd)
{
bool iss = false;//判断是否转换成功,默认失败
try
{
using (Process p = new Process())
{
ProcessStartInfo psi = new ProcessStartInfo(toolsPath, cmd);
p.StartInfo = psi;
p.Start();
p.WaitForExit();
iss = true;//转换成功
}
}
catch { }
return iss;
}
}
/// <summary>
/// Pdf文件转化为Swf
/// </summary>
/// <param name="swfTools">转化工具路径</param>
/// <param name="pdfPath">pdf文件目录</param>
/// <param name="pdfFileName">pdf文件名</param>
/// <param name="desPath">保存swf路径</param>
/// <returns></returns>
protected string PdfToSwf(string swfTools, string pdfPath, string pdfFileName, string desPath)
{
string fileFullName =Path.Combine(pdfPath,pdfFileName);
string fileFullNameWithoutEx = Path.GetFileNameWithoutExtension(pdfFileName);
string ext = Path.GetExtension(pdfFileName).ToLower(); string saveSwfPath = desPath + fileFullNameWithoutEx + ".swf";
string rs = fileFullNameWithoutEx + ".swf"; string cmdStr = " -t \"" + fileFullName + "\" -s flashversion=9 -o \"" + saveSwfPath + "\"";
bool iss = OfficeHelper.PdfToSwf(swfTools, cmdStr); return rs;
} /// <summary>
/// Office文件转pdf文件
/// </summary>
/// <param name="officePath">office文件保存路径</param>
/// <param name="officeFileName">office文件名</param>
/// <param name="pdfPath">保存pdf路径</param>
protected string OfficeToPdf(string officePath, string officeFileName, string pdfPath)
{
string fullPathName = Path.Combine(officePath, officeFileName);
string fileNameWithoutEx = Path.GetFileNameWithoutExtension(officeFileName);
string ext = Path.GetExtension(officeFileName).ToLower(); string savePdfPath = pdfPath + fileNameWithoutEx + ".pdf";
string retValue = fileNameWithoutEx + ".pdf"; switch (ext)
{
case ".doc":
OfficeHelper.WordToPdf(fullPathName, savePdfPath);
break;
case ".docx":
OfficeHelper.WordToPdf(fullPathName, savePdfPath);
break;
case ".xls":
OfficeHelper.ExcelToPdf(fullPathName, savePdfPath);
break;
case ".xlsx":
OfficeHelper.ExcelToPdf(fullPathName, savePdfPath);
break;
case ".ppt":
OfficeHelper.PptToPdf(fullPathName, savePdfPath);
break;
case ".pptx":
OfficeHelper.PptToPdf(fullPathName, savePdfPath);
break;
} return retValue;
}
参考
在Demo的过程中,学习和参考了两位博友的文章,在此表示感谢
Wolfy: http://www.cnblogs.com/wolf-sun/p/3569960.html
静以修身:http://www.cnblogs.com/zzPrince/p/3378336.html
源代码:http://yunpan.cn/csSPiPeVuum4s (提取码:4c7c)
在线预览Office文件【效果类似百度文库】的更多相关文章
- 在线预览Office文件【效果类似百度文库】(转载)
转载地址:http://www.cnblogs.com/sword-successful/p/4031823.html 引言 结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前 ...
- 在线预览office文件
Office Online 实现在线预览 office的在线预览,针对不同的浏览器版本和系统具有要求,具体的相关文档请参考官方文档. 利用office online 平台进行office 文档的在线查 ...
- 经管资源库项目总结----在线预览office文件的实现与总结
依旧是这个经管的项目.在线预览作为资源和文档管理系统的一个很酷的并且是如此重要的功能,是必须要实现的.然后百度一下office在线预览,看起来so eazy啊,各种博客各种demo,一下子就做出效果来 ...
- Java实现web在线预览office文档与pdf文档实例
https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...
- 用pdf.js实现在移动端在线预览pdf文件
用pdf.js实现在移动端在线预览pdf文件1.下载pdf.js 官网地址:https://mozilla.github.io/pdf.js/ 2.配置 下载下来的文件包,就是一个demo ...
- 使用pdfjs插件在线预览PDF文件
前言 本文介绍在html中使用 pdfjs插件在线预览PDF文件的方法. 实现步骤 下载 pdfjs 并引入项目中 到PDFJS官网 http://mozilla.github.io/pdf.js/g ...
- asp.net在线预览txt文件(简单实现)
最近在做文件的在线预览,发现txt文件没有一个较好的方法去实现,想了想可能是比较简单就直接在后台输出了 txt文件
- WinForm中预览Office文件
WinForm预览Office文档 使用WinForm, WPF, Office组件 原理:使用Office COM组件将Word,Excel转换为XPS文档, 将WPF的DocumentViewer ...
- linux在线预览pdf文件开发思路
准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...
随机推荐
- canvas 学习
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...
- 下订单存储过程 - MYSQL
BEGIN DECLARE smark INT; DECLARE orderId INT; /*查询课程是否存在,如果不存在就不执行订单操作了*/ ) FROM t_course WHERE id = ...
- 在Linux上编译dotnet cli的源代码生成.NET Core SDK的安装包
.NET 的开源,有了更多的DIY乐趣.这篇博文记录一下在新安装的 Linux Ubuntu 14.04 上通过自己动手编译 dotnet cli 的源代码生成 .net core sdk 的 deb ...
- Kotlin笔记
官网: http://kotlinlang.org/ http://kotlinlang.org/docs/reference/ 中文教程: http://kotlindoc.com/ Gradle: ...
- 备忘录:hadoop技术一点积累
1.hbase的rowkey是按字典排序的,我看有的资料建议rowkey设计不应该是自增的,应该和这个字典排序相关吧 2.hbase的数据存储是按照region来的,region的设计前段时间在坐飞机 ...
- [译]Kinect for Windows SDK开发入门(十八):Kinect Interaction交互控件
本文译自 http://dotneteers.net/blogs/vbandi/archive/2013/03/25/kinect-interactions-with-wpf-part-i-getti ...
- 源文件移动后gdb不显示代码的原因
源文件移动后gdb不显示代码的原因 问题 我们从一个最简单的C语言程序开始.源文件main.c在 用户目录gdb文件夹下. florian@florian-pc:~/gdb$ cat main.c ...
- MySQL HASH分区
200 ? "200px" : this.width)!important;} --> 介绍 基于给定的分区个数,将数据分配到不同的分区,HASH分区只能针对整数进行HASH ...
- 七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL
本节又带了一些常用的,却很难理解的问题,本节从文件上传功能的实现引出了线程使用,介绍了线程饥饿的解决方法,异常处理方法,了解RouteTable自定义路径 . 系列文章 七天学会ASP.NET MVC ...
- Worktile协同特色之二:任务看板管理
什么是看板 看板是一种使用可视化管理的方式,跟踪任务在整个价值流中流经的不同阶段,通常我们会用带贴纸的白板,或是电子卡片墙.具备如下几个特征:1. 流程可视化 把工作拆分成小块,一张卡片写一件任务,再 ...