Java实现word模板生成.doc,并实现命令行输出.pdf

一直不太喜欢用POI处理word文档,早在2010年时就自创了一个方法,把doc另存为xml,直接替换变量关键字(如:${name}),简单地实现了word模板输出doc,但是存在一个问题,插入图片比较麻烦,一直没时间弄,最近有项目要输出doc,必须要显示图片,不能用pdf或html,因为输出之后,还要人工填写一些信息,综合考虑之后,决定还是重操旧业,把以前写的EasyDoc.java增加插入图片的功能。这里对我来说有几个麻烦点:
1.之前只需要用正则替换关键字就可以了,但插入图片就没这么简单,要用dom4j或jdom加载xml。
2.要分析xml插入和显示图片的原理,搞清楚图片定义、引用、资源的位置。
3、改变搜索关键字的方案,不能正则替换了,要对所有节点扫描关键字。
4、要兼容正则替换和节点扫描两种方案。
5、要实现按路径定位节点,即类似xpath的定位方式。
6、插入时要解决xml的namespace的问题。

终于花了2天时间实现了,测试代码如下:

	public static void main(String[] args) throws Exception{
		TimeMeter tm=new TimeMeter();
		File xmlFile=new File("./testfiles/设备输出报告_${nowDate}_(${name}).doc");
		esdk.tool.assertEquals(xmlFile.exists());
		Document doc=esdk.jdom.file2Doc(xmlFile);
		EasyDoc ed=new EasyDoc(xmlFile);
		ed.put("name","苏东坡");
		ed.put("损坏面积",760);
		ed.put("测试时长","7分钟");
		ed.put("year",2022);
		ed.put("白屏坏点个数",22);
		ed.put("绿屏坏点个数",11);
		ed.put("蓝牙功能检测","已通过");
		ed.put("GSM功能检测","未实现");
		ed.put("WiFi功能检测","未通过");

		ed.put("nowDate",esdk.time.format(new Date(),"yyyy-M-d"));
		ed.put("base",esdk.map.urlParamsToMap("brand=华为&type=P30Pro&屏幕尺寸=1980*1080&sn=SN000000001"));
		ed.put("imageWhiteScreenCheck",new File("./testfiles/scratch_103100_X116.7_Y109.7_Z153.5.jpg"),1642110,1094740);
		ed.put("imageGreenScreenCheck",new File("./testfiles/badpoint_show_2.jpg"),1600000,900000);

		File outputFile=new File(esdk.str.format(xmlFile.getAbsolutePath(),ed.params));
		ed.toDoc(outputFile); //输出doc
		ed.toPDF(esdk.file.replaceExtName(outputFile,"pdf")); //输出pdf
		tm.printElapse();
	}

word模板效果:

 输出doc效果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值