Docx4j替换word

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

  

posted on 2017-07-17 16:41  追梦_坚持  阅读(480)  评论(0编辑  收藏  举报

导航