Control.PdfBiglietto.java Source code

Java tutorial

Introduction

Here is the source code for Control.PdfBiglietto.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import ClassiDB.Prenotazione;
import ClassiDB.Spettacolo;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;
//import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;

/**
 *
 * @author Paolo
 * @author Ivan
 */

/**
 * Classe che rappresenta un file pdf contentente uno o pi biglietti.
 * @author Paolo
 */
public class PdfBiglietto {
    String nomeFile;
    ArrayList<Prenotazione> prenotazioni = new ArrayList<>();
    ByteArrayOutputStream datiBiglietto;

    //metadati
    String autore = "Sistema distribuzione biglietti CineLand";
    String subject = "Biglietto CineLand";
    String keywords = "biglietto,cineland,cinema";
    String titolo = "Biglietto CineLand";

    /**
     * Costruttore
     * @param nomeFile Nome del file PDF
     * @param prenotazione Oggetto prenotazione per la creazione del ticket
     */
    public PdfBiglietto(String nomeFile, Prenotazione prenotazione) {
        this.nomeFile = nomeFile;
        this.prenotazioni.add(prenotazione);
        datiBiglietto = new ByteArrayOutputStream();
    }

    /**
     * Costruttore
     * @param prenotazione Oggetto prenotazione per la creazione del ticket
     */
    public PdfBiglietto(Prenotazione prenotazione) {
        this.prenotazioni.add(prenotazione);
    }

    /**
     * Costruttore
     */
    public PdfBiglietto() {

    }

    /**
     * Aggiunge una prenotazione al biglietto. In presenza di pi di una prenotazione, vengono stampati tutti in un unico file.
     * @param p prenotazione da aggiungere al biglietto 
     */
    public void aggiungiPrenotazione(Prenotazione p) {
        if (p != null)
            this.prenotazioni.add(p);
    }

    /**
     * Funzione che costruisce il file PDF
     * @param nomeFile Nome del file PDF
     * @param stream Stream sul quale verr scritto il pdf
     * @throws DocumentException
     * @throws BadElementException
     * @throws IOException 
     */
    public void costruisciPdf(String nomeFile, OutputStream stream)
            throws DocumentException, BadElementException, IOException {
        SimpleDateFormat dataNormale = new SimpleDateFormat("dd/MM/YYYY");

        Document biglietto = new Document();
        //PdfWriter.getInstance(biglietto, new FileOutputStream(nomeFile));
        PdfWriter.getInstance(biglietto, stream);

        biglietto.open();
        biglietto.addAuthor(autore);
        biglietto.addCreationDate();
        biglietto.addCreator(autore);
        biglietto.addTitle(titolo);
        //dati inseriti nel QRCode
        int contatorePrenotazioni = 1; //usato per avere due prenotazioni per ogni pagina
        for (Prenotazione p : prenotazioni) {
            contatorePrenotazioni++;

            StringBuilder sb = new StringBuilder();
            sb.append(p.getId());
            sb.append("|");
            sb.append(p.getUtente().getNome());
            sb.append("|");
            sb.append(p.getPrezzo());
            sb.append("|");
            sb.append(p.getSala().getId());
            sb.append("|");
            sb.append(p.getPosto().getRiga());
            sb.append("|");
            sb.append(p.getPosto().getColonna());
            sb.append("|");
            sb.append(p.getSpettacolo().getFilm().getTitolo());
            sb.append("|");
            sb.append(dataNormale.format(p.getSpettacolo().getData_ora().getTime()));

            Paragraph completo = new Paragraph();
            completo.setSpacingAfter(80.0f);
            //in caso di problemi al QRcode (dimensioni eccessive, aspetti strani, etc), controllare la stringa in ingresso.
            QRCode qrBiglietto = new QRCode(sb.toString());

            Paragraph titolo = new Paragraph(p.getSpettacolo().getFilm().getTitolo());
            titolo.add("\nPrenotazione a nome dell'utente:  " + p.getUtente().getNome());
            titolo.add("   Id Spettacolo: " + Integer.toString(p.getSpettacolo().getId()));

            Paragraph info = new Paragraph();
            info.add("Lo spettacolo si terr il giorno: ");
            info.add(dataNormale.format(p.getSpettacolo().getData_ora().getTime()));
            info.add("\nID Prenotazione: " + Integer.toString(p.getId()));
            Paragraph sala = new Paragraph();
            sala.add("Sala: " + p.getSala().getNome());
            sala.add(" Il tuo posto  nella riga: " + p.getPosto().getRiga() + " e colonna: "
                    + p.getPosto().getColonna());

            Paragraph prezzo = new Paragraph("Pagamento:" + Double.toString(p.getPrezzo()));
            prezzo.add(" Euro");

            Paragraph fondo = new Paragraph("Biglietto emesso in data: " + dataNormale.format(new Date()));
            fondo.add("\n Mostra questo qrCode all'addetto del cinema: ");

            Image qrCode = Image.getInstance(qrBiglietto.getQrcode().toByteArray());
            qrCode.setAlignment(Image.TOP);

            if (contatorePrenotazioni % 2 == 0)
                biglietto.newPage();

            completo.add(titolo);
            completo.add(info);
            completo.add(sala);
            completo.add(prezzo);
            completo.add(fondo);
            completo.add(qrCode);

            biglietto.add(completo);
        }
        biglietto.close();
    }

    /**
     * Ritorna il PDF
     * @return output stream contenente il PDF
     */
    public ByteArrayOutputStream getPDF() {
        return datiBiglietto;
    }

    /**
     * Cambia le prenotazioni attuali con quelle passate in input
     * @param prenotazioni Lista di prenotazioni
     */
    public void setPrenotazioni(ArrayList<Prenotazione> prenotazioni) {
        this.prenotazioni = prenotazioni;
    }

}