8

Java を使用してプログラムでいくつかの pptx ドキュメントをマージしようとしています。基本的にApache POIを使用してこれを行う方法を見つけましたが、マージしようとしているドキュメントが機能しません。

かなりの検索と試行錯誤の結果、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();
            }
        }
}

これらのファイルをマージしたいのですが、解決策はプログラムでテーマをファイルに割り当てることだと思います。どうすればそれができますか?

ご検討をお願いいたします!

4

2 に答える 2

-1

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

CTTextParagraphProperties getDefaultMasterStyle()

追加

if( o.length == 0 ) {
    return null;
}
于 2014-02-04T13:25:21.943 に答える