mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 10:38:45 +02:00
N°7490 Upgrade tcpdf version
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
<?php
|
||||
//============================================================+
|
||||
// File name : tcpdf.php
|
||||
// Version : 6.6.5
|
||||
// Version : 6.7.5
|
||||
// Begin : 2002-08-03
|
||||
// Last Update : 2023-09-06
|
||||
// Last Update : 2024-03-18
|
||||
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
|
||||
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
|
||||
// -------------------------------------------------------------------
|
||||
// Copyright (C) 2002-2023 Nicola Asuni - Tecnick.com LTD
|
||||
// Copyright (C) 2002-2024 Nicola Asuni - Tecnick.com LTD
|
||||
//
|
||||
// This file is part of TCPDF software library.
|
||||
//
|
||||
@@ -128,7 +128,7 @@ require_once(dirname(__FILE__).'/include/tcpdf_static.php');
|
||||
* TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
|
||||
* @package com.tecnick.tcpdf
|
||||
* @brief PHP class for generating PDF documents without requiring external extensions.
|
||||
* @version 6.6.5
|
||||
* @version 6.7.5
|
||||
* @author Nicola Asuni - info@tecnick.com
|
||||
* @IgnoreAnnotation("protected")
|
||||
* @IgnoreAnnotation("public")
|
||||
@@ -838,6 +838,13 @@ class TCPDF {
|
||||
*/
|
||||
protected $file_id;
|
||||
|
||||
/**
|
||||
* Internal secret used to encrypt data.
|
||||
* @protected
|
||||
* @since 6.7.5 (2024-03-21)
|
||||
*/
|
||||
protected $hash_key;
|
||||
|
||||
// --- bookmark ---
|
||||
|
||||
/**
|
||||
@@ -1880,10 +1887,10 @@ class TCPDF {
|
||||
// set file ID for trailer
|
||||
$serformat = (is_array($format) ? json_encode($format) : $format);
|
||||
$this->file_id = md5(TCPDF_STATIC::getRandomSeed('TCPDF'.$orientation.$unit.$serformat.$encoding));
|
||||
$this->hash_key = hash_hmac('sha256', TCPDF_STATIC::getRandomSeed($this->file_id), TCPDF_STATIC::getRandomSeed('TCPDF'), false);
|
||||
$this->font_obj_ids = array();
|
||||
$this->page_obj_id = array();
|
||||
$this->form_obj_id = array();
|
||||
|
||||
// set pdf/a mode
|
||||
if ($pdfa != false) {
|
||||
$this->pdfa_mode = true;
|
||||
@@ -4427,7 +4434,7 @@ class TCPDF {
|
||||
$this->Error('Unknow font type: '.$type.'');
|
||||
}
|
||||
// set name if unset
|
||||
if (!isset($name) OR empty($name)) {
|
||||
if (empty($name)) {
|
||||
$name = $fontkey;
|
||||
}
|
||||
// create artificial font style variations if missing (only works with non-embedded fonts)
|
||||
@@ -4470,7 +4477,7 @@ class TCPDF {
|
||||
// we are inside an XObject template
|
||||
$this->xobjects[$this->xobjid]['fonts'][$fontkey] = $this->numfonts;
|
||||
}
|
||||
if (isset($diff) AND (!empty($diff))) {
|
||||
if (!empty($diff)) {
|
||||
//Search existing encodings
|
||||
$d = 0;
|
||||
$nb = count($this->diffs);
|
||||
@@ -16389,6 +16396,53 @@ class TCPDF {
|
||||
* @since 3.2.000 (2008-06-20)
|
||||
*/
|
||||
protected function getHtmlDomArray($html) {
|
||||
// set inheritable properties fot the first void element
|
||||
// possible inheritable properties are: azimuth, border-collapse, border-spacing, caption-side, color, cursor, direction, empty-cells, font, font-family, font-stretch, font-size, font-size-adjust, font-style, font-variant, font-weight, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, orphans, page, page-break-inside, quotes, speak, speak-header, text-align, text-indent, text-transform, volume, white-space, widows, word-spacing
|
||||
$dom = array(
|
||||
array(
|
||||
'tag' => false,
|
||||
'block' => false,
|
||||
'value' => '',
|
||||
'parent' => 0,
|
||||
'hide' => false,
|
||||
'fontname' => $this->FontFamily,
|
||||
'fontstyle' => $this->FontStyle,
|
||||
'fontsize' => $this->FontSizePt,
|
||||
'font-stretch' => $this->font_stretching,
|
||||
'letter-spacing' => $this->font_spacing,
|
||||
'stroke' => $this->textstrokewidth,
|
||||
'fill' => (($this->textrendermode % 2) == 0),
|
||||
'clip' => ($this->textrendermode > 3),
|
||||
'line-height' => $this->cell_height_ratio,
|
||||
'bgcolor' => false,
|
||||
'fgcolor' => $this->fgcolor, // color
|
||||
'strokecolor' => $this->strokecolor,
|
||||
'align' => '',
|
||||
'listtype' => '',
|
||||
'text-indent' => 0,
|
||||
'text-transform' => '',
|
||||
'border' => array(),
|
||||
'dir' => $this->rtl?'rtl':'ltr',
|
||||
'width' => 0,
|
||||
'height' => 0,
|
||||
'x' => 0,
|
||||
'y' => 0,
|
||||
'w' => 0,
|
||||
'h' => 0,
|
||||
'l' => 0,
|
||||
't' => 0,
|
||||
'r' => 0,
|
||||
'b' => 0,
|
||||
'padding' => array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0),
|
||||
'margin' => array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0),
|
||||
'border-spacing' => array('H' => 0, 'V' => 0),
|
||||
'border-collapse' => 'separate',
|
||||
)
|
||||
);
|
||||
|
||||
if(empty($html)) {
|
||||
return $dom;
|
||||
}
|
||||
// array of CSS styles ( selector => properties).
|
||||
$css = array();
|
||||
// get CSS array defined at previous call
|
||||
@@ -16533,37 +16587,8 @@ class TCPDF {
|
||||
// count elements
|
||||
$maxel = count($a);
|
||||
$elkey = 0;
|
||||
$key = 0;
|
||||
// create an array of elements
|
||||
$dom = array();
|
||||
$dom[$key] = array();
|
||||
// set inheritable properties fot the first void element
|
||||
// possible inheritable properties are: azimuth, border-collapse, border-spacing, caption-side, color, cursor, direction, empty-cells, font, font-family, font-stretch, font-size, font-size-adjust, font-style, font-variant, font-weight, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, orphans, page, page-break-inside, quotes, speak, speak-header, text-align, text-indent, text-transform, volume, white-space, widows, word-spacing
|
||||
$dom[$key]['tag'] = false;
|
||||
$dom[$key]['block'] = false;
|
||||
$dom[$key]['value'] = '';
|
||||
$dom[$key]['parent'] = 0;
|
||||
$dom[$key]['hide'] = false;
|
||||
$dom[$key]['fontname'] = $this->FontFamily;
|
||||
$dom[$key]['fontstyle'] = $this->FontStyle;
|
||||
$dom[$key]['fontsize'] = $this->FontSizePt;
|
||||
$dom[$key]['font-stretch'] = $this->font_stretching;
|
||||
$dom[$key]['letter-spacing'] = $this->font_spacing;
|
||||
$dom[$key]['stroke'] = $this->textstrokewidth;
|
||||
$dom[$key]['fill'] = (($this->textrendermode % 2) == 0);
|
||||
$dom[$key]['clip'] = ($this->textrendermode > 3);
|
||||
$dom[$key]['line-height'] = $this->cell_height_ratio;
|
||||
$dom[$key]['bgcolor'] = false;
|
||||
$dom[$key]['fgcolor'] = $this->fgcolor; // color
|
||||
$dom[$key]['strokecolor'] = $this->strokecolor;
|
||||
$dom[$key]['align'] = '';
|
||||
$dom[$key]['listtype'] = '';
|
||||
$dom[$key]['text-indent'] = 0;
|
||||
$dom[$key]['text-transform'] = '';
|
||||
$dom[$key]['border'] = array();
|
||||
$dom[$key]['dir'] = $this->rtl?'rtl':'ltr';
|
||||
$thead = false; // true when we are inside the THEAD tag
|
||||
++$key;
|
||||
$key = 1;
|
||||
$level = array();
|
||||
array_push($level, 0); // root
|
||||
while ($elkey < $maxel) {
|
||||
@@ -17200,41 +17225,59 @@ class TCPDF {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an hash code used to ensure that the serialized data has been generated by this TCPDF instance.
|
||||
* @param string $data serialized data
|
||||
* @return string
|
||||
* @public static
|
||||
* Calculates the hash value of the given data.
|
||||
*
|
||||
* @param string $data The data to be hashed.
|
||||
* @return string The hashed value of the data.
|
||||
*/
|
||||
protected function getHashForTCPDFtagParams($data) {
|
||||
return md5(strlen($data).$this->file_id.$data);
|
||||
protected function hashTCPDFtag($data) {
|
||||
return hash_hmac('sha256', $data, $this->hash_key, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize an array of parameters to be used with TCPDF tag in HTML code.
|
||||
* @param array $data parameters array
|
||||
* @return string containing serialized data
|
||||
* Serialize data to be used with TCPDF tag in HTML code.
|
||||
* @param string $method TCPDF method name
|
||||
* @param array $params Method parameters
|
||||
* @return string Serialized data
|
||||
* @public static
|
||||
*/
|
||||
public function serializeTCPDFtagParameters($data) {
|
||||
public function serializeTCPDFtag($method, $params=array()) {
|
||||
$data = array('m' => $method, 'p' => $params);
|
||||
$encoded = urlencode(json_encode($data));
|
||||
return $this->getHashForTCPDFtagParams($encoded).$encoded;
|
||||
$hash = $this->hashTCPDFtag($encoded);
|
||||
return strlen($hash).'+'.$hash.'+'.$encoded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unserialize parameters to be used with TCPDF tag in HTML code.
|
||||
* Unserialize data to be used with TCPDF tag in HTML code.
|
||||
* @param string $data serialized data
|
||||
* @return array containing unserialized data
|
||||
* @protected static
|
||||
*/
|
||||
protected function unserializeTCPDFtagParameters($data) {
|
||||
$hash = substr($data, 0, 32);
|
||||
$encoded = substr($data, 32);
|
||||
if ($hash != $this->getHashForTCPDFtagParams($encoded)) {
|
||||
protected function unserializeTCPDFtag($data) {
|
||||
$hpos = strpos($data, '+');
|
||||
$hlen = intval(substr($data, 0, $hpos));
|
||||
$hash = substr($data, $hpos + 1, $hlen);
|
||||
$encoded = substr($data, $hpos + 2 + $hlen);
|
||||
if ($hash != $this->hashTCPDFtag($encoded)) {
|
||||
$this->Error('Invalid parameters');
|
||||
}
|
||||
return json_decode(urldecode($encoded), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a TCPDF tag is allowed
|
||||
* @param string $method TCPDF method name
|
||||
* @return boolean
|
||||
* @protected
|
||||
*/
|
||||
protected function allowedTCPDFtag($method) {
|
||||
if (defined('K_ALLOWED_TCPDF_TAGS')) {
|
||||
return (strpos(K_ALLOWED_TCPDF_TAGS, '|'.$method.'|') !== false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints a cell (rectangular area) with optional borders, background color and html text string.
|
||||
* The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.<br />
|
||||
@@ -17248,8 +17291,7 @@ class TCPDF {
|
||||
* @param float|null $y upper-left corner Y coordinate
|
||||
* @param string $html html text to print. Default value: empty string.
|
||||
* @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
|
||||
* @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
|
||||
Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
|
||||
* @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul> Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
|
||||
* @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false).
|
||||
* @param boolean $reseth if true reset the last cell height (default true).
|
||||
* @param string $align Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
|
||||
@@ -19510,17 +19552,14 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
case 'tcpdf': {
|
||||
if (defined('K_TCPDF_CALLS_IN_HTML') AND (K_TCPDF_CALLS_IN_HTML === true)) {
|
||||
// Special tag used to call TCPDF methods
|
||||
if (isset($tag['attribute']['method'])) {
|
||||
$tcpdf_method = $tag['attribute']['method'];
|
||||
if (method_exists($this, $tcpdf_method)) {
|
||||
if (isset($tag['attribute']['params']) AND (!empty($tag['attribute']['params']))) {
|
||||
$params = $this->unserializeTCPDFtagParameters($tag['attribute']['params']);
|
||||
call_user_func_array(array($this, $tcpdf_method), $params);
|
||||
} else {
|
||||
$this->$tcpdf_method();
|
||||
}
|
||||
$this->newline = true;
|
||||
// This tag is disabled by default by the K_TCPDF_CALLS_IN_HTML constant on TCPDF configuration file.
|
||||
// Please use this feature only if you are in control of the HTML content and you are sure that it does not contain any harmful code.
|
||||
if (!empty($tag['attribute']['data'])) {
|
||||
$tcpdf_tag_data = $this->unserializeTCPDFtag($tag['attribute']['data']);
|
||||
if ($this->allowedTCPDFtag($tcpdf_tag_data['m'])) {
|
||||
call_user_func_array(array($this, $tcpdf_tag_data['m']), $tcpdf_tag_data['p']);
|
||||
}
|
||||
$this->newline = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -21867,25 +21906,23 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
* @since 4.5.029 (2009-03-19)
|
||||
*/
|
||||
public function rollbackTransaction($self=false) {
|
||||
if (isset($this->objcopy)) {
|
||||
$objcopy = $this->objcopy;
|
||||
$this->_destroy(true, true);
|
||||
if ($self) {
|
||||
$objvars = get_object_vars($objcopy);
|
||||
foreach ($objvars as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
$objcopy->_destroy(true, true);
|
||||
/* The unique file_id should not be used during cleanup again */
|
||||
$objcopy->file_id = NULL;
|
||||
unset($objcopy);
|
||||
return $this;
|
||||
}
|
||||
/* The unique file_id should not be used during cleanup again */
|
||||
$this->file_id = NULL;
|
||||
return $objcopy;
|
||||
if (!isset($this->objcopy)) {
|
||||
return $this;
|
||||
}
|
||||
return $this;
|
||||
$file_id = $this->file_id;
|
||||
$objcopy = $this->objcopy;
|
||||
$this->_destroy(true, true);
|
||||
if ($self) {
|
||||
$objvars = get_object_vars($objcopy);
|
||||
foreach ($objvars as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
$objcopy->_destroy(true, true);
|
||||
unset($objcopy);
|
||||
return $this;
|
||||
}
|
||||
$this->file_id = $file_id;
|
||||
return $objcopy;
|
||||
}
|
||||
|
||||
// --- MULTI COLUMNS METHODS -----------------------
|
||||
|
||||
Reference in New Issue
Block a user