PdfGenerator.java 5.93 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
package com.roshka.service;

import java.io.ByteArrayOutputStream;
import java.util.Date;
import java.util.stream.Collectors;

import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;


import org.springframework.stereotype.Component;


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.pdf.PdfWriter;
import com.roshka.modelo.Estudio;
import com.roshka.modelo.Experiencia;
import com.roshka.modelo.Postulante;
import com.roshka.utils.Helper;

@Component("pdfGenerator")
public class PdfGenerator {

	private static Font COURIER = new Font(Font.FontFamily.COURIER, 20, Font.BOLD);
	private static Font COURIER_MEDIUM = new Font(Font.FontFamily.COURIER, 16, Font.BOLD);
	private static Font COURIER_SMALL = new Font(Font.FontFamily.COURIER, 14, Font.UNDERLINE);

	public byte[] generatePdfReport(Postulante postulante) {

		Document document = new Document();

		try {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
			PdfWriter.getInstance(document, byteArrayOutputStream);
			document.open();
			
			addDocTitle(document, postulante);
			createTable(document,postulante);
			
            
			document.close();
			System.out.println("------------------Your PDF Report is ready!-------------------------");
            return byteArrayOutputStream.toByteArray();

		} catch ( DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
            return null;
		}

	}

	private void addDocTitle(Document document, Postulante postulante) throws DocumentException {
		Paragraph p1 = new Paragraph();
		leaveEmptyLine(p1, 1);
		p1.add(new Paragraph("Detalles del postulante", COURIER));
		p1.setAlignment(Element.ALIGN_CENTER);
		document.add(p1);

	}
	private void agregarEncabezado(Document document, String titulo) throws DocumentException {
		
		Paragraph p1 = new Paragraph();
		p1.setAlignment(Element.ALIGN_CENTER);
		p1.add(new Paragraph(titulo, COURIER_MEDIUM));
		document.add(p1);

	}
	private void agregarSubEncabezado(Document document, String titulo) throws DocumentException {
		
		Paragraph p1 = new Paragraph();
		p1.setAlignment(Element.ALIGN_CENTER);
		p1.add(new Paragraph(titulo, COURIER_SMALL));
		document.add(p1);

	}

	private void agregarLabelTexto(Document document, String label, Object texto) throws DocumentException{
		if(texto == null) return;
		if(texto instanceof Date) texto = Helper.formatDate((Date)texto, "dd-MM-yyyy");
		Paragraph paragraph = new Paragraph();
		paragraph.add(label + ": ");
		paragraph.add(texto.toString());
		document.add(paragraph);
	}

 	private void createTable(Document document, Postulante postulante) throws DocumentException {
        
		Paragraph paragraph = new Paragraph();
		leaveEmptyLine(paragraph, 3);
        //paragraph.add();
		agregarEncabezado(document, "Datos personales");
        agregarLabelTexto(document, "Nombre", postulante.getNombre() + " " + postulante.getApellido());
        agregarLabelTexto(document, "Nro de Documento", postulante.getNroDocument());
        agregarLabelTexto(document, "Correo", postulante.getCorreo());
        agregarLabelTexto(document, "Direccion", postulante.getDireccion());
        agregarLabelTexto(document, "Ciudad", postulante.getCiudad().getNombre());
        agregarLabelTexto(document, "Telefono", postulante.getTelefono());
        agregarLabelTexto(document, "Edad", Helper.calculateAge(postulante.getFechaNacimiento()) );
        agregarLabelTexto(document, "Nivel de Ingles", postulante.getNivelIngles());
        agregarLabelTexto(document, "Nacionalidad", postulante.getNacionalidad().getDescripcion());

		agregarEncabezado(document, "Experiencias");

		for(Experiencia ex : postulante.getExperiencias()){
			agregarSubEncabezado(document, ex.getInstitucion());
			agregarLabelTexto(document, "Fecha Inicio", ex.getFechaDesde());
			agregarLabelTexto(document, "Fecha Fin", ex.getFechaHasta());
			agregarLabelTexto(document, "Cargo", ex.getCargo());
			agregarLabelTexto(document, "Tipo Experiencia", ex.getTipoExperiencia());
			agregarLabelTexto(document, "Descripcion", ex.getDescripcion());
			agregarLabelTexto(document, "Nombre Referencia", ex.getNombreReferencia());
			agregarLabelTexto(document, "Telefono Referencia", ex.getTelefonoReferencia());
			agregarLabelTexto(document, "Motivo Salida", ex.getMotivoSalida());
		}
		agregarEncabezado(document, "Estudios");

		for(Estudio ex : postulante.getEstudios()){
			agregarSubEncabezado(document, ex.getInstitucion().getNombre());
			agregarLabelTexto(document, "Fecha Inicio", ex.getFechaDesde());
			agregarLabelTexto(document, "Fecha Fin", ex.getFechaHasta());
			agregarLabelTexto(document, "Tema de Estudio", ex.getTemaDeEstudio());
			agregarLabelTexto(document, "Tipo de Estudio", ex.getTipoDeEstudio());
			agregarLabelTexto(document, "Descripcion", ex.getEstado().toString());
		}

		agregarEncabezado(document, "Cargo al cual postula");
		
		agregarList(postulante.getPostulaciones().stream()
					.map(cc -> cc.getCargo().getNombre())
					.collect(Collectors.toList()), document);
		
		agregarEncabezado(document, "Tecnologias");
		
		agregarList(postulante.getTecnologias().stream()
			.map(cc -> cc.getTecnologia().getNombre())
			.collect(Collectors.toList()), 
			document);

		agregarEncabezado(document, "Referencias Personales");

		agregarList(postulante.getReferencias().stream()
			.map(cc -> "Nombre: " + cc.getNombre() + ". Relacion: " + cc.getRelacion() +  ". Telefono: " + cc.getTelefono() )
			.collect(Collectors.toList()), 
			document);


	} 

	private void agregarList(java.util.List<String> items, Document document) throws DocumentException{
		List list = new List(false);
		for(String item : items){
			list.add(new ListItem(item));
		}
		document.add(list);
		
 
	}
	private static void leaveEmptyLine(Paragraph paragraph, int number) {
		for (int i = 0; i < number; i++) {
			paragraph.add(new Paragraph(" "));
		}
	}
	
}