-
C#教程之C#实现将PPT转换成HTML的方法
本文是一个C#的小程序,主要实现将ppt转换成html的功能,方法很多,此处与大家分享一下,希望能对大家的项目开发起到一定的借鉴作用。
主要功能代码如下:
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
|
using System; using System.Collections.Generic; using System.Text; using System.IO; using PPT = Microsoft.Office.Interop.PowerPoint; using System.Reflection; namespace WritePptDemo { class Program { static void Main( string [] args) { string path; //文件路径变量 PPT.Application pptApp; //Excel应用程序变量 PPT.Presentation pptDoc; //Excel文档变量 PPT.Presentation pptDoctmp; path = @"C:\MyPPT.ppt" ; //路径 pptApp = new PPT.ApplicationClass(); //初始化 //如果已存在,则删除 if (File.Exists(( string )path)) { File.Delete(( string )path); } //由于使用的是COM库,因此有许多变量需要用Nothing代替 Object Nothing = Missing.Value; pptDoc = pptApp.Presentations.Add(Microsoft.Office.Core.MsoTriState.msoFalse); pptDoc.Slides.Add(1, Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText); string text = "示例文本" ; foreach (PPT.Slide slide in pptDoc.Slides) { foreach (PPT.Shape shape in slide.Shapes) { shape.TextFrame.TextRange.InsertAfter(text); } } //WdSaveFormat为Excel文档的保存格式 PPT.PpSaveAsFileType format = PPT.PpSaveAsFileType.ppSaveAsDefault; //将excelDoc文档对象的内容保存为XLSX文档 pptDoc.SaveAs(path, format, Microsoft.Office.Core.MsoTriState.msoFalse); //关闭excelDoc文档对象 pptDoc.Close(); //关闭excelApp组件对象 pptApp.Quit(); Console.WriteLine(path + " 创建完毕!" ); Console.ReadLine(); string pathHtml = @"c:\MyPPT.html" ; PPT.Application pa = new PPT.ApplicationClass(); pptDoctmp = pa.Presentations.Open(path, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse); PPT.PpSaveAsFileType formatTmp = PPT.PpSaveAsFileType.ppSaveAsHTML; pptDoctmp.SaveAs(pathHtml, formatTmp, Microsoft.Office.Core.MsoTriState.msoFalse); pptDoctmp.Close(); pa.Quit(); Console.WriteLine(pathHtml + " 创建完毕!" ); } } } |
以上程序是使用C# 先创建一个ppt 文件并向里面写入了文字,然后再把此ppt 转换成html ,对于上面程序需要说明的其实就是
引用dll的问题, 在项目中添加引用,在com 组件中选择 microsoft powerpoint 11.0 object library ,而如果你的电脑没有安装 office 2003 是不会有这个的,而如果安装的是office 2007 则是microsoft powerpoint 12.0 object library。而且即使你引用成功后,还是会编译不通过,是因为少安装了 office PIA ,在安装office 时,如果你是选择的典型安装是不会安装这个的,因为这个只针对开发人员才会用到。可以到网上下载一个 office PIA 安装下就ok了
Office文件转换成Html格式功能代码如下:
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
using Microsoft.Office.Core; using Microsoft.Office.Interop.PowerPoint; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.IO; using System.Text.RegularExpressions; using Nd.Webs; using Aspose.Cells; using Aspose.Words; using ND.CommonHelper; using Microsoft.Office.Interop.PowerPoint; using Microsoft.Office.Core; namespace Api.Note.Base { #region Office文件转换成Html格式 class OfficeHtmlBo { #region InsertHeadHtml /// <summary> /// InsertHeadHtml /// </summary> /// <param name="WordFilePath">InsertHeadHtml</param> private string InsertHeadHtml( string strHtml, string realPath) { int index = strHtml.IndexOf( "<body" ); strHtml = strHtml.Insert(index, "<div style='height:60px;font-size:14px;margin:0px 0px 12px 0px;padding:14px 4px 12px 12px;line-height:24px;height:1%;'>以下是该文档的HTML预览效果。<br/><span>由于是网页提取显示word中的内容,有可能部分显示与源文档中有差异,如想查看更准确的信息,</span>您可以点击 <a style='color:6699FF;text-decoration:underline;' href='/Lib/UdControls/Download.aspx?action=Download&appFormCode=" + HttpContext.Current.Request.QueryString[ "appFormCode" ].ToString() + "&path=" + HttpContext.Current.Request.QueryString[ "path" ].ToString() + "&encrypt=" + HttpContext.Current.Request.QueryString[ "encrypt" ].ToString() + "'><b>下载原始附件</b></a></div>" ); Regex reg = new Regex( @"(?<start><img[^>]+?src="")(?<src>[^""]+?)(?<end>""[^>]+?>)" ); strHtml = reg.Replace(strHtml, delegate (Match m) { return string .Format( "{0}{1}{2}{3}" , m.Groups[ "start" ].Value, realPath, m.Groups[ "src" ].Value, m.Groups[ "end" ].Value ); }); return strHtml; } #endregion #region GetLeftStr /// <summary> /// 截取字符串左边指定长度 /// </summary> /// <param name="str"></param> /// <param name="length"></param> /// <returns></returns> public string GetLeftStr( string str, int length) { length = length * 2; string tempStr = "" ; int i = 0; foreach ( char c in str) { tempStr += c.ToString(); if ((( int )c >= 33) && (( int )c <= 126)) { //字母和符号原样保留 i += 1; } else { i += 2; } if (i >= length) { return tempStr; } } return str; } #endregion #region 将Word文档转换成HTML格式 /// <summary> /// 将Word文档转换成HTML格式 /// </summary> /// <param name="WordFilePath">Word文档格式</param> private void WordToHtmlFile( string WordFilePath) { try { // 指定原文件和目标文件 string realPath = WordFilePath.Substring(0, WordFilePath.LastIndexOf( "/" ) + 1); WordFilePath = System.Web.HttpContext.Current.Server.MapPath(WordFilePath); object target = WordFilePath.Substring(0, WordFilePath.LastIndexOf( "." )) + ".html" ; //string realPath = WordFilePath.Substring(0, WordFilePath.LastIndexOf(".")) + ".html"; if (!File.Exists(target.ToString())) { Document doc = new Document(WordFilePath); doc.Save(target.ToString(), SaveFormat.Html); } StreamReader sr = new StreamReader(target.ToString(), Encoding.Default); string strHtml = sr.ReadToEnd(); strHtml = InsertHeadHtml(strHtml, realPath); HttpContext.Current.Response.Write(strHtml); sr.Close(); } catch (Exception ex) { //记录异常 LogEntry logEntry = new LogEntry(); logEntry.Message = ex.Message; logEntry.Title = "---->将Word文档转换成HTML格式异常[WordToHtmlFile]" ; logEntry.TimeStamp = DateTime.Now; logEntry.LogEntryType = LogEntryType.Error; logEntry.LogCatalog = LogCatalog.ExceptionLog; logEntry.StackTrace = ex.StackTrace; LogPosition logPosition = LogPosition.FileLog; string positionParameter = SysConfig.ToString(SysConfig.GetAppSetting( "LogPath" )); SysLogger.Write(logEntry, logPosition, positionParameter); } } #endregion #region 将Excel文件转换成HTML格式 /// <summary> /// 将Excel文件转换成HTML格式 /// </summary> /// <param name="ExcelFilePath">Excel文件路径</param> private void ExcelToHtmlFile( string ExcelFilePath) { try { string realPath = ExcelFilePath.Substring(0, ExcelFilePath.LastIndexOf( "/" ) + 1); int index = ExcelFilePath.LastIndexOf( "/" ); string fileName; if (ExcelFilePath.IndexOf( ":" ) != -1) { fileName = ExcelFilePath.Split( new char [] { ':' })[0].ToString(); fileName = GetLeftStr(fileName.Substring(0, fileName.LastIndexOf( "." )), 10) + fileName.Substring(fileName.LastIndexOf( "." )); fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8); } else { fileName = ExcelFilePath.Substring(index + 1, ExcelFilePath.Length - index - 1); fileName = GetLeftStr(fileName.Substring(0, fileName.LastIndexOf( "." )), 10) + fileName.Substring(fileName.LastIndexOf( "." )); //编码 fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8); } fileName = fileName.Substring(0, fileName.LastIndexOf( "." )); ExcelFilePath = System.Web.HttpContext.Current.Server.MapPath(ExcelFilePath); //目标html文件路径 object target = ExcelFilePath.Substring(0, ExcelFilePath.LastIndexOf( "." )) + ".html" ; string target2 = ExcelFilePath.Substring(0, ExcelFilePath.LastIndexOf( "\\" )) + "\\" + fileName + "_files\\sheet001.htm" ; if (!File.Exists(target.ToString())) { //为了保险,只读方式打开 //object readOnly = true; //// 指定另存为格式(html) //object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml; ////打开Excel文件 //oBook = excelApp.Workbooks.Open(ExcelFilePath, Unknown, readOnly, // Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, // Unknown, Unknown, Unknown, Unknown, Unknown, Unknown); //// 转换格式 //oBook.SaveAs(target, format, Unknown, Unknown, Unknown, Unknown, // Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, // Unknown, Unknown, Unknown, Unknown, Unknown); Workbook wBook = new Workbook(); wBook.Open(ExcelFilePath); wBook.Save(target.ToString(), FileFormatType.Html); } StreamReader sr = new StreamReader(target2.ToString(), Encoding.Default); string strHtml = sr.ReadToEnd(); strHtml = InsertHeadHtml(strHtml, realPath); strHtml = strHtml.Replace( "window.location.replace" , "" ); strHtml = strHtml.Replace( "filelist.xml" , realPath + "/" + fileName + "_files/filelist.xml" ); strHtml = strHtml.Replace( "stylesheet.css" , realPath + "/" + fileName + "_files/stylesheet.css" ); HttpContext.Current.Response.Write(strHtml); sr.Close(); } catch (Exception ex) { //记录异常 LogEntry logEntry = new LogEntry(); logEntry.Message = ex.Message; logEntry.Title = "---->将Excel文件转换成HTML格式[ExcelToHtmlFile]" ; logEntry.TimeStamp = DateTime.Now; logEntry.LogEntryType = LogEntryType.Error; logEntry.LogCatalog = LogCatalog.ExceptionLog; logEntry.StackTrace = ex.StackTrace; LogPosition logPosition = LogPosition.FileLog; string positionParameter = SysConfig.ToString(SysConfig.GetAppSetting( "LogPath" )); SysLogger.Write(logEntry, logPosition, positionParameter); } } #endregion #region 将PPT文件转换成HTML格式 /// <summary> /// 将PPT文件转换成HTML格式 /// </summary> /// <param name="PptFilePath">PPT文件路径</param> private void PptToHtmlFile( string PptFilePath) { ApplicationClass ac = new ApplicationClass(); Presentation pptFile = null ; try { string realPath = PptFilePath.Substring(0, PptFilePath.LastIndexOf( "." )) + ".html" ; PptFilePath = System.Web.HttpContext.Current.Server.MapPath(PptFilePath); //获得html文件名 object target = PptFilePath.Substring(0, PptFilePath.LastIndexOf( "." )) + ".html" ; if (!File.Exists(target.ToString())) { if (PptFilePath.Contains( ".pptx" )) { pptFile = ac.Presentations.Open2007(PptFilePath, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); pptFile.SaveAs(target.ToString(), PpSaveAsFileType.ppSaveAsHTML, MsoTriState.msoCTrue); } else if (PptFilePath.Contains( ".ppt" )) { pptFile = ac.Presentations.Open(PptFilePath, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoFalse); pptFile.SaveAs(target.ToString(), PpSaveAsFileType.ppSaveAsHTML, MsoTriState.msoCTrue); } } //StreamReader sr = new StreamReader(target.ToString(), Encoding.Default); //string strHtml = sr.ReadToEnd(); //Response.Write(strHtml); HttpContext.Current.Response.Redirect(realPath); } finally { if (pptFile != null ) { pptFile.Close(); } ac.Quit(); GC.Collect(); } } #endregion } #endregion } |
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式