c# 文件類型轉換匯總(word/excel/ppt/txt/pdf 轉HTML&word/ppt 轉swf)


最近項目中要用到文件預覽,分為用HTML預覽和用swf預覽兩種模式,所以要將用戶上傳的文件轉成可以預覽的格式。

首先是轉HTML部分,word、excel、ppt、txt都是調用Microsoft.Office來完成的,全部類似,所以只貼一個word的代碼:

public static bool WordToHtml(string path)
        {
            bool ret = true;
            Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document doc = null;
            // 缺省參數 
            object Unknown = Type.Missing;
            try
            {

                // 指定原文件和目標文件 
                object Source = path;
                object Target = path.Substring(0, path.LastIndexOf(".")) + ".html";
                //為了保險,只讀方式打開 
                object readOnly = true;
                // 指定另存為格式(html) 
                object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML;
                // 打開doc文件 
                doc = newApp.Documents.Open(ref Source, ref Unknown, ref readOnly,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
                // 轉換格式 
                doc.SaveAs(ref Target, ref format,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
            }
word轉HTML

excel、ppt分別調用自己的application類來完成,txt用的類和word一樣。

比較麻煩的是PDF轉HTML的,最后我采用的是在stackoverflow上找到的支持命令行的pdftohtml.exe,然后在程序里開啟process調用就行了:

        public static bool PdfToHtml(string path)
        {
            string convertPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "PDFtoHTML\\pdftohtml.exe";
            Process p = new Process();
            p.StartInfo.FileName = convertPath;
            p.StartInfo.Arguments = " -enc GBK " + path;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            bool isStart = p.Start();
            p.WaitForExit();
            p.Close();
            return isStart;
        }
pdf轉html

 

再來是轉swf部分,flashpaper不支持64位,print2flash又需要花錢解鎖,所以只好走別的路了。

最后使用了先轉成pdf,再用swftools把pdf轉成swf的方式

其中轉pdf的模式也是調用Microsoft.Office來完成,以word為例:

        private static bool wordToPdf(string path, string outpath = "")
        {
            bool ret = true;
            Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document doc = null;
            // 缺省參數 
            object Unknown = Type.Missing;
            try
            {

                // 指定原文件和目標文件 
                object Source = path;
                object Target = path.Substring(0, path.LastIndexOf(".")) + ".pdf";
                if (outpath != "")
                    Target = outpath;
                //為了保險,只讀方式打開 
                object readOnly = true;
                // 指定另存為格式(html) 
                object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;


                // 打開doc文件 
                doc = newApp.Documents.Open(ref Source, ref Unknown, ref readOnly,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
                // 轉換格式 
                doc.SaveAs(ref Target, ref format,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
            }
            catch (Exception e)
            {
                ret = false;
            }
            finally
            {
                if (doc != null)
                {
                    // 關閉文檔和Word程序 
                    object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
                    doc.Close(ref saveChanges, ref Unknown, ref Unknown);
                }
                newApp.Quit(ref Unknown, ref Unknown, ref Unknown);
                GC.Collect();
            }
           
word轉pdf

然后是調用swftools來轉換成swf,但是在服務器上不管怎么嘗試,直接使用process來啟動pdf2swf.exe都轉換失敗,原因不明,最后使用把啟動pdf2swf寫到BAT里,然后用process去調用BAT,就可以成功轉換了。

c:
cd C:\Program Files (x86)\SWFTools\
pdf2swf.exe -f -T 9 -t "%1" -o "%2"
調用pdf2swf.exe

其中一定要記得有-T的參數,后面的數字是flash的版本,如果對不上的話是轉換不了的。

然后就是在程序里調用這個BAT,把路徑傳參進去:

        private static bool ChangeToSwf(string filePath, string swfPath, string basePath)
        {
            bool isStart = false;
            string type = filePath.Split('.').Last().ToLower();

            if (type != "pdf")
            {
                string tempPdf = basePath + "/swffiles/" + "temp" + Guid.NewGuid().ToString() + ".pdf";//臨時pdf的路徑
                if (!FileToTempPdf(filePath, tempPdf))//先把文件轉換成PDF
                {
                    return false;
                }
                else
                {
                    filePath = tempPdf;
                }
            }

            try
            {
                Process p = new Process();
                string path = basePath + "/plugin/ChangeSwf.bat";//bat路徑
                ProcessStartInfo pi = new ProcessStartInfo(path, filePath + " " + swfPath);//第二個參數為傳入的參數,string類型以空格分隔各個參數
                pi.UseShellExecute = false;
                pi.RedirectStandardOutput = true;
                p.StartInfo = pi;
                isStart = p.Start();
                p.WaitForExit();
            }
            catch (Exception ex)
            {
                return false;
            }
            return isStart;
        }
文件轉swf

大功告成,頁面上我使用了flex paper來預覽


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM