ElixirVault/www/system-brs-core/library/cPdfFromHTML/cPdfFromHTML.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;
}
}