解决XWPFRun的addPicture方法无法显示图片的问题

最近在解决一个导出订单发票的需求,导出的 word 上必须有条形码图片。查阅资料得知可以使用 XWPFRun 的 addPicture 方法来添加,代码如下:

// 插入条形码图片
XWPFParagraph paragraph = cell.addParagraph();
XWPFRun run = paragraph.createRun();
try {
	FileInputStream fis = new FileInputStream(new File("D:/test/barcode/" + e.getValue() + ".png"));
run.addPicture(
	fis,	// 条形码图片的位置
	Document.PICTURE_TYPE_PNG, // 图片类型
	e.getValue() + ".png", // 图片名称
	200, // 图片的长
	50) // 图片的宽
);
	fis.close();
} catch (Exception ex) {
	throw new GlobalException(110, "【条形码图片不存在】expressNum=" + e.getValue());
}

启动后,图片无法显示,后来查到了 XWPFRun 的官方文档,截图如下:

解决XWPFRun的addPicture方法无法显示图片的问题_第1张图片

看到图片的 width 和 height 要使用 Units 这个工具类来进行转换,看一下 Units 的文档:

解决XWPFRun的addPicture方法无法显示图片的问题_第2张图片

需要使用 Units 的 toEMU 方法进行转换,修改后的代码如下:

// 插入条形码图片
XWPFParagraph paragraph = cell.addParagraph();
XWPFRun run1 = paragraph.createRun();
try {
	FileInputStream fis = new FileInputStream(new File("D:/test/barcode/" + e.getValue() + ".png"));
run.addPicture(
	fis,	// 条形码图片的位置
	Document.PICTURE_TYPE_PNG, // 图片类型
	e.getValue() + ".png", // 图片名称
	Units.toEMU(200), // 图片的长
	Units.toEMU(50) // 图片的宽
);
	fis.close();
} catch (Exception ex) {
	throw new GlobalException(110, "【条形码图片不存在】expressNum=" + e.getValue());
}

启动程序,成功向 word 中添加条形码:

解决XWPFRun的addPicture方法无法显示图片的问题_第3张图片

收获:使用第三方 API 时,一定要优先看官方文档,仔细看文档上写的每一句话。

关注我的微信公众号(曲健磊的个人随笔),观看更多精彩内容:
解决XWPFRun的addPicture方法无法显示图片的问题_第4张图片

你可能感兴趣的:(【项目相关】)