Ale
Numero di messaggi : 24 Età : 45 Data d'iscrizione : 23.02.09
| Titolo: Generare PDF da pagina HTML con CSS dedicato Mer Mag 13, 2009 4:47 pm | |
| Mi sono trovato a dover fare 1 pulsantino "crea pdf" di 1 pagina internet, per non impazzire a decodificare il codice html prima di utilizzarlo con itext ridisegnandomi tutti i dati ke mi interessavano, ho trovato 1 sistema molto interessante che permette di passarmi il codice html ad 1 servlet che lo decodifica e crea 1 pdf, altra cosa molto bella è che si può abbinare 1 CSS al vostro pdf! Trovate altre informazioni, e soprattutto le librerie da usare a quest'indirizzo: https://xhtmlrenderer.dev.java.net/Nella mia pagina jsp ho creato 1 StringBuffer sb contenente il codice html della pagina e poi ho settato come attributo della sessione la String Buffer ( session.setAttribute("car1",sb); ). In questo modo dalla servlet richiamo l'attributo con: HttpSession session = request.getSession(); StringBuffer sb = (StringBuffer) session.getAttribute("car1");Codice della servlet: - Codice:
-
import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.OutputStream;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document; import org.xhtmlrenderer.pdf.ITextRenderer;
public class PDFServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); StringBuffer sb = (StringBuffer) session.getAttribute("car1"); response.setContentType("application/pdf"); try { ByteArrayInputStream Bis1 = new ByteArrayInputStream(sb.toString().getBytes("UTF-8")); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(Bis1); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(doc, null); renderer.layout(); OutputStream os = response.getOutputStream(); renderer.createPDF(os); os.close(); session.setAttribute("car1",null); } catch (Exception ex) { ex.printStackTrace(); } } }
per poter riconoscere correttamente alcuni caratteri particolari senza incorrere in errori quando create il codice html da passare alla servlet nel codice html è importante inserire alla prima riga (prima dell'head): - Codice:
-
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" 'LINK AI FILE DTD'> dove link ai file dtd indica la cartella in cui dovrete inserire i file .dtd e .ent che contengono la decodifica dei caratteri speciali. sono 4 file: - xhtml-lat1.ent - xhtml-special.ent - xhtml-symbol.ent - xhtml1-transitional.dtd li potete scaricare su http://www.w3.org/ | |
|