表格控件EMF图像展示处理方案
需求背景:在工程领域相关的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);
关于图片转化工具,代码中给了一个我自己搜索的转换工具,也可以根据自己的习惯,选择其它后端工具解决。
页:
[1]