Замена изображения с использованием Apache POI не работает

#java #apache-poi #aspose-slides

#java #apache-poi #aspose-слайды

Вопрос:

Я хочу заменить существующее изображение, присутствующее на слайде PPT, с помощью Apache POI. Но для достижения этого есть некоторые трудности. Может кто-нибудь подсказать, как подойти к проблеме, поскольку я новичок в этом, и я не смог найти никаких статей, которые могли бы мне помочь?

Комментарии:

1. У вас есть какое-либо сообщение об ошибке и код?

2. Если вы просто хотите заменить изображение, вам не нужен POI. .pptx — это ZIP-файл. изображение является одним из файлов в /ppt/media . Вы можете заменить его типичными методами java zip, т. Е. Прочитать / выполнить итерацию по старому .zip и записать в новый, заменив файл изображения.

3. Спасибо за ответ, но мне поможет любой небольшой пример типа poc …. хотя я нашел обходной путь, удалив изображения с помощью XSSFShapes.remove и добавив на его место новое изображение, прочитав его как массив байтов… но я не уверен, что это эффективный способ

Ответ №1:

Aspose.Slides для 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.Облако слайдов:

 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.