1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
<?php
/**
* TCPDF wrapper class.
*/
declare(strict_types=1);
namespace PhpMyAdmin;
use Exception;
use TCPDF;
use TCPDF_FONTS;
use function __;
use function count;
use function strlen;
use function strtr;
/**
* PDF export base class providing basic configuration.
*/
class Pdf extends TCPDF
{
/** @var array */
public $footerset = [];
/** @var array */
public $alias = [];
/**
* PDF font to use.
*/
public const PMA_PDF_FONT = 'DejaVuSans';
/**
* Constructs PDF and configures standard parameters.
*
* @param string $orientation page orientation
* @param string $unit unit
* @param string $format the format used for pages
* @param bool $unicode true means that the input text is unicode
* @param string $encoding charset encoding; default is UTF-8.
* @param bool $diskcache DEPRECATED TCPDF FEATURE
* @param false|int $pdfa If not false, set the document to PDF/A mode and the good version (1 or 3)
*
* @throws Exception
*/
public function __construct(
$orientation = 'P',
$unit = 'mm',
$format = 'A4',
$unicode = true,
$encoding = 'UTF-8',
$diskcache = false,
$pdfa = false
) {
parent::__construct($orientation, $unit, $format, $unicode, $encoding, $diskcache, $pdfa);
$this->setAuthor('phpMyAdmin ' . Version::VERSION);
$this->AddFont('DejaVuSans', '', 'dejavusans.php');
$this->AddFont('DejaVuSans', 'B', 'dejavusansb.php');
$this->setFont(self::PMA_PDF_FONT, '', 14);
$this->setFooterFont([self::PMA_PDF_FONT, '', 14]);
}
/**
* This function must be named "Footer" to work with the TCPDF library
*/
// phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
public function Footer(): void
{
// Check if footer for this page already exists
if (isset($this->footerset[$this->page])) {
return;
}
$this->setY(-15);
$this->setFont(self::PMA_PDF_FONT, '', 14);
$this->Cell(
0,
6,
__('Page number:') . ' '
. $this->getAliasNumPage() . '/' . $this->getAliasNbPages(),
'T',
0,
'C'
);
$this->Cell(0, 6, Util::localisedDate(), 0, 1, 'R');
$this->setY(20);
// set footerset
$this->footerset[$this->page] = 1;
}
/**
* Function to set alias which will be expanded on page rendering.
*
* @param string $name name of the alias
* @param string $value value of the alias
*/
public function setAlias($name, $value): void
{
// phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
$name = TCPDF_FONTS::UTF8ToUTF16BE($name, false, true, $this->CurrentFont);
$this->alias[$name] = TCPDF_FONTS::UTF8ToUTF16BE($value, false, true, $this->CurrentFont);
// phpcs:enable
}
// phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
/**
* Improved with alias expanding.
*/
public function _putpages(): void
{
if (count($this->alias) > 0) {
$nbPages = count($this->pages);
for ($n = 1; $n <= $nbPages; $n++) {
$this->pages[$n] = strtr($this->pages[$n], $this->alias);
}
}
parent::_putpages();
}
// phpcs:enable
/**
* Displays an error message
*
* @param string $error_message the error message
*/
// phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
public function Error($error_message = ''): void
{
echo Message::error(
__('Error while creating PDF:') . ' ' . $error_message
)->getDisplay();
exit;
}
/**
* Sends file as a download to user.
*
* @param string $filename file name
*/
public function download($filename): void
{
$pdfData = $this->getPDFData();
ResponseRenderer::getInstance()->disable();
Core::downloadHeader(
$filename,
'application/pdf',
strlen($pdfData)
);
echo $pdfData;
}
}
|