需求背景:
在工程领域相关的Excel文件中,会涉及一些emf格式的图片。如果需要将这些文件转移到线上,在浏览器端展示时,会发现这些图片无法正常显示。这是因为浏览器只能识别web端支持的图片类型。目前浏览器主要支持的图片有7中,分别是:jpg、png、gif、svg、bmp、ico、webp。 webp 已在多种主流浏览器上获得支持。 avif 目前Chrome和Firefox已支持,但Edge还不支持。
解决方案:
如果想在web端正常的展示emf图片,就需要将emf图片转化成浏览器能支持的图片类型。在这里,比较建议通过批量处理的方式,选择GCExcel来识别文件中的emf图片,之后调用其它三方的emf图像转化工具,将emf转化为其它web端能够支持的图片,并替换原来的emf图像。核心代码如下:
- public static void testImg() throws IOException {
- Workbook workbook = new Workbook();
- workbook.open("复杂文档.xlsx");
- IWorksheet worksheet = workbook.getWorksheets().get("图片emf");
- IShapes shapes = worksheet.getShapes();
- for (IShape shape : shapes) {
- if (shape.getType().equals(ShapeType.Picture) && shape.getPictureFormat().getType().equals(ImageType.EMF)) {
- byte[] imgs = shape.getPictureFormat().getFill();
- FileOutputStream fos = new FileOutputStream(new File("转换.emf"));
- fos.write(imgs);
- fos.close();
- // 这里调用一个转换图片类型的返方法
- // https://blog.csdn.net/weixin_47512836/article/details/119835108
- double left = shape.getLeft();
- double top = shape.getTop();
- double width = shape.getWidth();
- double height = shape.getHeight();
- double widthInPixel = shape.getWidthInPixel();
- double heightInPixel = shape.getHeightInPixel();
- shape.delete();
- IShape picture = worksheet.getShapes().addPicture("开心果.png", left, top, width, height);
复制代码
关于图片转化工具,代码中给了一个我自己搜索的转换工具,也可以根据自己的习惯,选择其它后端工具解决。
|
|