You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ODFToolkit设置ODT表格行禁止跨页断行的技术问题

ODFToolkit Simple API实现ODT表格行不跨页断行问题

需求说明

使用ODFToolkit的Simple API操作/生成OpenOffice Writer文档(ODT),需要动态填充N行的表格:表格允许跨页,但表格行不能跨页断行——若某行出现跨页断行的情况,该行需整体移至下一页起始位置。

在LibreOffice图形界面中,该需求可通过右键点击表格选择「属性」,打开表格属性对话框后切换至「文本流」选项卡,取消勾选「允许行跨页和跨栏断行」选项实现。

环境依赖

当前使用的Maven依赖如下(因高版本要求Java>1.7,受限于Java7只能使用此版本):

<dependency>
    <groupId>org.apache.odftoolkit</groupId>
    <artifactId>simple-odf</artifactId>
    <version>0.8.2-incubating</version>
    <classifier>jar-with-dependencies</classifier>
</dependency>

尝试思路与问题

  • 最初假设新行应继承上一行及父表格的样式属性
  • 尝试为表格应用style:may-break-between-rows样式属性,后续发现该属性仅控制表格是否允许跨页断行,并非控制行的跨页断行
  • 解压ODT文档查看content.xml后,发现fo:keep-together属性(取值为AUTO和ALWAYS)可能与需求相关
  • 注意:测试用的原始ODT文档已包含名为「Table2」的表格,且存在自动样式「Table2.1」,其中已包含keep-together属性——这是因为创建原始测试ODT时已在LibreOffice中取消勾选了「允许行跨页和跨栏断行」选项

未成功的测试代码

InputStream is = OdftoolkittoolTest.class.getClassLoader().getResourceAsStream("test.odt");
TextDocument textDocument = TextDocument.loadDocument(is);

Table tbl = textDocument.getTableByName("Table2");
OdfStyle odfStyle = tbl.getStyleHandler().getStyleElementForWrite();

// 此操作仅设置了「允许表格跨页断行」,未实现行的跨页断行控制
StyleMayBreakBetweenRowsAttribute attr =
    new StyleMayBreakBetweenRowsAttribute(textDocument.getFileDom(OdfSchemaDocument.OdfXMLFile.CONTENT));
attr.setBooleanValue(true);
odfStyle.setAttributeNode(attr);

// 添加一行后,查看生成的文档,「允许行跨页断行」显示为已勾选(上方有减号标记,含义不明)
tbl.appendRow();

// 尝试为所有行重新应用「keep together」样式,但未生效
for (Row r : tbl.getRowList()) {
    FoKeepTogetherAttribute attr2 = new FoKeepTogetherAttribute(textDocument.getFileDom(OdfSchemaDocument.OdfXMLFile.CONTENT));
    attr2.setEnumValue(FoKeepTogetherAttribute.Value.ALWAYS);
    r.getOdfElement().setOdfAttribute(attr2);
}

File targetFile = new File("c:\\temp\\lala.odt");
textDocument.save(targetFile);

内容的提问来源于stack exchange,提问作者hello_earth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:53:10