.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-07Console.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-07Console.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;}}}

模板如图:

  

生成文档如图:

  

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

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

posted on 2013-05-18 21:46 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/archive/2013/05/18/3086224.html

.net 使用 Aspose.Words 进行 Word替换操作相关推荐

  1. Aspose.Words对于Word的操作

    对于word操作一般是对已有word模板的操作,直接新建的不考虑,网上教程很多,自己看吧 一般有以下几种办法(忘了具体几种了,一般情况下以下就够了) 1.通过书签替换 顾名思义,就是先定义一个书签,然 ...

  2. Aspose Word常用操作

    Aspose Word常用操作 使用Aspose Word操作模版 创建Document对象 常用方法 使用Aspose Word操作模版 刚好最近学到Aspose Word,有些心得,记录下来.下面 ...

  3. Aspose.Java实现word转pdf,添加水印等操作

    Aspose.Java实现word转pdf,添加水印等操作 一. word转pdf 二. 文档插入水印 Aspose是一款商用版控件,支持各类文档操作,这里主要介绍如何在Springboot项目中使用 ...

  4. java操作word文档(文字,图片,表格添加以及替换操作)

    注:本文由于个人工作需要,有对多个他人博文进行借鉴,但是多数博文都只是讲到了小部分,例如图片/表格的操作,都只有根据书签进行替换,比较片面,本人有总结到根据文字进行图片/表格的替换,希望可以帮到更多有 ...

  5. (一)JAVA基于OPENXML的word文档插入、合并、替换操作系列之基础篇

    (一)JAVA基于OPENXML的word文档插入.合并.替换操作系列之基础篇 前言 什么是Open Xml? Open XML SDK 这系列笔记要做点什么? 涉及技术点 关于word.openxm ...

  6. poi操作word替换模板向指定位置添加图表

    poi操作word替换模板向指定位置添加图表 首先是引入pom文件 <dependency><groupId>org.apache.poi</groupId>< ...

  7. (五)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之word文件合并[支持多文件]

    (五).JAVA基于OPENXML的word文档插入.合并.替换操作系列之word文件合并[支持多文件] 二.word合并的多种方案简单比较 三.基于Open Xml WordprocessingML ...

  8. java openxml 操作 word,(三)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之html转word...

    (三).JAVA基于OPENXML的word文档插入.合并.替换操作系列之html转word 系列笔记传送门 富文本转word文档 准备待转换内容 内容清理与格式化 转换成word文档 输出结果展示 ...

  9. C# Word 查找替换操作

    转自http://blog.chinaunix.net/uid-25498312-id-4149333.html 参考网上大部分提供的word查找替换的方法,昨天还好使,今天wordDoc.Conte ...

最新文章

  1. 【青少年编程】黄羽恒:我要背单词
  2. 如何用纯 CSS 创作气泡填色的按钮特效
  3. 一个简单的DELPHI自定义事件的例子(转)
  4. android程序root权限,android – 如何从源代码授予对特定应用程序的root访问权限而不是root权限?...
  5. 模拟ssh, hashlib模块, struct模块, subprocess模块
  6. CF1556D-Take a Guess【交互】
  7. vb如何测试连接mysql_VB怎么连接访问Access数据库?
  8. java 计算26个字母在一段文本中出现的频率(保留小数点后4位)
  9. pop!_os_Pop!幕后花絮_OS Linux
  10. add p4 多个文件_绘图技巧01:继承特性创建对象之神器ADD
  11. Liunx安装 jemalloc == 内存管理工具
  12. OSChina 周一乱弹 —— 只要给网,这种生活我能过一辈子
  13. 图像处理——采样与量化
  14. 汇编语言 王爽 【第四版】实验一
  15. 为什么chrome视频时卡得厉害(by quqi99)
  16. timesten系列一:简介
  17. C语言基础--从零开始初识语言(多图超详解|超万字教程)
  18. c++卸载工具_卸载软件同时清除软件注册表里面的信息,也许这款软件能够帮助你...
  19. GD32f103ret6 使用HID,设备管理里,提示未知设备
  20. 【解决问题】FlutterBlue在安卓手机上无法连接蓝牙设备,扫描缓慢

热门文章

  1. ndarray.shape[]返回值的意义
  2. CentOS开机自动运行程序的脚本
  3. mysql临时文件和临时表_理解mysql的临时表和文件排序
  4. leetcode算法题--Reverse Words in a String
  5. gcc -ldl 选项作用
  6. OVS DPDK--介绍(二)
  7. angular集成websocket_Angular + Websocket
  8. MyBatis:参数传递 [转]
  9. IBM服务器指示灯报警说明
  10. 智能家庭本周锋闻:进击的情趣