0

Java と Apache POI ライブラリを使用して、横向きページと縦向きページを含む Word ドキュメントを作成しようとしています。すべてのページの向きを変更できますが、一部のページの向きだけを変更する方法はありますか? さまざまなセクションとボディを使用してみましたが、役に立ちませんでした。

現時点では、XWPFDocument を入力として受け取り、新しいボディの向きを変更する関数を作成しました。新しい本文の向きを変更しても前のページには影響しないと思っていましたが、ドキュメント全体に影響します。

private void changeOrientation(XWPFDocument document, String orientation){
    CTDocument1 doc = document.getDocument();
    CTBody body = doc.addNewBody();
    body.addNewSectPr();
    CTSectPr section = body.getSectPr();
    if(!section.isSetPgSz()) {
        section.addNewPgSz();
    }
    CTPageSz pageSize = section.getPgSz();
    if(orientation.equals("landscape")){
        pageSize.setOrient(STPageOrientation.LANDSCAPE);
        pageSize.setW(BigInteger.valueOf(842 * 20));
        pageSize.setH(BigInteger.valueOf(595 * 20));
    }
    else{
        pageSize.setOrient(STPageOrientation.PORTRAIT);
        pageSize.setH(BigInteger.valueOf(842 * 20));
        pageSize.setW(BigInteger.valueOf(595 * 20));
    }
}

ありがとう!

4

2 に答える 2

2

CTPPr (セクション区切り) が必要であることが判明しました。これは、次のコードで実行できます。

private void changeOrientation(XWPFDocument document, String orientation){
    CTDocument1 doc = document.getDocument();
    CTBody body = doc.getBody();
    CTSectPr section = body.addNewSectPr();
    XWPFParagraph para = document.createParagraph();
    CTP ctp = para.getCTP();
    CTPPr br = ctp.addNewPPr();
    br.setSectPr(section);
    CTPageSz pageSize = section.getPgSz();
    if(orientation.equals("landscape")){
        pageSize.setOrient(STPageOrientation.LANDSCAPE);
        pageSize.setW(BigInteger.valueOf(842 * 20));
        pageSize.setH(BigInteger.valueOf(595 * 20));
    }
    else{
        pageSize.setOrient(STPageOrientation.PORTRAIT);
        pageSize.setH(BigInteger.valueOf(842 * 20));
        pageSize.setW(BigInteger.valueOf(595 * 20));
    }
}

ただし、これは 1 回しか機能しないため、ページの向きを交互に変えることはできません。すべてのページを最初に横向きにして最後に縦向きにするか、その逆にする必要があります。

于 2014-10-25T11:23:09.150 に答える