基于MVC框架Aspose.Words打印到Word中写法
控件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中写法的更多相关文章
- Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)
对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...
- Asp.net Core基于MVC框架实现PostgreSQL操作
简单介绍 Asp.net Core最大的价值在于跨平台.跨平台.跨平台.重要的事情说三遍.但是目前毕竟是在开发初期,虽然推出了1.0.0 正式版,但是其实好多功能还没有完善.比方说编译时的一些文件编码 ...
- Unity 背包系统的完整实现(基于MVC框架思想)
前言: 项目源码上传GitHub:Unity-knapsack 背包系统: 背包系统是游戏中非常重要的元素,几乎每一款游戏都有背包系统,我们使用背包系统可以完成装备栏的数据管理,商店物体的数据管理等等 ...
- 基于C#语言MVC框架Aspose.Cells控件导出Excel表数据
控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "xx" ...
- 基于“MVC”框架集设计模式,开发用户管理系统!
MVC----(Model View Controller)设计模型: M:表示业务数据和业务规则.包括DAO(beans).DBHelper(DBHelper),用于封装数据库连接,业务数据库处理. ...
- 基于MVC框架的JavaWeb网站开发demo项目(JSP+Servlet+JavaBean)
1.环境配置 Windows10+Eclipse2020+jdk8+Tomcat9+MySQL8+Navicat10 2.需求分析 ①用户登录注册注销(查找.增加) ②显示用户列表(查找) ③显示用户 ...
- 基于MVC框架layui分页控件实现前端分页信息写法
详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak@{ ViewBag.Title = ...
- 将图片打印到word中
1.生成模板文件 工具类: package com.sfec.snmgr.track.utils;import com.alibam.core.wechat.util.QRCodeUtil;impor ...
- 12种JavaScript MVC框架之比较
Gordon L. Hempton是西雅图的一位黑客和设计师,他花费了几个月的时间研究和比较了12种流行的JavaScript MVC框架,并在博客中总结了每种框架的优缺点,最终的结果是,Ember. ...
随机推荐
- 如何添加ECSHOP广告位置
如何添加ECSHOP广告位置 我们都知道ecshop系统默认的广告位置非常的少,但是一个电子商务网站岂能离开广告?庆幸的是,ecshop预留了足够强大的组件让我们能够完全有可能实现任意我们想要广告位置 ...
- 把html标签转换为实体 dhtmlspecialchars
把html标签转换为实体/*可以处理数组中的代码,他们的作用是可以把一个数组或字符串中的字符转化为html实体,可以防止页面的跨站问题,那么我们看到他的转换就是将'&','"','& ...
- .Net多线程 并行编程(三)---并行集合
为了让共享的数组,集合能够被多线程更新,我们现在(.net4.0之后)可以使用并发集合来实现这个功能. 而System.Collections和System.Collections.Generic命名 ...
- IIS 6.0/7.0/7.5、Nginx、Apache 等服务器解析漏洞总结
IIS 6.0 1.目录解析:/xx.asp/xx.jpg xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码 IIS6.0 会将 xx.jpg 解析为 asp 文件. ...
- cookie、session、token区分
https://www.cnblogs.com/moyand/p/9047978.html http://www.cnblogs.com/JamesWang1993/p/8593494.html Co ...
- Phalcon Framework的MVC结构及启动流程分析
目前的项目中选择了Phalcon Framework作为未来一段时间的核心框架.技术选型的原因会单开一篇Blog另说,本次优先对Phalcon的MVC架构与启动流程进行分析说明,如有遗漏还望指出. P ...
- window下装redis扩展(以php5.5为例)
一.安装redis服务 1.下载并解压 https://github.com/dmajkic/redis/downloads 2.运行redis服务 3.检查能否正常访问 二.安装redis扩展 1 ...
- [Selenium]当DOM结构里面有iFrame,iFrame里面是html,怎么send keys to 里面的body,怎么用Assert进行验证?
我在测试的过程中遇到一个这样的问题,我无法通过CssSelector找到iFrame下边的html: <div id="mailEditorDiv" style=" ...
- centos6.5 设置ssh无密码登录
:关闭防火墙 vim /etc/selinux/config 把SELINUX=enforcing修改为SELINUX=disabled A机器root连接B机器root用户 (root用户登录) ...
- FTP中各文件目录的说明
DirectAdmin:FTP中各文件目录的说明 当您使用FTP连上空间后,FTP列表会出现以下文件和目录: domains目录:网站文件存放目录:public_html目录:快捷目录,可以快 ...