/** * Bulk export: PDF export, based on the HTML export converted to PDF * * @copyright Copyright (C) 2015 Combodo SARL * @license http://opensource.org/licenses/AGPL-3.0 */ class PDFBulkExport extends HTMLBulkExport { public function DisplayUsage(Page $oP) { $oP->p(" * pdf format options:"); $oP->p(" *\tfields: (mandatory) the comma separated list of field codes to export (e.g: name,org_id,service_name...)."); $oP->p(" *\tpage_size: (optional) size of the page. One of A4, A3, Letter (default is 'A4')."); $oP->p(" *\tpage_orientation: (optional) the orientation of the page. Either Portrait or Landscape (default is 'Portrait')."); $oP->p(" *\tdate_format: the format to use when exporting date and time fields (default = the format used in the user interface). Example: 'm/d/Y H:i:s'"); } public function EnumFormParts() { return array_merge(array('pdf_options' => array('pdf_options')), parent::EnumFormParts()); } public function DisplayFormPart(WebPage $oP, $sPartId) { switch($sPartId) { case 'pdf_options': $oP->add('
'.Dict::S('Core:BulkExport:PDFOptions').''); $oP->add('
'); $oP->add('

'.Dict::S('Core:PDFBulkExport:PageFormat').'

'); $oP->add(''); $oP->add(''); $oP->add(''); $oP->add(''); $oP->add(''); $oP->add(''); $oP->add(''); $oP->add(''); $oP->add('
'.Dict::S('Core:BulkExport:PDFPageSize').''.$this->GetSelectCtrl('page_size', array('A3', 'A4', 'Letter'), 'Core:BulkExport:PageSize-', 'A4').'
'.Dict::S('Core:BulkExport:PDFPageOrientation').''.$this->GetSelectCtrl('page_orientation', array('P', 'L'), 'Core:BulkExport:PageOrientation-', 'L').'
'); $oP->add('
'); $sDateTimeFormat = utils::ReadParam('date_format', AttributeDateTime::GetFormat(), true, 'raw_data'); $sDefaultChecked = ($sDateTimeFormat == AttributeDateTime::GetFormat()) ? ' checked' : ''; $sCustomChecked = ($sDateTimeFormat !== AttributeDateTime::GetFormat()) ? ' checked' : ''; $oP->add('

'.Dict::S('Core:BulkExport:DateTimeFormat').'

'); $sDefaultFormat = htmlentities(AttributeDateTime::GetFormat(), ENT_QUOTES, 'UTF-8'); $sExample = htmlentities(date(AttributeDateTime::GetFormat()), ENT_QUOTES, 'UTF-8'); $oP->add('
'); $sFormatInput = ''; $oP->add(''); $oP->add('
'); $oP->add('
'); $sJSTooltip = json_encode('
'.Dict::S('UI:CSVImport:CustomDateTimeFormatTooltip').'
'); $oP->add_ready_script( <<'; foreach($aLabels as $sVal => $sLabel) { $sSelected = ($sVal == $sCurrentValue) ? 'selected' : ''; $sHtml .= ''; } $sHtml .= ''; return $sHtml; } public function ReadParameters() { parent::ReadParameters(); $this->aStatusInfo['page_size'] = utils::ReadParam('page_size', 'A4', true, 'raw_data'); $this->aStatusInfo['page_orientation'] = utils::ReadParam('page_orientation', 'L', true); $sDateFormatRadio = utils::ReadParam('date_format_radio', 'custom'); if ($sDateFormatRadio == 'default') { $this->aStatusInfo['date_format'] = AttributeDateTime::GetFormat(); } else { $this->aStatusInfo['date_format'] = utils::ReadParam('date_format', AttributeDateTime::GetFormat(), true, 'raw_data'); } } public function GetHeader() { $this->aStatusInfo['tmp_file'] = $this->MakeTmpFile('data'); $sData = parent::GetHeader(); $hFile = @fopen($this->aStatusInfo['tmp_file'], 'ab'); if ($hFile === false) { throw new Exception('PDFBulkExport: Failed to open temporary data file: "'.$this->aStatusInfo['tmp_file'].'" for writing.'); } fwrite($hFile, $sData."\n"); fclose($hFile); return ''; } public function GetNextChunk(&$aStatus) { $sPrevFormat = AttributeDateTime::GetFormat(); AttributeDateTime::SetFormat($this->aStatusInfo['date_format']); $sData = parent::GetNextChunk($aStatus); AttributeDateTime::SetFormat($sPrevFormat); $hFile = @fopen($this->aStatusInfo['tmp_file'], 'ab'); if ($hFile === false) { throw new Exception('PDFBulkExport: Failed to open temporary data file: "'.$this->aStatusInfo['tmp_file'].'" for writing.'); } fwrite($hFile, $sData."\n"); fclose($hFile); return ''; } public function GetFooter() { $sData = parent::GetFooter(); require_once(APPROOT.'application/pdfpage.class.inc.php'); $oPage = new PDFPage(Dict::Format('Core:BulkExportOf_Class', MetaModel::GetName($this->oSearch->GetClass())), $this->aStatusInfo['page_size'], $this->aStatusInfo['page_orientation']); $oPDF = $oPage->get_tcpdf(); $oPDF->SetFont('dejavusans', '', 8, '', true); $oPage->add(file_get_contents($this->aStatusInfo['tmp_file'])); $oPage->add($sData); $sPDF = $oPage->get_pdf(); return $sPDF; } public function GetSupportedFormats() { return array('pdf' => Dict::S('Core:BulkExport:PDFFormat')); } public function GetMimeType() { return 'application/x-pdf'; } public function GetFileExtension() { return 'pdf'; } }