在线预览Office文件【效果类似百度文库】(转载)
转载地址:http://www.cnblogs.com/sword-successful/p/4031823.html
引言
结合上个项目和目前做的这个项目,其中都用到了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文件名,试了几次没成功。
效果图

转化代码
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | publicclassOfficeHelper    {        /// <summary>        /// Word to Pdf        /// </summary>        /// <param name="srcFilePath"></param>        /// <param name="targetFilePath"></param>        /// <returns></returns>        publicstaticboolWordToPdf(stringsrcFilePath, stringtargetFilePath)        {            boolrs = 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 = newMicrosoft.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();            }            returnrs;        }        /// <summary>        /// Excel To Pdf        /// </summary>        /// <param name="srcFilePath"></param>        /// <param name="targetFilePath"></param>        /// <returns></returns>        publicstaticboolExcelToPdf(stringsrcFilePath, stringtargetFilePath)        {            boolrs = 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 = newMicrosoft.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();            }            returnrs;        }        /// <summary>        /// PPT To Pdf        /// </summary>        /// <param name="srcFilePath"></param>        /// <param name="targetFilePath"></param>        /// <returns></returns>        publicstaticboolPptToPdf(stringsrcFilePath, stringtargetFilePath)        {            boolresult;            Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType targetFileType = Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF;            objectmissing = Type.Missing;            Microsoft.Office.Interop.PowerPoint.ApplicationClass application = null;            Microsoft.Office.Interop.PowerPoint.Presentation persentation = null;            try            {                application = newMicrosoft.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();            }            returnresult;        }        /// <summary>        /// Pdf To Swf        /// </summary>        /// <param name="swfTools">Swf转化工具路径</param>        /// <param name="srcFilePath"></param>        /// <param name="targetFilePath"></param>        /// <returns></returns>        publicstaticboolPdfToSwf(stringtoolsPath, stringcmd)        {            booliss = false;//判断是否转换成功,默认失败            try            {                using(Process p = newProcess())                {                    ProcessStartInfo psi = newProcessStartInfo(toolsPath, cmd);                    p.StartInfo = psi;                    p.Start();                    p.WaitForExit();                    iss = true;//转换成功                }            }            catch{ }            returniss;        }    } | 

/// <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/cAhzwWhy5bgVD (提取码:7900)
在线预览Office文件【效果类似百度文库】(转载)的更多相关文章
- 在线预览Office文件【效果类似百度文库】
		引言 结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前项目中是用到公司购买的Ntko控件,该控件每次浏览文件时则会提示安装信任插件,很繁琐,而且浏览效果不好. 提到Offic ... 
- 在线预览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 ... 
随机推荐
- PYTHON 购物车程序
			product_list = [ ('iphone',50000), ('Mac Pro',9900), ('Bike',8000), ('Watch',160000), ('Coffee',600) ... 
- (转)Singleton 单例模式(懒汉方式和饿汉方式)
			原文地址:http://www.cnblogs.com/kkgreen/archive/2011/09/05/2166868.html 单例模式的概念: 单例模式的意思就是只有一个实例.单例模式确保某 ... 
- windows下的getopt/getoptlong函数
			windows下的getopt/getoptlong函数 getopt/getopt_long函数是GNU C中的函数,在linux编程中很常用到.这里就不介绍了. windows下没有找到类似的函数 ... 
- CookieStore之Cookie的获取与保存
			Set<Cookie> allCookies = driver.manage().getCookies(); try { CookieStore cookiestore = new Bas ... 
- ndk学习16: unix domain socket
			一.UNIX Domain Socket 概念: UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC) 特点: 1. 它不需要经过网络协议栈,不需要 ... 
- chkconfig用法  LINUX
			chkconfig用法 有时候为了方便管理,我们常常喜欢在Linux中将之安装为服务,然后就可以使用服务来管理. 但是当我们运行安装服务的命令时候,假设服务名为myservice #chkconfig ... 
- Unity3d 枚举某个目录下所有资源
			using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; us ... 
- Java for LintCode 验证二叉查找树
			给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值. 节点的右子树中的值要严格大于该节点的值. 左右子树也必须是二叉查找树. ... 
- js 一搬问题汇总
			--有时无法进行js调试,在浏览器中设置启用脚本调试就可以了 
- UrlEncoder url编码
			public static string PercentEncode(string s) { var bytes = Encoding.UTF8.GetBytes( ... 
