\n";
// Strip ,
, and tags from each page
$htmlElementstoStrip = array(
'@]*?>.*?@siu',
'@@siu',
'@@siu',
'@]*?>@siu',
'@@siu',
'@]*?>@siu',
);
$htmlElementsInstead = array('', '', '', '', '', '');
foreach ($pages as & $page) {
$page = preg_replace($htmlElementstoStrip,
$htmlElementsInstead,
$page
);
}
// Glue the pages together
$html .= implode("\n\n", $pages);
$html .= "
";
if ($config->wkhtmltopdfPath) {
return self::_html2pdf_wkhtmltopdf($paper_size, $orientation, $margins, $html, $output, $fileName);
}
else {
return self::_html2pdf_dompdf($paper_size, $orientation, $html, $output, $fileName);
}
}
static function _html2pdf_dompdf($paper_size, $orientation, $html, $output, $fileName) {
require_once 'packages/dompdf/dompdf_config.inc.php';
spl_autoload_register('DOMPDF_autoload');
$dompdf = new DOMPDF();
$dompdf->set_paper($paper_size, $orientation);
$dompdf->load_html($html);
$dompdf->render();
if ($output) {
return $dompdf->output();
}
else {
$dompdf->stream($fileName);
}
}
static function _html2pdf_wkhtmltopdf($paper_size, $orientation, $margins, $html, $output, $fileName) {
require_once 'packages/snappy/src/autoload.php';
$config = CRM_Core_Config::singleton();
$snappy = new Knp\Snappy\Pdf($config->wkhtmltopdfPath);
$snappy->setOption("page-width", $paper_size[2] . "pt");
$snappy->setOption("page-height", $paper_size[3] . "pt");
$snappy->setOption("orientation", $orientation);
$snappy->setOption("margin-top", $margins[1] . $margins[0]);
$snappy->setOption("margin-right", $margins[2] . $margins[0]);
$snappy->setOption("margin-bottom", $margins[3] . $margins[0]);
$snappy->setOption("margin-left", $margins[4] . $margins[0]);
$pdf = $snappy->getOutputFromHtml($html);
if ($output) {
return $pdf;
}
else {
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
echo $pdf;
}
}
/*
* function to convert value from one metric to another
*/
static function convertMetric($value, $from, $to, $precision = NULL) {
switch ($from . $to) {
case 'incm':
$value *= 2.54;
break;
case 'inmm':
$value *= 25.4;
break;
case 'inpt':
$value *= 72;
break;
case 'cmin':
$value /= 2.54;
break;
case 'cmmm':
$value *= 10;
break;
case 'cmpt':
$value *= 72 / 2.54;
break;
case 'mmin':
$value /= 25.4;
break;
case 'mmcm':
$value /= 10;
break;
case 'mmpt':
$value *= 72 / 25.4;
break;
case 'ptin':
$value /= 72;
break;
case 'ptcm':
$value *= 2.54 / 72;
break;
case 'ptmm':
$value *= 25.4 / 72;
break;
}
if (!is_null($precision)) {
$value = round($value, $precision);
}
return $value;
}
static function &pdflib($fileName,
$searchPath,
&$values,
$numPages = 1,
$echo = TRUE,
$output = 'College_Match_App',
$creator = 'CiviCRM',
$author = 'http://www.civicrm.org/',
$title = '2006 College Match Scholarship Application'
) {
try {
$pdf = new PDFlib();
$pdf->set_parameter("compatibility", "1.6");
$pdf->set_parameter("licensefile", "/home/paras/bin/license/pdflib.txt");
if ($pdf->begin_document('', '') == 0) {
CRM_Core_Error::statusBounce("PDFlib Error: " . $pdf->get_errmsg());
}
$config = CRM_Core_Config::singleton();
$pdf->set_parameter('resourcefile', $config->templateDir . '/Quest/pdf/pdflib.upr');
$pdf->set_parameter('textformat', 'utf8');
/* Set the search path for fonts and PDF files */
$pdf->set_parameter('SearchPath', $searchPath);
/* This line is required to avoid problems on Japanese systems */
$pdf->set_parameter('hypertextencoding', 'winansi');
$pdf->set_info('Creator', $creator);
$pdf->set_info('Author', $author);
$pdf->set_info('Title', $title);
$blockContainer = $pdf->open_pdi($fileName, '', 0);
if ($blockContainer == 0) {
CRM_Core_Error::statusBounce('PDFlib Error: ' . $pdf->get_errmsg());
}
for ($i = 1; $i <= $numPages; $i++) {
$page = $pdf->open_pdi_page($blockContainer, $i, '');
if ($page == 0) {
CRM_Core_Error::statusBounce('PDFlib Error: ' . $pdf->get_errmsg());
}
/* dummy page size */
$pdf->begin_page_ext(20, 20, '');
/* This will adjust the page size to the block container's size. */
$pdf->fit_pdi_page($page, 0, 0, 'adjustpage');
$status = array();
/* Fill all text blocks with dynamic data */
foreach ($values as $key => $value) {
if (is_array($value)) {
continue;
}
// pdflib does like the forward slash character, hence convert
$value = str_replace('/', '_', $value);
$res = $pdf->fill_textblock($page,
$key,
$value,
'embedding encoding=winansi'
);
/**
if ( $res == 0 ) {
CRM_Core_Error::debug( "$key, $value: $res", $pdf->get_errmsg( ) );
} else {
CRM_Core_Error::debug( "SUCCESS: $key, $value", null );
}
**/
}
$pdf->end_page_ext('');
$pdf->close_pdi_page($page);
}
$pdf->end_document('');
$pdf->close_pdi($blockContainer);
$buf = $pdf->get_buffer();
$len = strlen($buf);
if ($echo) {
header('Content-type: application/pdf');
header("Content-Length: $len");
header("Content-Disposition: inline; filename={$output}.pdf");
echo $buf;
CRM_Utils_System::civiExit();
}
else {
return $buf;
}
}
catch(PDFlibException$excp) {
CRM_Core_Error::statusBounce('PDFlib Error: Exception' .
"[" . $excp->get_errnum() . "] " . $excp->get_apiname() . ": " .
$excp->get_errmsg()
);
}
catch(Exception$excp) {
CRM_Core_Error::statusBounce("PDFlib Error: " . $excp->get_errmsg());
}
}
}