2013-08-17 2 views
3

ppt/pptx 파일을 HTML 형식으로 변환하는 다소 원유 도구를 만들려고합니다.
불행히도 apache poi는 파워 포인트 파일 작업을위한 통합 프로그래밍 모델을 제공하지 않으며 각 형식을 구문 분석하기 위해 코드를 작성해야한다는 것을 알게되었습니다.
필자는 pptx 파일 지원이 ppt 지원보다 훨씬 제한적이라고 생각합니다. 내가 직면 한 한 가지 문제는 pptx 슬라이드의 배경 (색상, 패턴, 배경 이미지)에 관한 정보를 얻는 것입니다.

XSLFBackground (pptx api) 클래스가 해당 Background 클래스 (ppt api)보다 훨씬 제한적인 것으로 나타났습니다.
누구든지 아파치 poi를 사용하여 pptx 슬라이드 배경에 관한 정보를 얻을 수 있습니까?

또한이 주제에 대한 유용한 자료를 알려주고 있습니다. 나는 apache poi javadoc을 거의 사용할 수 없으며 poi 웹 사이트의 예제는 기본적인 기능만을 다루고 있습니다.

안부, 세르주apache poi를 사용하여 pptx 슬라이드에서 백그라운드 데이터를 얻는 방법

+0

당신이의 배경 속성 검색 모양 또는 페이지 마스터 슬라이드에 정의 된 페이지의 배경? – kiwiwings

+0

개별 슬라이드의 배경 속성을 검색 중입니다. –

답변

4

배경 요소의 함량이 Office Open Schema에서 설명한 경우 - zip-link at the bottom 및 내부 PML-slide.xsd를 확인한다.

스키마를 사용하면 usermodel 인터페이스 아래의 XML bean을 이해할 수 있습니다. 선발 투수의 경우

, 여기에 PNG 파일로 슬라이드를 내보내는 또한 배경 이미지를 읽기의 예입니다 (당신의 HTML 내보내기 어쩌면 유용한?) :

import java.awt.*; 
import java.awt.geom.*; 
import java.awt.image.BufferedImage; 
import java.io.*; 
import java.net.URL; 
import org.apache.poi.xslf.usermodel.*; 
import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; 

public class PptxBackground { 
    public static void main(String[] args) throws Exception { 
     // sorry for the content, but it was one of the first non-commercial google matches ... 
     URL url = new URL("http://newkilpatrickblog.typepad.com/files/sunday_june_03_2012_trinity_and_majesty_communion.pptx"); 
     InputStream is = url.openStream(); 
     XMLSlideShow ss = new XMLSlideShow(is); 
     is.close(); 

     XSLFSlide sld = ss.getSlides()[0]; 
     XSLFBackground bg = sld.getBackground(); 
     CTBackground xmlBg = (CTBackground)bg.getXmlObject(); 
     String relId = xmlBg.getBgPr().getBlipFill().getBlip().getEmbed(); 

     XSLFPictureData pic = (XSLFPictureData)sld.getRelationById(relId); 
     String filename = pic.getFileName(); 
     byte fileBytes[] = pic.getData(); 


     /***** or convert the slides to images ****/ 

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

     Dimension pgsize = ss.getPageSize(); 
     XSLFSlide slides[] = ss.getSlides(); 
     for (int i = 0; i < slides.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)); 
      slides[i].draw(graphics); 
      FileOutputStream out = new FileOutputStream("slide-" + (i+1) + ".png"); 
      javax.imageio.ImageIO.write(img, "png", out); 
      out.close();   
     } 
    } 
} 
+0

감사합니다. 지금 당장은 XSLFBackground.draw와 같은 간단한 것으로 배경을 다른 이미지로 저장하는 방법을 배우기를 희망합니다. –

관련 문제