使用Java提取PPT幻灯片并转换为图片

3

有没有一种使用Java编程将幻灯片拆分为.png文件的方法?我搜索过,大多数答案都是用C#编写的,或者提到的程序不是开源的。


相关:https://dev59.com/G0_Ta4cB1Zd3GeqPDb2y 和 http://stackoverflow.com/questions/1475849 - finnw
我删除了“unix”标签,因为它与这个问题无关。 - David Weiser
@David Unix标签可能非常相关,因为如果需要在Unix上运行,则不能涉及包装Powerpoint本身的Java库。 - Peter Recore
@David - 目前问题比较模糊。问题中没有提到主机运行这个Java代码的同时也可以运行Powerpoint.exe。很明显,这个问题需要一些澄清。对我来说,当Unix标签出现时,它意味着解决方案需要在Unix机器上工作,因此需要在没有Powerpoint的机器上工作。 - Peter Recore
有什么想法吗?https://dev59.com/mmMl5IYBdhLWcg3wZWSD - HIRA THAKUR
显示剩余2条评论
3个回答

4

要获得良好的质量,请使用Apache POI HSLF库中的以下代码(http://poi.apache.org/slideshow/how-to-shapes.html):

        FileInputStream is = new FileInputStream("path_to_your.ppt");
    SlideShow ppt = new SlideShow(is);
    is.close();

    Dimension pgsize = ppt.getPageSize();

    Slide[] slide = ppt.getSlides();
    for (int i = 0; i < slide.length; i++) {

        BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, 1);

        Graphics2D graphics = img.createGraphics();
        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                RenderingHints.VALUE_FRACTIONALMETRICS_ON);

        graphics.setColor(Color.white);
        graphics.clearRect(0, 0, pgsize.width, pgsize.height);
        graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

        // render
        slide[i].draw(graphics);

        // save the output
        FileOutputStream out = new FileOutputStream("slide-" + (i + 1) + ".png");
        javax.imageio.ImageIO.write(img, "png", out);
        out.close();
    }

2

您需要使用Java/COM桥接器,例如j-interop (http://www.j-interop.org/) 来编程控制PowerPoint进程,然后可能将单个页面打印到文件中。您最好只是编写一个VBA脚本。


0

使用Apache POI库,可使用以下代码:

    FileInputStream is = new FileInputStream("D:\\PPT sample.ppt");
    XMLSlideShow ppt = new XMLSlideShow(is);
    is.close();

    Dimension pgsize = ppt.getPageSize();

    XSLFSlide[] slide = ppt.getSlides();
    for (int i = 0; i < slide.length; i++) {

        BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.SCALE_SMOOTH);
        Graphics2D graphics = img.createGraphics();
        //clear the drawing area
        graphics.setPaint(Color.white);
        graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

        //render
        slide[i].draw(graphics);

        //save the output
        FileOutputStream out = new FileOutputStream("D:\\slide-"  + (i+1) + ".JPG");
        javax.imageio.ImageIO.write(img, "JPG", out);
        out.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接