Differenze tra le versioni di "Programmazione:Java/XML to PDF with fop"
| Riga 5: | Riga 5: | ||
* XML da trasformare.  | * 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.<br />   | ||
<code java>  | <code java>  | ||
| − | + | //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();  | |
| − | + | OutputStream out = resp.getOutputStream();  | |
| − | + | resp.setContentType("application/pdf");  | |
| − | + | resp.setHeader("Expires","-1");  | |
| − | + | resp.setHeader("Cache-Control","no-store");  | |
| − | + | ||
| − | + | // Ottengo l'XSL scritto in XSL-FO  | |
| − | + | InputStream xsltfile = <XSL>;  | |
| − | + | ||
| − | + | // 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);  | |
| − | |||
| − | |||
| − | |||
</code>  | </code>  | ||
Versione delle 11:23, 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();
OutputStream out = resp.getOutputStream();
resp.setContentType("application/pdf");
resp.setHeader("Expires","-1");
resp.setHeader("Cache-Control","no-store");
// Ottengo l'XSL scritto in XSL-FO
InputStream xsltfile = <XSL>;
// 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);