| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | <?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->setLanguageArray([            'a_meta_charset' => 'UTF-8',            'a_meta_dir' => $GLOBALS['text_dir'],            'a_meta_language' => $GLOBALS['lang'],            'w_page' => __('Page number:'),        ]);    }    /**     * 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;    }}
 |