当前位置: 移动技术网 > IT编程>开发语言>c# > .net使用Aspose.Words进行Word替换操作的实现代码

.net使用Aspose.Words进行Word替换操作的实现代码

2019年07月18日  | 移动技术网IT编程  | 我要评论
之前在工作中,需要实现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();
        }
    }

    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;
        }
    }
}



模板如图:



生成文档如图:


如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网