转载:http://www.cnblogs.com/yxlblogs/p/4139167.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 public class OfficeHelper
2 {
3 /// <summary>
4 /// Word to Pdf
5 /// </summary>
6 /// <param name="srcFilePath"></param>
7 /// <param name="targetFilePath"></param>
8 /// <returns></returns>
9 public static bool WordToPdf(string srcFilePath, string targetFilePath)
10 {
11 bool rs = false;
12 Microsoft.Office.Interop.Word.WdExportFormat exportFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF;
13 Microsoft.Office.Interop.Word.ApplicationClass application = null;
14
15 Microsoft.Office.Interop.Word.Document document = null;
16
17 try
18 {
19 application = new Microsoft.Office.Interop.Word.ApplicationClass();
20 application.Visible = false;
21 document = application.Documents.Open(srcFilePath);
22 document.SaveAs();
23 document.ExportAsFixedFormat(targetFilePath, exportFormat);
24
25 rs = true;
26 }
27 catch (Exception)
28 {
29 rs = false;
30 throw;
31 }
32 finally
33 {
34 if (document != null)
35 {
36 document.Close();
37 document = null;
38 }
39
40 if (application != null)
41 {
42 application.Quit();
43 application = null;
44 }
45
46 GC.Collect();
47 GC.WaitForPendingFinalizers();
48 }
49
50 return rs;
51 }
52
53 /// <summary>
54 /// Excel To Pdf
55 /// </summary>
56 /// <param name="srcFilePath"></param>
57 /// <param name="targetFilePath"></param>
58 /// <returns></returns>
59 public static bool ExcelToPdf(string srcFilePath, string targetFilePath)
60 {
61 bool rs = false;
62 Microsoft.Office.Interop.Excel.XlFixedFormatType exportFormat = Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF;
63 Microsoft.Office.Interop.Excel.ApplicationClass application = null;
64
65 Microsoft.Office.Interop.Excel.Workbook document = null;
66
67 try
68 {
69 application = new Microsoft.Office.Interop.Excel.ApplicationClass();
70 application.Visible = false;
71 document = application.Workbooks.Open(srcFilePath);
72 document.SaveAs();
73 document.ExportAsFixedFormat(exportFormat, targetFilePath);
74
75 rs = true;
76 }
77 catch (Exception)
78 {
79 rs = false;
80 throw;
81 }
82 finally
83 {
84 if (document != null)
85 {
86 document.Close();
87 document = null;
88 }
89
90 if (application != null)
91 {
92 application.Quit();
93 application = null;
94 }
95
96 GC.Collect();
97 GC.WaitForPendingFinalizers();
98 }
99
100 return rs;
101 }
102
103 /// <summary>
104 /// PPT To Pdf
105 /// </summary>
106 /// <param name="srcFilePath"></param>
107 /// <param name="targetFilePath"></param>
108 /// <returns></returns>
109 public static bool PptToPdf(string srcFilePath, string targetFilePath)
110 {
111 bool result;
112 Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType targetFileType = Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF;
113 object missing = Type.Missing;
114 Microsoft.Office.Interop.PowerPoint.ApplicationClass application = null;
115 Microsoft.Office.Interop.PowerPoint.Presentation persentation = null;
116 try
117 {
118 application = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
119
120 persentation = application.Presentations.Open(srcFilePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
121 persentation.SaveAs(targetFilePath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue);
122
123 result = true;
124 }
125 catch (Exception e)
126 {
127 Console.WriteLine(e.Message);
128 result = false;
129 }
130 finally
131 {
132 if (persentation != null)
133 {
134 persentation.Close();
135 persentation = null;
136 }
137 if (application != null)
138 {
139 application.Quit();
140 application = null;
141 }
142 GC.Collect();
143 GC.WaitForPendingFinalizers();
144 GC.Collect();
145 GC.WaitForPendingFinalizers();
146 }
147 return result;
148 }
149
150 /// <summary>
151 /// Pdf To Swf
152 /// </summary>
153 /// <param name="swfTools">Swf转化工具路径</param>
154 /// <param name="srcFilePath"></param>
155 /// <param name="targetFilePath"></param>
156 /// <returns></returns>
157 public static bool PdfToSwf(string toolsPath, string cmd)
158 {
159 bool iss = false;//判断是否转换成功,默认失败
160 try
161 {
162 using (Process p = new Process())
163 {
164 ProcessStartInfo psi = new ProcessStartInfo(toolsPath, cmd);
165 p.StartInfo = psi;
166 p.Start();
167 p.WaitForExit();
168 iss = true;//转换成功
169 }
170 }
171 catch { }
172 return iss;
173 }
174 }
1 /// <summary>
2 /// Pdf文件转化为Swf
3 /// </summary>
4 /// <param name="swfTools">转化工具路径</param>
5 /// <param name="pdfPath">pdf文件目录</param>
6 /// <param name="pdfFileName">pdf文件名</param>
7 /// <param name="desPath">保存swf路径</param>
8 /// <returns></returns>
9 protected string PdfToSwf(string swfTools, string pdfPath, string pdfFileName, string desPath)
10 {
11 string fileFullName =Path.Combine(pdfPath,pdfFileName);
12 string fileFullNameWithoutEx = Path.GetFileNameWithoutExtension(pdfFileName);
13 string ext = Path.GetExtension(pdfFileName).ToLower();
14
15 string saveSwfPath = desPath + fileFullNameWithoutEx + ".swf";
16 string rs = fileFullNameWithoutEx + ".swf";
17
18 string cmdStr = " -t \"" + fileFullName + "\" -s flashversion=9 -o \"" + saveSwfPath + "\"";
19 bool iss = OfficeHelper.PdfToSwf(swfTools, cmdStr);
20
21 return rs;
22 }
23
24
25 /// <summary>
26 /// Office文件转pdf文件
27 /// </summary>
28 /// <param name="officePath">office文件保存路径</param>
29 /// <param name="officeFileName">office文件名</param>
30 /// <param name="pdfPath">保存pdf路径</param>
31 protected string OfficeToPdf(string officePath, string officeFileName, string pdfPath)
32 {
33 string fullPathName = Path.Combine(officePath, officeFileName);
34 string fileNameWithoutEx = Path.GetFileNameWithoutExtension(officeFileName);
35 string ext = Path.GetExtension(officeFileName).ToLower();
36
37 string savePdfPath = pdfPath + fileNameWithoutEx + ".pdf";
38 string retValue = fileNameWithoutEx + ".pdf";
39
40 switch (ext)
41 {
42 case ".doc":
43 OfficeHelper.WordToPdf(fullPathName, savePdfPath);
44 break;
45 case ".docx":
46 OfficeHelper.WordToPdf(fullPathName, savePdfPath);
47 break;
48 case ".xls":
49 OfficeHelper.ExcelToPdf(fullPathName, savePdfPath);
50 break;
51 case ".xlsx":
52 OfficeHelper.ExcelToPdf(fullPathName, savePdfPath);
53 break;
54 case ".ppt":
55 OfficeHelper.PptToPdf(fullPathName, savePdfPath);
56 break;
57 case ".pptx":
58 OfficeHelper.PptToPdf(fullPathName, savePdfPath);
59 break;
60 }
61
62
63 return retValue;
64 }
参考
在Demo的过程中,学习和参考了两位博友的文章,在此表示感谢
Wolfy: http://www.cnblogs.com/wolf-sun/p/3569960.html
静以修身:http://www.cnblogs.com/zzPrince/p/3378336.html
源代码:http://yunpan.cn/cAhzwWhy5bgVD (提取码:7900)
或者下载地址为: http://files.cnblogs.com/files/jbps/Show.Office2swf.zip