Home
FOP

29 Aprile 2002

FOP

di

XML + XSLT = XSL-FO, XSL-FO + FOP = PDF

Gli utilizzi di XML sono sempre più numerosi, soprattutto quando le architetture di contorno diventano interessanti e quando le specifiche, per quanto ambiziose, vengono in qualche modo realizzate.
Una delle tecnologie emergenti è XSL-FO, dove FO sta per Formatting Objects.
Si tratta di un’applicazione di XML che permette di definire dei dettagli di trasformazione verso formati specifici. Le specifiche ufficiali si trovano sul sito del W3C.

Utilizzando un file in formato XSL-FO è possibile ottenere una trasformazione verso uno qualsiasi dei formati supportato dall’unità di trasformazione.
Con unità di trasformazione si intende una componente software che sia in grado di generare, a partire da un file in formato XSL-FO, un file in formato alternativo, di solito binario, come ad esempio un PDF.

FOP è proprio questo, una componente di trasformazione in grado di prendere in input un file in formato XSL-FO e generare file dei seguenti formati: PDF, PCL, PS, RTF, SVG, XML, Print, AWT, MIF e TXT.

Dove scaricare FOP

FOP è uno dei tanti progetti del XML Group, la home page del progetto è:

http://xml.apache.org/fop/

mentre il link diretto per scaricare il software è:

http://xml.apache.org/dist/fop/

dove naturalmente, in perfetto stile open source, troverete anche i sorgenti.

Come funziona

Una volta effettuato il download, e dopo aver scompattato il pacchetto di distribuzione, vi troverete di fronte ad un’alberatura di directory piuttosto complessa.
FOP è un’applicazione scritta in Java, pertanto ha bisogno di package esterni (come ad esempio Xerces, Xalan, Batik). Tutte le librerie necessarie sono comunque comprese nel pacchetto della distribuzione. L’unico vincolo è che sulla macchina dove volete far girare FOP ci sia un JDK oppure un JRE installato.

Dopo essersi posizionati nella cartella di FOP tutto quello che dovrete fare è lanciare il file fop.bat con una serie di parametri che identifichino i file di input e di output per la trasformazione.

Esempio

Supponendo di avere un file in formato XSL-FO (tralasciamo per il momento le specifiche di formato), il file potrebbe essere questo:










Hello, world!


/

Senza entrare nel merito del formato, in verità piuttosto complicato, si percepisce subito che si tratta del classico esempio Hello World, salviamo quindi questo file nella stessa cartella contenente fop.bat ed diamogli il nome helloworld.fo.

A questo punto per far girare l’esempio ed ottenere la trasformazione in PDF non dovremo far altro che utilizzare il comando:

fop -fo helloworld.fo -pdf helloworld.pdf

/

con il quale indichiamo a FOP che deve utilizzare un file in input in formato XSL-FO dal nome helloworld.fo e deve eseguire una trasformazione in PDF generando il file helloworld.pdf.

Al termine della trasformazione otterremo il file helloworld.pdf contenente esattamente quello che ci aspettiamo, la stringa “Hello World”.

Utilizzo avanzato

FOP ha una serie di parametri che ci permettono di utilizzarlo anche per trasformare direttamente in PDF (oppure in un altro dei formati supportati) direttamente un file XML, a condizione di avere un foglio di stile in formato XSL che generi una trasformazione in XML-FO.

Il comando da utilizzare, nel caso specifico, diventa questo:

fop -xml nomefile.xml -xsl nomefile.xsl -pdf nomefile.pdf

/

Ecco quindi che senza passare direttamente da XSL-FO è possibile ottenere un file PDF direttamente dalla coppia XML+XSL.

L'autore

  • Massimo Canducci
    Massimo Canducci vanta oltre 25 anni di esperienza nel campo dell'innovazione e della digital transformation ed è Chief Innovation Officer per Engineering Ingegneria Informatica. È docente alla Singularity University, l'Università di Torino e l'Università di Pavia, e insegna in master MBA.

Iscriviti alla newsletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.