使用单个 XSLT 样式表发布 HTML 和 PDF 格式的 XML 数据(1)
 
- UID
- 1066743
|

使用单个 XSLT 样式表发布 HTML 和 PDF 格式的 XML 数据(1)
存储数据,比如,存储为 XForms/REST/XQuery [XRX] 架构的一部分(参见 )在如今很常见。您可以查询、检索以这种方式存储的数据并将其序列化为想要的格式。对于 Web 应用程序,开发人员可能希望允许用户以 HTML 格式(以便在其 Web 浏览器中查看)或以 PDF 文件的形式(以便下载供以后使用)检索数据。
本文介绍如何借助一个基于 CSSToXSLFO 工具的 XQuery 扩展函数,将 XML 数据转换为 HTML,从该 HTML 转换为 XSL-FO,以及从 XSL-FO 转换为 PDF(参见 )。
将 XML 数据转换为其他格式常用缩略语- CSS:级联样式表
- HTTP:超文本传输协议
- JAR:Java 存档文件
- LDAP:轻型目录访问协议
- SQL:结构化查询语言
- W3C:万维网联盟
- XSL-FO:可扩展样式表语言格式对象
- XSLT:可扩展样式表语言转换
通常,您需要两个 XSL 样式表来将数据从 XML 转换为 HTML 和 XSL-FO:一个将 XML 转换为 HTML,另一个 XSL-FO 样式表将 HTML 转换为 XSL-FO 文档,然后可以使用 XSL-FO 处理器将该文档转换为 PDF。这个过程表明,在以 HTML 和 PDF 格式生成报告的 Web 应用程序等环境中,您必须编写一个新 XSLT 样式表来将数据转换为 HTML,然后编写、调试和维护相应的 XSL-FO 样式表。这些样式表可能很难掌握,而且 XSL-FO 也不那么容易使用。幸运的是,因为报告不需要很复杂,所以您可以在 CSS 文件中轻松表达布局。然后,可以使用 CSSToXSLFO 实用工具进一步处理 CSS 文件,该实用工具只需少量编码即可生成 XSL-FO 文档。
这个过程和其他类似场景是本文所提供方法的完美用例,即,编写一个将 XML 转换为 HTML 的 XSLT 样式表,然后再向其添加些额外的 CSS 指令,以便它可将 HTML 转换为 XSL-FO,然后再转换为 PDF。
CSSToXSLFO 实用工具CSSToXSLFO 实用工具允许将 XML 文档连同一个 CSS version 2 (CSS2) 样式表转换为 XSL-FO 文档。为了使用此实用工具,我为 eXist XML 数据库开发了一个 XQuery 扩展函数,作为 XQuery 扩展模块中用于数字发布的一部分。
此实用工具可处理大部分 CSS2 规范。为了处理特定的 XSL-FO 功能,它提供了通常被浏览器忽略的多个 CSS 扩展指令。可在 CSS 样式表的 @media 打印部分的 @page 规则中使用这些属性。这些属性与页面区域、页码、引用、引导符、命名字符串、连字符、脚注、外部图形和外部元素相关。一定要查看 CSSToXSLFO 实用工具的收藏(参见 ),了解该工具的更多信息和完善您设计的 XSLT 样式表的技巧。
eXist XML 数据库eXist-db 是一个开源的数据库管理系统,完全使用 XML 技术构建。除了其他标准,它还支持 XQuery、XPath 和 XSLT。eXist 依据 XML 数据模型来存储数据,高度遵守 XQuery 标准。存储的数据使用 XQuery 通过基于索引的方式来处理。该数据库还有一个基于 Apache Lucene 的全文索引。
eXist 的 XQuery 引擎是可扩展的,所以 eXist 拥有各种各样的 XQuery 扩展模块。这些模块提供了 XQuery 扩展功能,比如:
- 全局键-值缓存
- 各种压缩操作
- 对日期和时间类型的更多操作
- 对文件和目录的各种操作
- HTTP 请求(一个 XPath 模块)
- 对存储在数据库中的图像的操作,包括检索图像维度,创建缩略图和调整图像大小
- 访问和操作基于 Java™ 命名和目录接口的目录,比如 LDAP
- 发送文本或 HTML 电子邮件
- 计划作业和操作现有作业
- 对关系数据库管理系统执行 SQL 操作
- 确定 XML 节点之间的区别
- XSL-FO 呈现
- XProc 功能
- 加密操作
eXist 和 CSSToXSLFO 都使用 Java 语言编写。在编写本文时,eXist 允许您使用 Apache 格式对象处理器 (Apache Formatting Objects, FOP) 或 RenderHouse XEP 作为 XSL-FO 处理器。请访问 eXist 网站,了解安装数据库的指令,以方便运行本文的示例。
eXist 数字发布模块 eXist 数字发布模块目前正在开发中,在未来将包含更多函数。现在它拥有 html-to-xslfo() 函数,该函数有助于实现本文提供的方法。
此模块背后的意图是为数字发布所需的所有 XQuery 扩展函数提供单一的来源,包括各种格式之间的转换,比如 DocBook、Open XML、DOC、DOCX、.html、PDF、TXT、RTF、PPT、PPTX 和 CSV。要在 eXist 内安装此模块:
- 下载 eXist 数字发布模块的 JAR 文件,将其复制到 $EXIST_HOME/lib/extensions 中。
- 下载 css2xslfo1_6_2.jar,将其复制到 $EXIST_HOME/lib/user 中。
- 将 <module class="ro.kuberam.kPub.kPubModule" uri="http://kuberam.ro/k-Pub"/> 添加到 $EXIST_HOME/conf.xml 文件的内置模块部分中。
|
|
|
|
|
|