* @since Version 1.0 */ class cPdfFromHTML { private $dir; /** * Class constructor * @param int $MEMORY_LIMIT - memory limit in megabytes * @param bool|string $sRenderFolder */ public function __construct($MEMORY_LIMIT = 64, $sRenderFolder = false) { // Set larger memory limit - 256 - aprox. 500rows if (!isset($GLOBALS['coverage_tests_running'])) { ini_set('memory_limit', "{$MEMORY_LIMIT}M"); ini_set('max_execution_time', 60 * 10); } // Create this month dir if (!$sRenderFolder) $sRenderFolder = __DOCS__ . 'pdfs/' . date('Y-m') . '/'; if (!file_exists($sRenderFolder)) mkdir($sRenderFolder, 0777, true); $this->dir = $sRenderFolder; } /** * Function to generate pdf file & save to docs folder * * @category LIB cPdf * @author Mareks Keišs * @param string $sHTML - html data * @param bool $bStream - stream pdf file * @param string $sNewFileName - file new name * @param string $sPaperSize - paper size * @param string $sPaperOrientation - paper orientation * @returns string - doc file name created * * best fonts: font-family: "dejavu sans","dejavu sans light","dejavu sans condensed","dejavu serif","dejavu serif condensed","dejavu sans mono", monospace; */ public function renderPdf($sHTML, $bStream = false, $sNewFileName = "custom_doc_name_%CDATE%", $sPaperSize = 'A4', $sPaperOrientation = 'portrait') { // Set new file name $sNewFileName = str_replace(array('%CDATE%'), array(date('d-m-Y')), $sNewFileName); // Replace illegal characters from title $sNewFileName = preg_replace('/[\/\\\:\*"<>\|]/', '_', $sNewFileName); // Check file with name exists to add _%NR% at the end // Always replace same file & order nr $file = "{$sNewFileName}.pdf"; /* $i = 1; $file = "{$sNewFileName}_0.pdf"; if(file_exists($this->dir . "{$sNewFileName}_0.pdf")){ while(file_exists($this->dir . "{$sNewFileName}_{$i}.pdf")){ $i++; } $file = "{$sNewFileName}_{$i}.pdf"; }*/ // Check proper paper size if (empty(CPDF::$PAPER_SIZES[strtolower($sPaperSize)])) $sPaperSize = 'a4'; // Check page orientation if (!in_array($sPaperOrientation, array('portrait', 'landscape'))) $sPaperOrientation = 'portrait'; // Generate document if (strlen($sHTML)) { // Set options $oOptions = new Options(); $oOptions->set('isPhpEnabled', true); $oOptions->set('defaultFont', 'Muli'); $oOptions->set('setIsRemoteEnabled', true); $oOptions->setChroot([__MDIR__]); $oDomPdf = new Dompdf($oOptions); //$sHTML = mb_convert_encoding($sHTML, 'HTML-ENTITIES', 'UTF-8'); $oDomPdf->loadHtml($sHTML); $oDomPdf->setPaper($sPaperSize, $sPaperOrientation); $oDomPdf->render(); if ($bStream && !headers_sent()) { $oDomPdf->stream($this->dir . $file, array()); } else { $output = $oDomPdf->output(); file_put_contents($this->dir . $file, $output); return $this->dir . $file; } } return false; } }