在线预览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
|
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/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 ...
随机推荐
- BZOJ 4580: [Usaco2016 Open]248
Description 一个序列,每次可以把相邻的两个数合为一个,价值+1,求最后的最大价值. Sol 区间DP. \(f[i][j]\) 表示 \(i-j\) 中合成一个数字为多少,转移就是枚举断点 ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...
- 腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版
腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版 时间:2015-01-18 01:41来源:linux.it.net.cn 作者:IT #由于上文装过yum groupinstall ...
- iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用
http://www.mamicode.com/info-detail-514151.html 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理很重要 ...
- 【Networking】flannel,pipework,weave,udp,vxlan,ovs等资料
Add Open vSwitch-based multitenant backend for use with OpenShift / Kubernetes: https://github.com/ ...
- 【架构】How To Use HAProxy to Set Up MySQL Load Balancing
How To Use HAProxy to Set Up MySQL Load Balancing Dec 2, 2013 MySQL, Scaling, Server Optimization U ...
- POJ 2503
http://poj.org/problem?id=2503 题意就是字典翻译.这个输入输出真心恶心,要不是看discuss我肯定是解决不了,还用上了sscanf函数.... 这道题我用几种方法做. ...
- 解决IDEA自动重置LanguageLevel和JavaCompiler版本的问题
使用IDEA时,导入的Maven项目默认的LanguageLevel和JavaCompiler都是1.5,1.5的情况下连最简单的@Override注解都不支持,所以项目可能出现一堆错. 虽然在项目上 ...
- python virtualenv环境运行django
python virtualenv环境运行django 安装前准备 检查pip版本与python版本是否一致 [root@localhost bin]# whereis pip pip: /usr/b ...
- Java RuntimeException异常处理汇总
Java中所有异常的父类是Throwable类,在Throwable类下有两大子类: 一个是Error类,指系统错误异常,例如:VirtualMachineError 虚拟机错误,ThreadDeat ...