Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
th-app-java
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Oscar Enrique Gonzalez Escurra
th-app-java
Commits
5658d28f
Commit
5658d28f
authored
Nov 23, 2021
by
Joel Florentin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
generar pdf de detalle postulante desde backend. estilo basico
parent
6726e237
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
250 additions
and
5 deletions
+250
-5
curriculumsearch/pom.xml
+7
-0
curriculumsearch/src/main/java/com/roshka/controller/PostulanteRRHHController.java
+23
-0
curriculumsearch/src/main/java/com/roshka/service/PdfGenerator.java
+169
-0
curriculumsearch/src/main/java/com/roshka/utils/Helper.java
+28
-3
curriculumsearch/src/main/webapp/jsp/convocatorias.jsp
+4
-2
curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp
+3
-0
curriculumsearch/src/main/webapp/jsp/dp.jsp
+16
-0
No files found.
curriculumsearch/pom.xml
View file @
5658d28f
...
@@ -92,6 +92,13 @@
...
@@ -92,6 +92,13 @@
<scope>
compile
</scope>
<scope>
compile
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
com.itextpdf
</groupId>
<artifactId>
itextpdf
</artifactId>
<version>
5.5.13
</version>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
curriculumsearch/src/main/java/com/roshka/controller/PostulanteRRHHController.java
View file @
5658d28f
...
@@ -20,6 +20,7 @@ import com.roshka.repositorio.ExperienciaRepository;
...
@@ -20,6 +20,7 @@ import com.roshka.repositorio.ExperienciaRepository;
import
com.roshka.repositorio.InstitucionRepository
;
import
com.roshka.repositorio.InstitucionRepository
;
import
com.roshka.repositorio.PostulanteRepository
;
import
com.roshka.repositorio.PostulanteRepository
;
import
com.roshka.repositorio.TecnologiaRepository
;
import
com.roshka.repositorio.TecnologiaRepository
;
import
com.roshka.service.PdfGenerator
;
import
com.roshka.utils.Helper
;
import
com.roshka.utils.Helper
;
...
@@ -169,5 +170,26 @@ public class PostulanteRRHHController {
...
@@ -169,5 +170,26 @@ public class PostulanteRRHHController {
}
}
}
}
@GetMapping
(
"/postulantes/{id}/pdf"
)
public
ResponseEntity
<
Resource
>
downloadPDF
(
@PathVariable
Long
id
)
{
// Load file from database
PdfGenerator
pdf
=
new
PdfGenerator
();
try
{
Postulante
postulante
=
post
.
findById
(
id
)
.
orElseThrow
(()
->
new
Exception
(
"Postulante no encontrado"
));
return
ResponseEntity
.
ok
()
.
contentType
(
MediaType
.
parseMediaType
(
"application/pdf"
))
.
header
(
HttpHeaders
.
CONTENT_DISPOSITION
,
"attachment; filename=\""
+
"aver.pdf"
+
"\""
)
.
body
(
new
ByteArrayResource
(
pdf
.
generatePdfReport
(
postulante
)));
}
catch
(
Exception
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
return
ResponseEntity
.
notFound
().
build
();
}
}
}
}
\ No newline at end of file
curriculumsearch/src/main/java/com/roshka/service/PdfGenerator.java
0 → 100644
View file @
5658d28f
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
(
" "
));
}
}
}
curriculumsearch/src/main/java/com/roshka/utils/Helper.java
View file @
5658d28f
...
@@ -3,9 +3,9 @@ package com.roshka.utils;
...
@@ -3,9 +3,9 @@ package com.roshka.utils;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.text.ParseException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
import
java.time.
YearMonth
;
import
java.time.
LocalDate
;
import
java.time.
ZoneOffset
;
import
java.time.
Period
;
import
java.time.
temporal.ChronoUnit
;
import
java.time.
format.DateTimeFormatter
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
...
@@ -46,6 +46,31 @@ public class Helper {
...
@@ -46,6 +46,31 @@ public class Helper {
return
Math
.
round
(
diff
/
30
.
d
)
;
return
Math
.
round
(
diff
/
30
.
d
)
;
}
}
public
static
LocalDate
convertToLocalDateViaSqlDate
(
Date
dateToConvert
)
{
return
new
java
.
sql
.
Date
(
dateToConvert
.
getTime
()).
toLocalDate
();
}
public
static
int
calculateAge
(
LocalDate
birthDate
,
LocalDate
currentDate
)
{
if
((
birthDate
!=
null
)
&&
(
currentDate
!=
null
))
{
return
Period
.
between
(
birthDate
,
currentDate
).
getYears
();
}
else
{
return
0
;
}
}
public
static
int
calculateAge
(
Date
birthDate
)
{
LocalDate
currentDate
=
LocalDate
.
now
();
return
calculateAge
(
convertToLocalDateViaSqlDate
(
birthDate
),
currentDate
);
}
public
static
String
formatDate
(
LocalDate
fecha
,
String
format
){
if
(
fecha
==
null
||
format
==
null
)
return
null
;
return
fecha
.
format
(
DateTimeFormatter
.
ofPattern
(
format
));
}
public
static
String
formatDate
(
Date
fecha
,
String
format
){
return
formatDate
(
convertToLocalDateViaSqlDate
(
fecha
),
format
);
}
public
static
DBFile
createFile
(
MultipartFile
file
)
{
public
static
DBFile
createFile
(
MultipartFile
file
)
{
// Normalize file name
// Normalize file name
String
fileName
=
StringUtils
.
cleanPath
(
file
.
getOriginalFilename
());
String
fileName
=
StringUtils
.
cleanPath
(
file
.
getOriginalFilename
());
...
...
curriculumsearch/src/main/webapp/jsp/convocatorias.jsp
View file @
5658d28f
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<layout:extends name="layouts/base.jsp">
<layout:extends name="layouts/base.jsp">
<layout:put block="cssDeclaracion" type="APPEND"></layout:put>
<layout:put block="cssDeclaracion" type="APPEND"></layout:put>
<layout:put block="contents" type="REPLACE">
<layout:put block="contents" type="REPLACE">
...
@@ -44,8 +46,8 @@
...
@@ -44,8 +46,8 @@
<th scope="row">${sta.index+1}</th>
<th scope="row">${sta.index+1}</th>
<td>${convocatoria.getCargo().getNombre()}</td>
<td>${convocatoria.getCargo().getNombre()}</td>
<td>${convocatoria.getEstado().getDescripcion()}</td>
<td>${convocatoria.getEstado().getDescripcion()}</td>
<td>
${convocatoria.getFechaInicio().toString().split(" ")[0]}
</td>
<td>
<fmt:formatDate value="${convocatoria.getFechaInicio()}" pattern="dd-MM-yyyy" />
</td>
<td>
${convocatoria.getFechaFin().toString().split(" ")[0]}
</td>
<td>
<fmt:formatDate value="${convocatoria.getFechaFin()}" pattern="dd-MM-yyyy" />
</td>
<td><a href="/postulantes?convId=${convocatoria.id}">Ver postulantes</a></td>
<td><a href="/postulantes?convId=${convocatoria.id}">Ver postulantes</a></td>
<td><button onclick=window.location.href="/convocatoria/${convocatoria.id}">Cerrar convocatoria</button></td>
<td><button onclick=window.location.href="/convocatoria/${convocatoria.id}">Cerrar convocatoria</button></td>
</tr>
</tr>
...
...
curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp
View file @
5658d28f
...
@@ -143,6 +143,9 @@
...
@@ -143,6 +143,9 @@
</c:when>
</c:when>
</c:choose>
</c:choose>
<div class="col">
<a class="btn btn-link" target="__blank" href="/postulantes/${postulante.id}/pdf">Obtener pdf</a>
</div>
</div>
</div>
</div>
</div>
...
...
curriculumsearch/src/main/webapp/jsp/dp.jsp
0 → 100644
View file @
5658d28f
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<layout:extends name="layouts/base.jsp">
<layout:put block="contents" type="REPLACE">
<h2 style="text-align: center;">
DETALLE POSTULANTE
</h2>
${postulante.nombre} ${postulante.apellido}
</layout:put>
</layout:extends>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment