Я хочу заменить существующее изображение на слайде PPT с помощью Apache POI. Но есть некоторые трудности в достижении этого. Может ли кто-нибудь предложить, как подойти к проблеме, так как я новичок в этом, и я не мог найти никаких статей, которые могли бы мне помочь?
Если вы просто хотите заменить изображение, вам не нужен POI. .pptx — это файл .zip. изображение является одним из файлов в каталоге /ppt/media. Вы можете заменить его типичными методами zip java, т.е. читать/итерировать по старому .zip и записывать в новый, заменяя файл изображения.
Спасибо за ответ, но любой небольшой пример типа poc поможет мне .... хотя я нашел обходной путь, удалив изображения с помощью XSSFShapes.remove и добавив новое изображение на его место, прочитав его как массив байтов ... но я не уверен, что это эффективный способ
Aspose.Slides for Java позволяет легко заменить изображение другим в презентации PowerPoint. В следующем примере кода показано, как это сделать:
// Load a presentation file.
var presentation = new Presentation("input.pptx");
// Add an image to presentation resources.
var imageData = Files.readAllBytes(Paths.get("image.png"));
var newImage = presentation.getImages().addImage(imageData);
// Let's the first shape on the first slide is a picture frame.
var firstSlide = presentation.getSlides().get_Item(0);
var pictureFrame = (IPictureFrame) firstSlide.getShapes().get_Item(0);
// Replace an image with the new one.
pictureFrame.getPictureFormat().getPicture().setImage(newImage);
// Save the presentation.
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
Кроме того, вы можете использовать Aspose.Slides Cloud SDK для Java, который предоставляет API на основе REST для управления презентациями. В приведенном ниже примере кода показано, как обновить изображение в презентации с помощью Aspose.Slides Cloud:
var slidesApi = new SlidesApi("my_client_id", "my_client_secret");
var fileName = "example.pptx";
var slideIndex = 1;
var shapeIndex = 1;
// Get image data as a Base64 string.
var imageData = Files.readAllBytes(Paths.get("image.png"));
var imageBase64String = Base64.getEncoder().encodeToString(imageData);
// Get a picture frame.
var pictureFrame = (PictureFrame)slidesApi.getShape(fileName, slideIndex, shapeIndex, null, null, null);
// Update the image data.
pictureFrame.setPictureFillFormat(new PictureFill());
pictureFrame.getPictureFillFormat().setBase64Data(imageBase64String);
// Update the picture frame.
slidesApi.updateShape(fileName, slideIndex, shapeIndex, pictureFrame, null, null, null);
Я работаю разработчиком службы поддержки в Aspose.
У вас есть сообщение об ошибке и код?