http://www.blogjava.net/ebecket 返还网
随笔-140  评论-11  文章-131  trackbacks-0

c# 将PPT转换成HTML

这只是一个小程序,就是将ppt转换成html,方法很多,为了以后备用,在此记录一下,也和大家分享 源码如下: using System; using System.Collections.Generic; using System.Text; using System.IO; using PPT = Microsoft.Office.Interop.PowerPoint; using

这只是一个小程序,就是将ppt转换成html,方法很多,为了以后备用,在此记录一下,也和大家分享
源码如下:
 

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格式---------------------------------------------------------------------------------------------------------------------------------------------------------



   对应        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;background-color:#e0ecf9;margin:0px 0px 12px 0px;padding:14px 4px 12px 12px;line-height:24px;height:1%;'>以下是该文档的HTML预览效果。<br/><span>由于是网页提取显示word中的内容,有可能部分显示与源文档中有差异,如想查看更准确的信息,</span>您可以点击&nbsp;<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

}



 

posted on 2009-09-16 12:43 becket_zheng 阅读(2756) 评论(1)  编辑  收藏 所属分类: 微软文档

评论:
# re: c# Office文件转换成Html格式(将PPT转换成HTML)[未登录] 2012-09-13 16:11 | mask
不还是需要安装OFFICE么  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: