1

更具体地说,将使用 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>

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

4

1 回答 1

2

您不能在每种情况下都在格式化之前确定内容的高度,但您可以在格式化后计算出来。

理论上,如果你有所用字体的字体度量(并且你手上有很多时间),你可以编写一个程序来计算每行可以容纳多少个字符并计算你有多少行这页纸。但是,如果您要处理即使是中等复杂的现实世界文档,您也必须处理诸如字距调整、连字、侧浮动的侵入以及页码交叉引用中不确定的字符数之类的东西在另一页上。你最终会编写第二个格式化程序来计算第一个格式化程序会做什么。

在实践中,格式化程序提供格式化文档中区域的自己的表示(或表示)。XSL 1.1 包括格式化区域的“区域树”的概念(但不包括规范)。(见https://www.w3.org/TR/xsl11/#clear

RenderX 有它的中间输出格式,记录在http://www.renderx.com/reference.html#IntermediateFormatSpecification

FOP 具有中间输出格式,记录在https://xmlgraphics.apache.org/fop/2.4/intermediate.html中。FOP 也有用于测试的第二个区域树表示,但现在我不知道它是否仍在使用中。

Antenna House 具有其区域树 XML 格式,架构位于https://github.com/AntennaHouse/AreaTree,文档位于https://antennahouse.github.io/AreaTree/en/

Print and Page Layout Community Group 生成了一组 XSLT 扩展函数,用于运行 XSL 格式化程序并在 XSLT 转换中获取区域树。代码位于https://github.com/pplcg/XSLTExtensions,示例位于https://www.w3.org/community/ppl/wiki/XSLTExtensions。不幸的是,扩展功能仅适用于 FOP 和 Antenna House。

于 2020-09-05T20:38:45.960 回答