如何使用 XSLT 将字母垂直居中

How to vertically center a letter using XSLT

我正在使用 XSLT 使用 FOP 将 XML 转换为 PDF。我想要的只是水平和垂直居中一个字母,即它应该在页面的中心。我目前得到的是这个。

你看已经水平居中了,我也不知道垂直居中。我试过vertical-aligndisplay-align,但都无济于事。有什么办法可以实现吗?

到目前为止,这是我的代码。

XML

<?xml version="1.0" encoding="UTF-8"?>
<letter>A</letter>

XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <fo:root>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="A4"
                               page-height="210mm" page-width="297mm">
          <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
              text-align="center" font-size="100mm">
            <xsl:value-of select="letter"/>
          </fo:block>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xsl:template>
</xsl:stylesheet>

在这种情况下,@display-align 可用于:

  • fo:region-body
  • fo:block-包含 fo:block
  • 的容器

这里有两个例子。

[第一种方法]

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <fo:root>
            <fo:layout-master-set>
                <fo:simple-page-master master-name="A4"
                    page-height="210mm" page-width="297mm">
                    <fo:region-body display-align="center"/>
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="A4">
                <fo:flow flow-name="xsl-region-body">
                    <fo:block
                        text-align="center" font-size="100mm">
                        <xsl:value-of select="letter"/>
                    </fo:block>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

[第二种方法]

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <fo:root>
            <fo:layout-master-set>
                <fo:simple-page-master master-name="A4"
                    page-height="210mm" page-width="297mm">
                    <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-container height="100%" display-align="center">
                        <fo:block
                            text-align="center" font-size="100mm">
                            <xsl:value-of select="letter"/>
                        </fo:block>
                    </fo:block-container>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

[结果 PDF 查看]