2017-05-23 1 views
0

link에서 예제를 사용하려고하는데 예외가 생겼습니다.자바 코드를 사용하여 pptx 문서를 변환하는 방법

java.lang.IllegalArgumentException: Failed to fetch default style for otherStyle and level=0 
    at org.apache.poi.xslf.usermodel.XSLFTextParagraph.getDefaultMasterStyle(XSLFTextParagraph.java:1039) 
    at org.apache.poi.xslf.usermodel.XSLFTextRun.fetchCharacterProperty(XSLFTextRun.java:536) 
    at org.apache.poi.xslf.usermodel.XSLFTextRun.getTextCap(XSLFTextRun.java:417) 
    at org.apache.poi.xslf.usermodel.XSLFTextRun.getRenderableText(XSLFTextRun.java:67) 
    at org.apache.poi.xslf.usermodel.XSLFTextParagraph.getRenderableText(XSLFTextParagraph.java:115) 
    at org.apache.poi.xslf.usermodel.XSLFTextParagraph.breakText(XSLFTextParagraph.java:915) 
    at org.apache.poi.xslf.usermodel.XSLFTextShape.breakText(XSLFTextShape.java:483) 
    at org.apache.poi.xslf.usermodel.XSLFTextShape.drawContent(XSLFTextShape.java:491) 
    at org.apache.poi.xslf.usermodel.RenderableShape.render(RenderableShape.java:540) 
    at org.apache.poi.xslf.usermodel.XSLFSimpleShape.draw(XSLFSimpleShape.java:534) 
    at org.apache.poi.xslf.usermodel.XSLFSheet.draw(XSLFSheet.java:506) 
    at org.apache.poi.xslf.usermodel.XSLFSlide.draw(XSLFSlide.java:220) 
    at test.PptxToPDFConversion.convertPPTToPDF(PptxToPDFConversion.java:87) 
    at test.PptxToPDFConversion.main(PptxToPDFConversion.java:106) 
+0

당신은 POI의 이전 버전을 사용하는 , 3.16에서 다시 시도하십시오. 그것이 작동하지 않으면, 그 파일을 우리의 bugzilla에 업로드하십시오. – kiwiwings

답변

1

네, 최신 항아리를 사용하고는,

XML 빈스 - 2.6.0, POI - 스크래치 - 3.16, POI-OOXML-스키마-3.16, POI-OOXML-3.16, POI - excelant 작업 -3.16, POI - 예 - 3.16, POI-3.16, org.apache-ServiceMix를-번들-POI-3.16, 하여 itext-2.17, DOM4J-1.6.1

public void convertPPTXtoImgtoPDF() throws IOException, DocumentException, InvalidFormatException { 
    FileInputStream inputStream = new FileInputStream("vzw.pptx"); 

    XMLSlideShow ppt = new XMLSlideShow(OPCPackage.open(inputStream)); 

    inputStream.close(); 
    Dimension pgsize = ppt.getPageSize(); 
    float scale = 1; 
    int width = (int) (pgsize.width * scale); 
    int height = (int) (pgsize.height * scale); 

    int i = 1; 
    int totalSlides = ppt.getSlides().size(); 

      for (XSLFSlide slide : ppt.getSlides()) { 

       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)); 
       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, width, height); 
       graphics.scale(scale, scale); 

       slide.draw(graphics); 
       FileOutputStream out = new FileOutputStream("images/"+i+".png"); 
       javax.imageio.ImageIO.write(img, "png", out); 
       out.close(); 
       i++; 
      } 

    Document document = new Document(); 
    PdfWriter.getInstance(document, new FileOutputStream("filenew.pdf")); 
    com.lowagie.text.pdf.PdfPTable table = new com.lowagie.text.pdf.PdfPTable(1); 


    for(int j = 1; j<=totalSlides; j++){ 
     Image slideImage = Image.getInstance("images/"+j+".png"); 

     document.setPageSize(new Rectangle(slideImage.getWidth(), slideImage.getHeight())); 
     document.open(); 
     slideImage.setAbsolutePosition(0, 0); 

     table.addCell(new com.lowagie.text.pdf.PdfPCell(slideImage, true)); 

    } 
    document.add(table); 
    document.close(); 
} 
} 
관련 문제