利用Aspose.Words打印word文档
2015-09-13 22:17
976 查看
Aspose.Words是一款先进的类库,可以直接在各个应用程序中执行各种文档处理,即使在没有Microsoft word
的情况下,仍然可以生成,更改,转换,渲染和打印word文档,并且支持DOC,PDF等其他格式。
下面就以 Aspose.Words如何实现打印word文档为例做一个小demo。
效果图如下:
2 实现代码:
由于我是加入MVC框架的,所以在controller中接收的是来自view的实体,不用再经过数据库查找相应的数据,如果在纯三层或几层中实现,直接调用D层,通过D层访问数据库获得即可。
简单一句话来说,就是一个赋参数的一个过程,然后直接调用该类库下的方法即可。方法有很多,具体的可以参考Aspose.Word的API文档。
#region 初婚未育调查报告 + void FirstMarriageReport(FamilyPlanInfoViewModel enFamilyInfo) 贾丽敏 2015/9/3
/// <summary>
/// 初婚未育调查报告
/// </summary>
/// <param name="enFamilyInfo">FamilyPlanInfoViewModel</param>
public void FirstMarriageReport(FamilyPlanInfoViewModel enFamilyInfo)
{
if (Session["userID"] != null)//判断登陆时用户ID是否为空,为空则跳转登陆页面
{
//获取模板的路径
var path = Server.MapPath("../Document/2初婚未育调查报告.doc");
#region 初婚未育调查报告中各参数赋值
string strUserID = Session["userID"].ToString();
while (strUserID.Length < 4)
{
strUserID = "0" + strUserID;
}
//获取信函编号
string strCardNo = numberInfo.GetNumber();
while (strCardNo.Length < 4)
{
strCardNo = "0" + strCardNo;
}
//获取documentID参数
string strDocumentID = "LFRC" + strUserID + "No." + strCardNo;
//赋值
string name = enFamilyInfo.name;//姓名
string sex = enFamilyInfo.sex;//性别
string spouseWorkplace = enFamilyInfo.spouseworkplace;//配偶工作地
string spousename = enFamilyInfo.spousename;//配偶姓名
string year, month, date;
if (enFamilyInfo.idNumber == null)
{
year = "";
month = "";
date = "";
}
else
{
year = enFamilyInfo.idNumber.Substring(6, 4);//出生年份
month = enFamilyInfo.idNumber.Substring(10, 2);//出生月份
date = enFamilyInfo.idNumber.Substring(12, 2);//出生日
}
string marryyear, marrymonth, marrydate;
if (enFamilyInfo.marriageregistrationdate1 == null)
{
marryyear = "";//结婚登记年份
marrymonth = " ";//结婚登记月份
marrydate = " ";//结婚登记日
}
else
{
marryyear = enFamilyInfo.marriageregistrationdate1.Substring(0, 4);
marrymonth = enFamilyInfo.marriageregistrationdate1.Substring(5, 1);
marrydate = enFamilyInfo.marriageregistrationdate1.Substring(7, 2);
}
#endregion
string fileName = "初婚未育调查报告.doc";
//获取模板中设定好的字段
String[] fieldNames = new String[] { "documentID", "name", "sex", "year", "month", "date", "marryyear", "marrymonth", "marrydate", "spouseworkplace", "spousename" };
//给模版中参数赋值
Object[] fieldValues = new Object[] { strDocumentID, name, sex, year, month, date, marryyear, marrymonth, marrydate, spouseWorkplace, spousename };
Print(path, fileName, fieldNames, fieldValues);//调用封装好的print方法,在下方。
}
else
{ //跳转到登陆界面
this.Response.Write("<script type='text/javascript'> goIndex(); function goIndex(){window.location.href='../Login/Login';}</script>");
}
}
#endregion
封装好的print方法:#region 封装信函打印 + void Print(string path, String[] fieldNames, Object[] fieldValues) 贾丽敏 2015/9/3
/// <summary>
/// 封装信函打印
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="fieldNames">参数数组</param>
/// <param name="fieldValues">参数值数组</param>
public void Print(string path, string fileName, String[] fieldNames, Object[] fieldValues)
{
//string fileName = path.Substring(path.LastIndexOf("\\") + 1);//获取文件名
var ouputPath = Server.MapPath("../Document/");
Document doc = new Document(path);
//合并模版,相当于页面的渲染
doc.MailMerge.Execute(fieldNames, fieldValues);
ouputPath = ouputPath + fileName;
//保存合并后的文档,生成的文档存放到服务器硬盘上
doc.Save(ouputPath);
//通过response对象,执行下载操作
System.IO.FileInfo file = new System.IO.FileInfo(ouputPath);
if (file.Exists)//判断文件是否存在
{
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.AddHeader("content-disposition", "attachment;filename=" + file.Name);
Response.AddHeader("cintent_length", "attachment;filename=" + HttpUtility.UrlDecode(file.Name));
Response.AddHeader("cintent_length", file.Length.ToString());
//设定输入文件的类型
Response.ContentType = "application.vnd.ms-word";
Response.WriteFile(file.FullName);
Response.Flush();
Response.End();
//从服务器硬盘中删除刚生成的Word文件
System.IO.File.Delete(ouputPath);
}
}
#endregion 最后效果图如下:
实现word打印的方式不仅仅是这一种,这只是其中的一个demo而已,最好的了解方式就是Aspose.Words的api文档。而且这一点需求在实际业务用处很大。
的情况下,仍然可以生成,更改,转换,渲染和打印word文档,并且支持DOC,PDF等其他格式。
下面就以 Aspose.Words如何实现打印word文档为例做一个小demo。
1·制作word模板
在word模板中,在需要插入的地方选择插入--文档部件--域--域名是MergeField--域名是字段名,例如name,点击确定即可。效果图如下:
2 实现代码:
由于我是加入MVC框架的,所以在controller中接收的是来自view的实体,不用再经过数据库查找相应的数据,如果在纯三层或几层中实现,直接调用D层,通过D层访问数据库获得即可。
简单一句话来说,就是一个赋参数的一个过程,然后直接调用该类库下的方法即可。方法有很多,具体的可以参考Aspose.Word的API文档。
#region 初婚未育调查报告 + void FirstMarriageReport(FamilyPlanInfoViewModel enFamilyInfo) 贾丽敏 2015/9/3
/// <summary>
/// 初婚未育调查报告
/// </summary>
/// <param name="enFamilyInfo">FamilyPlanInfoViewModel</param>
public void FirstMarriageReport(FamilyPlanInfoViewModel enFamilyInfo)
{
if (Session["userID"] != null)//判断登陆时用户ID是否为空,为空则跳转登陆页面
{
//获取模板的路径
var path = Server.MapPath("../Document/2初婚未育调查报告.doc");
#region 初婚未育调查报告中各参数赋值
string strUserID = Session["userID"].ToString();
while (strUserID.Length < 4)
{
strUserID = "0" + strUserID;
}
//获取信函编号
string strCardNo = numberInfo.GetNumber();
while (strCardNo.Length < 4)
{
strCardNo = "0" + strCardNo;
}
//获取documentID参数
string strDocumentID = "LFRC" + strUserID + "No." + strCardNo;
//赋值
string name = enFamilyInfo.name;//姓名
string sex = enFamilyInfo.sex;//性别
string spouseWorkplace = enFamilyInfo.spouseworkplace;//配偶工作地
string spousename = enFamilyInfo.spousename;//配偶姓名
string year, month, date;
if (enFamilyInfo.idNumber == null)
{
year = "";
month = "";
date = "";
}
else
{
year = enFamilyInfo.idNumber.Substring(6, 4);//出生年份
month = enFamilyInfo.idNumber.Substring(10, 2);//出生月份
date = enFamilyInfo.idNumber.Substring(12, 2);//出生日
}
string marryyear, marrymonth, marrydate;
if (enFamilyInfo.marriageregistrationdate1 == null)
{
marryyear = "";//结婚登记年份
marrymonth = " ";//结婚登记月份
marrydate = " ";//结婚登记日
}
else
{
marryyear = enFamilyInfo.marriageregistrationdate1.Substring(0, 4);
marrymonth = enFamilyInfo.marriageregistrationdate1.Substring(5, 1);
marrydate = enFamilyInfo.marriageregistrationdate1.Substring(7, 2);
}
#endregion
string fileName = "初婚未育调查报告.doc";
//获取模板中设定好的字段
String[] fieldNames = new String[] { "documentID", "name", "sex", "year", "month", "date", "marryyear", "marrymonth", "marrydate", "spouseworkplace", "spousename" };
//给模版中参数赋值
Object[] fieldValues = new Object[] { strDocumentID, name, sex, year, month, date, marryyear, marrymonth, marrydate, spouseWorkplace, spousename };
Print(path, fileName, fieldNames, fieldValues);//调用封装好的print方法,在下方。
}
else
{ //跳转到登陆界面
this.Response.Write("<script type='text/javascript'> goIndex(); function goIndex(){window.location.href='../Login/Login';}</script>");
}
}
#endregion
封装好的print方法:#region 封装信函打印 + void Print(string path, String[] fieldNames, Object[] fieldValues) 贾丽敏 2015/9/3
/// <summary>
/// 封装信函打印
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="fieldNames">参数数组</param>
/// <param name="fieldValues">参数值数组</param>
public void Print(string path, string fileName, String[] fieldNames, Object[] fieldValues)
{
//string fileName = path.Substring(path.LastIndexOf("\\") + 1);//获取文件名
var ouputPath = Server.MapPath("../Document/");
Document doc = new Document(path);
//合并模版,相当于页面的渲染
doc.MailMerge.Execute(fieldNames, fieldValues);
ouputPath = ouputPath + fileName;
//保存合并后的文档,生成的文档存放到服务器硬盘上
doc.Save(ouputPath);
//通过response对象,执行下载操作
System.IO.FileInfo file = new System.IO.FileInfo(ouputPath);
if (file.Exists)//判断文件是否存在
{
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.AddHeader("content-disposition", "attachment;filename=" + file.Name);
Response.AddHeader("cintent_length", "attachment;filename=" + HttpUtility.UrlDecode(file.Name));
Response.AddHeader("cintent_length", file.Length.ToString());
//设定输入文件的类型
Response.ContentType = "application.vnd.ms-word";
Response.WriteFile(file.FullName);
Response.Flush();
Response.End();
//从服务器硬盘中删除刚生成的Word文件
System.IO.File.Delete(ouputPath);
}
}
#endregion 最后效果图如下:
实现word打印的方式不仅仅是这一种,这只是其中的一个demo而已,最好的了解方式就是Aspose.Words的api文档。而且这一点需求在实际业务用处很大。
相关文章推荐
- Android Manifest 用法
- Spark RDD API详解(一) Map和Reduce
- 一个小型js框架myJSFrame附API使用帮助
- 详细分析交换机、路由器、集线器的区别和联系
- 批处理的api WMIC学习体会有感第1/2页
- 批处理 API实现文件下载的代码第1/2页
- Lua教程(十七):C API简介
- 微软Word 2007数学插件 Microsoft Math 提供下载
- 强制删除工具 xdelbox xdelbox1.5正式版下载
- Office Word九条常用技巧
- 揪出交换机端口背后“凶手”导致网速太慢
- 电脑重启后突然检测不到硬盘的原因分析与解决办法
- powershell操作word详解
- C#生成Word文档代码示例
- 用vbscript把 Word 文档保存为文本文件的代码
- C#根据Word模版生成Word文件
- C#采用OpenXml给Word文档添加表格
- C#中设计、使用Fluent API
- C#实现合并多个word文档的方法