在解析XSL-FO模板以创建PDF时出错?

时间:2016-07-19 06:31:47

标签: xml xslt xsl-fo apache-fop

我正在寻找解决方案以及如何在通过XSL-FO模板语言将XML数据解析为PDF文件时解决问题。当用户尝试以PDF格式下载数据时,我无法找出问题的确切原因。 我的例外情况如下:

"org.apache.fop.events.loggingeventlistener processevent rendered page"

提前感谢您,我知道这是一个非常通用的问题,但我真的想知道相同的根本原因。

我的XML:

  <root>
<name>shyam</name>
<friend>
    <name>Abc</name>
    <phNo>90909090909</phNo>
    <age>32</age>
    <closefriends>
        <names>test123</names>
    </closefriends>
</friend>
<friend>
    <name>Xyz</name>
    <phNo>32323232323</phNo>
    <age>44</age>
    <closefriends>
        <names>test345</names>
    </closefriends>
</friend>
</root>

我的XSL-FO:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <fo:page-sequence master-reference="my-page">
      <fo:flow flow-name="xsl-region-body">
        <fo:block>Hello,
          <xsl:value-of select="name" />!</fo:block>
        <fo:block>
          <fo:table>
            <fo:table-body>
              <fo:table-row>
                <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold">
                  <fo:block>
                    No.
                  </fo:block>
                </fo:table-cell>
                <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold">
                  <fo:block>
                    Name
                  </fo:block>
                </fo:table-cell>
                <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold">
                  <fo:block>
                    Phone Number
                  </fo:block>
                </fo:table-cell>
              </fo:table-row>
              <xsl:for-each select="./friend">
                <xsl:for-each select="./closefriends">
                  <fo:table-row>
                    <fo:table-cell border="solid 1px black" text-align="center">
                      <fo:block>
                        <xsl:value-of select="position()" />
                      </fo:block>
                    </fo:table-cell>
                    <fo:table-cell border="solid 1px black" text-align="center">
                      <fo:block>
                        <xsl:value-of select="name" />
                        <xsl:value-of select="names" />
                      </fo:block>
                    </fo:table-cell>
                    <fo:table-cell border="solid 1px black" text-align="center">
                      <fo:block>
                        <xsl:value-of select="phNo" />
                      </fo:block>
                    </fo:table-cell>
                  </fo:table-row>
                </xsl:for-each>
              </xsl:for-each>
            </fo:table-body>
          </fo:table>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>

我添加了XML和XSL-FO供您参考。

1 个答案:

答案 0 :(得分:1)

您所看到的不是出错的类异常,只是 here-is-something-interesting 异常: - )。

更严重的是,它是一个INFO级日志消息,告诉您页面已创建:

19-lug-2016 17.36.32 org.apache.fop.events.LoggingEventListener processEvent
INFO: Rendered page #1.
...

在处理大型文件时,它是一个有用的指示,FOP仍然按预期工作,而不仅仅是陷入无限循环。

FOP的网站上有一个关于这些feedback messages的网页,以及如何以编程方式处理它们的示例(如果需要);否则,你可以忽略它们。

(披露:我是FOP开发人员,但现在不是很活跃)