我有一个xslfo代码来生成pdfs,我使用Apache FOP来做到这一点。在每个块中,我提到了格式对象,如字体系列和大小。 我可以将它移动到顶部:阻止而不降低性能吗?
当前来源:
<fo:block widows="2" orphans="2" font-size="10pt" line-height="1.147" white-space-collapse="false">
<fo:block space-after="8pt" space-after.conditionality="retain" line-height="1.2378041666666666" font-family="TimesNewRoman" font-size="11pt" text-align="center">
<fo:inline font-family="TimesNewRoman" font-weight="bold" font-size="14pt">
<fo:leader leader-length="0pt" />Some Title
</fo:inline>
</fo:block>
<fo:block space-after="8pt" space-after.conditionality="retain" line-height="1.2378041666666666" font-family="TimesNewRoman" font-size="11pt" text-align="center">
<fo:inline font-family="TimesNewRoman" font-weight="bold" font-size="14pt">
<fo:leader leader-length="0pt" />Some Other Title
</fo:inline>
</fo:block>
</fo:block>
想要改为:
<fo:block widows="2" orphans="2" line-height="1.147" white-space-collapse="false" font-family="TimesNewRoman" font-size="11pt">
<fo:block space-after="8pt" space-after.conditionality="retain" line-height="1.2378041666666666" text-align="center">
<fo:inline font-family="TimesNewRoman" font-weight="bold" font-size="14pt">
<fo:leader leader-length="0pt" />Some Title
</fo:inline>
</fo:block>
<fo:block space-after="8pt" space-after.conditionality="retain" line-height="1.2378041666666666" text-align="center">
<fo:inline font-family="TimesNewRoman" font-weight="bold" font-size="14pt">
<fo:leader leader-length="0pt" />Some Other Title
</fo:inline>
</fo:block>
</fo:block>
很抱歉代码格式错误。 我需要优先考虑文档的生成速度。哪两个会更好?
答案 0 :(得分:0)
作为了解(一个)引擎内部的人,答案是非常非常小的#34;是。大多数引擎都在创建格式化结果的内部树,以解析所有继承。在这种表示中,你所指定的所有内容要么是继承的,要么完全是在每一个元素上都已消失。
现在,那说。在创建它的过程中,创建并比较节点,XML + XSL到XSL FO转换为所有这些节点占用内存和空间。
因此,例如,在每个元素上指定font-family(作为相同的font-family)可能会在引擎内部解析为引擎中间格式的一个字体开关,但当然需要时间和记忆来分析并做到这一点。
多少钱?
最小。还有更多的时间花在决定字母,双向指示,什么适合一条线,在页面结束时做什么,什么保持在一起等等。
我的猜测。 0.5%。如果您使用的是XML + XSL,那么影响更大的是读取更大的XSL FO文件或在内存中创建它们。更多的记忆力。它可以影响性能,但非常小。
将表放在表内的表中,并使用keep和continue headers = 20 +%。或者选择一个像Arial Unicode这样的巨大字体,然后向它询问一个字符,就像一个子弹一样。