Получить фоновое изображение из слайда PowerPoint с помощью Java

Мне нужно получить фоновое изображение из слайда PowerPoint с помощью java. Мне известен проект Apache POI. Я могу найти материал для получения текста и фигур из слайдов, но не сам фон. У кого-нибудь есть предложения?

РЕДАКТИРОВАТЬ: я скрипнул следующий код, используя предложенную ссылку. Кажется, что этот код захватывает содержимое слайда, но не совсем фон. Полученные изображения являются белыми в качестве фона.

Я попробовал это с помощью PowerPoint


package PowerPointProcessing;

import Logging.LogRunner;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.Background;
import org.apache.poi.hslf.model.Fill;
import org.apache.poi.hslf.model.Shape;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow;


/**
 *
 * @author dvargo
 */
public class PPI
{

    Dimension pageSize;
    public Slide[] theSlides;

    public PPI(String powerPointFilePath)
    {
        SlideShow ppt = null;
        //open the presentation
        try
        {
            ppt = new SlideShow(new HSLFSlideShow(powerPointFilePath));
        }
        catch(Exception e)
        {
            LogRunner.getLogger().severe("Could not open the powerpoint presentation");
            return;

        }


        //get all the slides
        theSlides = ppt.getSlides();
        //see how many slides there are
        int numberOfSlides = theSlides.length;
        pageSize = ppt.getPageSize();


    }

    public BufferedImage getBackground(Slide theSlide)
    {
        Background background;
        background = theSlide.getBackground();
        Fill f = background.getFill();
        Color color = f.getForegroundColor();
        Shape[] theShapes = theSlide.getShapes();

        BufferedImage img = new BufferedImage(pageSize.width, pageSize.height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = img.createGraphics();
        graphics.setPaint(color);
        graphics.fill(new Rectangle2D.Float(0, 0, pageSize.width, pageSize.height));
        theSlide.draw(graphics);
        return img;
    }

    public static void main(String[] args) {
        PPI ppi = new PPI("C:\\Documents and Settings\\dvargo\\Desktop\\Cludder\\a.ppt");
        int count= 0;
        for (Slide currSlide : ppi.theSlides)
        {
            BufferedImage img = ppi.getBackground(currSlide);
            try
            {
                ImageIO.write(img, "jpeg", new File("C:\\Documents and Settings\\dvargo\\Desktop\\ppt\\" + count + ".jpeg"));
            }
            catch (IOException ex)
            {
                Logger.getLogger(PPI.class.getName()).log(Level.SEVERE, null, ex);
            }
            count++;
        }
    }

}



person user489041    schedule 15.02.2011    source источник
comment
возможный дубликат Извлечение изображений из pptx с помощью apache poi   -  person OscarRyz    schedule 15.02.2011


Ответы (1)


Глядя на код из этого вопроса: Извлечение изображений из pptx с помощью apache poi

Похоже, это должно быть примерно так:

Background background = slides[current].getBackground(); 
Fill f = background.getFill(); 
Color color = f.getForegroundColor(); 
person jzd    schedule 15.02.2011
comment
Спасибо, эта ссылка была полезной. Однако мне не удалось схватить фон для примера PowerPoint, который я привел вверху. Кажется, их не хватать? Может, они чем-то отличаются от фона? - person user489041; 15.02.2011
comment
SlideMaster может быть тем, что он называется? - person user489041; 15.02.2011
comment
@user, SlideMaster - это лист, поэтому он должен работать так же. Вы можете получить ссылку на него в слайд-шоу следующим образом: SlideMaster master = slideShow.getSlidesMasters()[0]; - person jzd; 15.02.2011