zoukankan      html  css  js  c++  java
  • 在线预览Office文件【效果类似百度文库】(转载)

    转载地址:http://www.cnblogs.com/sword-successful/p/4031823.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
    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
    public class OfficeHelper
        {
            /// <summary>
            /// Word to Pdf
            /// </summary>
            /// <param name="srcFilePath"></param>
            /// <param name="targetFilePath"></param>
            /// <returns></returns>
            public static bool WordToPdf(string srcFilePath, string targetFilePath)
            {
                bool rs = false;
                Microsoft.Office.Interop.Word.WdExportFormat exportFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF;
                Microsoft.Office.Interop.Word.ApplicationClass application = null;
     
                Microsoft.Office.Interop.Word.Document document = null;
     
                try
                {
                    application = new Microsoft.Office.Interop.Word.ApplicationClass();
                    application.Visible = false;
                    document = application.Documents.Open(srcFilePath);
                    document.SaveAs();
                    document.ExportAsFixedFormat(targetFilePath, exportFormat);
     
                    rs = true;
                }
                catch (Exception)
                {
                    rs = false;
                    throw;
                }
                finally
                {
                    if (document != null)
                    {
                        document.Close();
                        document = null;
                    }
     
                    if (application != null)
                    {
                        application.Quit();
                        application = null;
                    }
     
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }
     
                return rs;
            }
     
            /// <summary>
            /// Excel To Pdf
            /// </summary>
            /// <param name="srcFilePath"></param>
            /// <param name="targetFilePath"></param>
            /// <returns></returns>
            public static bool ExcelToPdf(string srcFilePath, string targetFilePath)
            {
                bool rs = false;
                Microsoft.Office.Interop.Excel.XlFixedFormatType exportFormat = Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF;
                Microsoft.Office.Interop.Excel.ApplicationClass application = null;
     
                Microsoft.Office.Interop.Excel.Workbook document = null;
     
                try
                {
                    application = new Microsoft.Office.Interop.Excel.ApplicationClass();
                    application.Visible = false;
                    document = application.Workbooks.Open(srcFilePath);
                    document.SaveAs();
                    document.ExportAsFixedFormat(exportFormat, targetFilePath);
     
                    rs = true;
                }
                catch (Exception)
                {
                    rs = false;
                    throw;
                }
                finally
                {
                    if (document != null)
                    {
                        document.Close();
                        document = null;
                    }
     
                    if (application != null)
                    {
                        application.Quit();
                        application = null;
                    }
     
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }
     
                return rs;
            }
     
            /// <summary>
            /// PPT To Pdf
            /// </summary>
            /// <param name="srcFilePath"></param>
            /// <param name="targetFilePath"></param>
            /// <returns></returns>
            public static bool PptToPdf(string srcFilePath, string targetFilePath)
            {
                bool result;
                Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType targetFileType = Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF;
                object missing = Type.Missing;
                Microsoft.Office.Interop.PowerPoint.ApplicationClass application = null;
                Microsoft.Office.Interop.PowerPoint.Presentation persentation = null;
                try
                {
                    application = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
     
                    persentation = application.Presentations.Open(srcFilePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
                    persentation.SaveAs(targetFilePath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue);
     
                    result = true;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    result = false;
                }
                finally
                {
                    if (persentation != null)
                    {
                        persentation.Close();
                        persentation = null;
                    }
                    if (application != null)
                    {
                        application.Quit();
                        application = null;
                    }
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }
                return result;
            }
     
            /// <summary>
            /// Pdf To Swf
            /// </summary>
            /// <param name="swfTools">Swf转化工具路径</param>
            /// <param name="srcFilePath"></param>
            /// <param name="targetFilePath"></param>
            /// <returns></returns>
            public static bool PdfToSwf(string toolsPath, string cmd)
            {
                bool iss = false;//判断是否转换成功,默认失败
                try
                {
                    using (Process p = new Process())
                    {
                        ProcessStartInfo psi = new ProcessStartInfo(toolsPath, cmd);
                        p.StartInfo = psi;
                        p.Start();
                        p.WaitForExit();
                        iss = true;//转换成功
                    }
                }
                catch { }
                return iss;
            }
        }
    复制代码
    /// <summary>
            /// Pdf文件转化为Swf
            /// </summary>
            /// <param name="swfTools">转化工具路径</param>
            /// <param name="pdfPath">pdf文件目录</param>
            /// <param name="pdfFileName">pdf文件名</param>
            /// <param name="desPath">保存swf路径</param>
            /// <returns></returns>
            protected string PdfToSwf(string swfTools, string pdfPath, string pdfFileName, string desPath)
            {
                string fileFullName =Path.Combine(pdfPath,pdfFileName);
                string fileFullNameWithoutEx = Path.GetFileNameWithoutExtension(pdfFileName);
                string ext = Path.GetExtension(pdfFileName).ToLower();
    
                string saveSwfPath = desPath + fileFullNameWithoutEx + ".swf";
                string rs = fileFullNameWithoutEx + ".swf";
                
                string cmdStr = "  -t  "" + fileFullName + "" -s flashversion=9 -o "" + saveSwfPath + """;
                bool iss = OfficeHelper.PdfToSwf(swfTools, cmdStr);
    
                return rs;
            }
    
    
    /// <summary>
            /// Office文件转pdf文件
            /// </summary>
            /// <param name="officePath">office文件保存路径</param>
            /// <param name="officeFileName">office文件名</param>
            /// <param name="pdfPath">保存pdf路径</param>
            protected string OfficeToPdf(string officePath, string officeFileName, string pdfPath)
            {
                string fullPathName = Path.Combine(officePath, officeFileName);
                string fileNameWithoutEx = Path.GetFileNameWithoutExtension(officeFileName);
                string ext = Path.GetExtension(officeFileName).ToLower();
    
                string savePdfPath = pdfPath + fileNameWithoutEx + ".pdf";
                string retValue = fileNameWithoutEx + ".pdf";
    
                switch (ext)
                {
                    case ".doc":
                        OfficeHelper.WordToPdf(fullPathName, savePdfPath);
                        break;
                    case ".docx":
                        OfficeHelper.WordToPdf(fullPathName, savePdfPath);
                        break;
                    case ".xls":
                        OfficeHelper.ExcelToPdf(fullPathName, savePdfPath);
                        break;
                    case ".xlsx":
                        OfficeHelper.ExcelToPdf(fullPathName, savePdfPath);
                        break;
                    case ".ppt":
                        OfficeHelper.PptToPdf(fullPathName, savePdfPath);
                        break;
                    case ".pptx":
                        OfficeHelper.PptToPdf(fullPathName, savePdfPath);
                        break;
                }
    
    
                return retValue;
            }
    复制代码

    参考

          在Demo的过程中,学习和参考了两位博友的文章,在此表示感谢

          Wolfy: http://www.cnblogs.com/wolf-sun/p/3569960.html

          静以修身:http://www.cnblogs.com/zzPrince/p/3378336.html

          源代码:http://yunpan.cn/cAhzwWhy5bgVD (提取码:7900)

  • 相关阅读:
    潭州课堂25班:Ph201805201 第九课 函数作用域和匿名函数 (课堂笔记)
    潭州课堂25班:Ph201805201 第八课:函数基础和函数参数 (课堂笔记)
    潭州课堂25班:Ph201805201 第七课:控制流程 (课堂笔记)
    潭州课堂25班:Ph201805201 第六课:散列类型,运算符优先级和逻辑运算 (课堂笔记)
    公开课 之 心蓝 计算器 (课堂笔记)
    公开课 之 tony 电子时钟 (课堂笔记)
    潭州课堂25班:Ph201805201 第五课:格式化输出和深浅复制 (课堂笔记)
    潭州课堂25班:Ph201805201 第四课:Linux的命令以及VIM的使用 (课堂笔记)
    潭州课堂25班:Ph201805201 第三课:序列类型的方法 (课堂笔记)
    微信支付方式
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4139167.html
Copyright © 2011-2022 走看看