Java 如何从自动转换为PNG的excel中获取SVG图片数据
Excel自动创建并保存两个副本 当我们使用ApachePOIV5.0.0获取图片数据时Java 如何从自动转换为PNG的excel中获取SVG图片数据,java,apache-poi,Java,Apache Poi,Excel自动创建并保存两个副本 当我们使用ApachePOIV5.0.0获取图片数据时 XSSFPicture图片=(XSSFPicture)形状; System.out.println(picture.getPictureData().suggestFileExtension());//输出:png 我们得到了图片的PNG格式 如果我们想要获得原始的SVG图片数据,我们可以使用以下方法(遍历取自): 私有void traverseShapeContainer(ShapeContainer容
XSSFPicture图片=(XSSFPicture)形状;
System.out.println(picture.getPictureData().suggestFileExtension());//输出:png
我们得到了图片的PNG
格式
如果我们想要获得原始的SVG
图片数据,我们可以使用以下方法(遍历取自):
私有void traverseShapeContainer(ShapeContainer容器){
for(XSSFShape:container){
if(XSSFConnector的形状实例){
}else if(XSSFGraphicFrame的形状实例){
}else if(XSSFPicture的形状实例){
XSSFPicture图片=(XSSFPicture)形状;
System.out.println(picture.getPictureData().suggestFileExtension());
if(picture.getPictureData().suggestFileExtension().equals(“png”)){
XSSFPictureData svgPictureData=getSVGPicture(图片);
if(Objects.nonNull(svgPictureData)){
字节[]svgData=svgPictureData.getData();
}
}
}else如果(XSSFShapeGroup的shape instanceof){//我们有一个shape组
XSSFShapeGroup shapeGroup=(XSSFShapeGroup)形状;
System.out.println(shapeGroup);
traverseShapeContainer(形状组);
}else if(XSSFSimpleShape的形状实例){
}
}
}
私有XSSFPictureData getSVGPicture(XSSFPicture图片){
CTOfficeArtExtensionList extLst=picture.getCTPicture().getBlipFill().getBlip().getExtLst();
if(Objects.nonNull(extLst)){
List extList=extLst.getExtList();
for(变量ext:extList){
var extNodes=ext.getDomNode().getChildNodes();
对于(int i=0;i
这无疑解决了问题,但是是否有更好的方法来获取
SVG
图片数据?呈现SVG
图片是excel365
的一项新功能。以前的Excel
版本无法显示SVG
图片。因此,excel365
将转换为PNG
,以实现向后兼容性ApachePOI
在OfficeOpenXML
方面主要处于Excel2007
的级别。因此,它将*.xlsx
文件作为Excel2007
文件。而且Excel2007
肯定不会使用*.svg
图像,而只使用*.png
图像。所以不,在我看来,到目前为止没有比这更好的办法了。