在线预览Office文件【效果类似百度文库】
引言
结合上个项目和目前做的这个项目,其中都用到了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文件名,试了几次没成功。
效果图
转化代码
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/csSPiPeVuum4s (提取码:4c7c)
在线预览Office文件【效果类似百度文库】的更多相关文章
- 在线预览Office文件【效果类似百度文库】(转载)
转载地址:http://www.cnblogs.com/sword-successful/p/4031823.html 引言 结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前 ...
- 在线预览office文件
Office Online 实现在线预览 office的在线预览,针对不同的浏览器版本和系统具有要求,具体的相关文档请参考官方文档. 利用office online 平台进行office 文档的在线查 ...
- 经管资源库项目总结----在线预览office文件的实现与总结
依旧是这个经管的项目.在线预览作为资源和文档管理系统的一个很酷的并且是如此重要的功能,是必须要实现的.然后百度一下office在线预览,看起来so eazy啊,各种博客各种demo,一下子就做出效果来 ...
- Java实现web在线预览office文档与pdf文档实例
https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...
- 用pdf.js实现在移动端在线预览pdf文件
用pdf.js实现在移动端在线预览pdf文件1.下载pdf.js 官网地址:https://mozilla.github.io/pdf.js/ 2.配置 下载下来的文件包,就是一个demo ...
- 使用pdfjs插件在线预览PDF文件
前言 本文介绍在html中使用 pdfjs插件在线预览PDF文件的方法. 实现步骤 下载 pdfjs 并引入项目中 到PDFJS官网 http://mozilla.github.io/pdf.js/g ...
- asp.net在线预览txt文件(简单实现)
最近在做文件的在线预览,发现txt文件没有一个较好的方法去实现,想了想可能是比较简单就直接在后台输出了 txt文件
- WinForm中预览Office文件
WinForm预览Office文档 使用WinForm, WPF, Office组件 原理:使用Office COM组件将Word,Excel转换为XPS文档, 将WPF的DocumentViewer ...
- linux在线预览pdf文件开发思路
准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...
随机推荐
- 11个并不广为人知,但值得了解的Python库
这是一篇译文,文中提及了一些不常见但是有用的Python库 原文地址:http://blog.yhathq.com/posts/11-python-libraries-you-might-not-kn ...
- linux 中部署ant编译的包中缺少问题
今天遇到在window上部署ant编译的包,能运行正常,但部署在linux中出现跳不进jsp中,出现404问题,后来经过排查在jsp中<%@taglib prefix="c" ...
- 关于ReSharper
Resharper提供以下6个核心功能1. 代码分析(Code Analysis):智能提示代码中存在的问题和修复建议. 2. 编码助手(Coding Assistance):智能提示自动完成功能. ...
- EF 连接sql2000
正常连接会提示版本低 可以先用ef连接高版本的sql然后新建好EDMX文件后,在右键xml方式打开,把ProviderManifestToken="2008" 改为2000 然后再 ...
- 打造程序员的高效生产力工具-mac篇
打造程序员的高效生产力工具-mac篇 1 概述 古语有云:“工欲善其事,必先利其器” [1] ,作为一个程序员,他最重要的生产资源是脑力知识,最重要的生产工具是什么?电脑. 在进行重要的脑力成果输 ...
- 剑指Offer面试题:1.实现Singleton模式
说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- 玩转动态编译 - 高级篇:一,IL访问静态属性和字段
IL介绍 通用中间语言(Common Intermediate Language,简称CIL,发音为"sill"或"kill")是一种属于通用语言架构和.NET ...
- Python 学习文章收藏
作者 标题 rollenholt Python修饰器的函数式编程 - Rollen Holt - 博客园 rollenholt python操作gmail - Rollen Holt - 博客园 ro ...
- Laravel5.0学习--03 Artisan命令
本文以laravel5.0.22为例. 简介 Artisan 是 Laravel 内置的命令行接口.它提供了一些有用的命令协助您开发,它是由强大的 Symfony Console 组件所驱动.利用它, ...