【项目实战】--Office文件预览

上篇文章已经介绍了office文件的上传,这次来简单介绍一下Office文件的预览。

实现如下:
**1、工具准备**
Pdf2swf:用于把PDF格式文件转换为swf文件
Flexpaper:flash播放器,可播放一帧一帧的flash

**2、添加引用**
在项目中添加引用:选择COM里面Microsoft Office 15.0 object Library和Microsoft Word 15.0 object Library。引用里就会自动添加Microsoft.Office.Interop.Word引用

注意*****报错*****
类型“Microsoft.Office.Interop.Word.ApplicationClass"未定义构造函数。无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass”。请改用适用的接口。

******解决******
解决方案资源管理器 -> 引用 -> "Microsoft.Office.Interop.Word" -> 右键选择属性 -> 嵌入互操作类型的值改为"false"即可。

**3、实现代码**
  • View:
<script src="../../Scripts/MyScript/flexpaper_flash.js"></script>
<div id="dlgPreview" closed="true" class="easyui-dialog" style="width: 750px; height: 750px;padding-top: 30px;padding-bottom: 30px;padding-left: 25px;"
         buttons="#dlg-buttons" title ="添加">
        <form  id="PreviewHomeWork" method="post" >   @*method="post" action="/TeaQueryHomework/AddHomeWork" *@

            @*添加按钮弹出框*@
            <a id="HomeworkBack" class="easyui-linkbutton l-btn"  data-options="plain:true,iconCls:‘icon-back‘" style="margin-left :80px;" href="#" onclick="HomeworkBack()">
                    <span >返回</span>
             </a>
             <div style="position: absolute; left: 60px; top: 100px;">
            <a id="viewerPlaceHolder" style="width: 650px; height: 600px; display: block;"></a>
            </div>
        </form>
  </div> 
  • Controller:

    WordToPDF:

/// <summary>
/// 将office文件转化为pdf文件,文件名称不变
/// </summary>
/// <param name="pdf2swfPath">pdf2swfPath工具所在路径</param>
/// <param name="OfficePath">office存储路径</param>
/// <param name="OfficeName">office文件名称</param>
/// <param name="destPath">pdf存储路径</param>
/// <returns>返回生成pdf的文件名,无效则返回空</returns>
private string OfficeToPdf(string OfficePath, string OfficeName, string destPath)
{
    string fullPathName = OfficePath + OfficeName;//包含 路径 的全称
    string fileNameWithoutEx = System.IO.Path.GetFileNameWithoutExtension(OfficeName);//不包含路径,不包含扩展名
    string extendName = System.IO.Path.GetExtension(OfficeName).ToLower();//文件扩展名
    string saveName = destPath + fileNameWithoutEx + ".pdf";
    string returnValue = fileNameWithoutEx + ".pdf";

    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(fullPathName);
        document.SaveAs();
        document.ExportAsFixedFormat(saveName, exportFormat);
        }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
    finally
    {
        if (document != null)
        {
            document.Close();
            document = null;
        }
        if (application != null)
        {
            application.Quit();
            application = null;
        }
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
    return returnValue;
}
PDFToswf
/// <summary>
/// 将pdf文件转化为swf文件,文件名称不变
/// </summary>
/// <param name="pdf2swfPath">pdf2swfPath工具所在路径</param>
/// <param name="PdfPath">pdf存储路径</param>
/// <param name="PdfName">pdf文件名称</param>
/// <param name="destPath">swf存储路径</param>
/// <returns></returns>
private string PdfToSwf(string pdf2swfPath, string PdfPath, string PdfName, string destPath)
{
    string fullPathName = PdfPath + PdfName;//包含 路径 的全称
    string fileNameWithoutEx = System.IO.Path.GetFileNameWithoutExtension(PdfName);//不包含路径,不包含扩展名
    string extendName = System.IO.Path.GetExtension(PdfName).ToLower();//文件扩展名
    string saveName = destPath + fileNameWithoutEx + ".swf";
    string returnValue = fileNameWithoutEx + ".swf"; ;
    if (extendName != ".pdf")
    {
        returnValue = "";
    }
    else
    {
        Process pc = new Process();

        string cmd = pdf2swfPath;
        string args = " -t " + fullPathName + " -s flashversion=9 -o " + saveName;
        try
        {
            ProcessStartInfo psi = new ProcessStartInfo(cmd, args);
            psi.WindowStyle = ProcessWindowStyle.Hidden;
            pc.StartInfo = psi;
            pc.Start();
            pc.WaitForExit();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            pc.Close();
            pc.Dispose();
        }
    }
    return returnValue;
}
  • JS代码:
var target = "../../Content/TeaFile/SWF/成绩管理.swf";
var fp = new FlexPaperViewer(
                        ‘../../FlexPaper/FlexPaperViewer‘,
                        ‘viewerPlaceHolder‘, {
                            config: {
                                //SwfFile: escape($("#file").val()),  //
                                SwfFile: escape(target),
                                Scale: 0.6,
                                ZoomTransition: ‘easeOut‘,
                                ZoomTime: 0.5,
                                ZoomInterval: 0.2,
                                FitPageOnLoad: true,
                                FitWidthOnLoad: false,
                                PrintEnabled: true,
                                FullScreenAsMaxWindow: false,
                                ProgressiveLoading: false,
                                MinZoomSize: 0.2,
                                MaxZoomSize: 5,
                                SearchMatchAll: false,
                                InitViewMode: ‘Portrait‘,

                                ViewModeToolsVisible: true,
                                ZoomToolsVisible: true,
                                NavToolsVisible: true,
                                CursorToolsVisible: true,
                                SearchToolsVisible: true,

                                localeChain: ‘en_US‘
                            }
                        });

预览效果图:

至此为止,Office的上传和预览就完成了。如果发现更好的方法,欢迎大家交流、批评、指正。

时间: 2024-07-29 23:01:31

【项目实战】--Office文件预览的相关文章

.net 实现Office文件预览,word文件在线预览、excel文件在线预览、ppt文件在线预览,excel转html,office格式转换,(.NET、SQL技术交流群206656202,入群需注明来自博客园)

近日公司要搞一个日常的文档管理的东东,可以上传.下载各种文件,如果是office文件呢还必须得支持预览功能,其他的都好说但是唯独office预览功能比较麻烦,但是不能不做,废话不多说了一步步来吧.分析了下网易邮箱的文件预览功能,他用的是微软的组件,最早叫Office online,现在分开了叫Word online.Excel online ....等等,效果十分炫酷功能十分强大,但是查看了下对api的说明发现对服务器的要求比较苛刻而且配置比较复杂不太适合.然后 又看了下腾讯用的是永中第三方组件

java项目中Excel文件预览

1 package com.linkonworks.df.busi.utils; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.StringWriter; 8 9 import javax.xml.parsers.DocumentBuilderFactory; 10 imp

Office在线预览及PDF在线预览的实现方式大集合

一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免费的swftools.exe工具生成swf格式的Flash文件,网页中加载flexpaper免费开源工具(有广告)实现Flash文件的预览.优点:1.有效的保护的源文件及文件的复制,不可复制也是缺点.2.源码是自己的,版权有保证.缺点:1.服务器上必须安装Office软件.2.导出PDF文件本身是个

Office在线预览及PDF在线预览的实现方式史上最全大集合

Office在线预览及PDF在线预览的实现方式大集合 一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免费的swftools.exe工具生成swf格式的Flash文件,网页中加载flexpaper免费开源工具(有广告)实现Flash文件的预览.优点:1.有效的保护的源文件及文件的复制,不可复制也是缺点.2.源码是自己的,版权有保证.缺点:1.服务器

UIDocumentInteractionController 文件预览

//创建并从底部弹出来 - (void)viewDidLoad { [super viewDidLoad]; [self setupDocumentControllerWithURL:fileURL]; CGRect rect = CGRectMake(0, 0, ScreenWidth, ScreenHeight); //    [self.docInteractionController presentOptionsMenuFromRect:rect inView:self.view  an

如何在HiWork中进行文件预览

周一,忙碌的一周又开始了. 今天来跟大家说说HiWork(www.hiwork.cc)中的文件预览功能 文件预览很重要很方便,在进行团队即时沟通的同时,不用下载文件就可以很方便的进行各类文件的预览.而给机器上没有安装相应软件的操作者带来更多便利. HiWork(www.hiwork.cc)为用户提供了非常完备的文件预览功能,包括txt.word.excel.ppt.pdf.rar.zip文件以及部分音频和视频文件.下面我们仅以word文档为例,说说在HiWork(www.hiwork.cc)中如

eclipse创建android项目,无法正常预览布局文件,出现This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in...

eclipse创建android项目时,预览layout.xml文件时提示: This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in,导致无法正常预览布局文件.问题根源:SDK版本过高,ADT版本过低.解决方法如下. 工具/原料 eclipse ADT插件 方法/步骤 找到eclipse文件夹,打开eclipse软件,创建and

eclipse创建android项目,无法正常预览布局文件的相关问题

eclipse创建android项目时,预览layout.xml文件时提示: This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in,导致无法正常预览布局文件. 问题的根源在于SDK版本与ADT版本不匹配.问题解决办法如下: 方法一: 找到选择android版本按钮,改变android版本即可.如下图: 方法二: Help --

java代码编辑器 pdf文件预览 主流SSM 代码生成器 shrio redis websocket即时通讯

A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块 C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势 D 集成安全权限框架shiro   Shiro 是一个用 Jav