如何设置Word文档的页面方向?

12

我使用Apache POI XWPF来创建和处理MS Word文件。 但是在文档中,我没有找到如何更改页面方向的说明。

显然,可以通过以下方式实现:

XWPFDocument doc = new XWPFDocument();

CTDocument1 document = doc.getDocument();
CTBody body = document.getBody();

if (!body.isSetSectPr()) {
     body.addNewSectPr();
}
CTSectPr section = body.getSectPr();

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

pageSize.setOrient(STPageOrientation.LANDSCAPE);

但是这种方法不能正常工作。我可以将页面方向设置为横向,当我在代码中读取页面方向时,我得到的是横向。没问题。但是如果我打开保存的文档,它却是纵向格式。实际上这个设置并没有起作用。可能是什么问题呢?
作为解决方法,我被迫从手动创建的横向或纵向格式的空白文档开始工作。但我想以所需的方向从头编程创建文档。
例如,POI HSSF 和 XSSF 有在横向和纵向模式之间切换的功能。这是 org.apache.poi.ss.usermodel.PrintSetup 接口的 setLandscape() 方法。
那么 XWPF 或者 HWPF 呢?

你是否尝试阅读了Apache POI FAQ中关于当poi-ooxml-schemas jar中缺少CTsomething类时该怎么做的说明? - Gagravarr
@Gagravarr 谢谢您的评论。但是这并没有解决我的问题。我已经添加了所有必要jars的正确版本。我没有收到任何异常,一切都编译和运行正常。但问题仍然存在。如何正确更改文档的方向?上面的代码不起作用。我已按照上述方式设置页面方向为横向,但在打开文档时仍然看到纵向格式。 - kapandron
如果您在Word中将文档设置为横向,并保存为.docx文件,然后解压缩生成的文件(.docx是xml文件的zip文件),那么方向实际上在哪里设置? - Gagravarr
Apache POI 无法解决这个问题吗? - kapandron
它可能可以做到,但需要一些工作,因为显然迄今为止没有人需要这个功能来提交补丁... - Gagravarr
2个回答

21
你的方向是正确的。将方向设置为横向描述了纸张的一般方向,但仍需要纸张的大小。你的CTPageSz对象还没有这个信息。
这意味着除了调用setOrient之外,你还需要设置setW和setH。这些调用接受1/20点代表的BigInteger。因此,对于横向LETTER类型纸张,你只需要:
pageSize.setW(BigInteger.valueOf(15840));
pageSize.setH(BigInteger.valueOf(12240));

为了让Word将其识别为横向页面,宽度必须大于高度。如果您想要在打印时正确工作,仍需要保留setOrient调用。

下面是一些常见纸张大小的点数,来自https://www.gnu.org/software/gv/manual/html_node/Paper-Keywords-and-paper-size-in-points.html,你应该将它们乘以二十后使用以上方法调用。

Letter       612x792
LetterSmall  612x792
Tabloid      792x1224
Ledger       1224x792
Legal        612x1008
Statement    396x612
Executive    540x720
A0           2384x3371
A1           1685x2384
A2           1190x1684
A3           842x1190
A4           595x842
A4Small      595x842
A5           420x595
B4           729x1032
B5           516x729
Folio        612x936
Quarto       610x780
10x14        720x1008

横屏模式下无法设置页眉,有什么解决办法吗?@Zach - Yasar Arafath

2
"最初的回答"是正确的。我只需要添加额外的依赖项才能访问CTPageSz类。
// SBT config
"org.apache.poi" % "poi-ooxml" % "4.1.0",     // Base library
"org.apache.poi" % "ooxml-schemas" % "1.4",   // required to access CTPageSz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接