在Java中使用Apache POI XWPF在同一word文档中创建横向和纵向页面
我试图使用Java和ApachePOI库创建一个word文档,其中包含一些横向页面和一些纵向页面。我可以改变所有页面的方向,但是有没有办法只改变其中一些页面的方向?我试过使用不同的部分和身体,但没有用 目前,我已经编写了一个函数,它将XWPFDocument作为输入,并更改新实体的方向。我曾希望更改新正文的方向不会影响前几页,但会影响整个文档在Java中使用Apache POI XWPF在同一word文档中创建横向和纵向页面,java,ms-word,apache-poi,orientation,xwpf,Java,Ms Word,Apache Poi,Orientation,Xwpf,我试图使用Java和ApachePOI库创建一个word文档,其中包含一些横向页面和一些纵向页面。我可以改变所有页面的方向,但是有没有办法只改变其中一些页面的方向?我试过使用不同的部分和身体,但没有用 目前,我已经编写了一个函数,它将XWPFDocument作为输入,并更改新实体的方向。我曾希望更改新正文的方向不会影响前几页,但会影响整个文档 private void changeOrientation(XWPFDocument document, String orientation){
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));
}
}
谢谢 结果表明需要一个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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
但是,这只工作一次,因此页面不能交替方向。首先必须是所有横向页面,最后是纵向页面,反之亦然。结果表明需要一个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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
但是,这只工作一次,因此页面不能交替方向。首先必须是所有横向页面,最后是纵向页面,反之亦然。结果表明需要一个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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
但是,这只工作一次,因此页面不能交替方向。首先必须是所有横向页面,最后是纵向页面,反之亦然。结果表明需要一个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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
但是,这只工作一次,因此页面不能交替方向。必须首先是所有横向页面,然后是纵向页面,反之亦然。根据OOXML规范-17.6.18 sectPr(Section Properties),在具有多个节的文档中,节属性(sectPr元素)存储为以下内容的子元素:
- 本节最后一段,适用于除最后一段以外的所有章节 第节
- 主体元素,用于最后一节
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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
根据OOXML规范-17.6.18 sectPr(Section Properties),在具有多个节的文档中,节属性(sectPr元素)存储为以下内容的子元素:
- 本节最后一段,适用于除最后一段以外的所有章节 第节
- 主体元素,用于最后一节
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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
根据OOXML规范-17.6.18 sectPr(Section Properties),在具有多个节的文档中,节属性(sectPr元素)存储为以下内容的子元素:
- 本节最后一段,适用于除最后一段以外的所有章节 第节
- 主体元素,用于最后一节
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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
根据OOXML规范-17.6.18 sectPr(Section Properties),在具有多个节的文档中,节属性(sectPr元素)存储为以下内容的子元素:
- 本节最后一段,适用于除最后一段以外的所有章节 第节
- 主体元素,用于最后一节
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));
}
}
private void changeOrientation(CTSectPr section, String orientation) {
CTPageSz pageSize = section.isSetPgSz? section.getPgSz() : section.addNewPgSz();
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));
}
}
您如何更改一个部分的方向?(代码应该可以帮助我们发现问题)如果您在Word中创建一个简单的两页文档,其中有一个横向和一个纵向,然后在Apache POI中阅读,POI如何查看页面大小?如果您解压缩
.docx
文件(它是xml文件的压缩),它会将其视为上一页的方向,你能看到word用什么xml结构来编码方向的改变吗?我认为它添加了一个我的代码没有做的标记,这与分节符有关。你如何只改变一个节的方向?(代码应该可以帮助我们发现问题)如果您在Word中创建一个简单的两页文档,其中有一个横向和一个纵向,然后在Apache POI中阅读,POI如何查看页面大小?如果您解压缩.docx
文件(它是xml文件的压缩),它会将其视为上一页的方向,你能看到word用什么xml结构来编码方向的改变吗?我认为它添加了一个我的代码没有做的标记,这与分节符有关。你如何只改变一个节的方向?(代码应该可以帮助我们发现问题)如果您在Word中创建一个简单的两页文档,其中有一个横向和一个纵向,然后在Apache POI中阅读,POI如何查看页面大小?如果您解压缩.docx
文件(它是xml文件的压缩),它会将其视为上一页的方向,你能看到word用什么xml结构来编码方向的改变吗?我认为它添加了一个我的代码没有做的标记,这与分节符有关。你如何只改变一个节的方向?(代码应该可以帮助我们发现问题)如果您在Word中创建一个简单的两页文档,其中有一个横向和一个纵向,然后在Apache POI中阅读,POI如何查看页面大小?如果您解压缩.docx
文件(它是xml文件的压缩),它会将其视为上一页的方向,你能看到word用什么xml结构来编码方向的变化吗?我想它添加了一个我的代码没有做的标记,这与分节符有关。在横向标题不起作用的情况下,有什么解决方案吗@bbharIn横向标头不工作,有解决方案吗@bbharIn横向标头不工作,有解决方案吗@bbharIn横向标头不工作,有解决方案吗@比哈尔