将所有格式设置在最顶层的块中是否会提高pdf生成的性能?

时间:2015-02-19 05:10:24

标签: pdf pdf-generation xsl-fo apache-fop

我有一个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>

很抱歉代码格式错误。 我需要优先考虑文档的生成速度。哪两个会更好?

1 个答案:

答案 0 :(得分:0)

作为了解(一个)引擎内部的人,答案是非常非常小的#34;是。大多数引擎都在创建格式化结果的内部树,以解析所有继承。在这种表示中,你所指定的所有内容要么是继承的,要么完全是在每一个元素上都已消失。

现在,那说。在创建它的过程中,创建并比较节点,XML + XSL到XSL FO转换为所有这些节点占用内存和空间。

因此,例如,在每个元素上指定font-family(作为相同的font-family)可能会在引擎内部解析为引擎中间格式的一个字体开关,但当然需要时间和记忆来分析并做到这一点。

多少钱?

最小。还有更多的时间花在决定字母,双向指示,什么适合一条线,在页面结束时做什么,什么保持在一起等等。

我的猜测。 0.5%。如果您使用的是XML + XSL,那么影响更大的是读取更大的XSL FO文件或在内存中创建它们。更多的记忆力。它可以影响性能,但非常小。

将表放在表内的表中,并使用keep和continue headers = 20 +%。或者选择一个像Arial Unicode这样的巨大字体,然后向它询问一个字符,就像一个子弹一样。