在使用poi往word里面插入图片时可以使用
代码语言:javascript复制XWPFParagraph.insertNewRun(i).addPicture(InputStream pictureData, int pictureType, String filename, int width, int height)方法
但是为了使得插入word中的图片按照原图尺寸进行等比例缩放,我们必须必须获得原图的尺寸,常用的方法就是通过
代码语言:javascript复制javax.imageio.ImageIO.read(InputStream input)方法读取图片信息,这样就会涉及到两次图片读写,为了减少不必要的网络通信,我们可以使用下面的方式进行优化:
代码语言:javascript复制URL url = new URL(runText);
byte[] bytes = IOUtils.toByteArray(url.openStream());
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
BufferedImage img = javax.imageio.ImageIO.read(bis);
int width = img.getWidth();
int height = img.getHeight();
//下面按照图片的实际大小进行同比例缩放
int picHeight = 300;
int picWidth = picHeight * width/height;
//下次读取该ByteArrayInputStream 之前一定要调用reset进行复位,这样才能读到图片所有数据
bis.reset();
para.insertNewRun(i).addPicture(bis,
XWPFDocument.PICTURE_TYPE_JPEG, url.getFile(), Units.toEMU(picWidth), Units.toEMU(picHeight));
好了,上面就是通过ByteArrayInputStream来减少网络通信次数的。