/**
  * Export a PDF report for a project
  *
  * @param \GIB\GradingTool\Domain\Model\Project $project
  */
 public function exportReportAction(\GIB\GradingTool\Domain\Model\Project $project)
 {
     // access check
     $this->checkOwnerOrAdministratorAndDenyIfNeeded($project);
     // The processed submission
     $submission = $this->submissionService->getProcessedSubmission($project);
     if ($submission['hasError']) {
         // Don't export the Grading if is has errors
         $message = new \TYPO3\Flow\Error\Message('The Grading has errors and therefore it cannot be exported. Review and correct the Grading.', \TYPO3\Flow\Error\Message::SEVERITY_ERROR);
         $this->flashMessageContainer->addMessage($message);
         $this->redirect('index', 'Standard');
     }
     // The flat data sheet
     $dataSheet = $this->dataSheetService->getFlatProcessedDataSheet($project);
     $pdf = new \GIB\GradingTool\Utility\TcPdf();
     // set font
     \TCPDF_FONTS::addTTFfont('resource://GIB.GradingTool/Private/Fonts/Cambria.ttf', 'TrueTypeUnicode');
     \TCPDF_FONTS::addTTFfont('resource://GIB.GradingTool/Private/Fonts/Cambria Bold.ttf', 'TrueTypeUnicode');
     \TCPDF_FONTS::addTTFfont('resource://GIB.GradingTool/Private/Fonts/Cambria Italic.ttf', 'TrueTypeUnicode');
     \TCPDF_FONTS::addTTFfont('resource://GIB.GradingTool/Private/Fonts/Cambria Bold Italic.ttf', 'TrueTypeUnicode');
     // set margins
     $pdf->SetMargins(20, 45);
     $pdf->SetHeaderMargin(20);
     $pdf->SetFooterMargin(20);
     $pdf->SetFont('Cambria', '', 10);
     $pdf->SetHeaderFont(array('Cambria', '', 10));
     $pdf->SetFooterFont(array('Cambria', '', 10));
     $pdf->setHtmlVSpace(array('h1' => array(array('h' => 0, 'n' => 0), array('h' => 0, 'n' => 0)), 'h2' => array(array('h' => 0, 'n' => 0), array('h' => 0, 'n' => 0)), 'h3' => array(array('h' => 0, 'n' => 0), array('h' => 1, 'n' => 3)), 'h6' => array(array('h' => 0, 'n' => 0), array('h' => 0, 'n' => 0)), 'p' => array(array('h' => 0, 'n' => 0), array('h' => 1, 'n' => 2.5)), 'ul' => array(array('h' => 0, 'n' => 0), array('h' => 1, 'n' => 2.5))));
     $pdf->setListIndentWidth(3);
     $pdf->SetPrintHeader(TRUE);
     $pdf->SetPrintFooter(TRUE);
     // set document information
     $pdf->SetCreator(PDF_CREATOR);
     $pdf->SetAuthor('Global Infrastructure Basel Foundation');
     $pdf->SetTitle($project->getProjectTitle());
     $pdf->projectTitle = $project->getProjectTitle();
     $pdf->exportDate = strftime('%Y-%m-%d');
     // set auto page breaks
     $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
     // set image scale factor
     $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
     // Must be an Illustrator 3 file
     $epsLogoResource = 'resource://GIB.GradingTool/Private/Images/logo_gib_print.eps';
     // one pixel png
     $onePixelResource = 'resource://GIB.GradingTool/Private/Images/one-pixel.png';
     // partners png
     $gibPartnersResource = 'resource://GIB.GradingTool/Private/Images/gib-partners.png';
     /*** FRONT PAGE ***/
     $pdf->addPage();
     $arguments = array('dataSheet' => $dataSheet, 'project' => $project, 'epsLogoResource' => $epsLogoResource, 'onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('Front', $arguments), TRUE, FALSE, TRUE);
     /*** PARTNERS PAGE ***/
     $pdf->addPage();
     $arguments = array('gibPartnersResource' => $gibPartnersResource, 'onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('Partners', $arguments), TRUE, FALSE, TRUE);
     /*** TOC PAGE IS INSERTED AT PAGE 3 ***/
     /*** DATA SHEET FRONT ***/
     $pdf->addPage();
     $pdf->SetAutoPageBreak(FALSE);
     $arguments = array('onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('DataSheetFront', $arguments), TRUE, FALSE, TRUE);
     $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
     /*** DATA SHEET ***/
     $pdf->addPage();
     $arguments = array('dataSheet' => $dataSheet, 'project' => $project, 'onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('DataSheet', $arguments), TRUE, FALSE, TRUE);
     /*** GRADING FRONT ***/
     $pdf->addPage();
     $pdf->SetAutoPageBreak(FALSE);
     $arguments = array('onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('GradingFront', $arguments), TRUE, FALSE, TRUE);
     $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
     /*** GRADING TOOL ***/
     $pdf->addPage();
     $arguments = array('submission' => $submission, 'project' => $project, 'scoreData' => $this->submissionService->getScoreData(), 'onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('Grading', $arguments), TRUE, FALSE, TRUE);
     /*** ANALYSIS FRONT ***/
     $pdf->addPage();
     $pdf->SetAutoPageBreak(FALSE);
     $arguments = array('onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('AnalysisFront', $arguments), TRUE, FALSE, TRUE);
     $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
     /*** ANALYSIS ***/
     $pdf->addPage();
     $radarChartFileName = $this->submissionService->getRadarImage($project);
     $lineGraphFileName = $this->submissionService->getLineGraphImage($project);
     $answerLevelGraphFileName = $this->submissionService->getAnswerLevelBarChartImage($project);
     $arguments = array('radarChartFileName' => $radarChartFileName, 'lineGraphFileName' => $lineGraphFileName, 'answerLevelGraphFileName' => $answerLevelGraphFileName, 'onePixelResource' => $onePixelResource, 'submission' => $submission);
     $pdf->writeHTML($this->pdfTemplateRenderer('Analysis', $arguments), TRUE, FALSE, TRUE);
     /** This was the last page */
     $pdf->lastPage();
     /*** TOC PAGE ***/
     $pdf->addTOCPage();
     $arguments = array('dataSheet' => $dataSheet, 'project' => $project, 'onePixelResource' => $onePixelResource);
     $pdf->writeHTML($this->pdfTemplateRenderer('TOCBeforeTOC', $arguments), TRUE, FALSE, TRUE);
     $arguments = array('onePixelResource' => $onePixelResource);
     $afterContent = $this->pdfTemplateRenderer('TOCAfterTOC', $arguments);
     $bookmarkTemplates = array();
     $bookmarkTemplates[0] = '<style>td.blue { color: #0f4fa2; }	td.orange { color: #f36e21; } td.red { color: #c92938; } td.black { color: #000000; } td.grey { color: #555555; }</style><table border="0" cellpadding="0" cellspacing="0"><tr><td class="#TOC_CSSCLASS#" width="12%"><strong>#TOC_CHAPTERNUMBER#</strong></td><td class="black" width="78%"><strong>#TOC_DESCRIPTION#</strong></td><td width="10%"><span style="font-weight:bold;font-size:10pt;text-align:right;" align="right">#TOC_PAGE_NUMBER#</span></td></tr></table>';
     $bookmarkTemplates[1] = '<style>td.blue { color: #0f4fa2; }	td.orange { color: #f36e21; } td.red { color: #c92938; } td.black { color: #000000; } td.grey { color: #555555; }</style><table border="0" cellpadding="0" cellspacing="0"><tr><td class="#TOC_CSSCLASS#" width="12%"><strong>#TOC_CHAPTERNUMBER#</strong></td><td class="grey" width="78%">#TOC_DESCRIPTION#</td><td width="10%"><span style="font-size:10pt;text-align:right;" align="right">#TOC_PAGE_NUMBER#</span></td></tr></table>';
     $pdf->addHTMLTOC(3, 'INDEX', $bookmarkTemplates, TRUE, 'B', array(128, 0, 0), $afterContent);
     $pdf->endTOCPage();
     $pdf->Output('export.pdf', 'I');
 }