edu.bedelias.utils.ReportsService.java Source code

Java tutorial

Introduction

Here is the source code for edu.bedelias.utils.ReportsService.java

Source

package edu.bedelias.utils;

import java.io.FileOutputStream;
import java.util.Date;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import edu.bedelias.entities.Curso;
import edu.bedelias.entities.Evaluacion;
import edu.bedelias.entities.Examen;
import edu.bedelias.entities.Student;

/**
 * Stolen from http://www.vogella.com/articles/JavaPDF/article.html
 * 
 * @author Lars Vogel
 * 
 *         --Gas
 * 
 */
public class ReportsService {

    private static final String PDF_TITLE = "Reporte PDF autogenerado";
    private static final String PDF_SUBJECT = "Creado utilizando iText";
    private static final String PDF_KEYWORDS = "Bedelias, Activiti, UdelaR, Java, PDF, iText";
    private static final String PDF_AUTHOR = "SGB TecnoInf - Activiti";

    private static String FILE_PATH = System.getProperty("user.home");
    private static String FILE_SEPARATOR = System.getProperty("file.separator");
    private static String FILE_FOLDER = FILE_PATH + FILE_SEPARATOR + "reportes" + FILE_SEPARATOR;

    private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD);
    private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL, BaseColor.RED);
    private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.BOLD);
    private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD);

    public static void print(String title, String author, String subject, String keywords, String creator,
            String filename) {
        try {
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(FILE_FOLDER + filename));
            document.open();
            addMetaData(document);
            addTitlePage(title, author, document);
            // addContent(document);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Adds metadata info to the generated file. This info can be viewed in under File -> Properties
     * 
     * @param title
     *            file title
     * @param author
     *            name of the author
     * @param subject
     *            { metadata }
     * @param keywords
     *            { metadata, comma-separated values }
     * @param creator
     *            { metadata, file creator }
     * @param document
     *            file to be modified
     */
    private static void addMetaData(String title, String author, String subject, String keywords, String creator,
            Document document) {

        if (title == null || title.isEmpty()) {
            document.addTitle(PDF_TITLE);
        }

        if (subject == null || subject.isEmpty()) {
            document.addSubject(PDF_SUBJECT);
        }

        if (keywords == null || keywords.isEmpty()) {
            document.addKeywords(PDF_KEYWORDS);
        }

        if (author == null || author.isEmpty()) {
            document.addAuthor(PDF_AUTHOR);
        }

        if (creator == null || creator.isEmpty())
            document.addCreator(PDF_AUTHOR);
    }

    private static void addMetaData(Document document) {
        addMetaData(null, null, null, null, null, document);
    }

    private static void addTitlePage(String title, String user, Document document) throws DocumentException {

        Paragraph preface = new Paragraph();

        // We add one empty line
        addEmptyLine(preface, 1);

        // Lets write a big header
        if (title == null) {
            title = PDF_TITLE;
        }
        preface.add(new Paragraph(title, catFont));
        addEmptyLine(preface, 1);

        // Will create: Report generated by: _name, _date
        // System.getProperty("user.name")
        preface.add(new Paragraph("Reporte generado por: " + user + ", " + new Date(), smallBold));
        addEmptyLine(preface, 3);

        // preface.add(new Paragraph("Nuevo Sistema de Gestion de Bedelias",
        // smallBold));
        // addEmptyLine(preface, 8);

        // preface.add(new Paragraph(
        // "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.com ;-).",
        // redFont));
        document.add(preface);

        // Start a new page
        // document.newPage();
    }

    public static void imprimirActaCurso(java.util.List<Student> estudiantes, Curso curso) {
        try {
            Document document = new Document();
            String a = FILE_FOLDER + "acta_" + curso.getName() + ".pdf";
            PdfWriter.getInstance(document, new FileOutputStream(a));
            document.open();

            StringBuilder title = new StringBuilder("Resultados ");
            title.append(curso.getName());

            addTitlePage(title.toString(), "Bedelias Explorer", document);
            addMetaData(document);
            addStudentGrid(estudiantes, document);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void imprimirEscolaridad(Student student, java.util.List<Evaluacion> evaluaciones) {

        // FIXME implementar
        // TODO completar metodos
        // aca la joda es el estudiante con sus datos + imprimir uno a uno los
        // cursos de cada evaluacion
        // y su resultado correspondiente, falta ver de agregar los examenes
        // tambien
        return;
    }

    public static void imprimirActaExamen(java.util.List<Student> estudiantes, Examen examen) {

        try {
            Document document = new Document();
            PdfWriter.getInstance(document,
                    new FileOutputStream(FILE_FOLDER + "acta_" + examen.getAsignatura().getName() + ".pdf"));
            document.open();

            StringBuilder title = new StringBuilder("Resultados ");
            title.append(examen.getAsignatura().getName());

            addTitlePage(title.toString(), "Bedelias Explorer", document);
            addMetaData(document);
            addStudentGrid(estudiantes, document);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void addHeaderData(Document document, Curso curso) {
        // Next section
        Paragraph content = new Paragraph(curso.getName(), catFont);
    }

    private static void addStudentGrid(java.util.List<Student> students, Document document)
            throws DocumentException {
        Paragraph results = new Paragraph();

        // Add a table
        PdfPTable table = new PdfPTable(3);

        PdfPCell c1 = new PdfPCell(new Phrase("CI Estudiante"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Nombre Completo"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Resultado"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);
        table.setHeaderRows(1);

        for (Student s : students) {
            table.addCell(s.getCedula());
            table.addCell(s.getName());
            table.addCell("");
        }

        results.add(table);

        // Now add all this to the document
        document.add(results);
    }

    private static void addEmptyLine(Paragraph paragraph, int number) {
        for (int i = 0; i < number; i++) {
            paragraph.add(new Paragraph(" "));
        }
    }

}