ASP.NET 利用第三方插件DocX产生Word 之 打印批量打印

客户需求:

  接上一篇需求说起~~~

  上一篇说客户需要固定格式打印(定义模板),实现了之后,客户又闲一张一张打印有些麻烦,要进行批量打印。

  客户的需求就是这样,满足了一个又一个~~~没办法,做呗!毕竟客户给钱还是很痛快的!

解决办法:

  还是利用DocX插件进行处理。

  DocX是一个以非常直观简单的方式操作Word 2007/2010文件的轻量级.NET组件。它的速度非常快,而且不需要安装微软的Office软件。

  附上DocX插件官网:https://docx.codeplex.com/

  废话不说,看demo吧!

Demo程式代码:

  demo界面:

  

  ExportWord()  

 1 private void ExportWord()
 2     {
 3         //模板路径
 4         string mWordTemplateSrc = Request.PhysicalPath.Replace("ExportWordAPI.aspx", "ExportWordTemplate.docx");
 5
 6         MemoryStream stream = new MemoryStream();
 7         using (DocX docPrint = DocX.Create(stream, DocumentTypes.Template))
 8         {
 9             DocX doc;
10             string mIds = Request.QueryString["SheetNo"];
11             string[] mSheets = mIds.Split(‘|‘);
12             //int iLength = 0;
13             int iPrintCount = 0;
14             int mParagraphsIndex = 0;
15             foreach (string sheetNo in mSheets)
16             {
17                 //iLength++;
18                 if (string.IsNullOrEmpty(sheetNo.Trim())) continue;
19
20                 iPrintCount++;
21
22                 //加载模板
23                 doc = DocX.Load(mWordTemplateSrc);
24                 //输出打印内容到模板
25                 ExportWord(ref doc, "FYBX", sheetNo);
26
27                 if (iPrintCount > 1)
28                 {
29                     mParagraphsIndex = docPrint.Paragraphs.Count - 1;
30                     docPrint.Paragraphs[mParagraphsIndex].InsertPageBreakAfterSelf();
31                     mParagraphsIndex = docPrint.Paragraphs.Count - 1;
32                     docPrint.Paragraphs[mParagraphsIndex].SetLineSpacing(LineSpacingType.Line, 0);
33                     docPrint.Paragraphs[mParagraphsIndex].SetLineSpacing(LineSpacingType.Before, 0);
34                     docPrint.Paragraphs[mParagraphsIndex].SetLineSpacing(LineSpacingType.After, 0);
35                 }
36                 //将打印内容插入打印word中
37                 docPrint.InsertDocument(doc, true);
38             }
39
40
41             //由于打印,产生的数据是不能修改的
42             EditRestrictions erReadOnly = EditRestrictions.readOnly;
43             docPrint.AddProtection(erReadOnly, "FYBX");
44
45             docPrint.Save();
46
47         }
48
49         byte[] tAryByte = stream.ToArray();
50         Response.Clear();
51         Response.AddHeader("Content-Length", tAryByte.Length.ToString());
52         Response.AppendHeader("Content-Disposition", string.Format("attachment;filename=ExportWord_{0}.docx", DateTime.Now.ToString("yyMMddHHmmss")));
53         Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
54         Response.BinaryWrite(tAryByte);
55         Response.Flush();
56         Response.End();
57
58     }

  ExportWord(ref DocX doc, string pFormID, string pSheetNO)

 1 private void ExportWord(ref DocX doc, string pFormID, string pSheetNO)
 2     {
 3         IDictionary par = new Dictionary<string, object>();
 4         string sql = "SELECT * FROM  head WHERE [email protected] AND [email protected]  ";
 5         par.Clear();
 6         par.Add("head001", pFormID);
 7         par.Add("head002", pSheetNO);
 8         DataTable dtHead = SqlDBHelper.ExecuteDataTable(this.SqlServerConnection, sql, par);//单头数据
 9
10         sql = "SELECT * FROM  body WHERE [email protected] AND [email protected] ";//单身数据
11         par.Clear();
12         par.Add("body001", pFormID);
13         par.Add("body002", pSheetNO);
14         DataTable dtBody = SqlDBHelper.ExecuteDataTable(this.SqlServerConnection, sql, par);
15
16
17         thisReplaceText(ref doc, "head002", dtHead.Rows[0]["head002"].ToString());
18         thisReplaceText(ref doc, "head003", dtHead.Rows[0]["head003"].ToString());
19         thisReplaceText(ref doc, "head004", dtHead.Rows[0]["head004"].ToString());
20         thisReplaceText(ref doc, "head005", dtHead.Rows[0]["head005"].ToString());
21         thisReplaceText(ref doc, "head006", dtHead.Rows[0]["head006"].ToString());
22         thisReplaceText(ref doc, "head008", dtHead.Rows[0]["head008"].ToString());
23         thisReplaceText(ref doc, "head009", dtHead.Rows[0]["head009"].ToString());
24         thisReplaceText(ref doc, "M", dtHead.Rows[0]["head010"].ToString());
25
26         int bodyRowIndex = 0;
27
28         int rowLength = 8;
29         Row insertRow = doc.Tables[0].Rows[rowLength];
30
31         int mRowsLength = 0;
32         foreach (DataRow dr in dtBody.Rows)
33         {
34             mRowsLength += 1;
35             if (mRowsLength <= 5)
36             {
37                 doc.Tables[0].Rows[2 + mRowsLength].Cells[0].Paragraphs[0].Append(dr["body003"].ToString());
38                 doc.Tables[0].Rows[2 + mRowsLength].Cells[1].Paragraphs[0].Append(dr["body004"].ToString());
39                 doc.Tables[0].Rows[2 + mRowsLength].Cells[2].Paragraphs[0].Append(dr["body005"].ToString());
40             }
41             else
42             {
43                 //获取到模板行的对象(一般是一个空行,只有架子没有数据的)
44                 doc.Tables[0].Rows[rowLength + bodyRowIndex].Xml.AddAfterSelf(insertRow.Xml);
45                 bodyRowIndex += 1;
46                 doc.Tables[0].Rows[rowLength + bodyRowIndex].Cells[0].Paragraphs[0].Append(dr["body003"].ToString());
47                 doc.Tables[0].Rows[rowLength + bodyRowIndex].Cells[1].Paragraphs[0].Append(dr["body004"].ToString());
48                 doc.Tables[0].Rows[rowLength + bodyRowIndex].Cells[2].Paragraphs[0].Append(dr["body005"].ToString());
49             }
50         }
51         //删除模板行,要不然会有一个空行
52         doc.Tables[0].RemoveRow(rowLength);
53     }

  代码地址:http://pan.baidu.com/s/1eS5IK2u

时间: 2024-10-22 16:56:34

ASP.NET 利用第三方插件DocX产生Word 之 打印批量打印的相关文章

db数据库利用第三方框架进行提取和解析数据

db的数据包用从github上下载的三方框架进行解析和数据提取,格式一般为数组和字典.db的查看工具是firefox上的解析db插件SQLite 三方框架为FMDB #import "ViewController.h" //1. 引入头文件,需要引入libsqlite3的库 #import "FMDB.h" #import "Word.h" @interface ViewController () @end @implementation Vie

利用Aspose.Words.dll导出Word代替NPOI

许久没来写博客了,已至于登录博客园的密码都忘却了. 时间过的真快,最近再做一个招聘管理系统,其中用到了导出Word文档的功能,尝试了各种方法,遇到了各种问题.不过最后还是解决了导出Word的问题. 一.针对导出Word文档的功能,采用的几个方案: 1.预置好Word文档模板,采用加载替换文档内容标签的方式实现.    采用这种方案可以借助两个第三方组件来实现,分别如下: (1).借助Microsoft.Office.Interop.Word组件实现.  (2).借助NPOI实现.  (3).借助

利用POI操作不同版本word文档中的图片以及创建word文档

我们都知道要想利用java对office操作最常用的技术就应该是POI了,在这里本人就不多说究竟POI是什么和怎么用了.先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写入数据和向外导出数据并且保存到数据库中这些类似的操作,由于业务上的需要需要利用POI去读取word中的图片,并且去把图片去保存为一个file文件.查了Apache公司提供的api帮助文档,再网友的一些线索,本人也总结了几中对不同word版本(.doc或者是.docx结尾)对于文件中所含图片的操作方式,希望

ThinkPHP自动获取关键词(调用第三方插件)

ThinkPHP自动获取关键词调用在线discuz词库 先按照下图路径放好插件 方法如下 /** * 自动获取关键词(调用第三方插件) * @return [type] [description] * www.shouce.ren */ public function keyword() { Vendor('autokeyword.AutoKeyword'); $keyword = new \AutoKeyword(); $str='自动获取关键词并发大数据我们大家好吃饭啦调用第三方插件'; $

利用POI操作不同版本号word文档中的图片以及创建word文档

我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写入数据和向外导出数据而且保存到数据库中这些类似的操作,因为业务上的须要须要利用POI去读取word中的图片,而且去把图片去保存为一个file文件.查了Apache公司提供的api帮助文档,再网友的一些线索,本人也总结了几中对不同word版本号(.doc或者是.docx结尾)对于文件里所含图片的操作方

[iOS 10 day by day] Day 1:开发 iMessage 的第三方插件

本文介绍了 iOS 10 的一个重要更新:Messages 应用支持第三方插件了.作者用一个小游戏作为例子,说明了插件开发从建工程开始,到绘制界面.收发消息的全过程. <iOS 10 day by day>是 shinobicontrols 公司编写的系列博客,介绍开发者需要了解的 iOS 10 新特性,每周更新.本系列翻译(文集地址)已取得官方授权.仓薯翻译,欢迎指正:) Shinobicontrols 为 iOS 和 Android 开发者提供高性能.响应式的 UI 控件 SDK,尤其是图

ASP.Net控制不同的人编辑word文档中不同的可编辑区域

ASP.Net控制不同的人编辑word文档中不同的可编辑区域的完整示例 2010-10-15 11:43238人阅读评论(0)收藏举报 网页来源:http://blog.csdn.net/coco99/article/details/5942895 本文演示了如何使用C#在ASP.NET里调用Word限制用户只能编辑word文档中自己有权编辑的区域. 1.项目目的 演示使用不同的用户登录系统,打开同一个文件(不必同时打开),可以编辑的区域不一样,每个人都有属于自己的编辑区域. 2.解决思路 利用

【分享】Web前端开发第三方插件大全

收集整理了一些Web前端开发比较成熟的第三方插件,分享给大家. ******************************************************************************* 一.国外插件 ace 版本:1.2.3au 官网:https://github.com/ajaxorg/ace-builds/ 许可:BSD 依赖:无 DataAPI:data-pulgin="ace" 功能:基于Web的代码编辑器,实现语法高亮功能 alertif

【仿乐享微信源码】利用第三方微信营销托管平台快速增加粉丝,形成良好互动,打造精美微信APP

99%的人不知道的微信秘密!微信里的商机.仿乐享微信源码分享,把你的生意做到微信里. WeiKuCMS  (微酷CMS)功能特点:人工客服新功能正式上线!粉丝行为分析.渠道二维码生成.二维码折扣,微菜单,微统计,会员卡签到,微会员,刮刮卡,大转盘,优惠券,积分兑换,微官网,砸金蛋,微调研,微投票,微相册,微商城,微团购,微留言,微喜帖,商家入驻,微门店,微餐饮,微酒店,微教育,微物业,微医疗,微信墙,微花店,微美容,微生活. 微信公共账号轻松接入,无限自定义图文回复.欢迎您的加入! 微酷WeiK