it.prato.comune.tolomeo.web.TolomeoPrintPDFServlet.java Source code

Java tutorial

Introduction

Here is the source code for it.prato.comune.tolomeo.web.TolomeoPrintPDFServlet.java

Source

/*******************************************************************************
 * Tolomeo is a developing framework for visualization, editing,  
 * geoprocessing and decisional support application based on cartography.
 * 
 * Tolomeo Copyright 2011 Comune di Prato;
 * 
 * This file is part of Tolomeo.
 * 
 * Tolomeo is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License 
 * as published by the Free Software Foundation; either version 3 of the License, 
 * or (at your option) any later version.
 * 
 * Tolomeo is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License along with Tolomeo; 
 * if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  021101301  USA
 * 
 * Developers Information:
 * 
 * Tolomeo is developed by Comune di Prato
 * 
 * Alessandro Radaelli
 * Federico Nieri
 * Mattia Gennari
 * 
 * sit@comune.prato.it 
 * 
 * 
 * Versione in Italiano LGPL
 * 
 * Tolomeo  un framework per lo sviluppo di applicazioni per
 * visualizzazione, editing, geoprocessing e supporto alla decisione basate su cartografia.
 * 
 * Tolomeo Copyright 2011 Comune di Prato;
 * 
 * Questo file fa parte di Tolomeo.
 * 
 * Tolomeo  un software libero;  possibile redistribuirlo e / o 
 * modificarlo sotto i termini della GNU Lesser General Public License, 
 * come pubblicato dalla Free Software Foundation, sia la versione 3 della licenza o (a propria scelta) una versione successiva.
 *  
 * Tolomeo  distribuito nella speranza che possa essere utile,
 * ma SENZA ALCUNA GARANZIA, senza neppure la garanzia implicita di COMMERCIABILIT o
 * IDONEIT PER UN PARTICOLARE SCOPO. Vedere la GNU Lesser General Public License per ulteriori dettagli.
 * 
 * Si dovrebbe avere ricevuto una copia della GNU Lesser General Public insieme a Tolomeo, in caso contrario, 
 * si scriva alla Free Software  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 021101301 USA
 *   
 * 
 * Informazioni Sviluppatori:
 * 
 * Tolomeo  sviluppato dal Comune di Prato
 * 
 * Alessandro Radaelli
 * Federico Nieri
 * Mattia Gennari
 * 
 * sit@comune.prato.it
 ******************************************************************************/
package it.prato.comune.tolomeo.web;

import it.prato.comune.utilita.logging.interfaces.LogInterface;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLDecoder;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfWriter;

/**
 * Servlet che stampa un file pdf con intestazione e immagine dell'attuale stato di visualizzazione della mappa
 * 
 * @author Mattia Gennari
 */
public class TolomeoPrintPDFServlet extends TolomeoServlet {

    private static final long serialVersionUID = -6096347001193086197L;

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        LogInterface logger = getLogger(request);

        String titolo = request.getParameter("titolo");
        String descrizione = request.getParameter("descrizione");
        String scala = request.getParameter("scala");
        String mapx = request.getParameter("mapx");
        String mapy = request.getParameter("mapy");
        //creo URL alla mappa
        URL urlMappa = new URL(URLDecoder.decode(request.getParameter("urlMappa"), "UTF-8"));
        URI uriMappa = null;
        try {
            uriMappa = new URI(urlMappa.getProtocol(), null, urlMappa.getHost(), urlMappa.getPort(),
                    urlMappa.getPath(), urlMappa.getQuery() + "&mode=map&scale=" + scala + "&mapxy=" + mapx + "+"
                            + mapy + "&map_size=500 500",
                    null);
            logger.info("URI di stampa mappa: " + uriMappa);
        } catch (URISyntaxException e) {
            logger.error("URI errore di sintassi", e);
        }

        Font BOLD15 = new Font(Font.HELVETICA, 15, Font.BOLD);
        Font FONT12 = new Font(Font.HELVETICA, 12, Font.NORMAL);
        Font FONT10 = new Font(Font.HELVETICA, 10, Font.NORMAL);

        Document doc = new Document();
        ;
        PdfWriter pdf = null;
        Paragraph par = new Paragraph();

        try {

            //creo il PDF
            response.setContentType("application/pdf");
            pdf = PdfWriter.getInstance(doc, response.getOutputStream());

            //attributi file
            doc.addTitle("Mappa di Prato");
            doc.addAuthor("Comune di Prato");
            doc.open();

            //intestazione
            par.setAlignment(Paragraph.ALIGN_CENTER);
            print("Comune di Prato", BOLD15, par, doc);
            print(titolo, FONT10, par, doc);
            print("", FONT10, par, doc);

            //mappa
            Image mappa = Image.getInstance(uriMappa.toURL());
            mappa.setAlignment(Image.MIDDLE);
            mappa.setBorder(Rectangle.BOX);
            mappa.setBorderWidth(1f);
            doc.add(mappa);

        } catch (Exception e) {
            logger.error("Errore durante la creazione del PDF", e);
            printErr(doc);
        } finally {
            doc.close();
            pdf.close();
            response.getOutputStream().close();
        }
    }

    @Override
    protected String getDefaultForward() {
        return null;
    }

    private void print(String riga, Font font, Paragraph par, Document doc) throws Exception {
        try {
            Phrase frase = new Phrase(riga + "\r\n", font);
            par.add(frase);
            doc.add(par);
            par.clear();
        } catch (Exception e) {
            throw e;
        }
    }

    private void printErr(Document doc) {
        try {
            Paragraph par = new Paragraph();
            par.setAlignment(Paragraph.ALIGN_CENTER);
            par.add("\n\n");
            par.add("Errore di stampa!");
            par.add("\n");
            par.add("Contattare sit@comune.prato.it");

            doc.add(par);
        } catch (Exception e) {
        }
    }
}