private PdfPTable buildSaisine(Fiche fiche) {
    PdfPCell cell;
    PdfPTable table = new PdfPTable(new float[] {1, 2.6f, 1.2f, 1.2f});
    table.setWidthPercentage(100);

    cell = new PdfPCell(new Phrase("1_ Saisine ", FONT_NORMAL));
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    cell.setColspan(4);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Agent Créateur: ", FONT_NORMAL));
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    cell.setBorder(0);
    table.addCell(cell);

    Agent a = fiche.getHistoriques().iterator().next().getUtilisateur().getAgent();
    cell = new PdfPCell(new Phrase(a.getNom() + " " + a.getPrenom(), FONT_NORMAL));
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    cell.setColspan(3);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Cat. saisine: ", FONT_NORMAL));
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    cell.setBorder(0);
    table.addCell(cell);

    String catSaisine = fiche.getCategorieSaisine().getLibelleLong();

    cell = new PdfPCell(new Phrase(catSaisine, FONT_NORMAL));
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Contact interpolice: ", FONT_NORMAL));
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    cell.setBorder(0);
    table.addCell(cell);

    String contactInterpolice = fiche.getContactInterpolice().getLibelleLong();

    cell = new PdfPCell(new Phrase(contactInterpolice, FONT_NORMAL));
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Equipages: ", FONT_NORMAL));
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    cell.setBorder(0);
    table.addCell(cell);

    boolean premierePatrouille = true;

    if (fiche.getPatrouilles() == null || fiche.getPatrouilles().isEmpty()) {
      cell = new PdfPCell(new Phrase("", FONT_NORMAL));
      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
      cell.setColspan(3);
      table.addCell(cell);
    }

    for (Patrouille patrouille : fiche.getPatrouilles()) {

      if (!premierePatrouille) {

        cell = new PdfPCell(new Phrase("", FONT_NORMAL));
        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        cell.setBorder(0);
        table.addCell(cell);

      } else {
        premierePatrouille = false;
      }

      String libelleEquipage = patrouille.getIndicatif().getLibelleLong();
      libelleEquipage = libelleEquipage.concat(" : ");
      if (patrouille.getAgents() != null && patrouille.getAgents().size() > 0) {
        int cpt = 1;
        for (Agent agentPatrouille : patrouille.getAgents()) {
          libelleEquipage =
              libelleEquipage.concat(agentPatrouille.getNom() + " " + agentPatrouille.getPrenom());
          if (cpt != patrouille.getAgents().size()) {
            libelleEquipage = libelleEquipage.concat(", ");
            cpt++;
          }
        }
      }

      cell = new PdfPCell(new Phrase(libelleEquipage, FONT_NORMAL));
      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
      cell.setColspan(2);
      table.addCell(cell);

      String vehicule = "";
      if (patrouille.getVehicule() != null) {
        vehicule = patrouille.getVehicule().getImmatriculation();
      }
      cell = new PdfPCell(new Phrase(vehicule, FONT_NORMAL));
      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
      table.addCell(cell);
    }

    table.setSpacingBefore(5);
    table.setSpacingAfter(5);

    return table;
  }
  private PdfPTable buildTable(List<Fiche> fiches) throws DocumentException {

    PdfPTable table = new PdfPTable(9);
    table.setWidthPercentage(100);
    int[] widths = {14, 8, 28, 15, 20, 30, 30, 13, 33};
    table.setWidths(widths);
    table.setHeaderRows(1);

    PdfPCell cell = new PdfPCell(new Phrase("N° Fiche", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Heure", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Nature des faits et nombre", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Equipages", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Quartier", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Lieu", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Personnes concernées", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Procédures", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    cell = new PdfPCell(new Phrase("Situation initiale", FONT_NORMAL));
    cell.setFixedHeight(40);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
    table.addCell(cell);

    SimpleDateFormat hf = new SimpleDateFormat("HH:mm");
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    DateTime currentDate = null;

    boolean addRowDate;
    for (Fiche f : fiches) {

      Historique creation = f.getHistoriques().iterator().next();

      // Check if we need a new row to display the day
      addRowDate = false;
      if (currentDate == null) {
        currentDate = new DateTime(creation.getDateAction());
        addRowDate = true;
      } else {
        DateTime lastDate = new DateTime(creation.getDateAction());
        if (currentDate.getDayOfYear() != lastDate.getDayOfYear()) {
          currentDate = lastDate;
          addRowDate = true;
        }
      }

      if (addRowDate) {
        cell = new PdfPCell(new Phrase(df.format(currentDate.toDate()), FONT_NORMAL));
        cell.setColspan(9);
        cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
        table.addCell(cell);
      }

      // N° Fiche
      cell = new PdfPCell(new Phrase(f.getReference(), FONT_NORMAL));
      table.addCell(cell);

      // Heure d'arrivée  #31569
      cell =
          f.getGdhAppel() != null
              ? new PdfPCell(new Phrase(hf.format(f.getGdhAppel()), FONT_NORMAL))
              : new PdfPCell();
      cell.setHorizontalAlignment(Element.ALIGN_CENTER);
      table.addCell(cell);

      // Faits
      StringBuilder sb = new StringBuilder();
      boolean first = true;
      for (Fait fa : f.getFaits()) {
        if (first) {
          first = false;
        } else {
          sb.append("\n");
        }

        sb.append(fa.getNombre()).append(" ").append(fa.getNature().getLibelleLong());
      }
      cell = new PdfPCell(new Phrase(sb.toString(), FONT_NORMAL));
      table.addCell(cell);

      // Equipages
      sb = new StringBuilder();
      first = true;
      for (Patrouille pa : f.getPatrouilles()) {
        if (first) {
          first = false;
        } else {
          sb.append("\n");
        }
        sb.append(pa.getIndicatif().getLibelleLong());
      }
      cell = new PdfPCell(new Phrase(sb.toString(), FONT_NORMAL));
      table.addCell(cell);

      // Quartier
      cell = new PdfPCell(new Phrase(f.getAdresse().getQuartier().getLibelle(), FONT_NORMAL));
      table.addCell(cell);

      // Lieu
      cell =
          new PdfPCell(
              new Phrase(
                  f.getAdresse().getNumeroVoie() + " " + f.getAdresse().getNomVoie().getLibelle(),
                  FONT_NORMAL));
      table.addCell(cell);

      // Personnes
      sb = new StringBuilder();
      first = true;
      for (Personne pe : f.getPersonnes()) {
        if (first) {
          first = false;
        } else {
          sb.append("\n");
        }
        sb.append(pe.getCategorie().getLibelleLong())
            .append(" : ")
            .append(StringUtils.isEmpty(pe.getNom()) ? "-" : pe.getNom());
      }
      cell = new PdfPCell(new Phrase(sb.toString(), FONT_NORMAL));
      table.addCell(cell);

      // Procedures
      sb = new StringBuilder();
      first = true;
      for (Procedure pr : f.getProcedures()) {
        if (first) {
          first = false;
        } else {
          sb.append("\n");
        }
        sb.append(pr.getCategorie().getLibelleCourt()).append(" - ").append(pr.getNumero());
      }
      cell = new PdfPCell(new Phrase(sb.toString(), FONT_NORMAL));
      table.addCell(cell);

      // Titre de la situation initiale
      cell =
          new PdfPCell(
              new Phrase(FicheEventReportHelper.construitLibelleSituationInitiale(f), FONT_NORMAL));
      table.addCell(cell);
    }

    return table;
  }