控件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. 18-javaweb-ssm 开发中错误总结

    由于web课设于是,写了几天的javaweb,在写的过程中总会遇到奇奇怪怪的一些bug, 一般都得花很多时间解决. 但是解决多了,后面碰到类似的简单多了. 总结下: 一.前端错误: 1.js错误,看前 ...

  2. How to set an Apache Kafka multi node – multi broker cluster【z】

    Set a multi node Apache ZooKeeper cluster On every node of the cluster add the following lines to th ...

  3. MapReduce调优总结与拓展

    本文为<hadoop技术内幕:深入解析MapReduce架构设计与实现原理>一书第9章<Hadoop性能调优>的总结. 图1 Hadoop层次结构图 从管理员角度进行调优 1. ...

  4. Jmeter参数化HTTP request中Send Files With The Request的文件路径和文件名

  5. [Git]Git的常用命令

    Update: git status git diff wq git commit -am "why update files" git push Add: git add . g ...

  6. 学习类App原型制作分享-Wokabulary

    Wokabulary是一款多功能词汇学习App,可以学习多国语言词汇.原型的引导页面采用的图片+文字+分页器,需要注意的是分页器选中位置要与页面顺序一致.其次是语言的选择页面,在前面给大家介绍过滚动区 ...

  7. JAVA对字符串的压缩与解压缩

    import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException; ...

  8. swiper3d横向滚动多张炫酷切换banner

    最近有了个新需求,swiper3d横向滚动多张炫酷切换banner要和elementUI里边走马灯的卡片化card 类似,但是还需要h5手机触摸滚动啊啊啊啊,昨天折腾了半个早上总算完成,今天乖乖跑来m ...

  9. Android中px, ppi, dpi, dp, dip, sp概念解析

    Android中px, ppi, dpi, dp, dip, sp概念解析

  10. 2018.10.20 NOIP模拟 面包(数学期望)

    传送门 把方差的式子拆开. 方差=平方的期望-期望的平方. 显然只用维护点对的个数和总方案数就行了. 利用分步的思想来统计. 要统计覆盖一个矩形(x1,y1,x2,y2)(x1,y1,x2,y2)(x ...