127 lines
3.8 KiB
PHP
127 lines
3.8 KiB
PHP
<?php
|
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
/*
|
|
* InvoicePlane
|
|
*
|
|
* @author InvoicePlane Developers & Contributors
|
|
* @copyright Copyright (c) 2012 - 2017 InvoicePlane.com
|
|
* @license https://invoiceplane.com/license.txt
|
|
* @link https://invoiceplane.com
|
|
*/
|
|
|
|
/**
|
|
* Create a PDF
|
|
*
|
|
* @param $html
|
|
* @param string $filename
|
|
* @param bool $stream
|
|
* @param null $password
|
|
* @param boolean $isInvoice
|
|
* @param null $is_guest
|
|
* @param bool $zugferd_invoice
|
|
* @param null $associated_files
|
|
* @return string
|
|
*/
|
|
function pdf_create($html, $filename, $stream = true, $password = null, $isInvoice = null, $is_guest = null, $zugferd_invoice = false, $associated_files = null)
|
|
{
|
|
$CI = &get_instance();
|
|
|
|
// Get the invoice from the archive if available
|
|
$invoice_array = array();
|
|
|
|
// mPDF loading
|
|
if (!defined('_MPDF_TEMP_PATH')) {
|
|
define('_MPDF_TEMP_PATH', FCPATH . 'uploads/temp/mpdf/');
|
|
define('_MPDF_TTFONTDATAPATH', FCPATH . 'uploads/temp/mpdf/');
|
|
}
|
|
|
|
$mpdf = new \Mpdf\Mpdf();
|
|
|
|
// mPDF configuration
|
|
$mpdf->useAdobeCJK = true;
|
|
$mpdf->autoScriptToLang = true;
|
|
|
|
if (IP_DEBUG) {
|
|
// Enable image error logging
|
|
$mpdf->showImageErrors = true;
|
|
}
|
|
|
|
// Include zugferd if enabled
|
|
if ($zugferd_invoice) {
|
|
$CI->load->helper('zugferd');
|
|
$mpdf->PDFA = true;
|
|
$mpdf->PDFAauto = true;
|
|
$mpdf->SetAdditionalXmpRdf(zugferd_rdf());
|
|
$mpdf->SetAssociatedFiles($associated_files);
|
|
}
|
|
|
|
// Set a password if set for the voucher
|
|
if (!empty($password)) {
|
|
$mpdf->SetProtection(array('copy', 'print'), $password, $password);
|
|
}
|
|
|
|
// Check if the archive folder is available
|
|
if (!(is_dir('./uploads/archive/') || is_link('./uploads/archive/'))) {
|
|
mkdir('./uploads/archive/', '0777');
|
|
}
|
|
|
|
// Set the footer if voucher is invoice and if set in settings
|
|
if (!empty($CI->mdl_settings->settings['pdf_invoice_footer'])) {
|
|
$mpdf->setAutoBottomMargin = 'stretch';
|
|
$mpdf->SetHTMLFooter('<div id="footer">' . $CI->mdl_settings->settings['pdf_invoice_footer'] . '</div>');
|
|
}
|
|
|
|
$mpdf->WriteHTML($html);
|
|
|
|
if ($isInvoice) {
|
|
|
|
foreach (glob(UPLOADS_FOLDER . 'archive/*' . $filename . '.pdf') as $file) {
|
|
array_push($invoice_array, $file);
|
|
}
|
|
|
|
if (!empty($invoice_array) && !is_null($is_guest)) {
|
|
rsort($invoice_array);
|
|
|
|
if ($stream) {
|
|
return $mpdf->Output($filename . '.pdf', 'I');
|
|
} else {
|
|
return $invoice_array[0];
|
|
}
|
|
}
|
|
|
|
$archived_file = UPLOADS_FOLDER . 'archive/' . date('Y-m-d') . '_' . $filename . '.pdf';
|
|
$mpdf->Output($archived_file, 'F');
|
|
|
|
if ($stream) {
|
|
return $mpdf->Output($filename . '.pdf', 'I');
|
|
} else {
|
|
return $archived_file;
|
|
}
|
|
}
|
|
|
|
// If $stream is true (default) the PDF will be displayed directly in the browser
|
|
// otherwise will be returned as a download
|
|
if ($stream) {
|
|
return $mpdf->Output($filename . '.pdf', 'I');
|
|
} else {
|
|
|
|
$mpdf->Output(UPLOADS_FOLDER . 'temp/' . $filename . '.pdf', 'F');
|
|
|
|
// Housekeeping
|
|
// Delete any files in temp/ directory that are >1 hrs old
|
|
$interval = 3600;
|
|
if ($handle = @opendir(preg_replace('/\/$/', '', './uploads/temp/'))) {
|
|
while (false !== ($file = readdir($handle))) {
|
|
if (($file != '..') && ($file != '.') && !is_dir($file) && ((filemtime('./uploads/temp/' . $file) + $interval) < time()) && (substr($file, 0, 1) !== '.') && ($file != 'remove.txt')) { // mPDF 5.7.3
|
|
unlink(UPLOADS_FOLDER . 'temp/' . $file);
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
|
|
return UPLOADS_FOLDER . 'temp/' . $filename . '.pdf';
|
|
|
|
}
|
|
}
|