mirror of
https://github.com/tecnickcom/TCPDF.git
synced 2025-03-21 14:39:40 +01:00
Merge branch 'main' into rollback
This commit is contained in:
commit
26abef749a
4
.gitignore
vendored
4
.gitignore
vendored
@ -1 +1,3 @@
|
||||
.idea
|
||||
.idea
|
||||
.phpdoc
|
||||
*.bak
|
||||
|
@ -352,7 +352,7 @@ please contact mssridhar AT vsnl.com.
|
||||
|
||||
Noah Levitt found out that the Sinhalese fonts available on the site
|
||||
<http://www.metta.lk/fonts/> are released under GNU GPL, or,
|
||||
precisely, "Public Domain under GNU Licence
Produced by DMS
|
||||
precisely, "Public Domain under GNU Licence Produced by DMS
|
||||
Electronics for The Sri Lanka Tipitaka Project" (taken from the font
|
||||
comment), and took the effort of recoding the font to Unicode.
|
||||
|
||||
|
@ -357,7 +357,7 @@ please contact mssridhar AT vsnl.com.
|
||||
|
||||
Noah Levitt found out that the Sinhalese fonts available on the site
|
||||
<http://www.metta.lk/fonts/> are released under GNU GPL, or,
|
||||
precisely, "Public Domain under GNU Licence
Produced by DMS
|
||||
precisely, "Public Domain under GNU Licence Produced by DMS
|
||||
Electronics for The Sri Lanka Tipitaka Project" (taken from the font
|
||||
comment), and took the effort of recoding the font to Unicode.
|
||||
|
||||
|
@ -740,6 +740,7 @@ class PDF417 {
|
||||
* @protected
|
||||
*/
|
||||
protected function getErrorCorrectionLevel($ecl, $numcw) {
|
||||
$maxecl = 8; // starting error level
|
||||
// check for automatic levels
|
||||
if (($ecl < 0) OR ($ecl > 8)) {
|
||||
if ($numcw < 41) {
|
||||
@ -755,7 +756,6 @@ class PDF417 {
|
||||
}
|
||||
}
|
||||
// get maximum correction level
|
||||
$maxecl = 8; // starting error level
|
||||
$maxerrsize = (928 - $numcw); // available codewords for error
|
||||
while ($maxecl > 0) {
|
||||
$errsize = (2 << $ecl);
|
||||
|
@ -1386,6 +1386,7 @@ class QRcode {
|
||||
$p += 2;
|
||||
}
|
||||
$this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr));
|
||||
$run = $p;
|
||||
return $run;
|
||||
}
|
||||
|
||||
@ -1455,7 +1456,7 @@ class QRcode {
|
||||
break;
|
||||
}
|
||||
case QR_MODE_KJ: {
|
||||
if ($hint == QR_MODE_KJ) {
|
||||
if ($this->hint == QR_MODE_KJ) {
|
||||
$length = $this->eatKanji();
|
||||
} else {
|
||||
$length = $this->eat8();
|
||||
|
@ -449,7 +449,7 @@ class TCPDF_COLORS {
|
||||
}
|
||||
if (!in_array($color, self::$jscolor)) {
|
||||
// default transparent color
|
||||
$color = $jscolor[0];
|
||||
$color = self::$jscolor[0];
|
||||
}
|
||||
return 'color.'.$color;
|
||||
}
|
||||
|
@ -557,6 +557,7 @@ class TCPDF_FONTS {
|
||||
$numGlyphs = TCPDF_STATIC::_getUSHORT($font, $offset);
|
||||
// ---------- get CIDToGIDMap ----------
|
||||
$ctg = array();
|
||||
$c = 0;
|
||||
foreach ($encodingTables as $enctable) {
|
||||
// get only specified Platform ID and Encoding ID
|
||||
if (($enctable['platformID'] == $platid) AND ($enctable['encodingID'] == $encid)) {
|
||||
@ -956,6 +957,7 @@ class TCPDF_FONTS {
|
||||
// sfnt version must be 0x00010000 for TrueType version 1.0.
|
||||
return $font;
|
||||
}
|
||||
$c = 0;
|
||||
$offset += 4;
|
||||
// get number of tables
|
||||
$numTables = TCPDF_STATIC::_getUSHORT($font, $offset);
|
||||
@ -1883,7 +1885,7 @@ class TCPDF_FONTS {
|
||||
* Converts UTF-8 character to integer value.<br>
|
||||
* Uses the getUniord() method if the value is not cached.
|
||||
* @param $uch (string) character string to process.
|
||||
* @return integer Unicode value
|
||||
* @return int Unicode value
|
||||
* @public static
|
||||
*/
|
||||
public static function uniord($uch) {
|
||||
@ -1922,7 +1924,7 @@ class TCPDF_FONTS {
|
||||
* ---------------------------------------------------------------------
|
||||
* </pre>
|
||||
* @param $uch (string) character string to process.
|
||||
* @return integer Unicode value
|
||||
* @return int Unicode value
|
||||
* @author Nicola Asuni
|
||||
* @public static
|
||||
*/
|
||||
@ -1995,7 +1997,7 @@ class TCPDF_FONTS {
|
||||
* @author Nicola Asuni
|
||||
* @public static
|
||||
*/
|
||||
public static function UTF8StringToArray($str, $isunicode=true, &$currentfont) {
|
||||
public static function UTF8StringToArray($str, $isunicode, &$currentfont) {
|
||||
if ($isunicode) {
|
||||
// requires PCRE unicode support turned on
|
||||
$chars = TCPDF_STATIC::pregSplit('//','u', $str, -1, PREG_SPLIT_NO_EMPTY);
|
||||
@ -2021,7 +2023,7 @@ class TCPDF_FONTS {
|
||||
* @since 3.2.000 (2008-06-23)
|
||||
* @public static
|
||||
*/
|
||||
public static function UTF8ToLatin1($str, $isunicode=true, &$currentfont) {
|
||||
public static function UTF8ToLatin1($str, $isunicode, &$currentfont) {
|
||||
$unicode = self::UTF8StringToArray($str, $isunicode, $currentfont); // array containing UTF-8 unicode values
|
||||
return self::UTF8ArrToLatin1($unicode);
|
||||
}
|
||||
@ -2037,7 +2039,7 @@ class TCPDF_FONTS {
|
||||
* @since 1.53.0.TC005 (2005-01-05)
|
||||
* @public static
|
||||
*/
|
||||
public static function UTF8ToUTF16BE($str, $setbom=false, $isunicode=true, &$currentfont) {
|
||||
public static function UTF8ToUTF16BE($str, $setbom, $isunicode, &$currentfont) {
|
||||
if (!$isunicode) {
|
||||
return $str; // string is not in unicode
|
||||
}
|
||||
@ -2057,7 +2059,7 @@ class TCPDF_FONTS {
|
||||
* @since 2.1.000 (2008-01-08)
|
||||
* @public static
|
||||
*/
|
||||
public static function utf8StrRev($str, $setbom=false, $forcertl=false, $isunicode=true, &$currentfont) {
|
||||
public static function utf8StrRev($str, $setbom, $forcertl, $isunicode, &$currentfont) {
|
||||
return self::utf8StrArrRev(self::UTF8StringToArray($str, $isunicode, $currentfont), $str, $setbom, $forcertl, $isunicode, $currentfont);
|
||||
}
|
||||
|
||||
@ -2074,7 +2076,7 @@ class TCPDF_FONTS {
|
||||
* @since 4.9.000 (2010-03-27)
|
||||
* @public static
|
||||
*/
|
||||
public static function utf8StrArrRev($arr, $str='', $setbom=false, $forcertl=false, $isunicode=true, &$currentfont) {
|
||||
public static function utf8StrArrRev($arr, $str, $setbom, $forcertl, $isunicode, &$currentfont) {
|
||||
return self::arrUTF8ToUTF16BE(self::utf8Bidi($arr, $str, $forcertl, $isunicode, $currentfont), $setbom);
|
||||
}
|
||||
|
||||
@ -2090,7 +2092,7 @@ class TCPDF_FONTS {
|
||||
* @since 2.4.000 (2008-03-06)
|
||||
* @public static
|
||||
*/
|
||||
public static function utf8Bidi($ta, $str='', $forcertl=false, $isunicode=true, &$currentfont) {
|
||||
public static function utf8Bidi($ta, $str, $forcertl, $isunicode, &$currentfont) {
|
||||
// paragraph embedding level
|
||||
$pel = 0;
|
||||
// max level
|
||||
|
@ -276,7 +276,7 @@ class TCPDF_STATIC {
|
||||
/**
|
||||
* Determine whether a string is empty.
|
||||
* @param $str (string) string to be checked
|
||||
* @return boolean true if string is empty
|
||||
* @return bool true if string is empty
|
||||
* @since 4.5.044 (2009-04-16)
|
||||
* @public static
|
||||
*/
|
||||
@ -1136,7 +1136,7 @@ class TCPDF_STATIC {
|
||||
* @see setHtmlVSpace()
|
||||
* @public static
|
||||
*/
|
||||
public static function fixHTMLCode($html, $default_css='', $tagvs='', $tidy_options='', &$tagvspaces) {
|
||||
public static function fixHTMLCode($html, $default_css, $tagvs, $tidy_options, &$tagvspaces) {
|
||||
// configure parameters for HTML Tidy
|
||||
if ($tidy_options === '') {
|
||||
$tidy_options = array (
|
||||
@ -1842,6 +1842,10 @@ class TCPDF_STATIC {
|
||||
curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file');
|
||||
curl_setopt($crs, CURLOPT_MAXREDIRS, 5);
|
||||
if (defined('CURLOPT_PROTOCOLS')) {
|
||||
curl_setopt($crs, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS | CURLPROTO_HTTP | CURLPROTO_FTP | CURLPROTO_FTPS);
|
||||
}
|
||||
curl_exec($crs);
|
||||
$code = curl_getinfo($crs, CURLINFO_HTTP_CODE);
|
||||
curl_close($crs);
|
||||
@ -1973,6 +1977,10 @@ class TCPDF_STATIC {
|
||||
curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file');
|
||||
curl_setopt($crs, CURLOPT_MAXREDIRS, 5);
|
||||
if (defined('CURLOPT_PROTOCOLS')) {
|
||||
curl_setopt($crs, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS | CURLPROTO_HTTP | CURLPROTO_FTP | CURLPROTO_FTPS);
|
||||
}
|
||||
$ret = curl_exec($crs);
|
||||
curl_close($crs);
|
||||
if ($ret !== false) {
|
||||
@ -2507,7 +2515,7 @@ class TCPDF_STATIC {
|
||||
* @since 5.0.010 (2010-05-17)
|
||||
* @public static
|
||||
*/
|
||||
public static function setPageBoxes($page, $type, $llx, $lly, $urx, $ury, $points=false, $k, $pagedim=array()) {
|
||||
public static function setPageBoxes($page, $type, $llx, $lly, $urx, $ury, $points, $k, $pagedim=array()) {
|
||||
if (!isset($pagedim[$page])) {
|
||||
// initialize array
|
||||
$pagedim[$page] = array();
|
||||
|
73
tcpdf.php
73
tcpdf.php
@ -2728,7 +2728,7 @@ class TCPDF {
|
||||
/**
|
||||
* Adjust the internal Cell padding array to take account of the line width.
|
||||
* @param $brd (mixed) 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)))
|
||||
* @return array of adjustments
|
||||
* @return void|array of adjustments
|
||||
* @public
|
||||
* @since 5.9.000 (2010-10-03)
|
||||
*/
|
||||
@ -2744,7 +2744,11 @@ class TCPDF {
|
||||
$newbrd[$brd[$i]] = true;
|
||||
}
|
||||
$brd = $newbrd;
|
||||
} elseif (($brd === 1) OR ($brd === true) OR (is_numeric($brd) AND (intval($brd) > 0))) {
|
||||
} elseif (
|
||||
($brd === 1)
|
||||
|| ($brd === true)
|
||||
|| (is_numeric($brd) && ((int)$brd > 0))
|
||||
) {
|
||||
$brd = array('LRTB' => true);
|
||||
}
|
||||
if (!is_array($brd)) {
|
||||
@ -2762,7 +2766,7 @@ class TCPDF {
|
||||
// process borders
|
||||
foreach ($brd as $border => $style) {
|
||||
$line_width = $this->LineWidth;
|
||||
if (is_array($style) AND isset($style['width'])) {
|
||||
if (is_array($style) && isset($style['width'])) {
|
||||
// get border width
|
||||
$line_width = $style['width'];
|
||||
}
|
||||
@ -2783,20 +2787,43 @@ class TCPDF {
|
||||
}
|
||||
}
|
||||
// correct internal cell padding if required to avoid overlap between text and lines
|
||||
if ((strpos($border,'T') !== false) AND ($this->cell_padding['T'] < $adj)) {
|
||||
if (
|
||||
is_numeric($this->cell_padding['T'])
|
||||
&& ($this->cell_padding['T'] < $adj)
|
||||
&& (strpos($border, 'T') !== false)
|
||||
) {
|
||||
$this->cell_padding['T'] = $adj;
|
||||
}
|
||||
if ((strpos($border,'R') !== false) AND ($this->cell_padding['R'] < $adj)) {
|
||||
if (
|
||||
is_numeric($this->cell_padding['R'])
|
||||
&& ($this->cell_padding['R'] < $adj)
|
||||
&& (strpos($border, 'R') !== false)
|
||||
) {
|
||||
$this->cell_padding['R'] = $adj;
|
||||
}
|
||||
if ((strpos($border,'B') !== false) AND ($this->cell_padding['B'] < $adj)) {
|
||||
if (
|
||||
is_numeric($this->cell_padding['B'])
|
||||
&& ($this->cell_padding['B'] < $adj)
|
||||
&& (strpos($border, 'B') !== false)
|
||||
) {
|
||||
$this->cell_padding['B'] = $adj;
|
||||
}
|
||||
if ((strpos($border,'L') !== false) AND ($this->cell_padding['L'] < $adj)) {
|
||||
if (
|
||||
is_numeric($this->cell_padding['L'])
|
||||
&& ($this->cell_padding['L'] < $adj)
|
||||
&& (strpos($border, 'L') !== false)
|
||||
) {
|
||||
$this->cell_padding['L'] = $adj;
|
||||
}
|
||||
|
||||
}
|
||||
return array('T' => ($this->cell_padding['T'] - $cp['T']), 'R' => ($this->cell_padding['R'] - $cp['R']), 'B' => ($this->cell_padding['B'] - $cp['B']), 'L' => ($this->cell_padding['L'] - $cp['L']));
|
||||
|
||||
return array(
|
||||
'T' => ($this->cell_padding['T'] - $cp['T']),
|
||||
'R' => ($this->cell_padding['R'] - $cp['R']),
|
||||
'B' => ($this->cell_padding['B'] - $cp['B']),
|
||||
'L' => ($this->cell_padding['L'] - $cp['L']),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -6489,7 +6516,7 @@ class TCPDF {
|
||||
// *** very slow ***
|
||||
$l = $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl, $this->isunicode, $this->CurrentFont));
|
||||
} else {
|
||||
$l += $this->GetCharWidth($c);
|
||||
$l += $this->GetCharWidth($c, ($i+1 < $nb));
|
||||
}
|
||||
if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) >= $wmax))) {
|
||||
if (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) {
|
||||
@ -6866,6 +6893,12 @@ class TCPDF {
|
||||
list($x, $y) = $this->checkPageRegions($h, $x, $y);
|
||||
$exurl = ''; // external streams
|
||||
$imsize = FALSE;
|
||||
|
||||
// Make sure the file variable is not empty or null because accessing $file[0] later
|
||||
// results in error when running PHP 7.4
|
||||
if (empty($file)) {
|
||||
return false;
|
||||
}
|
||||
// check if we are passing an image as file or string
|
||||
if ($file[0] === '@') {
|
||||
// image from string
|
||||
@ -16549,7 +16582,11 @@ class TCPDF {
|
||||
$dom[($dom[$key]['parent'])]['content'] = str_replace('</thead>', '', $dom[($dom[$key]['parent'])]['content']);
|
||||
}
|
||||
// store header rows on a new table
|
||||
if (($dom[$key]['value'] == 'tr') AND ($dom[($dom[$key]['parent'])]['thead'] === true)) {
|
||||
if (
|
||||
($dom[$key]['value'] === 'tr')
|
||||
&& !empty($dom[($dom[$key]['parent'])]['thead'])
|
||||
&& ($dom[($dom[$key]['parent'])]['thead'] === true)
|
||||
) {
|
||||
if (TCPDF_STATIC::empty_string($dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'])) {
|
||||
$dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] = $csstagarray.$a[$dom[($dom[($dom[$key]['parent'])]['parent'])]['elkey']];
|
||||
}
|
||||
@ -16979,10 +17016,20 @@ class TCPDF {
|
||||
// rows on thead block are printed as a separate table
|
||||
} else {
|
||||
$dom[$key]['thead'] = false;
|
||||
$parent = $dom[$key]['parent'];
|
||||
|
||||
if (!isset($dom[$parent]['rows'])) {
|
||||
$dom[$parent]['rows'] = 0;
|
||||
}
|
||||
// store the number of rows on table element
|
||||
++$dom[($dom[$key]['parent'])]['rows'];
|
||||
++$dom[$parent]['rows'];
|
||||
|
||||
if (!isset($dom[$parent]['trids'])) {
|
||||
$dom[$parent]['trids'] = array();
|
||||
}
|
||||
|
||||
// store the TR elements IDs on table element
|
||||
array_push($dom[($dom[$key]['parent'])]['trids'], $key);
|
||||
array_push($dom[$parent]['trids'], $key);
|
||||
}
|
||||
}
|
||||
if (($dom[$key]['value'] == 'th') OR ($dom[$key]['value'] == 'td')) {
|
||||
@ -19807,7 +19854,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
}
|
||||
}
|
||||
if (!$in_table_head) { // we are not inside a thead section
|
||||
$this->cell_padding = $table_el['old_cell_padding'];
|
||||
$this->cell_padding = isset($table_el['old_cell_padding']) ? $table_el['old_cell_padding'] : null;
|
||||
// reset row height
|
||||
$this->resetLastH();
|
||||
if (($this->page == ($this->numpages - 1)) AND ($this->pageopen[$this->numpages])) {
|
||||
|
@ -938,7 +938,7 @@ class TCPDFBarcode {
|
||||
} else {
|
||||
$t = false; // space
|
||||
}
|
||||
$w = $seq[$j];
|
||||
$w = (float)$seq[$j];
|
||||
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
|
||||
$bararray['maxw'] += $w;
|
||||
++$k;
|
||||
@ -1271,7 +1271,7 @@ class TCPDFBarcode {
|
||||
} else {
|
||||
$t = false; // space
|
||||
}
|
||||
$w = $seq[$j];
|
||||
$w = (float)$seq[$j];
|
||||
$bararray['bcode'][] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
|
||||
$bararray['maxw'] += $w;
|
||||
}
|
||||
@ -1856,7 +1856,7 @@ class TCPDFBarcode {
|
||||
} else {
|
||||
$t = false; // space
|
||||
}
|
||||
$w = $seq[$j];
|
||||
$w = (float)$seq[$j];
|
||||
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
|
||||
$bararray['maxw'] += $w;
|
||||
++$k;
|
||||
@ -1947,7 +1947,7 @@ class TCPDFBarcode {
|
||||
} else {
|
||||
$t = false; // space
|
||||
}
|
||||
$w = $seq[$j];
|
||||
$w = (float)$seq[$j];
|
||||
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
|
||||
$bararray['maxw'] += $w;
|
||||
++$k;
|
||||
|
Loading…
x
Reference in New Issue
Block a user