无法使用apache poi更改ms-word文件(XWPF)的方向

时间:2015-11-28 10:01:19

标签: java ms-word apache-poi xwpf

我正在尝试在apache poi中使用XWPF格式创建一个word文档。该文档需要创建表,所以我需要将页面方向设置为横向。我使用了Landscape and portrait pages in the same word document using Apache POI XWPF in Java的现有代码 并在创建文档后包含函数调用, 但它抛出一个空指针exeption。任何人都可以帮助我。 先感谢您。 我使用了以下代码:

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));
    }
}

它在线上抛出一个错误:

pageSize.setOrient(STPageOrientation.LANDSCAPE);

1 个答案:

答案 0 :(得分:1)

并非所有部分都会在其上设置页面大小对象。你需要检查一个是否存在,如果不存在则添加它,然后再为其设置方向

所以,你应该改变一行

    CTPageSz pageSize = section.getPgSz();

改为

    CTPageSz pageSize;
    if (section.isSetPgSz()) {
       pageSize = section.getPgSz();
    } else {
       pageSize = section.addNewPgSz();
    }

接着继续你的电话,如

    pageSize.setOrient(STPageOrientation.LANDSCAPE);