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

Unable to change orientation of ms-word file(XWPF) using apache poi

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

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

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

所以,你应该换行

    CTPageSz pageSize = section.getPgSz();

改为

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

然后继续你的电话

    pageSize.setOrient(STPageOrientation.LANDSCAPE);