需求很简单,用户上传office文件(word、excel、ppt)后,可以预览上传的这些文件。搜索的相关的资料后。整理如下:

Step1.用户上传office文件。

Step2.把Office文件转化为pdf文件

Step3.把pdf文件转化为swf文件

Step4.使用flexpaper插件预览swf文件

根据这四步,我们逐步分析:

Step1.上传文件,在此不做赘述。

Step2.把Office文件转化为pdf文件。

必须保证你的office版本在2007之上。我第一次使用office2003,不报错,但是也没用生成相关的pdf文件。果断使用了最新的office2013即可完美运行。

在次贴出将word转化为pdf文件的代码,完整实例,请看附件。

        /// <summary>
/// 把Word文件转换成为PDF格式文件
/// </summary>
/// <param name="sourcePath">源文件路径</param>
/// <param name="targetPath">目标文件路径</param>
/// <returns>true=转换成功</returns>
public static bool WordToPDF(string sourcePath, string targetPath)
{
bool result = 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(sourcePath);
document.SaveAs();
document.ExportAsFixedFormat(targetPath, exportFormat);
result = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
result = false;
}
finally
{
if (document != null)
{
document.Close();
document = null;
}
if (application != null)
{
application.Quit();
application = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
return result;
}

(考虑到有些和我一样的新手,在此赘述几句吧:如果你使用vs2010开发,在添加office引用的时候,直接选择.net栏目下的office、Microsoft.Office.Interop.Word,Microsoft.Office.Interop.PowerPoint和Microsoft.Office.Interop.Excel,并且保证office的版本高于后三者就行啦。不用再在com栏目下引入相关office的com组件)

Step3.把pdf文件转化为swf文件。

首先,我们可以下载swftools,完成安装后会在安装目录下面有多个小工具。选择pdf2swf.exe 拷贝到我们的项目相关目录下面,使用如下代码,便可完成调用。

        /// <summary>
/// 把PDF文件转化为SWF文件
/// </summary>
/// <param name="toolPah">pdf2swf工具路径</param>
/// <param name="sourcePath">源文件路径</param>
/// <param name="targetPath">目标文件路径</param>
/// <returns>true=转化成功</returns>
public static bool PDFToSWF(string toolPah, string sourcePath, string targetPath)
{
Process pc = new Process();
bool returnValue = true; string cmd = toolPah;
string args = " -t " + sourcePath + " -s flashversion=9 -o " + targetPath;
try
{
ProcessStartInfo psi = new ProcessStartInfo(cmd, args);
psi.WindowStyle = ProcessWindowStyle.Hidden;
pc.StartInfo = psi;
pc.Start();
pc.WaitForExit();
}
catch (Exception ex)
{
returnValue = false;
throw new Exception(ex.Message);
}
finally
{
pc.Close();
pc.Dispose();
}
return returnValue;
}

此处也有两处要重点提醒。首先呢,就是所有的文件路径都不能有空格,这是因为pdf2swf对含有空格的文件路径不支持。其次,就是flashversion=9这个关键的命名也要加上,否则会出现在flexpaper无法预览该swf文档的情况。

Step4.使用flexpaper插件预览swf文件

刚开始我们可以下载一个官方的用例,选择-》download web server package。然后直接打开index.html发现不能预览docs中的Paper.pdf.swf这个swf文件。于是乎网上出现了n多关于通过通过将adobe flash player将flexpaper添加信任啥的,这个哥试了,但是发现不行!有种被坑的感觉!最后我的解决方案是:直接将这个官网的例子放在IIS服务下面就行了。或者你通过vs2010建立项目的时候把这个插件添加进去(就是把官网的那些代码粘过去,我这样说你明白吧,但是注意一下路径问题)也是可以的。

有些童鞋该说了,我想把swf文件动态加载,也就是FlexPaperViewer中的SwfFile动态加载。so easy。

比如一个http://localhost:12345/mypage.aspx?swf=123.swf这样的请求,

我们在CS端通过request.QueryString["swf"]获取123.swf文件之后可以将其值赋给mypage.aspx页面的HiddenField1,然后在

mypage.aspx中使用

SwfFile: escape($("#HiddenField1").val()),

即可动态获取swf文件。

最后贴出最终的显示结果图:

图1.初始页面

图2.选择office文件

图3.上传后预览

================================正常人类分割线=================================

【客户需求】做完了之后,我闲着蛋疼想着如果用户要上传图片格式的文件,我们要预览图片的话呢?

很简单,用jQuery图片的相关插件就能美好的实现了。

当然用swftools也能将图片转化为swf,和这个页面集成到一起去。

swftools中支持jpg、jpeg、gif和png,不支持bmp文件格式。

为了能让转化成的swf能在flexpaper中能够正确的显示,这几种图片的swftool命令也不一样,直接贴代码了哈

/// <summary>
/// png、jpg和jpeg文件的转化
/// </summary>
/// <param name="toolPah"></param>
/// <param name="sourcePath"></param>
/// <param name="targetPath"></param>
/// <returns></returns>
public static bool PicturesToSwf(string toolPah, string sourcePath, string targetPath)
{
Process pc = new Process();
bool returnValue = true; string cmd = toolPah;
string args = " " + sourcePath + " -o " + targetPath+" -T 9";
//如果是多个图片转化为swf 格式为 ..jpeg2swf.exe C:\1.jpg C:\2.jpg -o C:\swf1.swf
try
{
ProcessStartInfo psi = new ProcessStartInfo(cmd, args);
psi.WindowStyle = ProcessWindowStyle.Hidden;
pc.StartInfo = psi;
pc.Start();
pc.WaitForExit();
}
catch (Exception ex)
{
returnValue = false;
throw new Exception(ex.Message);
}
finally
{
pc.Close();
pc.Dispose();
}
return returnValue;
}
/// <summary>
/// Gif文件转化为swf
/// </summary>
/// <param name="toolPah"></param>
/// <param name="sourcePath"></param>
/// <param name="targetPath"></param>
/// <returns></returns>
public static bool GifPicturesToSwf(string toolPah, string sourcePath, string targetPath)
{
Process pc = new Process();
bool returnValue = true; string cmd = toolPah;
string args = " " + sourcePath + " -o " + targetPath;
try
{
ProcessStartInfo psi = new ProcessStartInfo(cmd, args);
psi.WindowStyle = ProcessWindowStyle.Hidden;
pc.StartInfo = psi;
pc.Start();
pc.WaitForExit();
}
catch (Exception ex)
{
returnValue = false;
throw new Exception(ex.Message);
}
finally
{
pc.Close();
pc.Dispose();
}
return returnValue;
}

这几个命令虽然网上有,但是很多都是有问题的,有的在flexpaper当中不能用。本人的这个是亲测可用的,欢迎拍砖!

 

PostScript:

最后附上本人的项目附件,第一次这么仔细的写博客,大家多多关照。

附件下载

使用FlexPaper实现office文件的预览(C#版)的更多相关文章

  1. office文件的预览

    使用FlexPaper实现office文件的预览(C#版) 需求很简单,用户上传office文件(word.excel.ppt)后,可以预览上传的这些文件.搜索的相关的资料后.整理如下: Step1. ...

  2. office文件在线预览,模仿网易邮箱在线预览的

    最近研究了半天,代码是倾情奉送啊,C#,asp.net的 这个原理是office文件转换为PDF文件,然后再转换成SWF文件,FlexPaper+swfTools. 有个问题,需要在web.confi ...

  3. 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程

    大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...

  4. Java实现文件的预览

    最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法.我集成到我项目内测试的有以下三种,最后使用的是第三种: 直接使用别人提供的服务 例如:office web 365 使用 ...

  5. asp.net word ecxel类型文件在线预览

    asp.net word ecxel类型文件在线预览 首先得引用COM: Microsoft Excel 10 Object Library Microsoft Word 10 Object Libr ...

  6. 文件在线预览doc,docx转换pdf(一)

    文件在线预览doc,docx转换pdf(一) 1. 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库 ...

  7. 网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html

    #网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如 ...

  8. 【ASP.NET 进阶】PDF文件在线预览(类似百度文库)

    工作需要完成文档的在线预览,现在完成了第一步PDF文件的预览,步骤是通过PDF转换工具pdf2swf.exe把PDF文件转换为SWF文件,然后通过FlexPaper就可以预览了.效果如下(GIF图片太 ...

  9. kkfileview v2.0 发布,文件在线预览项目方案

    kkfileview文件在线预览 此项目为文件文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署,部署好后可以独立提供预览服务,使用http接口访问,不需要和应用集成,具 ...

随机推荐

  1. Centos 编写 service 启动

    Centos 系统服务脚本目录: [html] view plaincopyprint?   /usr/lib/systemd/ 有系统(system)和用户(user)之分, 如需要开机没有登陆情况 ...

  2. 免费SVN服务器笔记

    前言: 笔者有个项目,需要类似公司一样进行源代码管理.鉴于很多团队一样,对资金资源限制,只能寻找免费的SVN服务器 于是在BD上搜索一大推资料,很多都是google的,但是GG经常无法正常访问,给项目 ...

  3. 自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解

    '*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...

  4. CSS基础篇之了解CSS和它的基本属性

    CSS是什么? CSS英文全名是Cascading Style Sheets翻译过来就是层叠样式表,它主是把网页表现与内容分离的一种样式设计语言.这种语言能优化我们编程,把东西简化和优化写法,而且不同 ...

  5. opecv获取图像轮廓

    获取轮廓 #import <opencv2/opencv.hpp> #import <opencv2/imgcodecs/ios.h> #import <opencv2/ ...

  6. ASP.NET Core中显示自定义错误页面-增强版

    之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...

  7. Hadoop学习笔记—8.Combiner与自定义Combiner

    一.Combiner的出现背景 1.1 回顾Map阶段五大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步凑,其中在Map阶段总共五个步骤,如下图所示: ...

  8. iconfont的蜕化操作

    很多国外的网站,访问的时候可以看到,页面先是大面积白一下,然后恢复正常.原因是网页上用到了 webfont,这些页面很多情况都是直接引用 google 的 webfont 地址,中华大局域网下,由于网 ...

  9. 译文---C#堆VS栈(Part One)

    前言 本文主要是讲解C#语言在内存中堆.栈的使用情况,使读者能更好的理解值类型.引用类型以及线程栈.托管堆. 首先感谢原文作者:Matthew Cochran 为我们带来了一篇非常好的文章,并配以大量 ...

  10. 谁占了我的端口 for Windows

    这篇文章发布于我的 github 博客:原文 今天在本地调试 Blog 的时候意外的出现了一些错误:127.0.0.1 4000 端口已经被其他的进程占用了.如何找到占用端口的进程呢? Configu ...