sono mancato per un po' di giorni, ma ho avuto alcuni impegni ultimamente.
Impegni che mi hanno permesso di decidere del mio futuro lavorativo e di farmi un'idea abbastanza ampia delle richieste di mercato in ambito informatico, ma anche di come le diverse società posso decidere di far affrontare i colloqui.
Detto ciò (e dopo aver preso una decisione...che come mi son sempre detto, è giusta a prescindere!), oggi volevo rendervi partecipi (così ne approfitto per ricordare quanto fatto anche in futuro) di come poter stampare un file pdf lato client.
Per effettuare tale operazione, si necessita di quanto segue :
1) creare un iframe nascosto all'interno della pagina ove si vuol rendere disponibile il tasto STAMPA
2) creare ovviamente un evento associato al tasto STAMPA ove richiamare (tramite la corretta valorizzazione dell'src dell'iframe nascosto) una servlet predisposta ad inviare il flusso dati necessario per la stampa stessa
3) Creare la servlet di stampa, utilizzando il seguente codice (la libreria di appoggio utilizzata è iText)
public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{
response.setContentType("application/pdf");
/* Questa parte può essere utile se il pdf è stato salvato su db\repository\altro
String idPdf = request.getParameter("idPdf");
BeanPdf pdf = null;
try {
pdf = Action.caricaPdfID(idPdf);
} catch (Exception e) {
e.printStackTrace();
}
*/
//Da qui in poi uso libreria iText per poter stampare il pdf
PdfReader reader = new PdfReader(pdf.getPdf()); //L'oggetto pdf.getPdf() in questo caso mi rappresenta l'oggetto pdf in byte[]
try {
PdfStamper stamper = new PdfStamper(reader,response.getOutputStream());
PdfWriter writer = stamper.getWriter();
writer.addJavaScript("this.print({bUI: true, bSilent: true, bShrinkToFit: true});",false);
writer.addJavaScript("this.closeDoc(true);");
stamper.close();
} catch (DocumentException de) {
de.printStackTrace();
System.err.println("document: " + de.getMessage());
}
}
public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
{
doGet( request, response );
}
Lo reputo un metodo molto interessante, soprattutto per chi non conosce le peculiarità della libreria iText e il suo possibile utilizzo attraverso un semplice iframe nascosto.
Per oggi è tutto :D
Al prox aggiornamento.