114 lines
3.6 KiB
PHP
114 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace BRSystems\Core\Library\cPdfFromHTML;
|
|
|
|
use Dompdf\Cpdf;
|
|
use Dompdf\Dompdf;
|
|
use Dompdf\Options;
|
|
|
|
/**
|
|
* cPdf module
|
|
*
|
|
* @category LIB cPdf
|
|
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
|
|
* @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 <mareks.keiss@brsystems.lv>
|
|
* @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;
|
|
}
|
|
}
|