【问题标题】:Extracting ppt slides as images using Java使用Java将ppt幻灯片提取为图像
【发布时间】:2011-01-17 22:43:16
【问题描述】:

有没有办法使用 Java 以编程方式将幻灯片拆分为 .png 文件?我四处搜索,给出的大多数答案要么是 C#,要么是提到的程序不是开源的

【问题讨论】:

标签: java powerpoint


【解决方案1】:

为了获得良好的质量,请将以下代码与 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】:

    您将需要使用像 j-interop (http://www.j-interop.org/) 这样的 Java/COM 桥来以编程方式控制 PowerPoint 进程,然后可能将各个页面打印到文件中。最好只写一个 VBA 脚本。

    【讨论】:

      【解决方案3】:

      在 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 2023-02-10
        • 2010-12-03
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        相关资源
        最近更新 更多