Java tutorial
/* * 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 com.PDF; import com.model.Certificate; import com.model.Employee; import com.model.EmployeeHasEducation; import com.model.Preceeding; import com.model.Project; import com.model.SkillRating; import com.service.PreceedingService; import java.awt.image.BufferedImage; import java.io.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.imageio.ImageIO; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.*; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap; import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage; /** * * @author Alex */ public class Resume { private final ArrayList<EmployeeHasEducation> educationList; private final ArrayList<Certificate> certificateList; private final ArrayList<SkillRating> skillList; private final Employee user; private int pagenumber = 0; private final List<Preceeding> preceedings; private final String imagePath; public Resume(List<Preceeding> preceedings, Employee emp, ArrayList<EmployeeHasEducation> educationList, ArrayList<Certificate> certificateList, ArrayList<SkillRating> skillList, String imagePath) { this.imagePath = imagePath; this.preceedings = preceedings; this.user = emp; this.educationList = educationList; this.certificateList = certificateList; this.skillList = skillList; } public ByteArrayOutputStream createResume() throws ParseException, IOException, COSVisitorException { System.out.println(imagePath); // Create a document and add a page to it PDDocument document = new PDDocument(); PDPage page1 = new PDPage(PDPage.PAGE_SIZE_A4); // PDPage.PAGE_SIZE_LETTER is also possible PDRectangle rect = page1.getMediaBox(); // rect can be used to get the page width and height document.addPage(page1); // Create a new font object selecting one of the PDF base fonts PDFont fontPlain = PDType1Font.HELVETICA; // Start a new content stream which will "hold" the to be created content PDPageContentStream cos = new PDPageContentStream(document, page1); int line = 0; // Define a text content stream using the selected font, move the cursor and draw some text cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(475, rect.getHeight() - 800 * (++line)); cos.drawString("Pagina " + ++pagenumber); cos.endText(); line--; cos.beginText(); cos.setFont(fontPlain, 24); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 90 * (++line)); cos.drawString("Curriculum Vitae"); cos.endText(); if (user != null) { cos.beginText(); cos.setFont(fontPlain, 24); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 90 * (++line)); cos.drawString(user.getSurname() + ""); cos.endText(); } // add an image try { BufferedImage awtImage = ImageIO.read(new File( "C:\\ICT\\HBO\\Jaar 2\\Project Enterprise Web Apps\\Images\\Info-Support-klein-formaat-JPG.png")); PDXObjectImage ximage = new PDPixelMap(document, awtImage); float scale = 1f; // alter this value to set the image size cos.drawXObject(ximage, 350, 750, ximage.getWidth() * scale, ximage.getHeight() * scale); } catch (FileNotFoundException fnfex) { System.out.println("No image for you"); } // Make sure that the content stream is closed: cos.close(); //second page line = 0; PDPage page2 = new PDPage(PDPage.PAGE_SIZE_A4); document.addPage(page2); cos = new PDPageContentStream(document, page2); try { BufferedImage awtImage = ImageIO.read(new File( "C:\\ICT\\HBO\\Jaar 2\\Project Enterprise Web Apps\\Images\\Info-Support-klein-formaat-JPG.png")); PDXObjectImage ximage = new PDPixelMap(document, awtImage); float scale = 1f; // alter this value to set the image size cos.drawXObject(ximage, 350, 750, ximage.getWidth() * scale, ximage.getHeight() * scale); } catch (FileNotFoundException fnfex) { System.out.println("No image for you"); } cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(475, rect.getHeight() - 800 * (++line)); cos.drawString("Pagina " + ++pagenumber); cos.endText(); line--; cos.beginText(); cos.setFont(fontPlain, 18); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 90 * (++line)); cos.drawString("Personalia"); cos.endText(); line += 4; cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Naam:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getSurname() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Geslacht:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getGender() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Telefoonnummer:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getPersonalPhone() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Emailadres:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getPersonalEmail() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Adres:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getAddress() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Postcode:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getZipCode() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Stad:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getCity() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Provincie:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getRegion() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Functie:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getFunction() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Business Unit:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(user.getBusinessUnitAsString() + ""); cos.endText(); if (!educationList.isEmpty()) { line++; cos.beginText(); cos.setFont(fontPlain, 18); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Opleidingen"); cos.endText(); for (EmployeeHasEducation e : educationList) { cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("School:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(e.getEducation().getSchool() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Richting:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(e.getEducation().getDegree() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Niveau:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(e.getEducation().getGrade() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Begindatum:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(e.getStartDate().substring(0, 10) + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Einddatum:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(e.getEndDate().substring(0, 10) + ""); cos.endText(); } } if (!certificateList.isEmpty()) { line++; cos.beginText(); cos.setFont(fontPlain, 18); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Certificaten"); cos.endText(); for (Certificate c : certificateList) { cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Certificaat naam:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(c.getName() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Certificaat plaats:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(c.getCertificationAuthority() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Licentienummer:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(c.getLicenseNumber() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Startdatum:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(c.getStartDate().substring(0, 10) + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Einddatum:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(c.getExpirationDate().substring(0, 10) + ""); cos.endText(); line++; } line++; } cos.close(); if (!preceedings.isEmpty()) { line = 0; PDPage page3 = new PDPage(PDPage.PAGE_SIZE_A4); document.addPage(page3); cos = new PDPageContentStream(document, page3); try { BufferedImage awtImage = ImageIO.read(new File( "C:\\ICT\\HBO\\Jaar 2\\Project Enterprise Web Apps\\Images\\Info-Support-klein-formaat-JPG.png")); PDXObjectImage ximage = new PDPixelMap(document, awtImage); float scale = 1f; // alter this value to set the image size cos.drawXObject(ximage, 350, 750, ximage.getWidth() * scale, ximage.getHeight() * scale); } catch (FileNotFoundException fnfex) { System.out.println("No image for you"); } cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(475, rect.getHeight() - 800 * (++line)); cos.drawString("Pagina " + ++pagenumber); cos.endText(); line--; cos.beginText(); cos.setFont(fontPlain, 18); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 100 * (++line)); cos.drawString("Projecten"); line += 4; cos.endText(); for (Preceeding p : preceedings) { cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Projectnaam:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(p.getProject().getName() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Bedrijfsnaam:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(p.getProject().getCompany().getName() + " "); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Project rol:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(p.getDescription() + ""); cos.endText(); // } cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Startdatum:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(p.getProject().getStartDate() + ""); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Einddatum:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (line)); cos.drawString(p.getProject().getEndDate() + ""); cos.endText(); line++; } } cos.close(); //Skills of the user if (!skillList.isEmpty()) { line = 0; PDPage page3 = new PDPage(PDPage.PAGE_SIZE_A4); document.addPage(page3); cos = new PDPageContentStream(document, page3); try { BufferedImage awtImage = ImageIO.read(new File( "C:\\ICT\\HBO\\Jaar 2\\Project Enterprise Web Apps\\Images\\Info-Support-klein-formaat-JPG.png")); PDXObjectImage ximage = new PDPixelMap(document, awtImage); float scale = 1f; // alter this value to set the image size cos.drawXObject(ximage, 350, 750, ximage.getWidth() * scale, ximage.getHeight() * scale); } catch (FileNotFoundException fnfex) { System.out.println("No image for you"); } cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(475, rect.getHeight() - 800 * (++line)); cos.drawString("Pagina " + ++pagenumber); cos.endText(); line--; cos.beginText(); cos.setFont(fontPlain, 18); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 100 * (++line)); cos.drawString("Skills"); cos.endText(); line += 4; cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Skill & Rating:"); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(75, rect.getHeight() - 20 * (++line)); cos.drawString("Jaren ervaring:"); cos.endText(); line -= 2; for (SkillRating s : skillList) { cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (++line)); cos.drawString(s.getSkill().getName() + " niveau " + s.getRating()); cos.endText(); cos.beginText(); cos.setFont(fontPlain, 12); cos.setNonStrokingColor(0, 120, 201); cos.moveTextPositionByAmount(350, rect.getHeight() - 20 * (++line)); cos.drawString("" + s.getExpYears()); cos.endText(); line++; } } cos.close(); ByteArrayOutputStream output = new ByteArrayOutputStream(); document.save(output); document.close(); return output; } }