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)

  • 相关阅读:
    mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句
    架构设计文档提纲简描
    各大互联网公司架构演进之路汇总
    大数据安全规范
    生活启示
    mysql数据库分库分表(Sharding)
    大数据风控指标----查准率与查全率
    YARN和MapReduce的内存设置参考
    不要在linux上启用net.ipv4.tcp_tw_recycle参数
    [Spark经验一]Spark RDD计算使用的函数里尽量不要使用全局变量
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4139167.html
Copyright © 2011-2022 走看看