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

经Apache FOP与Ant转DocBook的CALS表格表头旋转参数失效求解

解决CALS表格表头旋转90度但参数被忽略的问题

首先咱们得捋清楚问题根源:你用的<?dbfo?>处理指令本身没问题,但大概率是放置位置不对、XSL转换时没保留这些指令,或是没配合正确的表格属性让FO处理器识别。下面给你几个落地可行的方案:

方案1:调整dbfo指令位置+配合entry属性优化

dbfo指令必须放在<entry>的内容内部,同时给entry设置对齐和垂直对齐属性,避免旋转后内容偏移。试试这种写法:

<table frame="all">
  <title>Title</title>
  <tgroup cols="3">
    <thead>
      <!-- 移除valign="bottom",旋转后这个属性的方向会混乱,换成middle让内容居中 -->
      <row>
        <entry align="center" valign="middle">
          <?dbfo orientation="90"?>
          <?dbfo rotated-width="1in"?>
          表头1
        </entry>
        <entry align="center" valign="middle">
          <?dbfo orientation="90"?>
          <?dbfo rotated-width="1in"?>
          表头2
        </entry>
        <entry align="center" valign="middle">
          <?dbfo orientation="90"?>
          <?dbfo rotated-width="1in"?>
          表头3
        </entry>
      </row>
    </thead>
    <!-- 表格内容节点... -->
  </tgroup>
</table>

方案2:直接用DocBook扩展的CALS表格属性

多数DocBook转FO的转换器(比如Apache FOP、XEP)支持直接在<entry>上设置rotate和rotated-width属性,比处理指令更稳定可靠:

<entry rotate="90" rotated-width="1in" align="center" valign="middle">表头1</entry>

这种写法不需要额外的处理指令,转换器会直接识别属性并生成旋转的FO内容。

方案3:确保XSL转换保留处理指令

如果你的XSL文件是用来生成DocBook的,要检查XSLT模板在处理<entry>节点时,没有过滤掉内部的处理指令。比如你的模板应该保留processing-instruction()节点,而不是只复制文本内容。参考示例模板:

<xsl:template match="entry">
  <entry>
    <!-- 复制entry的所有属性 -->
    <xsl:copy-of select="@*"/>
    <!-- 复制entry下所有子节点,包括处理指令 -->
    <xsl:copy-of select="node()"/>
  </entry>
</xsl:template>

额外注意点

  • 确认FO处理器版本:比如Apache FOP 2.0+对旋转表格内容的支持比较完善,旧版本可能存在兼容性bug。
  • rotated-width值要合理:这个参数是旋转后表头占据的水平宽度(对应原状态下的高度),设置过小会导致表头内容被截断。

试试上面的方案,应该能解决参数被忽略的问题。

内容的提问来源于stack exchange,提问作者Johannes M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:38:11