【发布时间】:2015-12-23 17:17:47
【问题描述】:
我们有一个基于 Java 的系统,它从数据库中读取数据,将单个数据字段与预设的 XSL-FO 标记合并,并将结果转换为 PDF 和 Apache FOP。
XSL-FO 格式如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE Html [
<!ENTITY nbsp " ">
<!-- all other entities -->
]>
<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 xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" font-family="..." font-size="...">
<fo:layout-master-set>
<fo:simple-page-master master-name="Letter Page" page-width="8.500in" page-height="11.000in">
<!-- appropriate settings -->
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="Letter Page">
<!-- some static content -->
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:table ...>
<fo:table-column ... />
<fo:table-body>
<fo:table-row>
<fo:table-cell ...>
<fo:block text-align="...">
<fo:inline font-size="..." font-weight="...">
<!-- Header / Title -->
</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block>
<fo:table ...>
<fo:table-column ... />
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block ...>
<!-- Field A -->
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<!-- Other fields in a very similar fashion as the above "Field A" -->
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
现在我正在寻找一种方法来允许某些字段包含静态 HTML 格式 内容。此内容将由我们支持 HTML 的编辑器(类似于CLEditor、CKEditor 等)生成或从外部粘贴。
我的计划是按照食谱from this JavaWorld article:
- 使用
JTidy将HTML 格式的字符串转换为正确的XHTML - 进一步修改 Antenna House 中的 xhtml2fo.xsl 以删除所有文档范围和页面范围的转换
- 将此修改后的 XSLT 应用到我的 XHTML 字符串 (javax.xml.transform)
- 用XPath(javax.xml.xpath)提取根目录下的所有节点
- 将结果直接输入到现有的 XSL-FO 文档中
我有此类代码的准系统版本并收到以下错误:
(错误位置未知)org.apache.fop1.fo.ValidationException: "{http://www.w3.org/1999/XSL/Format}table-body" 不是有效的孩子 的“fo:block”! (没有可用的上下文信息)
我的问题:
- 解决此问题的方法是什么?
-
<fo:block>能否用作一个通用容器,其中嵌套了其他对象(包括表格)? - 这是解决任务的总体合理方法吗?
如果有人已经“去过那里”,请分享您的经验。
【问题讨论】:
标签: java html xslt xsl-fo apache-fop