Trasformazioni PDF con XSL-FO

2 pagine in totale: <<Indietro 1 [2]

Generare un documento PDF con XSL-FO

Consideriamo il documento in formato XML test.xml , ben costruito (well-formed) e validato dallo schema XSD test.xsd , rappresentato in maniera semplificata di seguito:

<?xml version="1.0" encoding="UTF-8"?>

<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd">
  <doctitle class="docTitle">...</doctitle>
  <docauthor class="docAuthor">...</docauthor>
  <chapter number="1">
   <chaptertitle class="chaptertitle">...</chaptertitle>
   <paragraph number="1.1">
     <partitle class="parTitle">...</partitle>
     <partext class="parText">...</partext>
   </paragraph>
   <paragraph number="1.2">
     <partitle class="parTitle">...</partitle>
     <partext class="parText">...</partext>
   </paragraph>
  </chapter>
  <chapter number="2">
   <chaptertitle class="chaptertitle">...</chaptertitle>
   <paragraph number="2.1">
     <partitle class="parTitle">...</partitle>
     <partext class="parText">...</partext>
   </paragraph>
  </chapter>
</document>

L'albero dei contenuti presenta un elemento radice document , caratterizzato dagli elementi titolo ( doctitle ), autore ( docauthor ) e da uno o più elementi capitolo ( chapter ). Ciascuno capitolo è costituito da titolo ( chaptertitle ) e da uno o più paragrafi ( paragraph ), contenente a sua volta gli elementi partitle e partext . Come si può intuire, si tratta di una classificazione "classica" per descrivere la struttura di un documento.

La trasformazione per ottenere il documento PDF finale è una combinazione di XSLT e XSL-FO ed è contenuta nel file test.fo allegato. XSLT permette di navigare sull'albero del documento di partenza tramite le regole XPath e di applicare ai contenuti XML iniziali le trasformazioni necessarie per ottenere come risultato finale un altro documento XML, interpretabile dal parser FO. Nel caso in esame, la trasformazione XSLT è rappresentata dalla definizione dei template per "/" e per gli elementi composti (capitoli e paragrafi). All'interno delle sezioni "template" vengono posizionati i tag del namespace FO per la definizione delle regole di impaginazione.

In questo caso la trasformazione FO si compone di:

  • definizione di tre layout di pagina, posizionati nel modello di trasformazione relativo a "/";
  • definizione delle sequenze di pagine e dei relativi blocchi costitutivi, presenti in tutti i template XSLT.

I layout di pagina sono in tutto tre:

  • frontespizio, contenente titolo e autore del documento e l'indice dei contenuti (quest'ultimo ottenuto "disegnando" una tabella);
  • pagina interna, contenente le parti testuali del documento;
  • pagina finale, contenente un testo fisso di chiusura del documento.

Inoltre è interessante far notare che l'indice dei contenuti presente nel frontespizio si riesce ad ottenere "gratis" semplicemente applicando alcune direttive XSLT sull'intero documento e che la frammentazione del testo nelle pagine interne è automatica: una volta applicati i template XSLT, è il processore FO che durante la generazione del documento PDF si occupa della corretta suddivisione del testo nelle diverse pagine, in base alle regole di impaginazione definite.

<fo:flow flow-name="xsl-region-body">
  <fo:block><xsl:apply-templates select="document/chapter" /></fo:block>
</fo:flow>

Il numero complessivo delle pagine n presente nel piè di pagina ("Pagina [i] di [n]") si ottiene inserendo un riferimento su un blocco di testo della pagina finale ( <fo:block id="endofdoc"... ) e richiamando una direttiva FO che permette di ottenere il numero della pagina in cui è posizionato il riferimento in oggetto ( <fo:page-number-citation ref-id="endofdoc" /> ).

Test

Per provare il materiale allegato all'articolo, consiglio l'uso di XMLSpy prodotto da altova e scaricabile in formato trial per 30 giorni.

Nel materiale allegato è disponibile il file test.xsl relativo ad una trasformazione XSLT di esempio per la formattazione dei contenuti del file test1.xml in formato HTML in base agli stili contenuti in test.css : provate ad aprire il file test1.xml con Internet Explorer!

Apache FOP ( Apache Formatting Objects Processor ) è un formatter di stampa basato su XSL-FO: si tratta di un'applicazione Java che legge un albero di contenuti FO e crea di conseguenza un documento di output in uno dei seguenti formati: PDF, PCL, PS, SVG, XML, Print, AWT, MIF e TXT.

Conclusioni

XSL-FO rappresenta solamente una delle tecnologie basate su XML disponibili oggi. Del resto il mercato si sta orientando sempre più verso soluzioni che prevedono un uso massiccio di questo metalinguaggio, data la sua indipendenza da qualsiasi piattaforma hardware e/o software e la sua portabilità. Per chi non è ancora ferrato in materia, consiglio vivamente di approfondire l'argomento... Ma se siete arrivati a leggere l'articolo fino a questo punto, posso dire che siete già sulla buona strada.

2 pagine in totale: <<Indietro 1 [2]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC