Java 如何获得<;fo:block>;和/或<;fo:表>;在xslfo中呈现之前的维度?

Java 如何获得<;fo:block>;和/或<;fo:表>;在xslfo中呈现之前的维度?,java,xsl-fo,renderx,Java,Xsl Fo,Renderx,更具体地说,是使用RenderX在pdf文档中渲染的块元素的高度。例如,我有一个简单的xslfo输出,其中包含一些文本和一个表: <?xml version="1.0" encoding="ISO-8859-1"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simpl

更具体地说,是使用RenderX在pdf文档中渲染的块元素的高度。例如,我有一个简单的xslfo输出,其中包含一些文本和一个表:

<?xml version="1.0" encoding="ISO-8859-1"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>
  <fo:simple-page-master master-name="A4">
    <fo:region-body />
  </fo:simple-page-master>
</fo:layout-master-set>

<fo:page-sequence master-reference="A4">
  <fo:flow flow-name="xsl-region-body">
    <fo:block>This is some simple text. How much space will I take?</fo:block>
  </fo:flow>
</fo:page-sequence>

<fo:table-header>
  <fo:table-row>
    <fo:table-cell>
      <fo:block font-weight="bold">Car</fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block font-weight="bold">Price</fo:block>
    </fo:table-cell>
  </fo:table-row>
</fo:table-header>

<fo:table-body>
  <fo:table-row>
    <fo:table-cell>
      <fo:block>Volvo</fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block>$50000</fo:block>
    </fo:table-cell>
  </fo:table-row>
  <fo:table-row>
    <fo:table-cell>
      <fo:block>SAAB</fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block>$48000</fo:block>
    </fo:table-cell>
  </fo:table-row>
</fo:table-body>

</fo:table>
</fo:table-and-caption>
</fo:root>

这是一些简单的文本。我将占用多少空间?
汽车
价格
沃尔沃汽车
$50000
萨博
$48000

无论如何,我是否可以使用RenderX确定区域主体(即:随机文本和表格)在渲染pdf上的高度?

您不能在格式化内容之前确定内容的高度,但可以在格式化后计算出来

从理论上讲,如果你有所用字体的字体标准(而且你手头有很多时间),你可以编写一个程序来计算每行可以容纳多少个字符,并计算出你在页面上有多少行。然而,如果您处理的是中等复杂的现实世界文档,那么您必须处理诸如字距调整、连字、来自侧浮点数的入侵,以及页码中与另一页上的内容交叉引用的字符数不确定等问题。您最终将编写第二个格式化程序,以确定第一个格式化程序将执行什么操作

实际上,格式化程序提供格式化文档中区域的自己表示(或表示)。XSL 1.1包含格式化区域的“区域树”概念(但不是规范)。(见附件)

RenderX有其中间输出格式,记录在

FOP具有中间输出格式,记录在。FOP还有第二个用于测试的区域树表示法,但现在我不知道它是否还在使用

Antenna House具有其面积树XML格式,模式位于,文档位于


打印和页面布局社区组生成了一组XSLT扩展函数,用于运行XSL格式化程序并在XSLT转换中获取区域树。代码位于,示例位于。不幸的是,扩展函数仅适用于FOP和天线室。

您可以使用中间格式来计算它,但您还需要了解一些其他因素,例如它是否跨越一页或多页?