2013-10-11 33 views
2

我想以编程方式使用java合并一些pptx文档。我想到了如何使用Apache POI来实现这一点,但我试图合并的文档不起作用。在Java中设置pptx主题

经过重大的搜索和试验和错误后,我发现原因是pptx文件没有主题信息(即,如果我点击进入PowerPoint并检查幻灯片母版视图是空白的)。如果我转到设计功能区中的主题并选择“办公室主题”或其他主题,然后保存。这些文件将迷人地融合在一起。否则,我遇到了以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: Failed to fetch default style for otherStyle and level=0 
    at org.apache.poi.xslf.usermodel.XSLFTextParagraph.getDefaultMasterStyle(XSLFTextParagraph.java:1005) 
    at org.apache.poi.xslf.usermodel.XSLFTextParagraph.fetchParagraphProperty(XSLFTextParagraph.java:1029) 
    at org.apache.poi.xslf.usermodel.XSLFTextParagraph.isBullet(XSLFTextParagraph.java:654) 
    at org.apache.poi.xslf.usermodel.XSLFTextParagraph.copy(XSLFTextParagraph.java:1044) 
    at org.apache.poi.xslf.usermodel.XSLFTextShape.copy(XSLFTextShape.java:631) 
    at org.apache.poi.xslf.usermodel.XSLFSheet.appendContent(XSLFSheet.java:358) 
    at com.apsiva.main.Snippet.main(Snippet.java:28) 

以下是我跑的代码:

package com.apsiva.main; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import org.apache.poi.xslf.usermodel.SlideLayout; 
import org.apache.poi.xslf.usermodel.XMLSlideShow; 
import org.apache.poi.xslf.usermodel.XSLFSlide; 
import org.apache.poi.xslf.usermodel.XSLFSlideLayout; 

public class Snippet { 
    /** Merge the pptx files in the array <decks> to the desired destination 
     * chosen in <outputPath> */ 
     public static void main(String[] args) { 
      try { 
       FileInputStream empty = new FileInputStream("C:/Users/Alex/workspace/OutputWorker/tmp/base2.pptx"); 
       XMLSlideShow pptx; 

       pptx = new XMLSlideShow(empty); 
       XSLFSlideLayout defaultLayout = pptx.getSlideMasters()[0].getLayout(SlideLayout.TITLE_AND_CONTENT); 

       FileInputStream is = new FileInputStream("C:/Users/Alex/workspace/OutputWorker/tmp/noWork.pptx"); 
//    FileInputStream is = new FileInputStream("C:/Users/Alex/workspace/OutputWorker/tmp/works2.pptx"); 
       XMLSlideShow src = new XMLSlideShow(is); 
       is.close(); 
       for (XSLFSlide srcSlide: src.getSlides()){ 
        pptx.createSlide(defaultLayout).appendContent(srcSlide); 
       } 
       FileOutputStream out = new FileOutputStream("C:/POI-TEST-OUTPUT.pptx"); 
       pptx.write(out); 
       out.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
} 

我想获得这些文件合并,我认为解决的办法是通过编程分配主题到文件。如何做呢?

谢谢您的考虑!

回答

-1

/ApachePOI/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java

CTTextParagraphProperties getDefaultMasterStyle()

添加

if(o.length == 0) { 
    return null; 
}