Apache FOP 1.0业已发布

本月21日,Apache基金会发布了Apache FOP 1.0,这是一个已经做了十年的项目。Apache FOP,也叫做格式化对象处理器(Formatting Objects Processor),它开始于Apache的XML项目中(其中还有Batik,它是基于Java的SVG渲染程序),之后于2004年转移到XMLGraphics项目中。

Apache FOP提供了一种方法,让我们可以将XML文档转换为各种可打印的格式,像PDF、PNG,甚至是其他像HTML之类的格式。它的历史可以追溯到W3C第一次发布XSL的时候。 尽管大多数人都将XSL与XSL转换语言本身直接合并在一起,然而XSL主要是为了出版行业而发明的。因此,XSL的规格包含了语言(可扩展样式表语言 eXtensible Stylesheet Language)和XSL格式化对象规范。 以下文字来自于XSL摘要:

该规范定义了可扩展样式表语言(XSL)的特性和语法,那是一种用来解释样式表的语言。 它包含两个部分:

  1. 转换XML文档的语言(XSLT),以及
  2. 指定格式化语义的XML词汇表。

大多数人都认为XSL实际上就是规范中的第一部分XSLT。 XSL规范还定义了一种迷你的语言,使用它可以定义打印的文字按照XSL格式化对象或者同一规范中的FO方式应该如何排列。 (正是这个名称决定了Apache FO处理器的出现,同时也是项目本身的名称。)

尽管CSS 1和CSS 2分别是在1996年和1998年发布的,但是它们都没有处理与打印相关的需求的能力,像脚注、页码引用、分栏文字的分割流(例如,自动在多个栏中分配文字,而不是将其预先切分为分离的几个DIV)。在2001年,当XSL FO作为XSL规范的一部分发布的时候,没有什么处理器能够对其进行处理。Apache FOP是第一个能处理这种格式的处理器,但是它在版本0.20 (2003年发布)停滞了好久,直到重新启动发布了FOP 0.93 (2007年发布)。事实上,几年前,在Sun公司,这种分隔方式被用来演示OSGi的在OSGi JSIG事件中载入不同版本的JAR文件的能力。

FO的示例文档看起来和传统的XML文档有些相似,其中带有fo命名空间,它会与http://www.w3.org/1999/XSL/Format绑定。 下面是来自于http://www.renderx.com/tutorial.html的示例(一种商业化的FO处理器):

<?xml version="1.0" encoding="iso-8859-1"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="my-page">
      <fo:region-body margin="1in"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="my-page">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>Hello, world!</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

fo:layout中的内容包含了样式(像页边的空白有多大,是否显示页码等等;它支持多种样式,因此你可以拥有相互不影响的“main page”和“index page”样式),后面是fo:page-sequence,这是与那一组(例如一章中的)页面相关的。在里面的部分,flowblock与HTML的divp设置类似。

标签的嵌套显得有些冗长,这通常是MediaWiki或者WikiText格式的中间交换格式。(Eclipse的WikiText 已经可以被转换成为DocBook或者XSL-FO;事实上,很多DocBook处理器都能够生成XSL-FO,然后这种格式可以通过像Apache FOP之类的工具编译成PDF 。)Maven的站点想要使用Apache FOP,从而生成带有pdf插件的PDF版本的站点。

目前Apache FOP 1.0还无法与XSL FO规范完全兼容;兼容性页面列出了更多关于当前支持情况的信息。

查看英文原文:Apache FOP 1.0 released

你可能感兴趣的:(Apache FOP 1.0业已发布)