你知道的越多,你不知道的越多
点赞再看,养成习惯
如果您有疑问或者见解,或者没有积分想获取项目和定制项目,欢迎指教:
企鹅:869192208
前言
目前遇到一个需求,客户需要在一份 word 通知书上,使用手写板签名后,将签名图片插入到 word 通知书的指定位置。
针对这个需求,正好之前使用过 Aspose.Words 这个工具项目,直接使用它提供的方法就能完成 word 文档内容和图片的插入和替换。
实现思路一:
通过书签替换:
先定义一个书签,然后在书签的位置填进去相应的数据或图片,具体操作。
- 先在word上插入->书签->定义书签名
- 在程序中载入模板文件
- 找到模板文件定义的书签
- 将内容填充到书签的位置
实现思路二:
通过页面关键字替换:
不需要定义书签,但是需要模板有固定的关键字,通过找到模板的关键字,对其进行内容替换或者图片替换。
- 保证 word 模板有固定的关键字
- 找到指定的关键字
- 对关键字进行内容和图片的替换
优缺点分析
思路一:
优点
- 不需要内容有固定的关键字
- 可以重复多次替换同一个位置的内容
缺点
- 需要预先定义书签,并且记录书签名
思路二:
优点
- 不需要定义书签
缺点
- 不能重复在同一个位置更新内容
具体实现
创建一个测试类Demo1
package xymy.WordInsertPic;
import com.aspose.pdf.SaveFormat;
import com.aspose.words.*;
import jdk.nashorn.internal.runtime.regexp.joni.Regex;
import sun.net.www.content.image.png;
import java.util.regex.Pattern;
public class Demo1 {
public static void main(String[] args) throws Exception {
//载入word文档
Document doc = new Document("E:/111.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
//第一种:插入书签的方式
builder.moveToBookmark("l_001");//跳转到书签名是l_001的位置
builder.write("https://blog.youkuaiyun.com/CDWLX");//书签处要插入的文字
builder.moveToBookmark("l_002");//跳转到书签名是l_002的位置
builder.insertImage("D:/111.png");//书签处要插入的图片
doc.save("D:/New_File.docx");//重新渲染生成word文件
//第二种:插入字符替换的方式
doc.getRange().replace(Pattern.compile("银行卡"), "https://blog.youkuaiyun.com/CDWLX");//将指定内容位置的内容替换成新的文字,这个指定内容,需要传正则表达式
doc.getRange().replace(Pattern.compile("测试"), new ReplaceAndInsertImage("D:/111.png"), false);//将指定内容位置的内容替换成新的图片,这个指定内容,需要传正则表达式
doc.save("D:/New_File_02.docx");//重新渲染生成word文件
}
}
创建 IReplacingCallback 的实现类
package xymy.WordInsertPic;
import com.aspose.words.*;
import lombok.Data;
@Data
public class ReplaceAndInsertImage implements IReplacingCallback {
private String url;
public ReplaceAndInsertImage(String url)
{
this.url = url;
}
@Override
public int replacing(ReplacingArgs e) throws Exception {
//获取当前节点
Node node = e.getMatchNode();
//获取当前文档
Document doc = (Document)node.getDocument();
DocumentBuilder builder = new DocumentBuilder(doc);
//将光标移动到指定节点
builder.moveTo(node);
//插入图片
builder.insertImage(url);
return ReplaceAction.REPLACE;
}
}
运行效果
-
模板
-
书签方式替换效果
-
关键字方式替换效果
参考资料: