使用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
相关产品推荐
相关产品推荐

