com.PDF.Resume.java Source code

Java tutorial

Introduction

Here is the source code for com.PDF.Resume.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 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;
    }

}