2012-08-03 5 views
2

http://poi.apache.org/slideshow/how-to-shapes.html에서 제공된 예제를 따르면 나는 변환 작업을 할 수 있습니다.아파치 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

+0

나는 그것을 시도했다, 단지 그림을 더 크게 만들었다, 내용이 아니라. – ztripez

답변

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

관련 문제