Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从自动转换为PNG的excel中获取SVG图片数据_Java_Apache Poi - Fatal编程技术网

Java 如何从自动转换为PNG的excel中获取SVG图片数据

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容

Excel自动创建并保存两个副本

当我们使用ApachePOIV5.0.0获取图片数据时

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
图像。所以不,在我看来,到目前为止没有比这更好的办法了。