控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726
//前端打印写法
@{
ViewBag.Title = "xs";
} <script type="text/javascript"> function dy() {
var form = $("<form action='dy'></form>");
var param = $("<input type='hidden' value='" + ids + "' name=\"ids\"/>");
form.append(param);
$("body").append(form);
form.submit();
}
</script>
<div id="div">
<form id="form" name="form" style="padding:5px; margin:0px;">
<table width="100%">
<tr>
<td align="right"> <button type="button" class="but-primary" onclick="dy()"> 打印</button>
</td>
</tr>
</table>
</form>
</div> //控制器写法
public ActionResult dy(string ids)
{
string mbpath = Server.MapPath(".../Word/doc.doc");
List<PrintData> listp = data(ids);
PrintClass pc = new PrintClass();
pc.Path = mbpath;
var doc = pc.Print_InfoLists(listp);
var ms = pc.GetWordStream(doc, false);
return File(ms.ToArray(), "application/octet-stream", "sddq.doc");
} //打印类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO;
using Aspose.Words;
using Aspose.Words.Saving;
using System.Data;
using Aspose.Words.Drawing;
using System.Text.RegularExpressions;
using System.Drawing;
using Aspose.Words.Tables; namespace YidiTutor.Common
{
public class PrintClass
{
public string PrintType = "word";//打印类型
public string Path = string.Empty;
public string filename = string.Empty;
public string WordTabChar = "$"; public PrintClass()
{ } public PrintClass(string printtype)
{
PrintType = printtype;
} public MemoryStream GetWordStream(Document doc)
{
return GetWordStream(doc, true);
} public MemoryStream GetWordStream(Document doc, bool noedit)
{
MemoryStream docStream = new MemoryStream();
if (noedit)
doc.Protect(ProtectionType.AllowOnlyFormFields);//只读无法编辑,因为没有密码确认
doc.Save(docStream, SaveFormat.Doc);
return docStream;
} public Document Print_InfoLists(List<PrintData> pageData)
{
int p = ;
Document maindoc = new Document();
foreach (var item in pageData)
{
Dictionary<string, string> dic = item.dict;
Document newdoc = new Document(Path);
DocumentBuilder build = new DocumentBuilder(newdoc);
List<DataTable> dtinfos = item.dtinfos;
for (int i = ; i < dtinfos.Count; i++)
{
DataTable dtinfo = dtinfos[i];
if (dtinfo != null)
{
for (int n = ; n < dtinfo.Columns.Count; n++)
{
string fieldname = dtinfo.Columns[n].ColumnName.ToLower();
try
{
string fieldvalue = dtinfo.Rows[][fieldname].ToString();
if (build.MoveToBookmark(fieldname))
{
build.InsertHtml(fieldvalue);
}
else
{
if (fieldvalue.Contains("\r\n"))
{
newdoc.Range.Replace(WordTabChar + fieldname + WordTabChar, "#" + fieldname.ToUpper() + "#", false, false);
Regex reg = new Regex("#" + fieldname.ToUpper() + "#");
newdoc.Range.Replace(reg, new ReplaceText(fieldvalue), true);
}
else if (fieldvalue.Contains("<p>"))
{
newdoc.Range.Replace(WordTabChar + fieldname + WordTabChar, "#" + fieldname.ToUpper() + "#", false, false);
Regex reg = new Regex("#" + fieldname.ToUpper() + "#");
newdoc.Range.Replace(reg, new ReplaceHtml(fieldvalue), true);
}
else
{
newdoc.Range.Replace(WordTabChar + fieldname + WordTabChar, fieldvalue, false, false);
}
}
}
catch { }
}
}
}
Dictionary<string, string> dict = item.dict;
if (dict != null)
{
foreach (var key in dict.Keys)
{
try
{
if (build.MoveToBookmark(key))
{
build.InsertHtml(dict[key]);
}
else
{
newdoc.Range.Replace(WordTabChar + key + WordTabChar, dict[key], false, false);
}
}
catch { }
}
}
List<PositionProChildren> listpos = new List<PositionProChildren>();
DocumentBuilder builder = new DocumentBuilder(newdoc);
List<DataTable> dtlist = item.dtlist;
int tablecount = newdoc.GetChildNodes(NodeType.Table, true).Count;
int dtlistcount = ;
for (int i = ; i < tablecount; i++)
{
Aspose.Words.Tables.Table dtdoc = (Aspose.Words.Tables.Table)newdoc.GetChild(NodeType.Table, i, true);
for (int r = ; r < dtdoc.Rows.Count; r++)
{
for (int c = ; c < dtdoc.Rows[r].Cells.Count; c++)
{
if (dtdoc.Rows[r].Cells[c].Range.Text.ToLower().Contains("#start#"))
{
dtlistcount++;
PositionProChildren pos = new PositionProChildren();
pos.tableindex = i;
pos.row_start = r;
pos.cell_start = c;
pos.row_end = r;
pos.cell_end = c;
listpos.Add(pos);
dtdoc.Rows[r].Cells[c].Range.Replace("#START#", "", false, false);
}
if (dtdoc.Rows[r].Cells[c].Range.Text.ToLower().Contains("#end#"))
{
PositionProChildren pos = listpos.Last<PositionProChildren>();
pos.row_end = r;
pos.cell_end = c;
dtdoc.Rows[r].Cells[c].Range.Replace("#END#", "", false, false);
}
}
}
}
if (dtlist != null && dtlistcount.Equals(dtlist.Count))
{
for (int i = ; i < dtlist.Count; i++)
{
PositionProChildren pos = new PositionProChildren();
if (listpos.Count > i)
{
pos = listpos[i];
}
Aspose.Words.Tables.Table dtdoc = (Aspose.Words.Tables.Table)newdoc.GetChild(NodeType.Table, pos.tableindex, true);//定位第一个table
DataTable dt = dtlist[i];
List<string> celltabs = new List<string>();
for (int t = pos.cell_start; t < dtdoc.Rows[pos.row_start].Cells.Count; t++)
{
string colname = dtdoc.Rows[pos.row_start].Cells[t].Range.Text.Replace(WordTabChar, "").Replace("\a", "");
celltabs.Add(colname);
dtdoc.Rows[pos.row_start].Range.Replace(WordTabChar + colname + WordTabChar, "", false, false);
}
if (dt.Rows.Count > pos.rownum)
{
int addrow = dt.Rows.Count - pos.rownum;
for (int a = ; a < addrow; a++)
{
Aspose.Words.Node newrow = dtdoc.Rows[pos.row_start].Clone(true);
dtdoc.Rows.Insert(pos.row_start + , newrow);
if (i < listpos.Count - )
{
for (int l = i + ; l < listpos.Count; l++)
{
PositionProChildren poscur = listpos[l - ];
PositionProChildren posnext = listpos[l];
if (posnext.tableindex.Equals(poscur.tableindex))
{
posnext.row_start += ;
posnext.row_end += ;
}
else
{
break;
}
}
}
}
}
for (int m = ; m < dt.Rows.Count; m++)
{
for (int n = ; n < celltabs.Count; n++)
{
try
{
builder.MoveToCell(pos.tableindex, pos.row_start + m, pos.cell_start + n, );
builder.Write(dt.Rows[m][celltabs[n].ToString()].ToString());
}
catch { }
}
}
}
}
if (!p.Equals())
{
newdoc.FirstSection.PageSetup.SectionStart = SectionStart.NewPage;
maindoc.AppendDocument(newdoc, ImportFormatMode.KeepSourceFormatting);
}
else
{
maindoc = newdoc;
}
p++;
}
return maindoc;
}
/// <summary>
/// 不受word分节符影响打印
/// </summary>
/// <param name="datalist">List<PrintData></param>
/// <returns>Document</returns>
public Document PrintDocumentAllWord(List<PrintData> datalist)
{
int p = ;
Document maindoc = new Document();
foreach (var page in datalist)
{
Document newdoc = new Document(Path);
DocumentBuilder builder = new DocumentBuilder(newdoc);
List<DataTable> dtinfos = page.dtinfos;
if (dtinfos != null)
{
for (int i = ; i < dtinfos.Count; i++)
{
DataTable dtinfo = dtinfos[i];
if (dtinfo != null)
{
for (int n = ; n < dtinfo.Columns.Count; n++)
{
string fieldname = dtinfo.Columns[n].ColumnName.ToLower();
try
{
string fieldvalue = dtinfo.Rows[][fieldname].ToString();
if (fieldvalue.Contains("\r\n"))
{
newdoc.Range.Replace(WordTabChar + fieldname + WordTabChar, "#" + fieldname.ToUpper() + "#", false, false);
Regex reg = new Regex("#" + fieldname.ToUpper() + "#");
newdoc.Range.Replace(reg, new ReplaceText(fieldvalue), true);
}
else if (fieldvalue.Contains("<p>"))
{
newdoc.Range.Replace(WordTabChar + fieldname + WordTabChar, "#" + fieldname.ToUpper() + "#", false, false);
Regex reg = new Regex("#" + fieldname.ToUpper() + "#");
newdoc.Range.Replace(reg, new ReplaceHtml(fieldvalue), true);
}
else
{
newdoc.Range.Replace(WordTabChar + fieldname + WordTabChar, fieldvalue, false, false);
}
}
catch { }
}
}
}
}
Dictionary<string, string> dict = page.dict;
if (dict != null)
{
foreach (var key in dict.Keys)
{
try
{
newdoc.Range.Replace(WordTabChar + key + WordTabChar, dict[key], false, false);
}
catch { }
}
}
List<PositionProChildren> listpos = new List<PositionProChildren>();
List<DataTable> dtlist = page.dtlist;
int section = newdoc.GetChildNodes(NodeType.Section, true).Count;
int dataindex = ;
for (int kk = ; kk < section; kk++)
{
Aspose.Words.Section dtsection = (Aspose.Words.Section)newdoc.GetChild(NodeType.Section, kk, true);
int num = dtsection.Body.Tables.Count;
for (int mm = ; mm < num; mm++)
{
Aspose.Words.Tables.Table dtdoc1 = dtsection.Body.Tables[mm]; for (int r = ; r < dtdoc1.Rows.Count; r++)
{
for (int c = ; c < dtdoc1.Rows[r].Cells.Count; c++)
{
if (dtdoc1.Rows[r].Cells[c].Range.Text.ToLower().Contains("#start#"))
{
PositionProChildren pos = new PositionProChildren();
pos.tableindex = mm;
pos.row_start = r;
pos.cell_start = c;
pos.row_end = r;
pos.cell_end = c;
listpos.Add(pos);
dtdoc1.Rows[r].Cells[c].Range.Replace("#START#", "", false, false);
}
if (dtdoc1.Rows[r].Cells[c].Range.Text.ToLower().Contains("#end#"))
{
PositionProChildren pos = listpos.Last<PositionProChildren>();
pos.row_end = r;
pos.cell_end = c;
dtdoc1.Rows[r].Cells[c].Range.Replace("#END#", "", false, false);
}
}
}
for (int i = ; i < listpos.Count; i++)
{
PositionProChildren pos = new PositionProChildren();
if (listpos.Count > i)
{
pos = listpos[i];
}
DataTable dt = dtlist[i + dataindex]; Aspose.Words.Tables.Table dtdoc = dtsection.Body.Tables[mm];
List<string> celltabs = new List<string>();
for (int t = pos.cell_start; t < dtdoc.Rows[pos.row_start].Cells.Count; t++)
{
string colname = dtdoc.Rows[pos.row_start].Cells[t].Range.Text.Replace(WordTabChar, "").Replace("\a", "");
celltabs.Add(colname);
dtdoc.Rows[pos.row_start].Range.Replace(WordTabChar + colname + WordTabChar, "", false, false);
}
if (dt.Rows.Count > pos.rownum)
{
int addrow = dt.Rows.Count - pos.rownum;
for (int a = ; a < addrow; a++)
{
Aspose.Words.Node newrow = dtdoc.Rows[pos.row_start + ].Clone(true);//确认模板有第二行
dtdoc.Rows.Insert(pos.row_start + , newrow);
if (i < listpos.Count - )
{
for (int l = i + ; l < listpos.Count; l++)
{
PositionProChildren poscur = listpos[l - ];
PositionProChildren posnext = listpos[l];
if (posnext.tableindex.Equals(poscur.tableindex))
{
posnext.row_start += ;
posnext.row_end += ;
}
else
break;
}
}
} } for (int m = ; m < dt.Rows.Count; m++)
{
for (int n = ; n < celltabs.Count; n++)
{
try
{
builder.MoveToSection(kk);
builder.MoveToCell(pos.tableindex, pos.row_start + m, pos.cell_start + n, );
builder.Write(dt.Rows[m][celltabs[n].ToString()].ToString());
}
catch { }
}
} } dataindex = dataindex + listpos.Count;
listpos.Clear(); } }
if (!p.Equals())
{
newdoc.FirstSection.PageSetup.SectionStart = SectionStart.NewPage;
maindoc.AppendDocument(newdoc, ImportFormatMode.KeepSourceFormatting);
}
else
{
maindoc = newdoc;
}
p++;
}
return maindoc;
} } /// <summary>
/// 替换带有\r\n格式的数据
/// </summary>
public class ReplaceText : IReplacingCallback
{
public string Text { get; set; }
public ReplaceText(string Text)
{
this.Text = Text;
}
public ReplaceAction Replacing(ReplacingArgs e)
{
//获取当前节点
var node = e.MatchNode;
Document doc = node.Document as Document;
DocumentBuilder builder = new DocumentBuilder(doc);
builder.MoveTo(node);
builder.Write(Text);
return ReplaceAction.Replace;
}
} /// <summary>
/// 替换html格式的数据
/// </summary>
public class ReplaceHtml : IReplacingCallback
{
public string Text { get; set; }
public ReplaceHtml(string Text)
{
this.Text = Text;
}
public ReplaceAction Replacing(ReplacingArgs e)
{
//获取当前节点
var node = e.MatchNode;
Document doc = node.Document as Document;
DocumentBuilder builder = new DocumentBuilder(doc);
builder.MoveTo(node);
builder.InsertHtml(Text);
return ReplaceAction.Replace;
}
} /// <summary>
/// 替换图片
/// </summary>
public class ReplaceImage : IReplacingCallback
{
/// <summary>
/// 需要插入的图片路径
/// </summary>
public string ImageUrl { get; set; }
public double ImageWidth { get; set; }
public double ImageHeight { get; set; }
public ReplaceImage(string url)
{
this.ImageUrl = url;
ImageWidth = ;
ImageHeight = ;
}
public ReplaceAction Replacing(ReplacingArgs e)
{
//获取当前节点
if (!string.IsNullOrEmpty(ImageUrl))
{
var node = e.MatchNode;
Document doc = node.Document as Document;
DocumentBuilder builder = new DocumentBuilder(doc);
builder.MoveTo(node);
//builder.Write(Text);
Aspose.Words.Drawing.Shape shape = new Aspose.Words.Drawing.Shape(doc, Aspose.Words.Drawing.ShapeType.Image);
shape.ImageData.SetImage(ImageUrl);
shape.Top = ;
shape.Width = ImageWidth;
shape.Height = ImageHeight;
shape.HorizontalAlignment = HorizontalAlignment.Center;
CompositeNode node1 = shape.ParentNode;
builder.InsertNode(shape);
}
return ReplaceAction.Replace;
}
}
public class PositionPro
{
public string key { get; set; }
public int row_start { get; set; }
public int row_end { get; set; }
public int cell_start { get; set; }
public int cell_end { get; set; }
public int rownum
{
get
{
return row_end - row_start + ;
}
}
}
public class PositionProChildren : PositionPro
{
public int tableindex { get; set; }
}
/// <summary>
/// 批量打印实体类
/// </summary>
public class PrintData
{
public List<DataTable> dtinfos;
public Dictionary<string, string> dict;
public List<DataTable> dtlist;
public string filepath;
} }

基于MVC框架Aspose.Words打印到Word中写法的更多相关文章

  1. Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)

    对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...

  2. Asp.net Core基于MVC框架实现PostgreSQL操作

    简单介绍 Asp.net Core最大的价值在于跨平台.跨平台.跨平台.重要的事情说三遍.但是目前毕竟是在开发初期,虽然推出了1.0.0 正式版,但是其实好多功能还没有完善.比方说编译时的一些文件编码 ...

  3. Unity 背包系统的完整实现(基于MVC框架思想)

    前言: 项目源码上传GitHub:Unity-knapsack 背包系统: 背包系统是游戏中非常重要的元素,几乎每一款游戏都有背包系统,我们使用背包系统可以完成装备栏的数据管理,商店物体的数据管理等等 ...

  4. 基于C#语言MVC框架Aspose.Cells控件导出Excel表数据

    控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "xx" ...

  5. 基于“MVC”框架集设计模式,开发用户管理系统!

    MVC----(Model View Controller)设计模型: M:表示业务数据和业务规则.包括DAO(beans).DBHelper(DBHelper),用于封装数据库连接,业务数据库处理. ...

  6. 基于MVC框架的JavaWeb网站开发demo项目(JSP+Servlet+JavaBean)

    1.环境配置 Windows10+Eclipse2020+jdk8+Tomcat9+MySQL8+Navicat10 2.需求分析 ①用户登录注册注销(查找.增加) ②显示用户列表(查找) ③显示用户 ...

  7. 基于MVC框架layui分页控件实现前端分页信息写法

    详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak@{ ViewBag.Title = ...

  8. 将图片打印到word中

    1.生成模板文件 工具类: package com.sfec.snmgr.track.utils;import com.alibam.core.wechat.util.QRCodeUtil;impor ...

  9. 12种JavaScript MVC框架之比较

    Gordon L. Hempton是西雅图的一位黑客和设计师,他花费了几个月的时间研究和比较了12种流行的JavaScript MVC框架,并在博客中总结了每种框架的优缺点,最终的结果是,Ember. ...

随机推荐

  1. Maven+eclipse快速入门

    1.eclipse下载 在无外网情况下,无法通过eclipse自带的help-install new software输入url来获取maven插件,因此可以用集成了maven插件的免安装eclips ...

  2. Volley的使用

    Volley加载图片到控件上 VolleyUtils.getLoader(getContext()).get(zixun.getPicurl(), ImageLoader.getImageListen ...

  3. 【转】从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    原文:http://www.cnblogs.com/jeffwongishandsome/archive/2012/01/08/2316521.html 熟悉WebForm开发的朋友一定都知道,Pag ...

  4. 【原创】VB超强游戏外挂帮助类,封装了很多方法

    ''' <summary> ''' a very nice file that can be used on other projects ''' </summary> ''' ...

  5. web札记

    url中不能是#号,struts不读取#之后的字符串.

  6. 抽象 abstract 和 接口 interface。 java 的 堆 和 栈。 参数传递(基本类型和普通对象的区别)

    package com.test; import com.test.Pro; //protected 修饰的成员只能在本包中和 继承该类的方法中使用 public abstract class Tes ...

  7. 开启多个tomcat 注意

    1. 将tomcat 复制到另一个文件夹 2. 更改 tomcat 文件夹中 conf/ server.xml 文件 .共3个地方. 1.  shutdown  的port 2.  connector ...

  8. 2018.10.15 NOIP训练 hyc的等比数列(数论+枚举)

    传送门 一道不错的枚举题. 显然桶排序之后瞎枚举一波. 考虑枚举首项和末项,假设首项除去一个最大的平方因子得到的结果为xxx. 那么末项一定等于xxx乘上一个平方数. 于是我们枚举首项,算出xxx然后 ...

  9. 2018.10.14 loj#516. DP 一般看规律(启发式合并)

    传送门 注意到一种颜色改了之后就不能改回去了. 因此可以启发式合并. 每次把小的合并给大的. 这样每个数最多被合并logloglog次. 如果维护一棵比较下标的平衡树的话,对于答案有贡献的就是每个数与 ...

  10. 2018.07.20 bzoj3211: 花神游历各国(线段树)

    传送门 维护区间开方,区间求和.这个是线段树常规操作. 显然一个数被开方若干次之后要么是1,要么是0,所以用线段树维护区间最大和区间和,如果区间最大不超过1就剪枝剪掉,不然就继续递归直到叶节点时停下进 ...