Example usage for org.apache.pdfbox.pdmodel.font PDType1Font TIMES_BOLD

List of usage examples for org.apache.pdfbox.pdmodel.font PDType1Font TIMES_BOLD

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel.font PDType1Font TIMES_BOLD.

Prototype

PDType1Font TIMES_BOLD

To view the source code for org.apache.pdfbox.pdmodel.font PDType1Font TIMES_BOLD.

Click Source Link

Usage

From source file:au.org.alfred.icu.pdf.services.factories.ICUDischargeSummaryFactory.java

public static String createContent(PDDocument pdf, String icuVisitNumber, String visitNumber, String patientId,
        String userName, String userId) {
    InputStream is = null;/*from   w w  w  .j ava2  s . co  m*/
    int yCursor = 137;
    int temp = yCursor;

    DischargeSummaryData data = new DischargeSummaryData();
    PDPage pg_content;
    PDPageContentStream cs;
    String pdfName = DischargeSummaryDataBuilder.buildData(icuVisitNumber, visitNumber, patientId, userName,
            userId, data);
    try {

        pg_content = new PDPage(new PDRectangle(pageWidth, pageHeight));
        cs = new PDPageContentStream(pdf, pg_content);
        yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
        Paragraph para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getFinalDiagnosis());
        para.withColor(Color.BLACK);
        para.withFont(PDType1Font.TIMES_ROMAN, 12);
        para.withWidth(500);
        temp += para.getParaHeight();

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 14);
        cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
        cs.setNonStrokingColor(darkGreen);
        cs.drawString("Final Diagnosis");
        cs.endText();

        yCursor += para.getFontHeight() * para.getLines().size();

        if (yCursor > (pageHeight - footerHeight)) {
            pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
            cs = new PDPageContentStream(pdf, pg_content);
            yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
        }

        write(cs, para);

        yCursor += 25;
        para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getPresentingHx());
        para.withColor(Color.BLACK);
        para.withFont(PDType1Font.TIMES_ROMAN, 12);
        para.withWidth(500);
        temp = yCursor;
        temp += para.getParaHeight();
        if (temp > (pageHeight - footerHeight)) {
            pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
            cs = new PDPageContentStream(pdf, pg_content);
            yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getPresentingHx());
            para.withColor(Color.BLACK);
            para.withFont(PDType1Font.TIMES_ROMAN, 12);
            para.withWidth(500);

        }

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 14);
        cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
        cs.setNonStrokingColor(darkGreen);
        cs.drawString("Presenting History");
        cs.endText();
        yCursor += para.getFontHeight() * para.getLines().size();
        write(cs, para);

        yCursor += 25;
        para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getPastHx());
        para.withColor(Color.BLACK);
        para.withFont(PDType1Font.TIMES_ROMAN, 12);
        para.withWidth(500);
        temp = yCursor;
        temp += para.getParaHeight();
        if (temp > (pageHeight - footerHeight)) {
            pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
            cs = new PDPageContentStream(pdf, pg_content);
            yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getPastHx());
            para.withColor(Color.BLACK);
            para.withFont(PDType1Font.TIMES_ROMAN, 12);
            para.withWidth(500);

        }

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 14);
        cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
        cs.setNonStrokingColor(darkGreen);
        cs.drawString("Past History");
        cs.endText();
        yCursor += para.getFontHeight() * para.getLines().size();
        write(cs, para);

        yCursor += 25;
        para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getDisSumm());
        para.withColor(Color.BLACK);
        para.withFont(PDType1Font.TIMES_ROMAN, 12);
        para.withWidth(500);
        temp = yCursor;
        temp += para.getParaHeight();
        if (temp > (pageHeight - footerHeight)) {
            List<String> pages = new ArrayList<String>();
            int hght = para.getParaHeight();
            System.out.println("height " + hght);
            if (hght > pageHeight - footerHeight) {
                while (hght > pageHeight - footerHeight) {
                    String div = data.getDisSumm().substring(0, data.getDisSumm().length() / 2);
                    Paragraph p = new Paragraph(leftMargin + 5, pageHeight - 147 - 15, div);
                    hght = p.getParaHeight();
                    pages.add(div);
                }
            }
            System.out.println("Pages: " + pages.size());
            if (pages.size() > 1) {
                Iterator itr = pages.iterator();
                while (itr.hasNext()) {
                    String inner = (String) itr.next();
                    pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                    cs = new PDPageContentStream(pdf, pg_content);
                    yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
                    para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, inner);
                    para.withColor(Color.BLACK);
                    para.withFont(PDType1Font.TIMES_ROMAN, 12);
                    para.withWidth(500);
                    cs.beginText();
                    cs.setFont(PDType1Font.TIMES_BOLD, 14);
                    cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
                    cs.setNonStrokingColor(darkGreen);
                    cs.drawString("ICU Stay Summary");
                    cs.endText();
                    yCursor += para.getFontHeight() * para.getLines().size();
                    write(cs, para);
                }
            } else {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
                para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getDisSumm());
                para.withColor(Color.BLACK);
                para.withFont(PDType1Font.TIMES_ROMAN, 12);
                para.withWidth(500);
            }

        }

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 14);
        cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
        cs.setNonStrokingColor(darkGreen);
        cs.drawString("ICU Stay Summary");
        cs.endText();
        yCursor += para.getFontHeight() * para.getLines().size();
        write(cs, para);

        yCursor += 25;
        para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getPendingInvestigations());
        para.withColor(Color.BLACK);
        para.withFont(PDType1Font.TIMES_ROMAN, 12);
        para.withWidth(500);
        temp = yCursor;
        temp += para.getParaHeight();
        if (temp > (pageHeight - footerHeight)) {
            pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
            cs = new PDPageContentStream(pdf, pg_content);
            yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getPendingInvestigations());
            para.withColor(Color.BLACK);
            para.withFont(PDType1Font.TIMES_ROMAN, 12);
            para.withWidth(500);

        }

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 14);
        cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
        cs.setNonStrokingColor(darkGreen);
        cs.drawString("Current Pending Investigations");
        cs.endText();
        yCursor += para.getFontHeight() * para.getLines().size();
        write(cs, para);

        yCursor += 25;

        if (yCursor > (pageHeight - footerHeight)) {
            pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
            cs = new PDPageContentStream(pdf, pg_content);
            yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
        }

        if (data.getMicro() != null) {
            int k = 0;
            String[][] table = new String[data.getMicro().size() + 1][6];
            table[k][0] = "Date";
            table[k][1] = "Site";
            table[k][2] = "Organism";
            table[k][3] = "Sensitivity";
            table[k][4] = "";
            table[k][5] = "";
            k++;
            for (Iterator<TblMicroResults> i = data.getMicro().iterator(); i.hasNext();) {
                TblMicroResults m = i.next();
                table[k][0] = m.getMTime() == null ? "N/A"
                        : new SimpleDateFormat("dd/MM/yy").format(m.getMTime());
                table[k][1] = m.getMSite() == null ? "N/A" : m.getMSite();
                table[k][2] = m.getMOrg() == null ? "N/A" : m.getMOrg();
                table[k][3] = m.getMSens() == null ? "N/A" : m.getMSens();
                table[k][4] = "";
                table[k][5] = "";
                k++;
            }

            //System.out.println(yCursor);
            temp = getTableHeight(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);
            if ((yCursor + temp + 30) > (pageHeight - footerHeight)) {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            }
            yCursor += 25;
            cs.beginText();
            cs.setFont(PDType1Font.TIMES_BOLD, 14);
            cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
            cs.setNonStrokingColor(darkGreen);
            cs.drawString("Microbiology Results");
            cs.endText();

            yCursor += 10;

            yCursor += drawTable(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);

        }

        if (data.getOther() != null) {
            int k = 0;
            String[][] table = new String[data.getOther().size() + 1][6];
            table[k][0] = "Date";
            table[k][1] = "Investigation";
            table[k][2] = "Results";
            table[k][3] = "";
            table[k][4] = "";
            table[k][5] = "";
            k++;
            for (Iterator<TblOtherResults> i = data.getOther().iterator(); i.hasNext();) {
                TblOtherResults m = i.next();
                table[k][0] = m.getOTime() == null ? "N/A"
                        : new SimpleDateFormat("dd/MM/yy").format(m.getOTime());
                table[k][1] = m.getOInv() == null ? "N/A" : m.getOInv();
                table[k][2] = m.getOResult() == null ? "N/A" : m.getOResult();
                table[k][3] = "";
                table[k][4] = "";
                table[k][5] = "";
                k++;
            }

            yCursor += 10;
            temp = getTableHeight(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);
            if ((yCursor + temp + 30) > (pageHeight - footerHeight)) {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            }
            yCursor += 25;

            cs.beginText();
            cs.setFont(PDType1Font.TIMES_BOLD, 14);
            cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
            cs.setNonStrokingColor(darkGreen);
            cs.drawString("Other Significant Results");
            cs.endText();
            yCursor += 10;
            yCursor += drawTable(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);

        }

        if (data.getAntibiotics() != null) {
            int k = 0;
            String[][] table = new String[data.getAntibiotics().size() + 1][6];
            table[k][0] = "Start Date";
            table[k][1] = "Suggested End Date";
            table[k][2] = "Antibiotic";
            table[k][3] = "Indication";
            table[k][4] = "";
            table[k][5] = "";

            k++;
            for (Iterator<TblAntibiotic> i = data.getAntibiotics().iterator(); i.hasNext();) {
                TblAntibiotic m = i.next();
                table[k][0] = m.getAStart() == null ? "N/A"
                        : new SimpleDateFormat("dd/MM/yy").format(m.getAStart());
                table[k][1] = m.getAEnd() == null ? "N/A" : m.getAEnd();
                table[k][2] = m.getAAntibiotic() == null ? "N/A" : m.getAAntibiotic();
                table[k][3] = m.getAIndication() == null ? "N/A" : m.getAIndication();
                table[k][4] = "";
                table[k][5] = "";
                k++;
            }

            temp = getTableHeight(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);
            if ((yCursor + temp + 30) > (pageHeight - footerHeight)) {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            }
            yCursor += 25;

            cs.beginText();
            cs.setFont(PDType1Font.TIMES_BOLD, 14);
            cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
            cs.setNonStrokingColor(darkGreen);
            cs.drawString("Current Antibiotic Plans");
            cs.endText();
            yCursor += 10;
            yCursor += drawTable(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);

        }

        if (data.getNeuro() != null) {
            int k = 0;
            String[][] table = new String[data.getNeuro().size() + 1][7];
            table[k][0] = "GCS-E";
            table[k][1] = "GCS-V";
            table[k][2] = "GCS-M";
            table[k][3] = "Upper Motor";
            table[k][4] = "Upper Sensation";
            table[k][5] = "Lower Motor";
            table[k][6] = "Lower Sensation";

            k++;
            for (TblNeurology m : data.getNeuro()) {
                table[k][0] = m.getNGcsE() != null ? m.getNGcsE() : "N/A";
                table[k][1] = m.getNGcsV() != null ? m.getNGcsV() : "N/A";
                table[k][2] = m.getNGcsM() != null ? m.getNGcsM() : "N/A";
                table[k][3] = m.getNUpperMotor() != null ? m.getNUpperMotor() : "N/A";
                table[k][4] = m.getNUpperSens() != null ? m.getNUpperSens() : "N/A";
                table[k][5] = m.getNLowerMotor() != null ? m.getNLowerMotor() : "N/A";
                table[k][6] = m.getNLowerSense() != null ? m.getNLowerSense() : "N/A";
                k++;
            }

            //System.out.println(table[1][1]);

            temp = getTableHeight(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);
            if ((yCursor + temp + 30) > (pageHeight - footerHeight)) {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            }
            yCursor += 25;

            cs.beginText();
            cs.setFont(PDType1Font.TIMES_BOLD, 14);
            cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
            cs.setNonStrokingColor(darkGreen);
            cs.drawString("Current Neurological Exam");
            cs.endText();
            yCursor += 10;
            yCursor += drawTable(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);

        }

        if (data.getProcs() != null) {
            int k = 0;
            String[][] table = new String[data.getProcs().size() + 1][6];
            table[k][0] = "Start Date";
            table[k][1] = "System";
            table[k][2] = "Intervention";
            table[k][3] = "Type";
            table[k][4] = "Site";
            table[k][5] = "Side";
            k++;
            for (Iterator<VwSiss> i = data.getProcs().iterator(); i.hasNext();) {
                VwSiss m = i.next();
                if (m.getSissEndDate() == null) {
                    table[k][0] = new SimpleDateFormat("dd/MM/yy").format(m.getSissStartDate());
                    table[k][1] = m.getSissSystemDesc() == null ? "-" : m.getSissSystemDesc();
                    table[k][2] = m.getSissInterventionDesc() == null ? "-" : m.getSissInterventionDesc();
                    table[k][3] = m.getSissTypeDesc() == null ? "-" : m.getSissTypeDesc();
                    table[k][4] = m.getSissSiteDesc() == null ? "-" : m.getSissSiteDesc();
                    table[k][5] = m.getSissSideDesc() == null ? "-" : m.getSissSideDesc();
                    //System.out.println(table[k][2]);
                    k++;
                }
            }

            temp = getTableHeight(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);
            if ((yCursor + temp + 30) > (pageHeight - footerHeight)) {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            }

            yCursor += 25;
            cs.beginText();
            cs.setFont(PDType1Font.TIMES_BOLD, 14);
            cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
            cs.setNonStrokingColor(darkGreen);
            cs.drawString("Current In-Situ Devices");
            cs.endText();

            yCursor += 10;

            yCursor += drawTable(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);

        }

        yCursor += 25;
        para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getActiveProblems());
        para.withColor(Color.BLACK);
        para.withFont(PDType1Font.TIMES_ROMAN, 12);
        para.withWidth(500);
        temp = yCursor;
        temp += para.getParaHeight();
        if (temp > (pageHeight - footerHeight)) {
            pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
            cs = new PDPageContentStream(pdf, pg_content);
            yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, data.getActiveProblems());
            para.withColor(Color.BLACK);
            para.withFont(PDType1Font.TIMES_ROMAN, 12);
            para.withWidth(500);

        }

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 14);
        cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
        cs.setNonStrokingColor(darkGreen);
        cs.drawString("Ongoing Issues & Plan");
        cs.endText();
        yCursor += para.getFontHeight() * para.getLines().size();
        write(cs, para);

        // Add Nursing Plan
        pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
        cs = new PDPageContentStream(pdf, pg_content);
        yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 14);
        cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
        cs.setNonStrokingColor(darkGreen);
        cs.drawString("Nursing Plan");
        cs.endText();

        Iterator itr = data.getNursingPlans().keySet().iterator();
        while (itr.hasNext()) {
            String heading = (String) itr.next();
            //System.out.println(heading);
            List<TblCarePlan> plans = (List<TblCarePlan>) data.getNursingPlans().get(heading);
            if (plans.size() > 0) {
                TblCarePlan plan = plans.get(0);
                yCursor += 25;
                para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, plan.getCarePlanNote());
                para.withColor(Color.BLACK);
                para.withFont(PDType1Font.TIMES_ROMAN, 12);
                para.withWidth(500);
                temp = yCursor;
                temp += para.getParaHeight();
                if (temp > (pageHeight - footerHeight)) {
                    pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                    cs = new PDPageContentStream(pdf, pg_content);
                    yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
                    para = new Paragraph(leftMargin + 5, pageHeight - yCursor - 15, plan.getCarePlanNote());
                    para.withColor(Color.BLACK);
                    para.withFont(PDType1Font.TIMES_ROMAN, 12);
                    para.withWidth(500);

                }

                cs.beginText();
                cs.setFont(PDType1Font.TIMES_BOLD, 14);
                cs.moveTextPositionByAmount(leftMargin, pageHeight - yCursor);
                cs.setNonStrokingColor(darkGreen);
                cs.drawString(heading + " [" + DateFormat.getInstance().format(plan.getUpdateDate()) + "]");
                cs.endText();
                yCursor += para.getFontHeight() * para.getLines().size();
                write(cs, para);
            }

        }
        cs.close();
        pdf.addPage(pg_content);
    } catch (IOException ex) {
        java.util.logging.Logger.getLogger(ICUDischargeSummaryFactory.class.getName()).log(Level.SEVERE, null,
                ex);
    } finally {
        try {
            if (is != null) {
                is.close();
            }
        } catch (IOException ex) {
            java.util.logging.Logger.getLogger(ICUDischargeSummaryFactory.class.getName()).log(Level.SEVERE,
                    null, ex);
        }
    }

    return pdfName;

}

From source file:au.org.alfred.icu.pdf.services.factories.ICUDischargeSummaryFactory.java

public static void createPageTemplate(PDPageContentStream cs, int leftMargin, int pageHeight, int pageWidth,
        DischargeSummaryData data) throws IOException {

    //cs.addRect(0, 0, 595, 127);
    cs.setNonStrokingColor(171, 221, 171);
    cs.fillRect(leftMargin, pageHeight - 127, pageWidth - leftMargin, 127);
    cs.setNonStrokingColor(255, 255, 255);
    cs.fillRect(345 + leftMargin, pageHeight - 120, 210, 110);

    cs.setNonStrokingColor(Color.BLACK);
    cs.beginText();//from ww  w.  j a va  2s .c  o  m
    cs.setFont(PDType1Font.TIMES_BOLD, 14);
    cs.moveTextPositionByAmount(430 + leftMargin + 10, pageHeight - 22);
    cs.drawString("MRN: " + data.getPatientId());
    cs.endText();
    cs.beginText();
    cs.setFont(PDType1Font.TIMES_ROMAN, 8);
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 25);
    cs.drawString("Visit: " + data.getVisitNumber());
    cs.endText();
    cs.beginText();
    cs.setFont(PDType1Font.TIMES_BOLD, 12);
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 50);
    cs.drawString(data.getPatientFamilyName());
    cs.endText();
    cs.beginText();
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 63);
    cs.drawString(data.getPatientGivenName() + " " + (data.getPatientMiddleName()));
    cs.endText();
    cs.beginText();
    cs.setFont(PDType1Font.TIMES_ROMAN, 8);
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 75);
    cs.drawString(new String().concat("DOB: ").concat(data.getBirthDate()).concat("      ")
            .concat(data.getAge()).concat("yr"));
    cs.endText();
    cs.beginText();
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 85);
    cs.drawString(data.getSexDesc().toUpperCase());
    cs.endText();
    cs.beginText();
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 97);
    cs.drawString(data.getPatientAddress());
    cs.endText();
    cs.beginText();
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 107);
    cs.drawString(data.getUnitCode());
    cs.endText();
    cs.beginText();
    cs.moveTextPositionByAmount(350 + leftMargin, pageHeight - 117);
    cs.drawString(new String().concat("ADM: ").concat(data.getAdmDate()).concat("          F/C: ")
            .concat(data.getPayClass().toUpperCase()));
    cs.endText();
    cs.beginText();
    cs.setFont(PDType1Font.TIMES_BOLD, 10);
    cs.setNonStrokingColor(0, 153, 51);
    cs.moveTextPositionByAmount(5 + leftMargin, pageHeight - 25);
    cs.drawString("THE ALFRED");
    cs.endText();
    cs.beginText();
    cs.setFont(PDType1Font.TIMES_BOLD, 16);
    cs.moveTextPositionByAmount(5 + leftMargin, pageHeight - 87);
    cs.drawString("ICU DISCHARGE SUMMARY");
    cs.endText();
    if (data.getDisSumm() == null || data.getDisSumm().isEmpty() || data.getDisSumm().length() < 2) {
        cs.beginText();
        cs.setNonStrokingColor(Color.BLACK);
        cs.setFont(PDType1Font.TIMES_BOLD, 18);
        cs.moveTextPositionByAmount(5 + leftMargin, pageHeight - 107);
        cs.drawString("DISCHARGE SUMMARY INCOMPLETE");
        cs.endText();

    }
    cs.setNonStrokingColor(171, 221, 171);
    cs.fillRect(leftMargin, 0, 595, 42);
    cs.beginText();
    cs.setNonStrokingColor(0, 153, 51);
    cs.setFont(PDType1Font.TIMES_ROMAN, 10);
    cs.moveTextPositionByAmount(5 + leftMargin, pageHeight - 835);
    cs.drawString(new String().concat("This summary was generated ").concat(data.getUpdateDate()));
    cs.endText();
}

From source file:au.org.alfred.icu.pdf.services.factories.ICUDischargeSummaryFactory.java

private static int createNewPage(PDDocument pdf, PDPage pg_content, PDPageContentStream cs, int yCursor,
        DischargeSummaryData data) throws IOException {
    yCursor = 147;/* w  w w .  j av a 2s. c  o  m*/
    int temp = 0;
    createPageTemplate(cs, leftMargin, pageHeight, pageWidth, data);
    if (pdf.getNumberOfPages() == 0) {

        drawBox(cs, leftMargin, pageHeight - (yCursor + 51), 530, 72, 1, darkGreen, Color.WHITE);

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 10);
        cs.setNonStrokingColor(darkGreen);
        cs.moveTextPositionByAmount(5 + leftMargin, pageHeight - yCursor - 1);
        cs.drawString("ICU Admission Date");
        cs.endText();
        //cs.addRect(leftMargin+5, pageHeight-(yCursor+14), 100, 14);
        drawBoxAndText(cs, leftMargin + 5, pageHeight - (yCursor + 17), 100, 14, 1, darkGreen, Color.WHITE,
                Color.BLACK, data.getWardAdmDate(), PDType1Font.TIMES_ROMAN, 10);

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 10);
        cs.setNonStrokingColor(darkGreen);
        cs.moveTextPositionByAmount(110 + leftMargin, pageHeight - yCursor - 1);
        cs.drawString("ICU Discharge Date");
        cs.endText();
        //cs.addRect(leftMargin+5, pageHeight-(yCursor+14), 100, 14);
        drawBoxAndText(cs, leftMargin + 110, pageHeight - (yCursor + 17), 100, 14, 1, darkGreen, Color.WHITE,
                Color.BLACK, data.getWardExitDate(), PDType1Font.TIMES_ROMAN, 10);

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 10);
        cs.setNonStrokingColor(darkGreen);
        cs.moveTextPositionByAmount(leftMargin + 215, pageHeight - yCursor - 1);
        cs.drawString("ICU length of stay");
        cs.endText();
        //cs.addRect(leftMargin+5, pageHeight-(yCursor+14), 100, 14);
        drawBoxAndText(cs, leftMargin + 215, pageHeight - (yCursor + 17), 100, 14, 1, darkGreen, Color.WHITE,
                Color.BLACK, data.getLOSHours().concat(" hours (").concat(data.getLOSDays()).concat(" days)"),
                PDType1Font.TIMES_ROMAN, 10);

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 10);
        cs.setNonStrokingColor(darkGreen);
        cs.moveTextPositionByAmount(320 + leftMargin, pageHeight - yCursor - 1);
        cs.drawString("Delayed Discharge");
        cs.endText();
        //cs.addRect(leftMargin+5, pageHeight-(yCursor+14), 100, 14);
        drawBoxAndText(cs, leftMargin + 320, pageHeight - (yCursor + 17), 80, 14, 1, darkGreen, Color.WHITE,
                Color.BLACK, data.getDelayed(), PDType1Font.TIMES_ROMAN, 10);

        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 10);
        cs.setNonStrokingColor(darkGreen);
        cs.moveTextPositionByAmount(405 + leftMargin, pageHeight - yCursor - 1);
        cs.drawString("Early Discharge");
        cs.endText();
        //cs.addRect(leftMargin+5, pageHeight-(yCursor+14), 100, 14);
        drawBoxAndText(cs, leftMargin + 405, pageHeight - (yCursor + 17), 80, 14, 1, darkGreen, Color.WHITE,
                Color.BLACK, data.getEarlyDischarge(), PDType1Font.TIMES_ROMAN, 10);
        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 10);
        cs.setNonStrokingColor(darkGreen);
        cs.moveTextPositionByAmount(490 + leftMargin, pageHeight - yCursor - 1);
        cs.drawString("Adm #");
        cs.endText();
        //cs.addRect(leftMargin+5, pageHeight-(yCursor+14), 100, 14);
        drawBoxAndText(cs, leftMargin + 490, pageHeight - (yCursor + 17), 30, 14, 1, darkGreen, Color.WHITE,
                Color.BLACK, data.getAdmNumber(), PDType1Font.TIMES_ROMAN, 10);

        yCursor += 34;
        cs.beginText();
        cs.setFont(PDType1Font.TIMES_BOLD, 10);
        cs.setNonStrokingColor(darkGreen);
        cs.moveTextPositionByAmount(5 + leftMargin, pageHeight - yCursor - 1 + 7);
        cs.drawString("APACHE III-J Diagnosis");
        cs.endText();
        drawBoxAndText(cs, leftMargin + 120, pageHeight - yCursor - 1, 400, 15, 1, darkGreen, Color.WHITE,
                Color.BLACK, data.getApacheIII(), PDType1Font.TIMES_ROMAN, 10);

        if (data.getCurrentLocation() != null) {
            yCursor += 15;
            cs.beginText();
            cs.setFont(PDType1Font.TIMES_BOLD, 10);
            cs.setNonStrokingColor(darkGreen);
            cs.moveTextPositionByAmount(5 + leftMargin, pageHeight - yCursor - 1 + 7);
            cs.drawString("Destination");
            cs.endText();

            drawBoxAndText(cs, leftMargin + 120, pageHeight - yCursor - 1, 400, 15, 1, darkGreen, Color.WHITE,
                    Color.BLACK, data.getCurrentLocation().toUpperCase(), PDType1Font.TIMES_ROMAN, 10);
        }

        yCursor += 15;
        if (data.getResus() != null) {
            int k = 0;
            String[][] table = new String[data.getResus().size() + 1][6];
            table[k][0] = "For CPR";
            table[k][1] = "For Intubation";
            table[k][2] = "For Defib";
            table[k][3] = "For ICU Readmit";
            table[k][4] = "Modified MET Criteria?";
            table[k][5] = "";
            k++;
            for (TblResusPlan m : data.getResus()) {
                table[k][0] = m.getRCpr() ? "Yes" : "No";
                table[k][1] = m.getRIntub() ? "Yes" : "No";
                table[k][2] = m.getRDefib() ? "Yes" : "No";
                table[k][3] = m.getRReadmit() ? "Yes" : "No";
                table[k][4] = "".equals(m.getRMetReason()) ? "No" : m.getRMetReason();
                table[k][5] = "";
                k++;
            }

            //System.out.println(yCursor);
            temp = getTableHeight(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);
            if ((yCursor + temp + 30) > (pageHeight - footerHeight)) {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            }

            yCursor += 10;

            yCursor += drawTable(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);

            yCursor += 20;
        }

        if (data.getNic() != null) {
            int k = 0;
            String[][] table = new String[data.getNic().size() + 1][6];
            table[k][0] = "Assessed Nicotine Dependent";
            table[k][1] = "Management Offered";
            table[k][2] = "Assessment Date";
            table[k][3] = "Pharmacist";
            table[k][4] = "";
            table[k][5] = "";
            k++;
            for (TblNicotine m : data.getNic()) {
                table[k][0] = m.getNicDependent() == null ? "N/A" : (m.getNicDependent() == 1 ? "Yes" : "No");
                table[k][1] = m.getNicMgmOffered() == null ? "N/A" : (m.getNicMgmOffered() == 1 ? "Yes" : "No");
                table[k][2] = m.getNicDateAssess() == null ? "N/A"
                        : new SimpleDateFormat("dd/MM/yy").format(m.getNicDateAssess());
                table[k][3] = m.getNicPharmacist() == null ? "N/A" : m.getNicPharmacist();
                table[k][4] = "";
                table[k][5] = "";
                k++;
            }

            //System.out.println(yCursor);
            temp = getTableHeight(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);
            if ((yCursor + temp + 30) > (pageHeight - footerHeight)) {
                pg_content = newPageBuilder(pdf, pg_content, cs, data, yCursor);
                cs = new PDPageContentStream(pdf, pg_content);
                yCursor = createNewPage(pdf, pg_content, cs, yCursor, data);
            }

            yCursor += 10;

            yCursor += drawTable(pg_content, cs, pageHeight - yCursor, leftMargin, table,
                    PDType1Font.TIMES_BOLD, PDType1Font.TIMES_ROMAN, 10);

            yCursor += 20;
        }

    }

    return yCursor;

}

From source file:blankpdf.BlankPDF.java

public void TestePDF() {
    String fileName = "Sparta.pdf"; // name of our file

    PDDocument doc = new PDDocument();
    PDPage page = new PDPage();

    doc.addPage(page);//from w  w  w .  j  av a2  s  .com
    PDImageXObject imagem;
    PDPageContentStream content;
    try {
        content = new PDPageContentStream(doc, page);

        //OBSERVAO IMPORTANTE --
        //Para funcionar sem tratamento de string criar o projeto em pasta sem caracteres
        //especiais nem ESPAO EM BRANCO
        imagem = PDImageXObject.createFromFile(getClass().getResource("sparta.png").getPath(), doc);
        ///Users/marcelosiedler/Google%20Drive/bage/2016_02/BlankPDF/build/classes/blankpdf/silviosantos.jpg
        //imagem = PDImageXObject.createFromFile("/Users/marcelosiedler/Google Drive/bage/2016_02/BlankPDF/build/classes/blankpdf/sparta.png", doc);

        content.beginText();
        content.setFont(PDType1Font.TIMES_BOLD, 26);
        content.newLineAtOffset(10, 750);
        content.showText("Gincana IFSUL2");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.TIMES_BOLD, 16);
        content.newLineAtOffset(80, 700);
        content.showText("Turma : ");
        content.endText();

        content.drawImage(imagem, 75, 500);

        content.close();
        doc.save(fileName);
        doc.close();

        System.out.println("Arquivo criado em : " + System.getProperty("user.dir"));

    } catch (Exception e) {

        System.out.println(e.getMessage());

    }

}

From source file:com.baseprogramming.pdwriter.html.HtmlStyle.java

License:Apache License

private void createFontMap() {
    fontMap = new HashMap<>();
    fontMap.put("TIMES NEW ROMAN", PDType1Font.TIMES_ROMAN);
    fontMap.put("TIMES NEW ROMAN_BOLD", PDType1Font.TIMES_BOLD);
    fontMap.put("TIMES NEW ROMAN_ITALIC", PDType1Font.TIMES_ITALIC);
    fontMap.put("TIMES NEW ROMAN_OBLIQUE", PDType1Font.TIMES_ITALIC);
    fontMap.put("TIMES NEW ROMAN_BOLD_ITALIC", PDType1Font.TIMES_BOLD_ITALIC);

    fontMap.put("COURIER", PDType1Font.COURIER);
    fontMap.put("COURIER_BOLD", PDType1Font.COURIER_BOLD);
    fontMap.put("COURIER_ITALIC", PDType1Font.COURIER_OBLIQUE);
    fontMap.put("COURIER_OBLIQUE", PDType1Font.COURIER_OBLIQUE);
    fontMap.put("COURIER_BOLD_ITALIC", PDType1Font.COURIER_BOLD_OBLIQUE);

    fontMap.put("HELVATICA", PDType1Font.TIMES_ROMAN);
    fontMap.put("HELVATICA_ITALIC", PDType1Font.HELVETICA_BOLD);
    fontMap.put("HELVATICA_OBLIQUE", PDType1Font.HELVETICA_BOLD);
    fontMap.put("HELVATICA_BOLD_ITALIC", PDType1Font.HELVETICA_OBLIQUE);
    fontMap.put("HELVATICA_BOLD_ITALIC", PDType1Font.HELVETICA_BOLD_OBLIQUE);
}

From source file:com.baseprogramming.pdwriter.PdWriterTest.java

License:Apache License

@Test
public void testWriteTable() {
    List<Map<String, Object>> data = getDataTable(50);

    final File file = new File("C:/tmp/test-PdWriter-PdTable.pdf");
    Margin margin = new Margin(0.75f, 0.2f, 0.5f, 0.5f);

    try (PDDocument doc = new PDDocument()) {
        PdWriter writer = new PdWriter(doc, margin);

        PdTable table = writer.createTable("First Name", "Middle Name", "Last Name", "D.O.B", "Memo");

        Borders border = new Borders(3, 1, 2, 1);
        table.setCellPadding(new PdPoints(10));
        table.setRowBorder(1);// w  ww.j a va 2 s.  c  om
        table.setColumnBorder(1);
        table.setBorder(border);
        PdTableHeader header = table.getHeader();
        header.setFont(PDType1Font.TIMES_BOLD);
        table.calculateColumnWidths(data, 5);
        PdColumn memo = header.getColumn("Memo");
        memo.setWidth(new PdInch(2));
        for (PdColumn column : header.getColumns()) {
            System.out.printf("%s->%s\n", column.getName(), column.getWidth());
        }
        writer.write(table, data);

        doc.save(file);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

From source file:com.baseprogramming.pdwriter.PdWriterTest.java

License:Apache License

@Test
public void testBasicDemo() {
    try (PDDocument pdDoc = new PDDocument()) {
        Margin margin = new Margin(0.75f, 0.2f, 0.5f, 0.25f);
        PdWriter writer = new PdWriter(pdDoc, margin);

        PdParagraph title = writer.createParagraph();
        title.setFont(PDType1Font.TIMES_BOLD);
        title.setFontSize(24);/*from w  w w  . j  ava  2 s.  c  o m*/
        title.setAboveSpacing(new PdInch(0.75f));
        title.setBelowSpacing(new PdInch(0.75f));

        PdParagraph heading = writer.createParagraph();
        heading.setFont(PDType1Font.TIMES_BOLD_ITALIC);
        heading.setFontSize(16);
        heading.setAboveSpacing(new PdInch(0.1f));

        PdParagraph body = writer.createParagraph();
        body.setBelowSpacing(new PdInch(0.17f));

        PdParagraph code = writer.createParagraph();
        code.setFont(PDType1Font.COURIER);
        code.setBeforeTextIndent(new PdInch(0.5f));
        code.setAboveSpacing(new PdInch(0.1f));
        code.setBelowSpacing(new PdInch(0.1f));

        writer.write(title, "PdWriter Class");

        writeBasicParagraphDemo(writer, body, code, heading);

        writeListDemo(writer, body, code, heading);

        writeTableDemo(writer, heading, body, code);

        writeImageDemo(writer, heading, body, code);

        writeHtmlDemo(writer, heading, body, code);

        pdDoc.save(new File("c:/tmp/PdWriter-Demo.pdf"));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

From source file:com.baseprogramming.pdwriter.PdWriterTest.java

License:Apache License

private void writeTableDemo(PdWriter writer, PdParagraph heading, PdParagraph body, PdParagraph code)
        throws IOException {
    writer.write(heading, "Printing Tables");
    PdList list = writer.createNumberedPdList();
    list.setBelowSpacing(new PdInch(0.1f));
    writer.write(body,//from w w w  .  j  ava  2s. c  om
            "It is also possible to print a data table.  This is a more complex process, and requires the uses of three additional classes:");
    writer.write(list, "PdColumn", "PdTableHeader", "PdTable");
    writer.write(body,
            "The PdColumn class holds basic column information: label, name (for later reference and matching to the row data). and width.  The PdTableHeader class contains the column definitions (PdColumn list) as well as header font information.  Finally, the PdTable, which extends PdParagraph, contains the table header as well as additional border information.  This class is used by the PdWriter class to write the table--given the data set.  At the momment, the dat asset must passed as a list of mapps, with the map representing the a row, with keys that correspond to the name in the PdColumn entries in the PdTableHeader.  A PdTable instance can be created by calling one of the helper methods in the PdWriter class:");

    writer.write(code,
            "PdTable table = writer.createTable(\"First Name\",\"Middle Name\",\"Last Name\",\"D.O.B\",\"Memo\");");

    writer.write(body, "Or");

    writer.write(code, "PdTable table = writer.createTable()");

    writer.write(body, "The columns must be created and added later when using this method.");

    writer.write(body,
            "The table exterior borders, cell padding, cell spacing, row border, column borders can be speciried as follows:");

    writer.write(code,
            " Borders border= new Borders(3, 1, 2, 1);\n" + "table.setCellPadding(new PdPoints(10));\n"
                    + "table.setRowBorder(1);\n" + "table.setColumnBorder(1);\n" + "table.setBorder(border);");

    writer.write(body,
            "Consider that there exists a method called getDataTable(int) that generates the list of maps needed to supply the table data:");

    writer.write(code, "List<Map<String,Object>> data=getDataTable(10);");

    writer.write(body,
            "The column widths can be calculated automatically by calling the PdTable method calculateColumnWidths:");

    writer.write(code, "table.calculateColumnWidths(data, 5);");

    writer.write(body,
            "This method uses row count specified (5 in the this example) to calculate an adequate column width based on the column data size.  After having calculated, individual column widths can be updated as follows:");

    writer.write(code, "PdTableHeader header=table.getHeader();\n" + "header.setFont(PDType1Font.TIMES_BOLD);\n"
            + "PdColumn memo=header.getColumn(\"Memo\");\n" + "memo.setWidth(new PdInch(2));");

    writer.write(body, "Finally, the table can be printed as follows:");
    writer.write(code, "writer.write(table,data);");

    PdTable table = writer.createTable("First Name", "Middle Name", "Last Name", "D.O.B", "Memo");

    Borders border = new Borders(3, 1, 2, 1);
    table.setCellPadding(new PdPoints(10));
    table.setRowBorder(1);
    table.setColumnBorder(1);
    table.setBorder(border);
    table.setBelowSpacing(new PdInch(0.3f));

    PdTableHeader header = table.getHeader();
    header.setFont(PDType1Font.TIMES_BOLD);

    List<Map<String, Object>> data = getDataTable(10);
    table.calculateColumnWidths(data, 5);

    PdColumn memo = header.getColumn("Memo");
    memo.setWidth(new PdInch(2));

    writer.write(table, data);
}

From source file:com.fileOperations.EmailBodyToPDF.java

/**
 * Places the text of the email into the PDF
 *
 * @param eml EmailBodyPDF//from w  w w.  ja v  a2 s .c  om
 */
private static void createEmailBody(EmailBodyPDF eml) {
    PDDocument doc = null;
    PDPageContentStream contentStream = null;

    //Fonts used
    PDFont bodyTitleFont = PDType1Font.TIMES_BOLD;
    PDFont bodyFont = PDType1Font.TIMES_ROMAN;

    //Font Sizes
    float emailHeaderFontSize = 7;
    float leadingEmailHeader = 1.5f * emailHeaderFontSize;
    float bodyFontSize = 12;
    float leadingBody = 1.5f * bodyFontSize;

    try {
        //Create Document, Page, Margins.
        doc = new PDDocument();
        PDPage page = new PDPage();
        doc.addPage(page);
        contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);
        PDRectangle mediabox = page.getMediaBox();
        float margin = 72;
        float width = mediabox.getWidth() - 2 * margin;
        float startX = mediabox.getLowerLeftX() + margin;
        float startY = mediabox.getUpperRightY() - margin;
        float textYlocation = margin;

        //Set Line Breaks
        List<String> sentDateContent = PDFBoxTools.setLineBreaks(eml.getSentDate(), width, emailHeaderFontSize,
                bodyFont);
        List<String> recievedDateContent = PDFBoxTools.setLineBreaks(eml.getReceiveDate(), width,
                emailHeaderFontSize, bodyFont);
        List<String> toContent = PDFBoxTools.setLineBreaks(eml.getTo(), width, emailHeaderFontSize, bodyFont);
        List<String> fromContent = PDFBoxTools.setLineBreaks(eml.getFrom(), width, emailHeaderFontSize,
                bodyFont);
        List<String> ccContent = PDFBoxTools.setLineBreaks(eml.getCc(), width, emailHeaderFontSize, bodyFont);
        List<String> bccContent = PDFBoxTools.setLineBreaks(eml.getBcc(), width, emailHeaderFontSize, bodyFont);
        List<String> attachmentContent = PDFBoxTools.setLineBreaks(eml.getAttachments(), width,
                emailHeaderFontSize, bodyFont);
        List<String> subjectContent = PDFBoxTools.setLineBreaks(eml.getSubject(), width, bodyFontSize,
                bodyFont);
        List<String> bodyContent = PDFBoxTools.setLineBreaks(eml.getBody(), width, bodyFontSize, bodyFont);

        //Set Email Header
        contentStream.beginText();
        contentStream.setFont(bodyFont, emailHeaderFontSize);
        contentStream.setNonStrokingColor(Color.BLACK);
        contentStream.newLineAtOffset(startX, startY);

        //Set Date Sent
        if (!"".equals(eml.getSentDate())) {
            contentStream.setFont(bodyTitleFont, emailHeaderFontSize);
            contentStream.showText("Date Sent: ");
            contentStream.setFont(bodyFont, emailHeaderFontSize);
            contentStream.newLineAtOffset(0, -leadingEmailHeader);
            textYlocation += leadingEmailHeader;
            for (String line : sentDateContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }

                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingEmailHeader);
                textYlocation += leadingEmailHeader;
            }
        }

        //Set Date Received
        if (!"".equals(eml.getReceiveDate().trim())) {
            contentStream.setFont(bodyTitleFont, emailHeaderFontSize);
            contentStream.showText("Date Received: ");
            contentStream.setFont(bodyFont, emailHeaderFontSize);
            contentStream.newLineAtOffset(0, -leadingEmailHeader);
            textYlocation += leadingEmailHeader;
            for (String line : recievedDateContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }

                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingEmailHeader);
                textYlocation += leadingBody;
            }
        }
        contentStream.newLineAtOffset(0, -leadingBody);

        //Set From
        if (!"".equals(eml.getFrom().trim())) {
            contentStream.setFont(bodyTitleFont, emailHeaderFontSize);
            contentStream.showText("From: ");
            contentStream.setFont(bodyFont, emailHeaderFontSize);
            contentStream.newLineAtOffset(0, -leadingEmailHeader);
            textYlocation += leadingEmailHeader;
            for (String line : fromContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }
                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingEmailHeader);
                textYlocation += leadingEmailHeader;
            }
        }

        //Set To
        if (!"".equals(eml.getTo().trim())) {
            contentStream.setFont(bodyTitleFont, emailHeaderFontSize);
            contentStream.showText("To: ");
            contentStream.setFont(bodyFont, emailHeaderFontSize);
            contentStream.newLineAtOffset(0, -leadingEmailHeader);
            textYlocation += leadingEmailHeader;
            for (String line : toContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }
                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingEmailHeader);
                textYlocation += leadingEmailHeader;
            }
        }

        //Set CC
        if (!"".equals(eml.getCc().trim())) {
            contentStream.setFont(bodyTitleFont, emailHeaderFontSize);
            contentStream.showText("CC: ");
            contentStream.setFont(bodyFont, emailHeaderFontSize);
            contentStream.newLineAtOffset(0, -leadingEmailHeader);
            textYlocation += leadingEmailHeader;
            for (String line : ccContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }
                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingEmailHeader);
                textYlocation += leadingEmailHeader;
            }
        }

        //Set BCC
        if (!"".equals(eml.getBcc().trim())) {
            contentStream.setFont(bodyTitleFont, emailHeaderFontSize);
            contentStream.showText("BCC: ");
            contentStream.setFont(bodyFont, emailHeaderFontSize);
            contentStream.newLineAtOffset(0, -leadingEmailHeader);
            textYlocation += leadingEmailHeader;
            for (String line : bccContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }
                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingEmailHeader);
                textYlocation += leadingEmailHeader;
            }
        }

        //Set AttachmentList
        if (!"".equals(eml.getAttachments().trim())) {
            contentStream.setFont(bodyTitleFont, emailHeaderFontSize);
            contentStream.showText("Attachments: ");
            contentStream.setFont(bodyFont, emailHeaderFontSize);
            contentStream.newLineAtOffset(0, -leadingEmailHeader);
            textYlocation += leadingEmailHeader;
            for (String line : attachmentContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }
                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingEmailHeader);
                textYlocation += leadingEmailHeader;
            }
        }

        //Set Subject
        if (!"".equals(eml.getSubject().trim())) {
            contentStream.newLineAtOffset(0, -leadingBody);
            contentStream.newLineAtOffset(0, -leadingBody);
            contentStream.setFont(bodyTitleFont, bodyFontSize);
            contentStream.showText("Subject: ");
            contentStream.newLineAtOffset(0, -leadingBody);
            textYlocation += leadingBody;
            contentStream.setFont(bodyFont, bodyFontSize);
            for (String line : subjectContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingEmailHeader)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, emailHeaderFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }
                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingBody);
                textYlocation += leadingBody;
            }
        }
        if (!"".equals(eml.getBody().trim())) {
            // Set Email Body
            contentStream.newLineAtOffset(0, -leadingBody);
            contentStream.setFont(bodyTitleFont, bodyFontSize);
            contentStream.showText("Message: ");
            contentStream.setFont(bodyFont, bodyFontSize);
            contentStream.newLineAtOffset(0, -leadingBody);
            for (String line : bodyContent) {
                if (textYlocation > (mediabox.getHeight() - (margin * 2) - leadingBody)) {
                    contentStream.endText();
                    contentStream.close();
                    textYlocation = 0;

                    page = new PDPage();
                    doc.addPage(page);
                    contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, false);

                    contentStream.beginText();
                    contentStream.setFont(bodyFont, bodyFontSize);
                    contentStream.setNonStrokingColor(Color.BLACK);
                    contentStream.newLineAtOffset(startX, startY);
                }

                textYlocation += leadingBody;

                contentStream.showText(line);
                contentStream.newLineAtOffset(0, -leadingBody);
            }
            contentStream.endText();

        }
        contentStream.close();
        doc.save(eml.getFilePath() + eml.getFileName());
    } catch (IOException ex) {
        ExceptionHandler.Handle(ex);
    } finally {
        if (doc != null) {
            try {
                doc.close();
            } catch (IOException ex) {
                ExceptionHandler.Handle(ex);
            }
        }
    }
}

From source file:com.github.gujou.deerbelling.sonarqube.service.PdfApplicationGenerator.java

License:Open Source License

public static File generateFile(Project sonarProject, FileSystem sonarFileSystem, String sonarUrl,
        String sonarLogin, String sonarPassword, Map<String, Measure> sonarMeasures) {

    Resources sonarResources = ResourceGateway.getOpenIssues(sonarProject.getKey(), sonarUrl, sonarLogin,
            sonarPassword);/*from   w w w.jav  a  2s  .c om*/

    // Only one resource => call with sonarProject.getKey()
    Resource projectResource = sonarResources.getResource().get(0);

    for (Measure measure : projectResource.getMsr()) {

        System.out.println(measure.getKey() + " " + measure.getVal());

        sonarMeasures.put(measure.getKey(), measure);
    }

    String projectName = sonarProject.getName().replaceAll("[^A-Za-z0-9 ]", " ").trim().replaceAll(" +", " ");

    String filePath = sonarFileSystem.workDir().getAbsolutePath() + File.separator + "application_report_"
            + sonarProject.getEffectiveKey().replace(':', '-') + "."
            + ReportsKeys.APPLICATION_REPORT_TYPE_PDF_EXTENSION;

    File file = new File(filePath);

    String fontfile = "font/OpenSans-Regular.ttf";

    PDDocument doc = new PDDocument();
    try {

        initNewPage(doc);

        PDSimpleFont font = PDType1Font.TIMES_BOLD;
        PDSimpleFont fontItalic = PDType1Font.TIMES_BOLD_ITALIC;

        PDImageXObject smileLogo = createFromFile("/images/Logo_Smile.png", doc);

        leftImage(smileLogo, page, doc, 80, 166);

        positionHeight = (int) (page.getMediaBox().getHeight() / 2) - 65;

        centerText("Indicateurs du projet", font, 45, page, doc);

        int heightProjectName = maximizeText(projectName, font, page, doc);

        positionHeight = (int) (page.getMediaBox().getHeight()) - 280 + heightProjectName;

        positionLogoWidth = (int) (page.getMediaBox().getWidth() / 2) - 100;
        positionTitleWidth = (int) (page.getMediaBox().getWidth() / 2) - 100;

        PDImageXObject icon_lines = createFromFile("/images/Lines-50.png", doc);

        PDImageXObject icon_author = createFromFile("/images/Typewriter_With_Paper-50.png", doc);

        PDImageXObject icon_version = createFromFile("/images/Versions-50.png", doc);

        PDImageXObject icon_date = createFromFile("/images/Date_To-50.png", doc);

        PDImageXObject icon_ncloc = createFromFile("/images/CodeLines-52.png", doc);

        PDImageXObject icon_folders = createFromFile("/images/Folder-50.png", doc);

        PDImageXObject icon_packages = createFromFile("/images/Box-52.png", doc);

        PDImageXObject icon_classes = createFromFile("/images/CodeFile-50.png", doc);

        PDImageXObject icon_files = createFromFile("/images/File-50.png", doc);

        PDImageXObject icon_methods = createFromFile("/images/Settings_3-50.png", doc);

        PDImageXObject icon_accessors = createFromFile("/images/Accessors-50.png", doc);

        PDImageXObject icon_api = createFromFile("/images/API_Settings-50.png", doc);

        PDImageXObject icon_keyring = createFromFile("/images/Keys.png", doc);

        PDImageXObject icon_bug = createFromFile("/images/Bug-50.png", doc);

        PDImageXObject icon_balance = createFromFile("/images/Scales-50.png", doc);

        PDImageXObject icon_wightBugs = createFromFile("/images/Weight-Bug-50.png", doc);

        PDImageXObject icon_poison = createFromFile("/images/Poison-50.png", doc);

        PDImageXObject icon_fire = createFromFile("/images/Campfire-50.png", doc);

        PDImageXObject icon_major = createFromFile("/images/Error-50.png", doc);

        PDImageXObject icon_minor = createFromFile("/images/Attention-51.png", doc);

        PDImageXObject icon_info = createFromFile("/images/Info-50.png", doc);

        PDImageXObject icon_ok = createFromFile("/images/Ok-50.png", doc);

        PDImageXObject icon_open = createFromFile("/images/Open_Sign-50.png", doc);

        PDImageXObject icon_confirmed = createFromFile("/images/Law-50.png", doc);

        PDImageXObject icon_debt = createFromFile("/images/Banknotes-52.png", doc);

        PDImageXObject icon_codeGenerated = createFromFile("/images/CodeFactory-50.png", doc);

        PDImageXObject icon_linesGenerated = createFromFile("/images/LineFactory-50.png", doc);

        PDImageXObject icon_screen = createFromFile("/images/Screen_TV-52.png", doc);

        PDImageXObject icon_screenSimple = createFromFile("/images/Screen_Pion-52.png", doc);

        PDImageXObject icon_screenMedium = createFromFile("/images/Screen_Cheval-52.png", doc);

        PDImageXObject icon_screenComplex = createFromFile("/images/Screen_Queen-52.png", doc);

        PDImageXObject icon_xmlTotal = createFromFile("/images/Conf_File-50.png", doc);

        PDImageXObject icon_xmlSimple = createFromFile("/images/Conf_File_simple-50.png", doc);

        PDImageXObject icon_xmlMedium = createFromFile("/images/Conf_File_medium-50.png", doc);

        PDImageXObject icon_xmlComplex = createFromFile("/images/Conf_File_complex-50.png", doc);

        PDImageXObject icon_mulesoftOut = createFromFile("/images/icon-mulesoftm-out.png", doc);
        PDImageXObject icon_mulesoftIn = createFromFile("/images/icon-mulesoftm-in.png", doc);

        PDImageXObject icon_mulesoftFlow = createFromFile("/images/icon-mulesoftm-flow.png", doc);

        PDImageXObject icon_complexity = createFromFile("/images/Frankensteins_Monster-48.png", doc);

        PDImageXObject icon_complexityClass = createFromFile("/images/ComplexCodeFile-50.png", doc);

        PDImageXObject icon_complexityMethod = createFromFile("/images/WolfSettings-50.png", doc);

        PDImageXObject icon_complexityFile = createFromFile("/images/FreddyFile-50.png", doc);

        PDImageXObject icon_comments = createFromFile("/images/Quote-50.png", doc);

        PDImageXObject icon_javadoc = createFromFile("/images/Comments-API.png", doc);

        PDImageXObject icon_tests_fail = createFromFile("/images/Dizzy_Person_Filled-50.png", doc);

        PDImageXObject icon_tests_skip = createFromFile("/images/Fast_Forward-50.png", doc);

        PDImageXObject icon_tests_error = createFromFile("/images/Explosion-50.png", doc);

        PDImageXObject icon_tests = createFromFile("/images/Search-52.png", doc);

        PDImageXObject icon_tests_success = createFromFile("/images/Goal-50.png", doc);

        PDImageXObject icon_conditions_cover = createFromFile("/images/Waning_Gibbous-52.png", doc);

        PDImageXObject icon_tests_cover = createFromFile("/images/Checklist-50.png", doc);

        PDImageXObject icon_vulnerability_high = createFromFile("/images/Shark-52.png", doc);

        PDImageXObject icon_vulnerability_medium = createFromFile("/images/Bee-50.png", doc);

        PDImageXObject icon_vulnerability_low = createFromFile("/images/Black_Cat-50.png", doc);

        PDImageXObject icon_declared = createFromFile("/images/Sugar_Cubes-64.png", doc);

        PDImageXObject icon_unused = createFromFile("/images/Litter_Disposal-50.png", doc);

        PDImageXObject icon_undeclared = createFromFile("/images/Move_by_Trolley-50.png", doc);

        PDImageXObject icon_filecycle = createFromFile("/images/FileCycle.png", doc);

        PDImageXObject icon_packagecycle = createFromFile("/images/PackageCycle.png", doc);

        PDImageXObject icon_cut_files = createFromFile("/images/Cut-50.png", doc);

        PDImageXObject icon_chain = createFromFile("/images/Link-52.png", doc);

        PDImageXObject icon_cut_directories = createFromFile("/images/Chainsaw-52.png", doc);

        PDImageXObject icon_duplicate = createFromFile("/images/Feed_Paper-50.png", doc);

        PDImageXObject icon_duplicate_lines = createFromFile("/images/Line-Spacing-icon.png", doc);

        PDImageXObject icon_duplicate_packages = createFromFile("/images/DuplicateBlocks2.png", doc);

        PDImageXObject icon_dev_count = createFromFile("/images/Workers_Male-50.png", doc);
        PDImageXObject icon_dev_best = createFromFile("/images/Weightlifting_Filled-50.png", doc);
        PDImageXObject icon_dev_issues = createFromFile("/images/Full_of_Shit-50.png", doc);

        attribute(icon_author, 22, 22, " Guillaume Jourdan", fontItalic, 15, doc, DEFAULT_TEXT_COLOR);
        attribute(icon_version, 22, 22, " Version 1.0", fontItalic, 15, doc, DEFAULT_TEXT_COLOR); // TODO
        // switch
        // field
        // &
        // value
        // :
        // resource
        // =>
        // version

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.FRENCH);
        attribute(icon_date, 22, 22, simpleDateFormat.format(new Date()), fontItalic, 15, doc,
                DEFAULT_TEXT_COLOR); // TODO
        // switch
        // field
        // &
        // value
        // :
        // resource
        // =>
        // date

        initNewPage(doc);

        title("Project Sizing", font, 26, doc);

        attribute(icon_ncloc, 22, 22, sonarMeasures.get("ncloc"), true, " lines of code", font, 15, doc); // ncloc
        attribute(icon_lines, 22, 22, sonarMeasures.get("lines"), true, " lines", font, 15, doc); // lines
        // =>
        // TODO
        attribute(icon_classes, 22, 22, sonarMeasures.get("classes"), true, " classes", font, 15, doc); // classes
        attribute(icon_files, 22, 22, sonarMeasures.get("files"), true, " files", font, 15, doc); // files
        // =>
        // TODO
        attribute(icon_folders, 22, 22, sonarMeasures.get("directories"), true, " directories", font, 15, doc); // directories
        attribute(icon_packages, 22, 22, sonarMeasures.get("projects"), true, " modules", font, 15, doc); // projects
        attribute(icon_methods, 22, 22, sonarMeasures.get("functions"), true, " methods", font, 15, doc); // functions
        attribute(icon_accessors, 22, 22, sonarMeasures.get("accessors"), true, " getters and setters", font,
                15, doc); // accessors
        attribute(icon_api, 22, 22, sonarMeasures.get("public_api"), true, "  public API", font, 15, doc); // public_api
        attribute(icon_keyring, 22, 22, sonarMeasures.get("statements"), true, " statements", font, 15, doc); // statements
        attribute(icon_codeGenerated, 22, 22, sonarMeasures.get("generated_ncloc"), true,
                " generated code lines", font, 15, doc); // generated_ncloc
        attribute(icon_linesGenerated, 22, 22, sonarMeasures.get("generated_lines"), true, " generated lines",
                font, 15, doc); // generated_lines

        Measure totalPages = sonarMeasures.get("total_pages");
        Measure simplePages = sonarMeasures.get("simple_pages");
        Measure mediumPages = sonarMeasures.get("medium_pages");
        Measure complexPages = sonarMeasures.get("complex_pages");

        if (totalPages != null) {
            attribute(icon_screen, 22, 22, totalPages, true, totalPages.getLabel(), font, 15, doc);
        }
        if (simplePages != null) {
            attribute(icon_screenSimple, 22, 22, simplePages, true, simplePages.getLabel(), font, 15, doc);
        }
        if (mediumPages != null) {
            attribute(icon_screenMedium, 22, 22, mediumPages, true, mediumPages.getLabel(), font, 15, doc);
        }
        if (complexPages != null) {
            attribute(icon_screenComplex, 22, 22, complexPages, true, complexPages.getLabel(), font, 15, doc);
        }

        Measure xmlNbTotal = sonarMeasures.get("xmlNbTotal");
        Measure xmlSimpleNbTotal = sonarMeasures.get("xmlSimpleNbTotal");
        Measure xmlMediumNbTotal = sonarMeasures.get("xmlMediumNbTotal");
        Measure xmlComplexNbTotal = sonarMeasures.get("xmlComplexNbTotal");
        Measure muleOutputField = sonarMeasures.get("muleOutputField");
        Measure muleNbRequestField = sonarMeasures.get("muleNbRequestField");
        Measure muleNbFlow = sonarMeasures.get("muleNbFlow");
        Measure muleNbSubFlow = sonarMeasures.get("muleNbSubFlow");

        if (xmlNbTotal != null) {
            attribute(icon_xmlTotal, 22, 22, xmlNbTotal, true, xmlNbTotal.getLabel(), font, 15, doc);
        }
        if (xmlSimpleNbTotal != null) {
            attribute(icon_xmlSimple, 22, 22, xmlSimpleNbTotal, true, xmlSimpleNbTotal.getLabel(), font, 15,
                    doc);
        }
        if (xmlMediumNbTotal != null) {
            attribute(icon_xmlMedium, 22, 22, xmlMediumNbTotal, true, xmlMediumNbTotal.getLabel(), font, 15,
                    doc);
        }
        if (xmlComplexNbTotal != null) {
            attribute(icon_xmlComplex, 22, 22, xmlComplexNbTotal, true, xmlComplexNbTotal.getLabel(), font, 15,
                    doc);
        }
        if (muleOutputField != null) {
            attribute(icon_mulesoftOut, 22, 22, muleOutputField, true, muleOutputField.getLabel(), font, 15,
                    doc);
        }
        if (muleNbRequestField != null) {
            attribute(icon_mulesoftIn, 22, 22, muleNbRequestField, true, muleNbRequestField.getLabel(), font,
                    15, doc);
        }
        if (muleNbFlow != null) {
            attribute(icon_mulesoftFlow, 22, 22, muleNbFlow, true, muleNbFlow.getLabel(), font, 15, doc);
        }
        if (muleNbSubFlow != null) {
            attribute(icon_mulesoftFlow, 22, 22, muleNbSubFlow, true, muleNbSubFlow.getLabel(), font, 15, doc);
        }

        title("Design", font, 26, doc);
        attribute(icon_packagecycle, 22, 22, sonarMeasures.get("package_cycles"), true,
                " package cycles detected", font, 15, doc); // package_cycles
        attribute(icon_cut_files, 22, 22, sonarMeasures.get("package_tangles"), true,
                " file dep. to cut cycles ", font, 15, doc, sonarMeasures.get("package_tangle_index"), true); // package_tangles
        // +
        // TODO
        // package_tangle_index
        // X
        attribute(icon_cut_directories, 22, 22, sonarMeasures.get("package_feedback_edges"), true,
                " package dep. to cut cycles", font, 15, doc); // package_feedback_edges
        attribute(icon_chain, 22, 22, sonarMeasures.get("package_edges_weight"), true,
                " file dep. betw. packages", font, 15, doc); // package_edges_weight X

        title("Complexity", font, 26, doc);
        attribute(icon_complexity, 22, 22, sonarMeasures.get("complexity"), true, " complexity index", font, 15,
                doc); // complexity
        attribute(icon_complexityClass, 22, 22, sonarMeasures.get("class_complexity"), true,
                " complexity index by class", font, 15, doc); // class_complexity
        attribute(icon_complexityFile, 22, 22, sonarMeasures.get("file_complexity"), true,
                " complexity index by file", font, 15, doc); // file_complexity
        attribute(icon_complexityMethod, 22, 22, sonarMeasures.get("function_complexity"), true,
                " complexity index by method", font, 15, doc); // function_complexity

        title("Duplications", font, 26, doc);
        attribute(icon_duplicate_lines, 22, 22, sonarMeasures.get("duplicated_lines"), true,
                " duplicated lines", font, 15, doc, sonarMeasures.get("duplicated_lines_density"), true); // duplicated_lines
        // +
        // duplicated_lines_density
        attribute(icon_duplicate, 22, 22, sonarMeasures.get("duplicated_files"), true, " involved files", font,
                15, doc); // duplicated_files
        attribute(icon_duplicate_packages, 22, 22, sonarMeasures.get("duplicated_blocks"), true,
                " duplicated blocks", font, 15, doc); // duplicated_blocks

        title("Sonarqube Issues", font, 26, doc);

        attribute(icon_bug, 22, 22, sonarMeasures.get("violations"), true, " issues", font, 15, doc); // violations
        // +
        // new
        // method
        // for
        // new_violations
        attribute(icon_poison, 22, 22, sonarMeasures.get("blocker_violations"), true, " blocker issues", font,
                15, doc); // blocker_violations + new method for
                                                                                                                                 // new_blocker_violations
        attribute(icon_fire, 22, 22, sonarMeasures.get("critical_violations"), true, " critical issues", font,
                15, doc); // critical_violations + new method for
                                                                                                                                 // new_critical_violations
        attribute(icon_major, 22, 22, sonarMeasures.get("major_violations"), true, " major issues", font, 15,
                doc); // major_violations
        // +
        // new
        // method
        // for
        // new_major_violations
        attribute(icon_minor, 22, 22, sonarMeasures.get("minor_violations"), true, " minor issues", font, 15,
                doc); // minor_violations
        // +
        // new
        // method
        // for
        // new_minor_violations
        // attribute(icon_info, 22, 22, "533", " info issues", font, 15,
        // doc); // info_violations + new method for new_info_violations
        // attribute(icon_ok, 22, 22, "533", " false positive issues", font,
        // 15, doc); // false_positive_issues
        // attribute(icon_open, 22, 22, "533", " open issues", font, 15,
        // doc); // open_issues
        // attribute(icon_confirmed, 22, 22, "533", " confirmed issues",
        // font, 15, doc); // confirmed_issues
        // attribute(icon_open, 22, 22, "533", " reopened issues", font, 15,
        // doc); // reopened_issues
        // attribute(icon_wightBugs, 22, 22, "533", " weighted issues",
        // font, 15, doc); // weighted_violations
        // attribute(icon_balance, 22, 22, "533", " rules compliance index",
        // font, 15, doc); // violations_density

        Measure squaleIndexMeasure = sonarMeasures.get("sqale_index");
        if (squaleIndexMeasure != null) {
            attribute(icon_debt, 22, 22, squaleIndexMeasure.getFrmt_val(), " Sqale technical debt", font, 15,
                    doc, null, false, SMILE_ORANGE_COLOR); // sqale_index
        }

        title("Documentation", font, 26, doc);

        attribute(icon_comments, 22, 22, sonarMeasures.get("comment_lines"), true, " comment lines", font, 15,
                doc, sonarMeasures.get("comment_lines_density"), true); // comment_lines
        // +
        // comment_lines_density

        Measure publicApiUndocMeasure = sonarMeasures.get("public_undocumented_api");

        if (publicApiUndocMeasure != null) {
            String publicApiUndocDensity = "100";
            Measure publicApiDocDensityMeasure = sonarMeasures.get("public_documented_api_density");
            if (publicApiDocDensityMeasure != null) {
                publicApiUndocDensity = decimalFormat.format(
                        100.0 - Float.parseFloat(sonarMeasures.get("public_documented_api_density").getVal()));
            }

            attribute(icon_javadoc, 22, 22, publicApiUndocMeasure, true, " public undoc. API", font, 15, doc,
                    new Measure(publicApiUndocDensity), true); // public_undocumented_api
            // + (1
            // -
            // public_documented_api_density
            // %)
        }
        title("OWASP plugin", font, 26, doc);

        attribute(icon_vulnerability_high, 22, 22, sonarMeasures.get("high_severity_vulns"), true,
                " high dep. vulnerabilities", font, 15, doc);
        attribute(icon_vulnerability_medium, 22, 22, sonarMeasures.get("medium_severity_vulns"), true,
                " medium dep. vulnerabilities", font, 15, doc);
        attribute(icon_vulnerability_low, 22, 22, sonarMeasures.get("low_severity_vulns"), true,
                " low dep. vulnerabilities", font, 15, doc);

        title("Unit Test", font, 26, doc);

        Measure testsMeasure = sonarMeasures.get("tests");

        if (testsMeasure == null) {
            attribute(icon_tests, 22, 22, "0", " unit tests", font, 15, doc, null, false, SMILE_ORANGE_COLOR);
            attribute(icon_tests_cover, 22, 22, "0", " covered lines", font, 15, doc, "0", true,
                    SMILE_ORANGE_COLOR);
        } else {
            attribute(icon_tests, 22, 22, testsMeasure, true, " unit tests", font, 15, doc);
            try {
                int nbTests = (int) Double.parseDouble(testsMeasure.getVal());
                Measure failureTestsMeasure = sonarMeasures.get("test_failures");
                Measure errorTestsMeasure = sonarMeasures.get("test_errors");
                int failureTests = failureTestsMeasure != null
                        ? (int) Double.parseDouble(failureTestsMeasure.getVal())
                        : 0;
                int errorTests = errorTestsMeasure != null
                        ? (int) Double.parseDouble(errorTestsMeasure.getVal())
                        : 0;
                int successTests = nbTests - failureTests - errorTests;
                float errorPercent = (errorTests * 100f) / nbTests;
                float failurePercent = (failureTests * 100f) / nbTests;

                Measure successPercentMeasure = sonarMeasures.get("test_success_density");
                String successPercent = successPercentMeasure != null ? successPercentMeasure.getVal()
                        : decimalFormat.format((successTests * 100) / nbTests);

                attribute(icon_tests_success, 22, 22, Integer.valueOf(successTests).toString(),
                        " tests in success", font, 15, doc, successPercent, true, SMILE_ORANGE_COLOR);
                attribute(icon_tests_fail, 22, 22, Integer.valueOf(failureTests).toString(),
                        " tests in failure", font, 15, doc, decimalFormat.format(failurePercent), true,
                        SMILE_ORANGE_COLOR);
                attribute(icon_tests_error, 22, 22, Integer.valueOf(errorTests).toString(), " tests in error",
                        font, 15, doc, decimalFormat.format(errorPercent), true, SMILE_ORANGE_COLOR);

                Measure coveragePercentMeasure = sonarMeasures.get("line_coverage");
                Measure uncoverMeasure = sonarMeasures.get("uncovered_lines");
                Measure totalLineToCoverMeasure = sonarMeasures.get("lines_to_cover");
                int uncover = uncoverMeasure != null ? (int) Double.parseDouble(uncoverMeasure.getVal()) : 0;
                int totalLineToCover = totalLineToCoverMeasure != null
                        ? (int) Double.parseDouble(totalLineToCoverMeasure.getVal())
                        : 0;
                if (coveragePercentMeasure != null) {
                    attribute(icon_tests_cover, 22, 22, Integer.valueOf(totalLineToCover - uncover).toString(),
                            " covered lines", font, 15, doc, coveragePercentMeasure.getVal(), true,
                            SMILE_ORANGE_COLOR);
                } else {
                    attribute(icon_tests_cover, 22, 22, "0", " covered lines", font, 15, doc, "0", true,
                            SMILE_ORANGE_COLOR);
                }

            } catch (NumberFormatException nfe) {
                System.err.println(nfe);
                nfe.printStackTrace();
            }
        }

        // attribute(icon_tests, 22, 22, sonarMeasures.get("tests"), " unit
        // tests", font, 15, doc); //tests + TODO test_execution_time
        // attribute(icon_tests_success, 22, 22, "0", " tests in success",
        // font, 15, doc, sonarMeasures.get("test_success_density"), true);
        // // calcul success + test_success_density
        // attribute(icon_tests_fail, 22, 22, "0", " tests in failure",
        // font, 15, doc); // test_failures + calcul fail density
        // attribute(icon_tests_error, 22, 22, "0", " tests in error", font,
        // 15, doc); // test_errors + calcul error density
        // attribute(icon_tests_skip, 22, 22, "0", " tests skipped", font,
        // 15, doc); // skipped_tests
        // attribute(icon_tests_cover, 22, 22,
        // sonarMeasures.get("line_coverage"), " covered lines", font, 15,
        // doc, sonarMeasures.get("lines_to_cover"), true); // line_coverage
        // => lines_to_cover
        // attribute(icon_conditions_cover, 22, 22, "4450", " uncovered
        // conditions", font, 15, doc, "85", true); // uncovered_conditions
        // + (100 - branch_coverage)

        // add XMP metadata
        XMPMetadata xmp = XMPMetadata.createXMPMetadata();

        try {
            DublinCoreSchema dc = xmp.createAndAddDublinCoreSchema();
            dc.setTitle(filePath);

            PDFAIdentificationSchema id = xmp.createAndAddPFAIdentificationSchema();
            id.setPart(1);
            id.setConformance("B");

            XmpSerializer serializer = new XmpSerializer();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            serializer.serialize(xmp, baos, true);

            PDMetadata metadata = new PDMetadata(doc);
            metadata.importXMPMetadata(baos.toByteArray());
            doc.getDocumentCatalog().setMetadata(metadata);
        } catch (BadFieldValueException e) {

            e.printStackTrace();
            // // won't happen here, as the provided value is valid
            // throw new IllegalArgumentException(e);
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // sRGB output intent
        // InputStream colorProfile =
        // CreatePDFA.class.getResourceAsStream("/usr/share/color/icc/colord/BestRGB.icc");
        // // /usr/share/color/icc/colord/sRGB.icc

        FileInputStream iccFile = new FileInputStream(new File("/usr/share/color/icc/colord/BestRGB.icc"));
        // PDOutputIntent intent = new PDOutputIntent(doc, colorProfile);
        PDOutputIntent intent = new PDOutputIntent(doc, iccFile);
        intent.setInfo("sRGB IEC61966-2.1");
        intent.setOutputCondition("sRGB IEC61966-2.1");
        intent.setOutputConditionIdentifier("sRGB IEC61966-2.1");
        intent.setRegistryName("http://www.color.org");
        doc.getDocumentCatalog().addOutputIntent(intent);

        doc.save(file);
    } catch (IOException e1) {

        // TODO Auto-generated catch block
        e1.printStackTrace();
    } finally {

        IOUtils.closeQuietly(doc);
    }
    return file;
}