欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.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();
        }
    }

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



模板如图:

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

生成文档如图:


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

上一篇:

下一篇: