2012-08-03 33 views
2

通過遵循http://poi.apache.org/slideshow/how-to-shapes.html提供的示例,我得到了轉換工作。使用Apache POI進行PPT到PNG的轉換

FileInputStream is = new FileInputStream("slideshow.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, BufferedImage.TYPE_INT_RGB); 
    Graphics2D graphics = img.createGraphics(); 

    graphics.setPaint(Color.white); 
    graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); 
    slide[i].draw(graphics); 
    FileOutputStream out = new FileOutputStream("slide-" + (i+1) + ".png"); 
    javax.imageio.ImageIO.write(img, "png", out); 
    out.close(); 
} 

但是所生成的圖像是非常小的。 如何增加圖像輸出的大小?

+0

爲什麼不用'pgsize.width'和'pgsize.height'乘以合適的乘數? – Gagravarr 2012-08-03 21:07:07

+0

我試過了,只是把圖片放大了,而不是內容。 – ztripez 2012-11-08 13:33:54

回答

3

您需要調整圖形上下文的大小並添加一般轉換。

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

    double zoom = 2; // magnify it by 2 
    AffineTransform at = new AffineTransform(); 
    at.setToScale(zoom, zoom); 

    Dimension pgsize = ppt.getPageSize(); 

    Slide[] slide = ppt.getSlides(); 
    for (int i = 0; i < slide.length; i++) { 
     BufferedImage img = new BufferedImage((int)Math.ceil(pgsize.width*zoom), (int)Math.ceil(pgsize.height*zoom), BufferedImage.TYPE_INT_RGB); 
     Graphics2D graphics = img.createGraphics(); 
     graphics.setTransform(at); 

     graphics.setPaint(Color.white); 
     graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); 
     slide[i].draw(graphics); 
     FileOutputStream out = new FileOutputStream("slide-" + (i + 1) + ".png"); 
     javax.imageio.ImageIO.write(img, "png", out); 
     out.close(); 
    } 
+0

謝謝,我會盡快嘗試。 – ztripez 2013-05-08 08:42:28