@SuppressWarnings("serial")
public static void main(String[] args) throws Exception {
// 模板文件路径
String templatePath = "/Users/lijun/Downloads/work/房产评估/outFile.doc";
// 生成的文件路径
String targetPath = "/Users/lijun/Downloads/work/房产评估/target.docx";
// 书签名
String bmImage = "place_image";
String bmTable = "table_test";
// 图片路径
String imagePath = "/Users/lijun/Documents/workspace1/portal_assess/src/main/webapp/static/images/2.jpg";
// 载入模板文件
WordprocessingMLPackage template = getTemplate(templatePath);
// WordprocessingMLPackage.load(new FileInputStream(templatePath));
// 提取正文
MainDocumentPart mainDocumentPart = template.getMainDocumentPart();
Document wmlDoc = (Document) mainDocumentPart.getJaxbElement();
Body body = wmlDoc.getBody();
List<Object> texts = getAllElementFromObject(template.getMainDocumentPart(), Text.class);
//Map<String,String> map = new HashMap<String,String>();
searchAndReplace(texts, new HashMap<String, String>(){
{
this.put("${project.user}", "李俊");
this.put("${project.name}", "蜀山新村2幢202");
this.put("${project.no}", "房子No201703780011");
// this.put("${one_here_and}", "Firstname");
// this.put("${one}", "ChildA");
// this.put("${two}", "ChildB");
// this.put("${three}", "ChildC");
}
@Override
public String get(Object key) {
return super.get(key);
}
});
List<String[]> tbl = new ArrayList<String[]>();
tbl.add(new String[]{"估价对象及可比实例修正项目","估价对象","可比实例A","可比实例B","可比实例c"});
tbl.add(new String[]{"建筑面积","95","120","86","96"});
tbl.add(new String[]{"楼层","2","1","4","3"});
replaceTable(template,"${table}",tbl);
// 提取正文中所有段落
List<Object> paragraphs = body.getContent();
// 提取书签并创建书签的游标
RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");
new TraversalUtil(paragraphs, rt);
for (CTBookmark bm:rt.getStarts()) {
//这儿可以对单个书签进行操作,也可以用一个map对所有的书签进行处理
if (bm.getName().equals(bmImage)){
insertImageAtBookmark(template,imagePath,bm);
}else if (bm.getName().equals(bmTable)){
// insertTableAtBookmark(template,tbl,bm);
}
}
template.save(new FileOutputStream(targetPath));
}