.net 使用 Aspose.Words 进行 Word替换操作

原文 http://www.cnblogs.com/codealone/archive/2013/04/02/2995224.html

背景:

  之前在工作中,需要实现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;
        }
    }

}

 

模板如图:

  

生成文档如图:

  

   如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。

   感谢阅读,希望这篇文章能给你带来帮助!

时间: 2024-10-31 07:19:23

.net 使用 Aspose.Words 进行 Word替换操作的相关文章

Xcode中修改变量名、类名及字符串的替换操作

Xcode中修改变量名.类名及字符串的替换操作         在做iOS开发代码优化的工作时,优化代码结构之前,我们应该先整理好工程的外貌,将文件和类的命名进行规范,在Xcode中为我们提供了方便而强大的名称修改功能. 第一步:修改类名         将鼠标点击放在类的名称上,选择Xcode工具栏中的edit->refactor->rename: 之后,将类名更改为我们需要的模式点击preview,记得将下面的关联文件勾选: Xcode会为我们检测出需要更改的地方,浏览无误后点击save.

Excel 查找与替换操作

     查找与替换是编辑处理过程中常要执行的操作,在Excel中除了可查找和替换文字外,还可查找和替换公式和附注,其应用更为广泛,进一步提高了编辑处理的效率.利用这些功能,我们能够迅速地查找到除了Visual Basic 模块以外的,所有工作表中都有的特殊字符的单元格.我们可以在一张工作表内的所有单元格中,在工作表的一个选定区域中,或者在一张工作表或工作表组的当前选定区域中,用另一串字符替换现有的字符.也可寻找和选定具有同类内容的单元格. 5.6.1 查找命令     当需要重新查看或修改工作

9招搞定Word文本操作

  9招搞定Word文本操作          ● 快速回到上次编辑点 一篇有很多页的长文档,如果在某页中编辑之后,又跳到另一页编辑,之后忽然想起前面的编辑还有问题,如何快速跳转到前面的编辑点呢?滚动吗?或许你哗哗哗转半天滚轮,还是没找到那个地方.现在,只需按下Shift+F5,就可以快速跳回到上次编辑的地方了.这就叫神速! ● 快速升降文档标题级别 在文章编辑过程中,将某些关键内容设置为标题,你用什么方法?标题的级别不同,你用什么方法改变标题级别?告诉你一个快速的方法:选中文本,按Alt+Sh

如何实现对word,excel操作题实现自动判卷功能

问题描述 能否实现对word,excel操作题实现自动判卷功能,主要是在计算机应用考试中,需要对word,excel进行编辑,排版等,有没有可以实现这样的自动判卷功能,感谢各位支持一下.

方法-asp.net对word的操作。

问题描述 asp.net对word的操作. .net写的网页在后台对word进行处理,都会有一个进程winword.exe进程,处理完成以后还必须把他关闭,不然会出现多个进程对服务器有影响.提问: 能否直接用某方法去操作word以后让他在服务器上直接用的就是同一个进程从而减轻服务器的负担,或者用某种方式器操作word他不会出现对服务的影响! 解决方案 操作之前获取word实例,如果没有再创建一个word新实例.... 解决方案二: 楼主 这是C#的一些项目实例代码 你可以参考一下http://d

vim替换操作大全

  :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :2,$s/vivian/sky/g 替换第 2 行开始到最后一行中每一行所有 vivian 为 sky n 为数字,若 n 为 .,表示从当前行开始到最后一行 :%s/vivian/sky/(等同于 :g/vivian/s//sky/)

c# excel-c# 对Excel Word 的操作

问题描述 c# 对Excel Word 的操作 对Excel的读取,添加指定的sheet的数据,并且保存,Word的读取 添加标签值,上传图片到Word指定地方! 解决方案 以上这些需求,用npoi这个组件库可以一站搞定. 解决方案二: 导出成EXCEL: Excel.Application excel = new Excel.Application(); ??????????? excel.Application.Workbooks.Add(true); ??????????? excel.V

php实现图片上传并进行替换操作_php技巧

首先建立两个文件: change.html 和 change.php change.html 文件的表单代码如下: <html> <head> <title>change file example.</title> <meta charset="UTF-8"> </head> <body> <form method="post" action="changefile.

局域网共享的文件怎么让别人打开的时候,不影响我删除替换操作

问题描述 局域网共享的文件怎么让别人打开的时候,不影响我删除替换操作,我想做个单位内外网通用的程序,用VS2013c#,但是做成C/S结构的就无法统一更新,所以想放到局域网上,大家都直接打开快捷方式,但在打开的时候,不想影响我更新和替换该程序,做成B/S架构的无法实现内外网通用,服务器在内网谢谢 解决方案 解决方案二:这都在表达什么?"放到局域网,打开快捷方式"就能实现"内外网相通"了?解决方案三:按你的想法,怎么通过外网访问你的共享目录?想要内外网通过,无非是通过