当前位置: 首页 > 知识库问答 >
问题:

Apache POI powerpoint,图像文件名不正确

浦琪
2023-03-14

我想用Apache POI获取我的PowerPoint的图像名称,但不正确,它总是“image1.jpeg”(或不同的数字)

js prettyprint-override">ppt.getPictureData().forEach(xslfPictureData - > {
  String filename = xslfPictureData.getFileName();
});

要自定义图像的名称,我转到“选择面板”。自定义图像名称

不是有办法弄个图像名或者id吗

共有1个答案

陆敏学
2023-03-14

< code > XML slide show . getpicturedata 从幻灯片放映中获取所有嵌入的图片。但是为了在幻灯片上显示这些图片,它们被放置在幻灯片上的图片形状中。

链接图像显示的是幻灯片上图片形状的名称。这与嵌入图片文件的文件名不同。嵌入图片文件的文件名为image1.*image2.*、… 。幻灯片上图片形状的名称可以自定义。

要获取这些XSLFPicture Shape,需要遍历幻灯片的形状并检查是否有XSLFPicture Shape

到目前为止,apache poi 还没有提供从 XSLF 图标形状中获取名称的方法。因此,如果需要,需要使用底层CT对象来获取名称。

以下完整示例对此进行了说明。

import java.io.FileInputStream;

import org.apache.poi.xslf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.main.*;
import org.openxmlformats.schemas.presentationml.x2006.main.*;

public class PPTXGetPictureShapes {
        
 static String getName(XSLFPictureShape pictureShape) {
  String name = null;
  org.apache.xmlbeans.XmlObject xmlObject = pictureShape.getXmlObject();
  if (xmlObject instanceof CTPicture) {
   CTPicture ctPicture = (CTPicture)xmlObject;
   CTPictureNonVisual nvSpPr = ctPicture.getNvPicPr();
   if (nvSpPr != null) {
    CTNonVisualDrawingProps cnv = nvSpPr.getCNvPr();
    if (cnv != null) {
     name = cnv.getName();
    }
   }
  }      
  return name;
 }
      
 public static void main(String[] args) throws Exception {
     
  XSLFSlideShowFactory factory = new XSLFSlideShowFactory();
  XMLSlideShow slideShow = factory.create(new FileInputStream("./PPTXPresentation.pptx"));
  
  for (XSLFSlide slide : slideShow.getSlides()) {
   System.out.println(slide);        
   for (XSLFShape shape : slide.getShapes()) {
    System.out.println(shape); 
    
    if (shape instanceof XSLFPictureShape) {
     XSLFPictureShape pictureShape = (XSLFPictureShape)shape;
     String pictureShapeName = getName(pictureShape);
     System.out.println(pictureShapeName); 
    }
    
   }       
  }
 }
}

顺便说一句:如果你有XSLFPicture Shape,你也可以从中获取XSLFPicture Data来获取嵌入图片的字节数据。所以不需要XMLSlideShow.getPictureData

 类似资料:
  • 问题内容: 我有一个表格可以 浏览并选择一个文件。 我要做的是在选择图像后立即显示该图像。而且这是在按下表单上的“提交”按钮之前,因此图像几乎可以肯定位于客户端。能做到吗? 问题答案: 干得好: HTML 脚本:

  • 作为程序的一部分,我需要显示属于一个文件夹(JPG文件)的图像。为此,我有以下代码: 如果我在移动文件管理器中浏览该文件,并打开该文件,它是正确的显示,所以,图像格式没有问题。此外,该图像是用相机拍摄的,与其他正确解码的图像相同。 如何解决这个问题,或者,有没有替代的方法来做到这一点?

  • 我正在创建一个Zend Framework应用程序,用户可以在其中上载配置文件图像。可接受的文件类型为png、jpg和gif。图像最终被存储为用户id和文件扩展名。 我想知道的是,假设用户上传png或gif文件,将文件扩展名更改为jpg是否安全? 这样,所有的配置文件图像都将具有相同的文件扩展名,我只是不确定这样更改文件类型是否是一个好主意。

  • 问题内容: 我正在使用Flask,一个适用于Python的网络框架。Flask使用Jinja渲染模板。我不知道Jinja Flask使用哪个版本,也不知道如何检索Jinja版本或Flask版本。我使用python版本2.7。 该模板在css / image目录中包含一个图像。直接在Firefox浏览器中以文件形式查看模板时,此图像可见。 但是在执行Flask时不是: HTML文件的内容: 模板运行

  • 因此,我在eclipse中创建了一个java应用程序,并使用javafx,然后将其导出到一个可运行的jar文件中。但是,当我运行我的。jar文件时,它会给出找不到我的图像的错误。当我在Eclipse内运行时,它工作得非常好。 在UserPane中,我有一个函数将图像名作为“title”并返回ImageView: 我尝试过一些解决方案,但它不会在Eclipse中运行。我需要它在eclipse和.ja

  • 我有一个netbeansjavagui项目。它包含用于图像的java文件和文件夹。我的项目中最重要的一部分是通过单击按钮来显示图像,比如说单击“下一步”按钮。当我点击“下一步”按钮时,图像将从IMG文件夹中逐个显示。我将图像放在标签中,如下所示: 我运行了这个程序,到目前为止,它可以按照我的要求工作。 然后,我需要将项目创建到一个jar文件中。我使用Netbeans和这个来创建我的项目的JAR文件