mirror of
https://github.com/vdm-io/tcpdf.git
synced 2024-11-26 14:26:28 +00:00
5.9.101
This commit is contained in:
parent
18ccc5f668
commit
fdc3f42c4e
@ -1,3 +1,8 @@
|
|||||||
|
5.9.101 (2011-07-07)
|
||||||
|
- Support for JPEG and PNG ICC Color Profiles was added.
|
||||||
|
- Method addEmptySignatureAppearance() was added to add empty signature fields (see example n. 52).
|
||||||
|
- Bug item #3354332 "Strange line spacing with reduced font-size in writeHTML" was fixed.
|
||||||
|
|
||||||
5.9.100 (2011-06-29)
|
5.9.100 (2011-06-29)
|
||||||
- An SVG bug has been fixed.
|
- An SVG bug has been fixed.
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ http://sourceforge.net/donate/index.php?group_id=128076
|
|||||||
------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
|
|
||||||
Name: TCPDF
|
Name: TCPDF
|
||||||
Version: 5.9.100
|
Version: 5.9.101
|
||||||
Release date: 2011-06-29
|
Release date: 2011-07-07
|
||||||
Author: Nicola Asuni
|
Author: Nicola Asuni
|
||||||
|
|
||||||
Copyright (c) 2002-2011:
|
Copyright (c) 2002-2011:
|
||||||
@ -37,7 +37,7 @@ Main Features:
|
|||||||
* images, graphic (geometric figures) and transformation methods;
|
* images, graphic (geometric figures) and transformation methods;
|
||||||
* supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http: www.imagemagick.org/www/formats.html)
|
* supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http: www.imagemagick.org/www/formats.html)
|
||||||
* 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code, PDF417;
|
* 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code, PDF417;
|
||||||
* Grayscale, RGB, CMYK, Spot Colors and Transparencies;
|
* JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
|
||||||
* automatic page header and footer management;
|
* automatic page header and footer management;
|
||||||
* document encryption up to 256 bit and digital signature certifications;
|
* document encryption up to 256 bit and digital signature certifications;
|
||||||
* transactions to UNDO commands;
|
* transactions to UNDO commands;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//============================================================+
|
//============================================================+
|
||||||
// File name : example_052.php
|
// File name : example_052.php
|
||||||
// Begin : 2009-05-07
|
// Begin : 2009-05-07
|
||||||
// Last Update : 2010-08-08
|
// Last Update : 2011-07-06
|
||||||
//
|
//
|
||||||
// Description : Example 052 for TCPDF class
|
// Description : Example 052 for TCPDF class
|
||||||
// Certification Signature (experimental)
|
// Certification Signature (experimental)
|
||||||
@ -97,13 +97,19 @@ $pdf->AddPage();
|
|||||||
$text = 'This is a <b color="#FF0000">digitally signed document</b> using the default (example) <b>tcpdf.crt</b> certificate.<br />To validate this signature you have to load the <b color="#006600">tcpdf.fdf</b> on the Arobat Reader to add the certificate to <i>List of Trusted Identities</i>.<br /><br />For more information check the source code of this example and the source code documentation for the <i>setSignature()</i> method.<br /><br /><a href="http://www.tcpdf.org">www.tcpdf.org</a>';
|
$text = 'This is a <b color="#FF0000">digitally signed document</b> using the default (example) <b>tcpdf.crt</b> certificate.<br />To validate this signature you have to load the <b color="#006600">tcpdf.fdf</b> on the Arobat Reader to add the certificate to <i>List of Trusted Identities</i>.<br /><br />For more information check the source code of this example and the source code documentation for the <i>setSignature()</i> method.<br /><br /><a href="http://www.tcpdf.org">www.tcpdf.org</a>';
|
||||||
$pdf->writeHTML($text, true, 0, true, 0);
|
$pdf->writeHTML($text, true, 0, true, 0);
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// *** set signature appearance ***
|
// *** set signature appearance ***
|
||||||
|
|
||||||
// create content for signature (image and/or text)
|
// create content for signature (image and/or text)
|
||||||
$pdf->Image($file='../images/tcpdf_signature.png', $x=180, $y=60, $w=15, $h=15, $type='PNG');
|
$pdf->Image('../images/tcpdf_signature.png', 180, 60, 15, 15, 'PNG');
|
||||||
|
|
||||||
// define active area for signature appearance
|
// define active area for signature appearance
|
||||||
$pdf->setSignatureAppearance($x=180, $y=60, $w=15, $h=15);
|
$pdf->setSignatureAppearance(180, 60, 15, 15);
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
// *** set an empty signature appearance ***
|
||||||
|
$pdf->addEmptySignatureAppearance(180, 80, 15, 15);
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
|
|
||||||
|
228
tcpdf.php
228
tcpdf.php
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
//============================================================+
|
//============================================================+
|
||||||
// File name : tcpdf.php
|
// File name : tcpdf.php
|
||||||
// Version : 5.9.100
|
// Version : 5.9.101
|
||||||
// Begin : 2002-08-03
|
// Begin : 2002-08-03
|
||||||
// Last Update : 2011-06-29
|
// Last Update : 2011-07-07
|
||||||
// Author : Nicola Asuni - Tecnick.com S.r.l - Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
|
// Author : Nicola Asuni - Tecnick.com S.r.l - Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
|
||||||
// License : http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT GNU-LGPLv3 + YOU CAN'T REMOVE ANY TCPDF COPYRIGHT NOTICE OR LINK FROM THE GENERATED PDF DOCUMENTS.
|
// License : http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT GNU-LGPLv3 + YOU CAN'T REMOVE ANY TCPDF COPYRIGHT NOTICE OR LINK FROM THE GENERATED PDF DOCUMENTS.
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
@ -49,7 +49,7 @@
|
|||||||
// * images, graphic (geometric figures) and transformation methods;
|
// * images, graphic (geometric figures) and transformation methods;
|
||||||
// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
|
// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
|
||||||
// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code, PDF417;
|
// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code, PDF417;
|
||||||
// * Grayscale, RGB, CMYK, Spot Colors and Transparencies;
|
// * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
|
||||||
// * automatic page header and footer management;
|
// * automatic page header and footer management;
|
||||||
// * document encryption up to 256 bit and digital signature certifications;
|
// * document encryption up to 256 bit and digital signature certifications;
|
||||||
// * transactions to UNDO commands;
|
// * transactions to UNDO commands;
|
||||||
@ -114,7 +114,7 @@
|
|||||||
* <li>images, graphic (geometric figures) and transformation methods;
|
* <li>images, graphic (geometric figures) and transformation methods;
|
||||||
* <li>supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)</li>
|
* <li>supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)</li>
|
||||||
* <li>1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code, PDF417;</li>
|
* <li>1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code, PDF417;</li>
|
||||||
* <li>Grayscale, RGB, CMYK, Spot Colors and Transparencies;</li>
|
* <li>JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;</li>
|
||||||
* <li>automatic page header and footer management;</li>
|
* <li>automatic page header and footer management;</li>
|
||||||
* <li>document encryption up to 256 bit and digital signature certifications;</li>
|
* <li>document encryption up to 256 bit and digital signature certifications;</li>
|
||||||
* <li>transactions to UNDO commands;</li>
|
* <li>transactions to UNDO commands;</li>
|
||||||
@ -134,7 +134,7 @@
|
|||||||
* Tools to encode your unicode fonts are on fonts/utils directory.</p>
|
* Tools to encode your unicode fonts are on fonts/utils directory.</p>
|
||||||
* @package com.tecnick.tcpdf
|
* @package com.tecnick.tcpdf
|
||||||
* @author Nicola Asuni
|
* @author Nicola Asuni
|
||||||
* @version 5.9.100
|
* @version 5.9.101
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Main configuration file. Define the K_TCPDF_EXTERNAL_CONFIG constant to skip this file.
|
// Main configuration file. Define the K_TCPDF_EXTERNAL_CONFIG constant to skip this file.
|
||||||
@ -146,7 +146,7 @@ require_once(dirname(__FILE__).'/config/tcpdf_config.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>
|
* 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
|
* @package com.tecnick.tcpdf
|
||||||
* @brief PHP class for generating PDF documents without requiring external extensions.
|
* @brief PHP class for generating PDF documents without requiring external extensions.
|
||||||
* @version 5.9.100
|
* @version 5.9.101
|
||||||
* @author Nicola Asuni - info@tecnick.com
|
* @author Nicola Asuni - info@tecnick.com
|
||||||
*/
|
*/
|
||||||
class TCPDF {
|
class TCPDF {
|
||||||
@ -157,7 +157,7 @@ class TCPDF {
|
|||||||
* Current TCPDF version.
|
* Current TCPDF version.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
private $tcpdf_version = '5.9.100';
|
private $tcpdf_version = '5.9.101';
|
||||||
|
|
||||||
// Protected properties
|
// Protected properties
|
||||||
|
|
||||||
@ -1334,6 +1334,13 @@ class TCPDF {
|
|||||||
*/
|
*/
|
||||||
protected $signature_appearance = array('page' => 1, 'rect' => '0 0 0 0');
|
protected $signature_appearance = array('page' => 1, 'rect' => '0 0 0 0');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of empty digital signature appearances.
|
||||||
|
* @protected
|
||||||
|
* @since 5.9.101 (2011-07-06)
|
||||||
|
*/
|
||||||
|
protected $empty_signature_appearance = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regular expression used to find blank characters (required for word-wrapping).
|
* Regular expression used to find blank characters (required for word-wrapping).
|
||||||
* @protected
|
* @protected
|
||||||
@ -1939,6 +1946,7 @@ class TCPDF {
|
|||||||
$this->ur['ef'] = '/Create/Delete/Modify/Import';
|
$this->ur['ef'] = '/Create/Delete/Modify/Import';
|
||||||
$this->ur['formex'] = '';
|
$this->ur['formex'] = '';
|
||||||
$this->signature_appearance = array('page' => 1, 'rect' => '0 0 0 0');
|
$this->signature_appearance = array('page' => 1, 'rect' => '0 0 0 0');
|
||||||
|
$this->empty_signature_appearance = array();
|
||||||
// set default JPEG quality
|
// set default JPEG quality
|
||||||
$this->jpeg_quality = 75;
|
$this->jpeg_quality = 75;
|
||||||
// initialize some settings
|
// initialize some settings
|
||||||
@ -7849,16 +7857,63 @@ class TCPDF {
|
|||||||
if ($a[2] != 2) {
|
if ($a[2] != 2) {
|
||||||
$this->Error('Not a JPEG file: '.$file);
|
$this->Error('Not a JPEG file: '.$file);
|
||||||
}
|
}
|
||||||
if ((!isset($a['channels'])) OR ($a['channels'] == 3)) {
|
// bits per pixel
|
||||||
$colspace = 'DeviceRGB';
|
$bpc = isset($a['bits']) ? intval($a['bits']) : 8;
|
||||||
} elseif ($a['channels'] == 4) {
|
// number of image channels
|
||||||
$colspace = 'DeviceCMYK';
|
if (!isset($a['channels'])) {
|
||||||
|
$channels = 3;
|
||||||
} else {
|
} else {
|
||||||
$colspace = 'DeviceGray';
|
$channels = intval($a['channels']);
|
||||||
}
|
}
|
||||||
$bpc = isset($a['bits']) ? $a['bits'] : 8;
|
// default colour space
|
||||||
|
switch ($channels) {
|
||||||
|
case 1: {
|
||||||
|
$colspace = 'DeviceGray';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3: {
|
||||||
|
$colspace = 'DeviceRGB';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
$colspace = 'DeviceCMYK';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
$channels = 3;
|
||||||
|
$colspace = 'DeviceRGB';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// get file content
|
||||||
$data = file_get_contents($file);
|
$data = file_get_contents($file);
|
||||||
return array('w' => $a[0], 'h' => $a[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
|
// check for embedded ICC profile
|
||||||
|
$icc = array();
|
||||||
|
$offset = 0;
|
||||||
|
while (($pos = strpos($data, "ICC_PROFILE\0", $offset)) !== false) {
|
||||||
|
// get ICC sequence lenght
|
||||||
|
$length = ($this->_getUSHORT($data, ($pos - 2)) - 16);
|
||||||
|
// marker sequence number
|
||||||
|
$msn = max(1, ord($data{($pos + 12)}));
|
||||||
|
// number of markers (total of APP2 used)
|
||||||
|
$nom = max(1, ord($data{($pos + 13)}));
|
||||||
|
// get sequence segment
|
||||||
|
$icc[($msn - 1)] = substr($data, ($pos + 14), $length);
|
||||||
|
// move forward to next sequence
|
||||||
|
$offset = ($pos + 14 + $length);
|
||||||
|
}
|
||||||
|
// order and compact ICC segments
|
||||||
|
if (count($icc) > 0) {
|
||||||
|
ksort($icc);
|
||||||
|
$icc = implode('', $icc);
|
||||||
|
if ((ord($icc{36}) != 0x61) OR (ord($icc{37}) != 0x63) OR (ord($icc{38}) != 0x73) OR (ord($icc{39}) != 0x70)) {
|
||||||
|
// invalid ICC profile
|
||||||
|
$icc = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$icc = false;
|
||||||
|
}
|
||||||
|
return array('w' => $a[0], 'h' => $a[1], 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -7917,25 +7972,27 @@ class TCPDF {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
fread($f, 4);
|
fread($f, 4);
|
||||||
$parms = '/DecodeParms << /Predictor 15 /Colors '.($ct == 2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.' >>';
|
$channels = ($ct == 2 ? 3 : 1);
|
||||||
|
$parms = '/DecodeParms << /Predictor 15 /Colors '.$channels.' /BitsPerComponent '.$bpc.' /Columns '.$w.' >>';
|
||||||
//Scan chunks looking for palette, transparency and image data
|
//Scan chunks looking for palette, transparency and image data
|
||||||
$pal = '';
|
$pal = '';
|
||||||
$trns = '';
|
$trns = '';
|
||||||
$data = '';
|
$data = '';
|
||||||
|
$icc = false;
|
||||||
do {
|
do {
|
||||||
$n = $this->_freadint($f);
|
$n = $this->_freadint($f);
|
||||||
$type = fread($f, 4);
|
$type = fread($f, 4);
|
||||||
if ($type == 'PLTE') {
|
if ($type == 'PLTE') {
|
||||||
//Read palette
|
// read palette
|
||||||
$pal = $this->rfread($f, $n);
|
$pal = $this->rfread($f, $n);
|
||||||
fread($f, 4);
|
fread($f, 4);
|
||||||
} elseif ($type == 'tRNS') {
|
} elseif ($type == 'tRNS') {
|
||||||
//Read transparency info
|
// read transparency info
|
||||||
$t = $this->rfread($f, $n);
|
$t = $this->rfread($f, $n);
|
||||||
if ($ct == 0) {
|
if ($ct == 0) {
|
||||||
$trns = array(ord(substr($t, 1, 1)));
|
$trns = array(ord($t{1}));
|
||||||
} elseif ($ct == 2) {
|
} elseif ($ct == 2) {
|
||||||
$trns = array(ord(substr($t, 1, 1)), ord(substr($t, 3, 1)), ord(substr($t, 5, 1)));
|
$trns = array(ord($t{1}), ord($t{3}), ord($t{5}));
|
||||||
} else {
|
} else {
|
||||||
$pos = strpos($t, chr(0));
|
$pos = strpos($t, chr(0));
|
||||||
if ($pos !== false) {
|
if ($pos !== false) {
|
||||||
@ -7944,9 +8001,26 @@ class TCPDF {
|
|||||||
}
|
}
|
||||||
fread($f, 4);
|
fread($f, 4);
|
||||||
} elseif ($type == 'IDAT') {
|
} elseif ($type == 'IDAT') {
|
||||||
//Read image data block
|
// read image data block
|
||||||
$data .= $this->rfread($f, $n);
|
$data .= $this->rfread($f, $n);
|
||||||
fread($f, 4);
|
fread($f, 4);
|
||||||
|
} elseif ($type == 'iCCP') {
|
||||||
|
// skip profile name and null separator
|
||||||
|
$len = 0;
|
||||||
|
while ((ord(fread($f, 1)) > 0) AND ($len < 80)) {
|
||||||
|
++$len;
|
||||||
|
}
|
||||||
|
// get compression method
|
||||||
|
if (ord(fread($f, 1)) != 0) {
|
||||||
|
//$this->Error('Unknown filter method: '.$file);
|
||||||
|
fclose($f);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// read ICC Color Profile
|
||||||
|
$icc = $this->rfread($f, ($n - $len - 2));
|
||||||
|
// decompress profile
|
||||||
|
$icc = gzuncompress($icc);
|
||||||
|
fread($f, 4);
|
||||||
} elseif ($type == 'IEND') {
|
} elseif ($type == 'IEND') {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
@ -7959,7 +8033,7 @@ class TCPDF {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
fclose($f);
|
fclose($f);
|
||||||
return array('w' => $w, 'h' => $h, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
|
return array('w' => $w, 'h' => $h, 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -8807,6 +8881,14 @@ class TCPDF {
|
|||||||
// set reference for signature object
|
// set reference for signature object
|
||||||
$out .= ' '.$this->sig_obj_id.' 0 R';
|
$out .= ' '.$this->sig_obj_id.' 0 R';
|
||||||
}
|
}
|
||||||
|
if (!empty($this->empty_signature_appearance)) {
|
||||||
|
foreach ($this->empty_signature_appearance as $esa) {
|
||||||
|
if ($esa['page'] == $n) {
|
||||||
|
// set reference for empty signature objects
|
||||||
|
$out .= ' '.$esa['objid'].' 0 R';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
$out .= ' ]';
|
$out .= ' ]';
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
@ -10749,13 +10831,21 @@ class TCPDF {
|
|||||||
if (array_key_exists('masked', $info)) {
|
if (array_key_exists('masked', $info)) {
|
||||||
$out .= ' /SMask '.($this->n - 1).' 0 R';
|
$out .= ' /SMask '.($this->n - 1).' 0 R';
|
||||||
}
|
}
|
||||||
if ($info['cs'] == 'Indexed') {
|
// set color space
|
||||||
|
$icc = false;
|
||||||
|
if (isset($info['icc']) AND ($info['icc'] !== false)) {
|
||||||
|
// ICC Colour Space
|
||||||
|
$icc = true;
|
||||||
|
$out .= ' /ColorSpace [/ICCBased '.($this->n + 1).' 0 R]';
|
||||||
|
} elseif ($info['cs'] == 'Indexed') {
|
||||||
|
// Indexed Colour Space
|
||||||
$out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]';
|
$out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]';
|
||||||
} else {
|
} else {
|
||||||
|
// Device Colour Space
|
||||||
$out .= ' /ColorSpace /'.$info['cs'];
|
$out .= ' /ColorSpace /'.$info['cs'];
|
||||||
if ($info['cs'] == 'DeviceCMYK') {
|
}
|
||||||
$out .= ' /Decode [1 0 1 0 1 0 1 0]';
|
if ($info['cs'] == 'DeviceCMYK') {
|
||||||
}
|
$out .= ' /Decode [1 0 1 0 1 0 1 0]';
|
||||||
}
|
}
|
||||||
$out .= ' /BitsPerComponent '.$info['bpc'];
|
$out .= ' /BitsPerComponent '.$info['bpc'];
|
||||||
if (isset($altoid) AND ($altoid > 0)) {
|
if (isset($altoid) AND ($altoid > 0)) {
|
||||||
@ -10779,7 +10869,7 @@ class TCPDF {
|
|||||||
$out .= ' '.$info['parms'];
|
$out .= ' '.$info['parms'];
|
||||||
}
|
}
|
||||||
if (isset($info['trns']) AND is_array($info['trns'])) {
|
if (isset($info['trns']) AND is_array($info['trns'])) {
|
||||||
$trns='';
|
$trns = '';
|
||||||
$count_info = count($info['trns']);
|
$count_info = count($info['trns']);
|
||||||
for ($i=0; $i < $count_info; ++$i) {
|
for ($i=0; $i < $count_info; ++$i) {
|
||||||
$trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
|
$trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
|
||||||
@ -10792,8 +10882,14 @@ class TCPDF {
|
|||||||
}
|
}
|
||||||
$out .= "\n".'endobj';
|
$out .= "\n".'endobj';
|
||||||
$this->_out($out);
|
$this->_out($out);
|
||||||
//Palette
|
if ($icc) {
|
||||||
if ($info['cs'] == 'Indexed') {
|
// ICC colour profile
|
||||||
|
$this->_newobj();
|
||||||
|
$icc = ($this->compress) ? gzcompress($info['icc']) : $info['icc'];
|
||||||
|
$icc = $this->_getrawstream($icc);
|
||||||
|
$this->_out('<</N '.$info['ch'].' /Alternate /'.$info['cs'].' '.$filter.'/Length '.strlen($icc).'>> stream'."\n".$icc."\n".'endstream'."\n".'endobj');
|
||||||
|
} elseif ($info['cs'] == 'Indexed') {
|
||||||
|
// colour palette
|
||||||
$this->_newobj();
|
$this->_newobj();
|
||||||
$pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
|
$pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
|
||||||
$pal = $this->_getrawstream($pal);
|
$pal = $this->_getrawstream($pal);
|
||||||
@ -11083,8 +11179,15 @@ class TCPDF {
|
|||||||
$out .= ' /AcroForm <<';
|
$out .= ' /AcroForm <<';
|
||||||
$objrefs = '';
|
$objrefs = '';
|
||||||
if ($this->sign AND isset($this->signature_data['cert_type'])) {
|
if ($this->sign AND isset($this->signature_data['cert_type'])) {
|
||||||
|
// set reference for signature object
|
||||||
$objrefs .= $this->sig_obj_id.' 0 R';
|
$objrefs .= $this->sig_obj_id.' 0 R';
|
||||||
}
|
}
|
||||||
|
if (!empty($this->empty_signature_appearance)) {
|
||||||
|
foreach ($this->empty_signature_appearance as $esa) {
|
||||||
|
// set reference for empty signature objects
|
||||||
|
$objrefs .= ' '.$esa['objid'].' 0 R';
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!empty($this->form_obj_id)) {
|
if (!empty($this->form_obj_id)) {
|
||||||
foreach($this->form_obj_id as $objid) {
|
foreach($this->form_obj_id as $objid) {
|
||||||
$objrefs .= ' '.$objid.' 0 R';
|
$objrefs .= ' '.$objid.' 0 R';
|
||||||
@ -11226,6 +11329,25 @@ class TCPDF {
|
|||||||
$this->_putheader();
|
$this->_putheader();
|
||||||
$this->_putpages();
|
$this->_putpages();
|
||||||
$this->_putresources();
|
$this->_putresources();
|
||||||
|
// empty signature fields
|
||||||
|
if (!empty($this->empty_signature_appearance)) {
|
||||||
|
foreach ($this->empty_signature_appearance as $key => $esa) {
|
||||||
|
// widget annotation for empty signature
|
||||||
|
$out = $this->_getobj($esa['objid'])."\n";
|
||||||
|
$out .= '<< /Type /Annot';
|
||||||
|
$out .= ' /Subtype /Widget';
|
||||||
|
$out .= ' /Rect ['.$esa['rect'].']';
|
||||||
|
$out .= ' /P '.$this->page_obj_id[($esa['page'])].' 0 R'; // link to signature appearance page
|
||||||
|
$out .= ' /F 4';
|
||||||
|
$out .= ' /FT /Sig';
|
||||||
|
$signame = sprintf('Signature_%03d', ($key + 1));
|
||||||
|
$out .= ' /T '.$this->_textstring($signame, $esa['objid']);
|
||||||
|
$out .= ' /Ff 0';
|
||||||
|
$out .= ' >>';
|
||||||
|
$out .= "\n".'endobj';
|
||||||
|
$this->_out($out);
|
||||||
|
}
|
||||||
|
}
|
||||||
// Signature
|
// Signature
|
||||||
if ($this->sign AND isset($this->signature_data['cert_type'])) {
|
if ($this->sign AND isset($this->signature_data['cert_type'])) {
|
||||||
// widget annotation for signature
|
// widget annotation for signature
|
||||||
@ -11236,7 +11358,7 @@ class TCPDF {
|
|||||||
$out .= ' /P '.$this->page_obj_id[($this->signature_appearance['page'])].' 0 R'; // link to signature appearance page
|
$out .= ' /P '.$this->page_obj_id[($this->signature_appearance['page'])].' 0 R'; // link to signature appearance page
|
||||||
$out .= ' /F 4';
|
$out .= ' /F 4';
|
||||||
$out .= ' /FT /Sig';
|
$out .= ' /FT /Sig';
|
||||||
$out .= ' /T '.$this->_textstring('Signature', $this->sig_obj_id);
|
$out .= ' /T '.$this->_textstring('Signature_000', $this->sig_obj_id);
|
||||||
$out .= ' /Ff 0';
|
$out .= ' /Ff 0';
|
||||||
$out .= ' /V '.($this->sig_obj_id + 1).' 0 R';
|
$out .= ' /V '.($this->sig_obj_id + 1).' 0 R';
|
||||||
$out .= ' >>';
|
$out .= ' >>';
|
||||||
@ -16093,16 +16215,50 @@ class TCPDF {
|
|||||||
* @since 5.3.011 (2010-06-17)
|
* @since 5.3.011 (2010-06-17)
|
||||||
*/
|
*/
|
||||||
public function setSignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1) {
|
public function setSignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1) {
|
||||||
|
$this->signature_appearance = $this->getSignatureAppearanceArray($x, $y, $w, $h, $page);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an empty digital signature appearance (a cliccable rectangle area to get signature properties)
|
||||||
|
* @param $x (float) Abscissa of the upper-left corner.
|
||||||
|
* @param $y (float) Ordinate of the upper-left corner.
|
||||||
|
* @param $w (float) Width of the signature area.
|
||||||
|
* @param $h (float) Height of the signature area.
|
||||||
|
* @param $page (int) option page number (if < 0 the current page is used).
|
||||||
|
* @public
|
||||||
|
* @author Nicola Asuni
|
||||||
|
* @since 5.9.101 (2011-07-06)
|
||||||
|
*/
|
||||||
|
public function addEmptySignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1) {
|
||||||
|
++$this->n;
|
||||||
|
$this->empty_signature_appearance[] = array('objid' => $this->n) + $this->getSignatureAppearanceArray($x, $y, $w, $h, $page);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the array that defines the signature appearance (page and rectangle coordinates).
|
||||||
|
* @param $x (float) Abscissa of the upper-left corner.
|
||||||
|
* @param $y (float) Ordinate of the upper-left corner.
|
||||||
|
* @param $w (float) Width of the signature area.
|
||||||
|
* @param $h (float) Height of the signature area.
|
||||||
|
* @param $page (int) option page number (if < 0 the current page is used).
|
||||||
|
* @return (array) Array defining page and rectangle coordinates of signature appearance.
|
||||||
|
* @protected
|
||||||
|
* @author Nicola Asuni
|
||||||
|
* @since 5.9.101 (2011-07-06)
|
||||||
|
*/
|
||||||
|
protected function getSignatureAppearanceArray($x=0, $y=0, $w=0, $h=0, $page=-1) {
|
||||||
|
$sigapp = array();
|
||||||
if (($page < 1) OR ($page > $this->numpages)) {
|
if (($page < 1) OR ($page > $this->numpages)) {
|
||||||
$this->signature_appearance['page'] = $this->page;
|
$sigapp['page'] = $this->page;
|
||||||
} else {
|
} else {
|
||||||
$this->signature_appearance['page'] = intval($page);
|
$sigapp['page'] = intval($page);
|
||||||
}
|
}
|
||||||
$a = $x * $this->k;
|
$a = $x * $this->k;
|
||||||
$b = $this->pagedim[($this->signature_appearance['page'])]['h'] - (($y + $h) * $this->k);
|
$b = $this->pagedim[($sigapp['page'])]['h'] - (($y + $h) * $this->k);
|
||||||
$c = $w * $this->k;
|
$c = $w * $this->k;
|
||||||
$d = $h * $this->k;
|
$d = $h * $this->k;
|
||||||
$this->signature_appearance['rect'] = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b+$d);
|
$sigapp['rect'] = sprintf('%.2F %.2F %.2F %.2F', $a, $b, ($a + $c), ($b + $d));
|
||||||
|
return $sigapp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -20102,7 +20258,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
|||||||
$fontsize = isset($dom[$key]['fontsize']) ? $dom[$key]['fontsize'] : $curfontsize;
|
$fontsize = isset($dom[$key]['fontsize']) ? $dom[$key]['fontsize'] : $curfontsize;
|
||||||
$fontascent = $this->getFontAscent($fontname, $fontstyle, $fontsize);
|
$fontascent = $this->getFontAscent($fontname, $fontstyle, $fontsize);
|
||||||
$fontdescent = $this->getFontDescent($fontname, $fontstyle, $fontsize);
|
$fontdescent = $this->getFontDescent($fontname, $fontstyle, $fontsize);
|
||||||
if ( ($fontname != $curfontname) OR ($fontstyle != $curfontstyle) OR ($fontsize != $curfontsize)
|
if (($fontname != $curfontname) OR ($fontstyle != $curfontstyle) OR ($fontsize != $curfontsize)
|
||||||
OR ($this->cell_height_ratio != $dom[$key]['line-height'])
|
OR ($this->cell_height_ratio != $dom[$key]['line-height'])
|
||||||
OR ($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value'] == 'li')) ) {
|
OR ($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value'] == 'li')) ) {
|
||||||
if (($key < ($maxel - 1)) AND (
|
if (($key < ($maxel - 1)) AND (
|
||||||
@ -20154,7 +20310,9 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
|||||||
$dom[$key]['line-height'] = $this->cell_height_ratio;
|
$dom[$key]['line-height'] = $this->cell_height_ratio;
|
||||||
}
|
}
|
||||||
if (!$dom[$key]['block']) {
|
if (!$dom[$key]['block']) {
|
||||||
$this->y += (((($curfontsize * $this->cell_height_ratio ) - ($fontsize * $dom[$key]['line-height'])) / $this->k) + $curfontascent - $fontascent - $curfontdescent + $fontdescent) / 2;
|
if (!(isset($dom[($key + 1)]) AND $dom[($key + 1)]['tag'] AND (!$dom[($key + 1)]['opening']) AND ($dom[($key + 1)]['value'] != 'li') AND $dom[$key]['tag'] AND (!$dom[$key]['opening']))) {
|
||||||
|
$this->y += (((($curfontsize * $this->cell_height_ratio) - ($fontsize * $dom[$key]['line-height'])) / $this->k) + $curfontascent - $fontascent - $curfontdescent + $fontdescent) / 2;
|
||||||
|
}
|
||||||
if (($dom[$key]['value'] != 'sup') AND ($dom[$key]['value'] != 'sub')) {
|
if (($dom[$key]['value'] != 'sup') AND ($dom[$key]['value'] != 'sub')) {
|
||||||
$minstartliney = min($this->y, $minstartliney);
|
$minstartliney = min($this->y, $minstartliney);
|
||||||
$maxbottomliney = max(($this->y + (($fontsize * $this->cell_height_ratio) / $this->k)), $maxbottomliney);
|
$maxbottomliney = max(($this->y + (($fontsize * $this->cell_height_ratio) / $this->k)), $maxbottomliney);
|
||||||
|
Loading…
Reference in New Issue
Block a user