Na última quarta-feira, a Apache Foundation anunciou o lançamento do Apache FOP 1.0, um projeto que demorou cerca de uma década para ser feito. O Apache FOP, ou Formatting Objects Processor, teve o seu início com o XML project na Apache antes de mudar (junto com o Batik, um renderizador SVG baseado em Java) para o projeto XMLGraphics em 2004.
O Apache FOP tem o intuito de tornar documentos XML em uma variedade de formatos prontos para impressão, como por exemplo o PDF, PNG ou até mesmo para HTML. A sua história volta para o primeiro lançamento do XSL do W3C. Embora muitos confundam o XSL com a XSL Transformation language, o XSL foi criado primeiramente em benefício da indústria editorial. Como resultado, a especificação da XSL engloba tanto a linguagem em si (eXtensible Stylesheet Language) quanto a XSL Formatting Objects. A partir do resumo do XSL:
Esta especificação define as características e sintaxe para o Extensible Stylesheet Language (XSL), uma linguagem para expressar estilo. Ela consiste em duas partes:
1. uma linguagem para transformar documentos XML (XSLT).
2. um vocabulário XML para especificar semântica de formatação.
O que a maioria imagina do XSL, na verdade é o XSLT, a primeira parte da especificação. A especificação do XSL também define uma mini linguagem para definir como o texto deverá ser impresso no formato XSL Formatting Objects, ou apenas FO, na mesma especificação. (Este é o nome que deu início ao Apache FO Processor, e também ao nome do próprio projeto.)
Embora o CSS 1 tenha sido lançado em 1996, e o CSS2 em 1998, nenhum deles possuem a habilidade para alguns requisitos como notas de rodapé, referências de número de páginas, separar o texto por fluxo de colunas (i.e. o texto fluir de acordo com um certo número de colunas, no lugar de pré dividí-los em DIVs separados). Quando o XSL FO foi lançado em 2001 como parte da especificação XSL, havia poucos processadores disponíveis para processá-lo. O Apache FOP foi um dos primeiros, porém ficou parado na versão 0.20 (lançado em 2003), até o seu reínico na versão FOP 0.93 (lançado em 2007). Na verdade, esta lacuna foi utilizada para demonstrar a capacidade de OSGi em carregar diferentes versões de JARs em um evento OSGi JSIG na Sun alguns anos atrás.
Um exemplo de documento FO parece muito com o XML tradicional, com um namespace fo e delimitador para http://www.w3.org/1999/XSL/Format. Aqui está um exemplo do http://www.renderx.com/tutorial.html (um processador FO comercial):
Rua Cruzeiro, 30 - Vila Nova - Telefone: (47) 3041-7883 / 3041-7884 - Blumenau/SC