您的位置:首页 > 编程语言 > ASP

利用Aspose.Words打印word文档

2015-09-13 22:17 976 查看
          Aspose.Words是一款先进的类库,可以直接在各个应用程序中执行各种文档处理,即使在没有Microsoft word

的情况下,仍然可以生成,更改,转换,渲染和打印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文档。而且这一点需求在实际业务用处很大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息