flexpaper在线预览office文件,通过iis浏览没问题

项目快结项了,就差最后一个在线预览功能了。研究了两天。不通过office组件就可以把office文件转换pdf,废话不说,上图

 

 public class Helper
    {
        /// <summary>
        /// word文件转换pdf
        /// </summary>
        /// <param name="wordPath">word的存储地址</param>
        /// <param name="wordSavePath">pdf的存储地址</param>
        /// <returns>返回转换成功pdf的名字</returns>
        public static string Word2Pdf(string wordPath, string wordSavePath)
        {
            string strPdfName=Path .GetFileName(wordSavePath);
            try
            {
                //此处这样写是为了防止SaveForMat不能识别是属于Aspose.Words还是Aspose.Cells。
                Aspose.Words.Document dc = new Aspose.Words.Document(wordPath);
                dc.Save(wordSavePath, Aspose.Words.SaveFormat.Pdf);
            }
            catch (Exception)
            {
                throw;
            }
            return strPdfName;
        }

        /// <summary>
        /// excel文件转换pdf
        /// </summary>
        /// <param name="excelPath">excel的存储地址</param>
        /// <param name="excelSavePath">pdf的存储地址</param>
        /// <returns>返回转换成功pdf的名字</returns>
        public static string Excel2Pdf(string excelPath, string excelSavePath)
        {
            string strPdfName = Path.GetFileName(excelSavePath);
            try
            {
                Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(excelPath);
                wb.Save(excelSavePath, Aspose.Cells.SaveFormat.Pdf);
            }
            catch(Exception)
            {
                throw;
            }
            return strPdfName;
        }

        /// <summary>
        /// Pdf文件转化为Swf
        /// </summary>
        /// <param name="swfTools">转化工具路径。例如:...\02_SWFTools\pdf2swf.exe</param>
        /// <param name="pdfPath">pdf文件目录。例如:...\UploadFiles\Test.pdf</param>
        /// <param name="pdfFileName">pdf文件名。例如:Test.pdf</param>
        /// <param name="desPath">保存swf路径。例如:...\SwfFiles\test.swf</param>
        /// <returns>转换成功的swf文件。例如:Test.swf</returns>
        public static string PdfToSwf(string swfTools, string pdfPath, string pdfFileName, string swfsavePath)
        {
            //转换成功之后的swf文件名字。例如:test.swf
            string strSwf = Path.GetFileNameWithoutExtension(pdfFileName) + ".swf";
            //命令语句
            string strCmdStr = "  -t  \"" + pdfPath + "\" -s flashversion=9 -o \"" + swfsavePath + "\"";
            try
            {
                PdfToSwfHelper(swfTools, strCmdStr);
            }
            catch (Exception)
            {
                throw;
            }
            return strSwf;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="toolsPath"></param>
        /// <param name="cmd"></param>
        /// <returns></returns>
        public static bool PdfToSwfHelper(string toolsPath, string cmd)
        {
            bool iss = false;     //判断是否转换成功,默认失败
            try
            {
                using (Process p = new Process())
                {
                    ProcessStartInfo psi = new ProcessStartInfo(toolsPath, cmd);
                    psi.WindowStyle = ProcessWindowStyle.Hidden;
                    p.StartInfo = psi;
                    p.Start();
                    p.WaitForExit();
                    iss = true;   //转换成功
                }
            }
            catch (Exception)
            {
                iss = false;
                throw;
            }
            return iss;
        }
    }
 protected void BtnToPdf_Click(object sender, EventArgs e)
        {
            #region 属性

            string strPdfName = string.Empty;                                          //生成的pdf文件名
            string strSwfName = string.Empty;                                          //生成的swf文件名
            string strOfficeOrPdfPilePath = Server.MapPath("~/UploadFiles/");          //上传的Office或者Pdf文件的存储路径
            string strSwfFilePath = Server.MapPath("~/SwfFiles/");                     //pdf文件通过pdf2swf.exe转换成swf文件的存储路径
            string strPdf2swfToolPath = Server.MapPath("~/02_SWFTools/pdf2swf.exe");   //pdf2swf.exe的路径,为pdf文件转swf文件做准备
            string strUploadFileFullName = string.Empty;                               //上传文件的全名
            string strPdfSaveFullPath = string.Empty;                                  //office文件转换成pdf的保存地址
            string strSwfSaveFullPath = string.Empty;                                  //pdf文件转换成swf的保存地址

            #endregion

            //如果此控件有文件
            if (FileUpload1.HasFile)
            {
                //纯文件名。例如:zjq.doc
                string strUploadFileName = this.FileUpload1.FileName;
                //获取文件名字,不包括格式。例如:zjq
                string strUploadFileNameWithoutEt = Path.GetFileNameWithoutExtension(strUploadFileName).ToLower();
                //获取上传的文件格式。例如:.doc
                string strUploadFileType = Path.GetExtension(strUploadFileName).ToLower();
                //判断上传文件类型
                if (strUploadFileType == ".doc" || strUploadFileType == ".docx" || strUploadFileType == ".xls" || strUploadFileType == ".xlsx" || strUploadFileType == ".pdf")
                {
                    //创建OfficeOrPdf文件夹
                    if (!Directory.Exists(strOfficeOrPdfPilePath))
                    {
                        Directory.CreateDirectory(strOfficeOrPdfPilePath);
                    }
                    //创建swf文件夹
                    if (!Directory.Exists(strSwfFilePath))
                    {
                        Directory.CreateDirectory(strSwfFilePath);
                    }
                    //TODO:上传文件的全地址,为了保存使用。此处修改时间戳(maybe?)
                    strUploadFileFullName = strOfficeOrPdfPilePath + strUploadFileName;
                    //TODO:生成的pdf文件要保存的目标地址,此处修改时间戳(maybe?)
                    strPdfSaveFullPath = strOfficeOrPdfPilePath + strUploadFileNameWithoutEt + ".pdf";
                    //TODO:生成的swff文件要保存的目标地址,此处修改时间戳(maybe?)
                    strSwfSaveFullPath = strSwfFilePath + strUploadFileNameWithoutEt + ".swf";
                    //第一步:保存文件
                    FileUpload1.PostedFile.SaveAs(strUploadFileFullName);
                    try
                    {
                        //上传的文件是word
                        if (strUploadFileType == ".doc" || strUploadFileType == ".docx")
                        {
                            //第二步:word转换成pdf
                            strPdfName = Helper.Word2Pdf(strUploadFileFullName, strPdfSaveFullPath);
                        }
                        else if (strUploadFileType == ".xls" || strUploadFileType == ".xlsx")
                        {
                            //excel转换成pdf
                            strPdfName = Helper.Excel2Pdf(strUploadFileFullName, strPdfSaveFullPath);
                        }
                        else if (strUploadFileType == ".pdf")
                        {
                            strPdfName = Path.GetFileName(strUploadFileFullName);
                        }
                        //判断Pdf中是否有指定的pdf文件
                        if (File.Exists(strPdfSaveFullPath))
                        {
                            //第三步:pdf转换swf,最后存储到SwfFiles文件夹中
                            strSwfName = Helper.PdfToSwf(strPdf2swfToolPath, strPdfSaveFullPath, strPdfName, strSwfSaveFullPath);
                        }
                        //如果swf存在并且不为空
                        if (!string.IsNullOrEmpty(strSwfName) && File.Exists(strSwfFilePath + strSwfName))
                        {
                            //显示swf文件
                            this.HiddenField1.Value = "SwfFiles/" + strSwfName;
                        }
                    }
                    catch (Exception ex)
                    {
                        Response.Write("<script>alert('" + ex.Message.ToString() + "')</script>");
                    }
                }
            }
        }
    }

 

posted @ 2014-12-13 11:00  dlmuzjq  阅读(331)  评论(0编辑  收藏  举报