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

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

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

Mirko Ebert 21.12.2020 12:29

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

kiwiwings 21.12.2020 12:52

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

Mites97 22.12.2020 13:05
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
0
3
179
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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.

Другие вопросы по теме