.net使用Aspose.Words进行Word替换操作的实现代码
程序员文章站
2023-12-21 15:19:10
之前在工作中,需要实现word打印功能,并且插入图片。当时采取的方式则是使用书签进行操作。首先在word内插入书签,完成后,存为模板。程序加载该模板,找到书签,并在指定位置...
之前在工作中,需要实现word打印功能,并且插入图片。当时采取的方式则是使用书签进行操作。首先在word内插入书签,完成后,存为模板。程序加载该模板,找到书签,并在指定位置写入文字即可。
后期维护过程中,发现模板经常需要变更,但是书签在word中不方便查看,用户在编辑word的时候容易出错。于是想采取特殊字符串标识的方式进行替换。此时,图片的插入就存在问题,光标无法直接移动到指定字符串。
资源下载:
源代码
开发思路:
查阅 aspose.words提供的api,发现有range类有该方法:
public int replace(regex pattern, ireplacingcallback handler, bool isforward);
该方法则是在使用正则表达式进行文档内替换的同时可以执行ireplacingcallback接口。
具体实现代码如下:
/* ==============================================================================
* 文 件 名:program
* 功能描述:
* copyright (c) 2013 武汉经纬视通科技有限公司
* 创 建 人: alone
* 创建时间: 2013/4/2 11:16:19
* 修 改 人:
* 修改时间:
* 修改描述:
* 版 本: v1.0.0.0
* ==============================================================================*/
using system;
using system.collections.generic;
using system.text;
using system.text.regularexpressions;
using aspose.words;
namespace worddemo
{
class program
{
static void main(string[] args)
{
var dic = new dictionary<string, string>();
dic.add("姓名", "杨幂");
dic.add("学历", "本科");
dic.add("联系方式", "02759597666");
dic.add("邮箱", "304885433@qq.com");
dic.add("头像", ".//1.jpg");
//使用书签操作
document doc = new document(".//1.doc");
documentbuilder builder = new documentbuilder(doc);
foreach (var key in dic.keys)
{
builder.movetobookmark(key);
if (key != "头像")
{
builder.write(dic[key]);
}
else
{
builder.insertimage(dic[key]);
}
}
doc.save("书签操作.doc");//也可以保存为1.doc 兼容03-07
console.writeline("已经完成书签操作");
//使用特殊字符串替换
doc = new document(".//2.doc");
foreach (var key in dic.keys)
{
if (key != "头像")
{
var repstr = string.format("&{0}&", key);
doc.range.replace(repstr, dic[key], false, false);
}
else
{
regex reg = new regex("&头像&");
doc.range.replace(reg, new replaceandinsertimage(".//1.jpg"), false);
}
}
doc.save("字符串替换操作.doc");//也可以保存为1.doc 兼容03-07
console.writeline("已经完成特殊字符串替换操作");
console.readkey();
}
}
模板如图:
生成文档如图:
后期维护过程中,发现模板经常需要变更,但是书签在word中不方便查看,用户在编辑word的时候容易出错。于是想采取特殊字符串标识的方式进行替换。此时,图片的插入就存在问题,光标无法直接移动到指定字符串。
资源下载:
源代码
开发思路:
查阅 aspose.words提供的api,发现有range类有该方法:
复制代码 代码如下:
public int replace(regex pattern, ireplacingcallback handler, bool isforward);
该方法则是在使用正则表达式进行文档内替换的同时可以执行ireplacingcallback接口。
具体实现代码如下:
复制代码 代码如下:
/* ==============================================================================
* 文 件 名:program
* 功能描述:
* copyright (c) 2013 武汉经纬视通科技有限公司
* 创 建 人: alone
* 创建时间: 2013/4/2 11:16:19
* 修 改 人:
* 修改时间:
* 修改描述:
* 版 本: v1.0.0.0
* ==============================================================================*/
using system;
using system.collections.generic;
using system.text;
using system.text.regularexpressions;
using aspose.words;
namespace worddemo
{
class program
{
static void main(string[] args)
{
var dic = new dictionary<string, string>();
dic.add("姓名", "杨幂");
dic.add("学历", "本科");
dic.add("联系方式", "02759597666");
dic.add("邮箱", "304885433@qq.com");
dic.add("头像", ".//1.jpg");
//使用书签操作
document doc = new document(".//1.doc");
documentbuilder builder = new documentbuilder(doc);
foreach (var key in dic.keys)
{
builder.movetobookmark(key);
if (key != "头像")
{
builder.write(dic[key]);
}
else
{
builder.insertimage(dic[key]);
}
}
doc.save("书签操作.doc");//也可以保存为1.doc 兼容03-07
console.writeline("已经完成书签操作");
//使用特殊字符串替换
doc = new document(".//2.doc");
foreach (var key in dic.keys)
{
if (key != "头像")
{
var repstr = string.format("&{0}&", key);
doc.range.replace(repstr, dic[key], false, false);
}
else
{
regex reg = new regex("&头像&");
doc.range.replace(reg, new replaceandinsertimage(".//1.jpg"), false);
}
}
doc.save("字符串替换操作.doc");//也可以保存为1.doc 兼容03-07
console.writeline("已经完成特殊字符串替换操作");
console.readkey();
}
}
public class replaceandinsertimage : ireplacingcallback
{
/// <summary>
/// 需要插入的图片路径
/// </summary>
public string url { get; set; }
public replaceandinsertimage(string url)
{
this.url = url;
}
public replaceaction replacing(replacingargs e)
{
//获取当前节点
var node = e.matchnode;
//获取当前文档
document doc = node.document as document;
documentbuilder builder = new documentbuilder(doc);
//将光标移动到指定节点
builder.moveto(node);
//插入图片
builder.insertimage(url);
return replaceaction.replace;
}
}
}
模板如图:
生成文档如图: