Differenze tra le versioni di "Programmazione:Java/XML to PDF with fop"

Da WikiSitech.
Vai alla navigazioneVai alla ricerca
Riga 8: Riga 8:
 
<code java>
 
<code java>
 
//Ottengo l'XML
 
//Ottengo l'XML
Document xml = <XML>;
+
Document xml = "<XML>";
  
 
// Creo un'istanza della fopFactory
 
// Creo un'istanza della fopFactory
Riga 17: Riga 17:
 
// Preparo la response
 
// Preparo la response
 
HttpServletResponse resp = fsc.getResp();
 
HttpServletResponse resp = fsc.getResp();
OutputStream out = resp.getOutputStream();
 
 
resp.setContentType("application/pdf");
 
resp.setContentType("application/pdf");
 
resp.setHeader("Expires","-1");
 
resp.setHeader("Expires","-1");
Riga 23: Riga 22:
  
 
// Ottengo l'XSL scritto in XSL-FO
 
// Ottengo l'XSL scritto in XSL-FO
InputStream xsltfile = <XSL>;
+
InputStream xsltfile = "<XSL>";
 +
 
 +
// Ottengo lo Stream di output
 +
OutputStream out = resp.getOutputStream();
  
 
// Creo un'istanza del motore FOP
 
// Creo un'istanza del motore FOP

Versione delle 12:25, 4 gen 2007

Per ottenere un PDF da un XML è possibile utilizzare la libreria FOP fornita da apache (http://xmlgraphics.apache.org/fop/).

Per effettuare questa trasformazione abbiamo bisogno fondamentalmente di x cose:

  • Libreria del FOP preso dal sito di apache.
  • XSL scritto in XSL-FO.
  • XML da trasformare.

Il procedimento da seguire per la trasformazione è abbastanza semplice, l'esempio è preso da una servlet che ottiene un'XML dentro un DOCUMENT di Dom4J e mette dentro la response il PDF generato dal FOP.
//Ottengo l'XML Document xml = "<XML>";

// Creo un'istanza della fopFactory FopFactory fopFactory = FopFactory.newInstance(); // Creo un'istanza del foUserAgent FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

// Preparo la response HttpServletResponse resp = fsc.getResp(); resp.setContentType("application/pdf"); resp.setHeader("Expires","-1"); resp.setHeader("Cache-Control","no-store");

// Ottengo l'XSL scritto in XSL-FO InputStream xsltfile = "<XSL>";

// Ottengo lo Stream di output OutputStream out = resp.getOutputStream();

// Creo un'istanza del motore FOP Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

// Preparo il transformerFactory TransformerFactory factory = TransformerFactory.newInstance(); // Creo un'istanza di transformer passandogli l'XSL Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));

// Setto la versione dei parametri transformer.setParameter("versionParam", "2.0");

// Resulting SAX events (the generated FO) must be piped through to FOP Result res = new SAXResult(fop.getDefaultHandler());

// Il transformer ha bisogno di un Source come sorgente quindi ne creo uno StringReader sr = new StringReader(xml.asXML()); Source src = new StreamSource(sr);

// Effettuo la trasformazione transformer.transform(src, res);