文档一直是老大难问题,君不知,代码用时方恨少!有一套成熟的文件帮助类能很大程度上减少寻找各种资料的时间。

    记得以前做一个业务,需要导出协议,一份可编辑,一份不可编辑。那么Word和PDF是最好的选择,Word可编辑,PDF只给客户方面看!


    前两天复习了一下Excel的操作,主要运用到NPOI组件。

    今天给大家带来的是另一个组件Spire.DataExport的使用,主要是进行HTML,Word,PDF的导出操作。

    第一次用到Spire.DataExport还是去年上半年的时候。说实话,非常强大,特别是针对于文档的转换和导入导出操作,非常便利,且使用简单,大家有兴趣的可以去官网查看相关资料,Demo非常清晰明了。

    DataTable转Word

    

   /// <summary>
/// DataTable导出到Word
/// </summary>
/// <param name="filename">文件名称和路径</param>
/// <param name="dt">dt</param>
/// <param name="isweb">是否web导出</param>
public static void DataTableToWord(string filename, DataTable dt, bool isweb = true)
{
if (dt != null && dt.Rows.Count > )
{
if (filename.IndexOf(".doc", StringComparison.OrdinalIgnoreCase) < && filename.IndexOf(".docx", StringComparison.OrdinalIgnoreCase) < )
filename += ".doc"; RTFExport word = new RTFExport
{
DataSource = Spire.DataExport.Common.ExportSource.DataTable,
DataTable = dt,
ActionAfterExport = Spire.DataExport.Common.ActionType.OpenView
}; using (MemoryStream ms = new MemoryStream())
{
word.SaveToStream(ms);
if (!isweb)
{
if (!filename.Contains("\\"))
filename = Config.Config.GenerateFilePath("Office") + filename; if (!File.Exists(filename))
{
using (FileStream fs = new FileStream(filename, FileMode.CreateNew))
{
fs.Write(ms.ToArray(), , ms.ToArray().Length);
fs.Close();
}
}
}
else
{
HttpContext curContext = HttpContext.Current;
curContext.Response.ContentType = "application/vnd.ms-word";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, Encoding.UTF8));
curContext.Response.BinaryWrite(ms.GetBuffer());
curContext.Response.End();
}
}
}
}

    DataTable转PDF

    

   /// <summary>
/// DataTable导出到PDF
/// </summary>
/// <param name="filename">文件名称和路径</param>
/// <param name="dt">dt</param>
/// <param name="isweb">是否web导出</param>
public static void DataTableToPDF(string filename, DataTable dt, bool isweb = true)
{
if (dt != null && dt.Rows.Count > )
{
if (filename.IndexOf(".pdf", StringComparison.OrdinalIgnoreCase) < )
filename += ".pdf"; Spire.DataExport.PDF.PDFExport pdf = new Spire.DataExport.PDF.PDFExport
{
DataSource = Spire.DataExport.Common.ExportSource.DataTable,
DataTable = dt,
ActionAfterExport = Spire.DataExport.Common.ActionType.OpenView
}; using (MemoryStream ms = new MemoryStream())
{
pdf.SaveToStream(ms);
if (!isweb)
{
if (!filename.Contains("\\"))
filename = Config.Config.GenerateFilePath("Office") + filename; if (!File.Exists(filename))
{
using (FileStream fs = new FileStream(filename, FileMode.CreateNew))
{
fs.Write(ms.ToArray(), , ms.ToArray().Length);
fs.Close();
}
}
}
else
{
HttpContext curContext = HttpContext.Current;
curContext.Response.ContentType = "application/pdf";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, Encoding.UTF8));
curContext.Response.BinaryWrite(ms.GetBuffer());
curContext.Response.End();
}
}
}

    DataTable转HTML

    

  /// <summary>
/// DataTable导出到HTML
/// </summary>
/// <param name="filename">文件名称和路径</param>
/// <param name="dt">dt</param>
/// <param name="isweb">是否web导出</param>
public static void DataTableToHTML(string filename, DataTable dt, bool isweb = true)
{
if (dt != null && dt.Rows.Count > )
{
if (filename.IndexOf(".html", StringComparison.OrdinalIgnoreCase) < )
filename += ".html";
HTMLExport html = new HTMLExport
{
ActionAfterExport = ActionType.None,
HtmlStyle = HtmlStyle.MSMoney,
DataSource = ExportSource.DataTable,
DataTable = dt
}; using (MemoryStream ms = new MemoryStream())
{
html.SaveToStream(ms);
if (!isweb)
{
if (!filename.Contains("\\"))
filename = Config.Config.GenerateFilePath("Office") + filename; if (!File.Exists(filename))
{
using (FileStream fs = new FileStream(filename, FileMode.CreateNew))
{
fs.Write(ms.ToArray(), , ms.ToArray().Length);
fs.Close();
}
}
}
else
{
HttpContext curContext = HttpContext.Current;
curContext.Response.ContentType = "text/html";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, Encoding.UTF8));
curContext.Response.BinaryWrite(ms.GetBuffer());
curContext.Response.End();
}
}
}
}

OK,各位看官,近期的文档操作写到这里喏,感谢大家的支持,您的支持是我的动力!

下一期给大家带来的是Config文件操作,敬请期待!!!

Asp.Net 常用工具类之Office-文档操作(6)的更多相关文章

  1. Asp.Net 常用工具类之Office—Excel导入(5)

    之前在做一个项目的时候,客户方面只提供了一份简单的Excel文件,且要跟现有数据进行对接. 当时想到的是如果数据量不大,可以Excel一条一条加进去,无奈数据有几十兆!!! 换了一种思维,进行了导入: ...

  2. Asp.Net 常用工具类之Office—Excel导出(4)

    开发过程中各类报表导入导出防不胜防,网上也是各种解决方法层出不穷,比如Excel,CSV,Word,PDF,HTML等等... 网上各种导出插件也是层出不穷,NPOI,微软Microsoft.Offi ...

  3. Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统

    Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...

  4. java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包

    Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...

  5. 常用工具说明--jsdoc 前端文档输出工具

    1.利用npm安装jsdoc模块 npm install jsdoc -g   2.由于jsdoc默认的生成文档模板不好看,可以下载一套好看些的模板,如 jaguar.js 下载地址:https:// ...

  6. Asp.Net 常用工具类---Config操作(7)

    近期工作比较忙,忙到忘记写博客(自己的借口,主要加班下班后不想动). 月初的时候,打算每两天写一篇博文,分享自己的一些心得和开发体验,无奈现在只写到第六篇,然而时间已经是20号,岁月不饶人! 总想写点 ...

  7. Asp.Net 常用工具类之加密——非对称加密RSA算法

    踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...

  8. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  9. [C#] 常用工具类——文件操作类

    /// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...

随机推荐

  1. mySQL内存及虚拟内存优化设置

    为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过 ...

  2. shell读取文件的每一行

    写法一: ---------------------------------------------------------------------------- #!/bin/bash while ...

  3. endnote X7使用方法

    网页版的endnote不能添加新模版,只能用模版库里的那些,所以转而试试离线版客户端. 1.下载安装完以后(下载地址就不给了,网上有很多),在word里可以看到顶栏有插件,如果你同时也安装了在线版本, ...

  4. bootstrap 按钮 文本 浮动 隐藏

    bootstrap 按钮 文本 浮动 隐藏 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  5. Hadoop学习笔记-001-CentOS_6.5_64_连接外网设置

    参考:http://blog.csdn.net/u010270403/article/details/51444677 虚拟机中共五个centos系统,每个系统有两个用户root和hadoop:cdh ...

  6. HDU 1006 [Tick Tick]时钟问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1006 题目大意:钟表有时.分.秒3根指针.当任意两根指针间夹角大于等于n°时,就说他们是happy的, ...

  7. 【鸡年大吉】,不知道写点啥,放个demo(小球碰撞)吧,有兴趣的看看

    最初的想法是仿写win7的泡泡屏保效果,但是对于小球的斜碰问题一直没搞明白(如果你会这个,欢迎留言或者做个demo),所以只是简单处理了碰撞后的速度,有时候会看起来很搞笑~~~funny guy 话不 ...

  8. class path resource [config.xml] cannot be opened because it does not exist

    初学Spring在用Resource rs=new ClassPathResource("applicationContext.xml");时老是遇到这个错误.后来发现用Appli ...

  9. <C++Primer>第四版 阅读笔记 第四部分 “面向对象编程与泛型编程”

    继承和动态绑定与数据抽象一起成为面向对象编程的基础. 模板使我们能够编写独立于具体类型的泛型类和泛型函数. 第15章 面向对象编程 面向对象编程基于三个基本概念:数据抽象.继承和动态绑定.在C++中, ...

  10. Java线程中yield()的用法

    Thread.yield()方法的作用:暂停当前正在执行的线程,并执行其他线程.(可能没有效果) yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会.因此, ...