/ / No se puede cambiar la orientación del archivo ms-word (XWPF) usando apache poi - java, ms-word, apache-poi, xwpf

No se puede cambiar la orientación del archivo ms-word (XWPF) usando apache poi - java, ms-word, apache-poi, xwpf

Estoy tratando de crear un documento de Word usando el formato XWPF en apache poi. el documento requiere que se creen tablas, por lo que necesito establecer la orientación de la página en horizontal. utilicé el código existente de Páginas horizontales y verticales en el mismo documento de Word usando Apache POI XWPF en Java e incluyó una llamada a la función después de crear un documento, pero está arrojando una excepción de puntero nulo. ¿Alguien puede ayudarme con eso? gracias de antemano. Use el siguiente código:

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

Está arrojando un error en la línea:

pageSize.setOrient(STPageOrientation.LANDSCAPE);

Respuestas

1 para la respuesta № 1

No todas las secciones tendrán un objeto Tamaño de página establecido en ellas. Debe comprobar si hay uno y agregarlo si no, antes de establecer la orientación para él.

Entonces, deberías cambiar la línea

    CTPageSz pageSize = section.getPgSz();

Para ser

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

Y luego continúa con tus llamadas como

    pageSize.setOrient(STPageOrientation.LANDSCAPE);