原文:http://www.cnblogs.com/afutureBoss/p/4074397.html?utm_source=tuicool&utm_medium=referral

最近项目需要用到导出word,巨硬的office组件,大多数人都不喜欢用(我就其中之一)。所有在网上尝试了几个插件。能够导出word的,除了NPOI之外,还有docX(免费),pageoffice(收费),aspose(也是收费的,虽然我有license,但是公司的另一个项目组用了破解版的,导致我也不敢用。毕竟license也是网上down下来的。)收费的,我想大家伙儿和我一样都不会去考虑,所有我只是尝试了一下docX,docX的代码量相对于NPOI来说少很多,但是这货中文的资料太少了(鄙视一下CSDN,妈蛋,是个用户写个代码就往上传,还他丫的下载一个10个积分……),捣腾了半天,最终能够生成word,但是要是往里面加图片,确实不知道怎弄。(如果你有幸看了这篇文字,并且还会,还望不吝)。

NPOI这个东西好是好,但是有个问题,如果不说,可能很多人都不会注意。它的版本总是让人感到错愕。一个不一样的版本,写法就会产生很多变化,下面代码中,注释掉的部分,就是因为引用的版本发生变化,改写了部分代码。

protected void Button1_Click(object sender, EventArgs e)
{
XWPFDocument doc = new XWPFDocument(); //创建新的word文档
XWPFParagraph p0 = doc.CreateParagraph(); //向新文档中添加段落
p0.Alignment = ParagraphAlignment.LEFT;
//p0.SetAlignment(ParagraphAlignment.LEFT); //段落对其方式为居中
XWPFRun r0 = p0.CreateRun();
r0.FontFamily = "宋体";
//r0.SetFontFamily("宋体");
r0.FontSize = ;
//r0.SetFontSize(20);
r0.SetBold(true);
r0.SetText("未登录过学生的账号密码");//向该段落中添加文字
XWPFParagraph p1 = doc.CreateParagraph();
p1.Alignment = ParagraphAlignment.LEFT;
//p1.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r1 = p1.CreateRun();
r1.FontFamily = "宋体";
//r1.SetFontFamily("宋体");
r1.FontSize = ;
//r1.SetFontSize(15);
r1.SetBold(true);
r1.SetText("(备注:已登录过的学生密码不显示)");
XWPFParagraph p2 = doc.CreateParagraph();
p2.Alignment = ParagraphAlignment.LEFT;
//p2.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r2 = p2.CreateRun();
//r2.SetFontFamily("宋体");
r2.FontFamily = "宋体";
//r2.SetFontSize(10);
r2.FontSize = ;
r2.SetBold(true);
r2.SetText("学校:XX一中");
XWPFParagraph p3 = doc.CreateParagraph();
p3.Alignment = ParagraphAlignment.LEFT;
//p3.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r3 = p2.CreateRun();
//r3.SetFontFamily("宋体");
r3.FontFamily = "宋体";
//r3.SetFontSize(10);
r3.FontSize = ;
r3.SetBold(true);
r3.SetText("班级:(7)");
XWPFParagraph p4 = doc.CreateParagraph();
p4.Alignment = ParagraphAlignment.LEFT;
//p4.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r4 = p4.CreateRun();
r4.FontFamily = "宋体";
//r4.SetFontFamily("宋体");
r4.FontSize = ;
//r4.SetFontSize(10);
r4.SetBold(true);
r4.SetText("班主任:ddd");
XWPFParagraph p5 = doc.CreateParagraph();
p5.Alignment = ParagraphAlignment.LEFT;
//p5.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r5 = p5.CreateRun();
r5.FontFamily = "宋体";
//r5.SetFontFamily("宋体");
r5.FontSize = ;
//r5.SetFontSize(10);
r5.SetBold(true);
r5.SetText("可以在此处添加备注:");
XWPFTable table = doc.CreateTable(, );
table.Width = ;//设置表格宽度
XWPFParagraph pIO = table.GetRow().GetCell().AddParagraph();
XWPFRun rIO = pIO.CreateRun();
rIO.FontFamily = "微软雅黑";
//rIO.SetFontFamily("微软雅黑");
rIO.FontSize = ;
//rIO.SetFontSize(12);
rIO.SetBold(true);
rIO.SetText("表格第一行第一列");
XWPFParagraph pINo = table.GetRow().GetCell().AddParagraph();
XWPFRun rINo = pINo.CreateRun();
//rINo.SetFontFamily("微软雅黑");
rINo.FontFamily = "微软雅黑";
//rINo.SetFontSize(12);
rINo.FontSize = ;
rINo.SetBold(true);
rINo.SetText("表格第一行第二列");
XWPFParagraph pIMm = table.GetRow().GetCell().AddParagraph();
XWPFRun rIMm = pIMm.CreateRun();
//rIMm.SetFontFamily("微软雅黑");
rIMm.FontFamily = "微软雅黑";
//rIMm.SetFontSize(12);
rIMm.FontSize = ;
rIMm.SetBold(true);
rIMm.SetText("表格第一行第三列");
XWPFParagraph pIName = table.GetRow().GetCell().AddParagraph();
XWPFRun rIName = pIName.CreateRun();
//rIName.SetFontFamily("微软雅黑");
rIName.FontFamily = "微软雅黑";
//rIName.SetFontSize(12);
rIName.FontSize = ;
rIName.SetBold(true);
rIName.SetText("表格第一行第4列");

      /*这段代码是插入图片的*/
XWPFParagraph gp = doc.CreateParagraph();
XWPFRun gr = gp.CreateRun();
var widthEmus = (int)(400.0 * );
var heightEmus = (int)(300.0 * );
using (FileStream picData = new FileStream("f:\\1.jpg", FileMode.Open, FileAccess.Read))
{
gr.AddPicture(picData, (int)PictureType.PNG, "11.png", widthEmus, heightEmus);
}
      /*这段代码是插入图片的*/

FileStream sw = File.Create("cutput.docx"); //写流 
doc.Write(sw); //...
sw.Close(); //在服务端生成文件
FileInfo file = new FileInfo("cutput.docx");//文件保存路径及名称 //注意: 文件保存的父文件夹需添加Everyone用户,并给予其完全控制权限
Response.Clear();
Response.ClearHeaders(); //清除报文头
Response.Buffer = false; //不适用页面缓存
Response.ContentType = "application/octet-stream"; //定义传入类型:二进制
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("1.docx", System.Text.Encoding.UTF8));//导出的word文档的名字
Response.AppendHeader("Content-Length", file.Length.ToString());
Response.WriteFile(file.FullName);
Response.Flush(); //以上将生成的word文件发送至用户浏览器
File.Delete("cutput.docx"); //清除服务端生成的word文件 }

使用NPOI2.1.3.1版本导出word附带表格和图片的更多相关文章

  1. C#通过模板导出Word(文字,表格,图片)

    C#通过模板导出Word(文字,表格,图片)   C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法, ...

  2. .net使用AsposeWord导出word table表格

    本文为原创,转载请注明出处 1.前言 .net平台下导出word文件还可以使用Microsoft.Office.Interop和NPOI,但是这两者都有缺点,微软的Office.Interop组件需要 ...

  3. word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换

    原文出处:https://www.cnblogs.com/ilefei/p/3508463.html 一:模板的创建   (注意文件后缀只能是.docx或.doct) 在需要位置 插入-文档部件-域, ...

  4. 【转】Word之表格、图片的题注(抬头)自动编号

    问:word中的表格怎么自动插入题注(即表头的编号自动编号)? 答: 1首先搞清楚自动编号的意思.自动插入题注的意思是,在你在word中新建或者复制一个word表格的时候,表头的编号就自动生成了,而不 ...

  5. 前台导出Word文档思路步骤总结(freemarker)

    1. 需求是导出word带表格,表格列数不变,行数由数据库的值决定: 2. 导出最开始想的是直接前端导出,使用了jquery-wordexport插件,导出后,表格边框全没了,无法使用: 3. 采用了 ...

  6. Asp.net通过模板(.dot/Html)导出Word,同时导出图片

    一.Office组件导出Word(服务器配置麻烦) 需要引用Office的DLL,在下文的附件中,不同的Offic版本用的不一样,虽然高级版本可以兼容低级的,不过,还是统一版本最好 贴上核心代码(转载 ...

  7. Java导出Word利用freemarker(含图片)

    制作Word模版 建议使用高版本的office做,尽量不要用WPS做,生成xml会出现乱码 编码要统一,推荐UTF-8 建好模板,将模板另存为xml格式,建议原来模板不要删,xml的如果后期打不开,还 ...

  8. NPOI导出word,以及对table的一些设置

    参考网址:http://www.aiuxian.com/article/p-1970779.html NPOI版本:2.1.3.1 最终效果图: 代码: /// <summary> /// ...

  9. C# 导出word文档及批量导出word文档(1)

         这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量 ...

随机推荐

  1. AX7: Get started developing

    This blog will show how you can start making a customization in AX 7 by showing you the steps needed ...

  2. 1 《JavaScript高级程序设计》学习笔记(1)

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 首先,我将从<JavaScript高级程序设计>这本JavaScript学习者必看的经典教 ...

  3. java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    报这个错是因为加的struts的jar包有问题... 另外,jar包应该放在WEB-INF下的lib文件夹里面,且不必Add to build path,该目录下的jar包会自动引入 使用struts ...

  4. 网页手机wap2.0网页的head里加入下面这条元标签......

    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放. <meta name="viewport" conten ...

  5. eclipse内嵌jetty(run-jetty-run插件) 配置jndi数据源

    运行环境 java 6,eclipse juno,ssh(spring,hibernate,springmvc ) 1.离线安装 下载地址:http://pan.baidu.com/s/1qX67wO ...

  6. Sequelize 关系模型简介

    Sequelize 关系模型简介 先介绍一下本文用到的术语: 源: 调用 sequelize 中关系方法的调用者 目标: 调用 sequelize 中关系方法中的参数 比如, User.hasOne( ...

  7. 【Python】Celery异步处理

    参考:http://www.cnblogs.com/znicy/p/5626040.html 参考:http://www.weiguda.com/blog/73/ 参考:http://blog.csd ...

  8. MS - 1 - 把二元查找树转变成排序的双向链表

    ## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10       ...

  9. NK3C系统中ID的汉语名称

    系统中的ID有需要显示给使用者看的,统一用"编号",不要用ID或者编码 例如: SampleId 样本编号 正确 样本编码 错误 样本ID 错误 如果见到系统中有用到的,修正即可. ...

  10. 第六百一十二、三、四、五天 how can I 坚持

    上火了啊..已经2017了,真快,人生只是一瞬间,到头来都是一场空. 2016年最后一天,很悲催,没赶上火车.还不能改签,哪能哪次都这么幸运,长记性了,下午到济南,看了看弟弟的房子,到挺不错,就是装修 ...