update fpdf and fpdi

This commit is contained in:
Mario Fetka 2017-05-20 22:02:18 +02:00
parent cb87236f6b
commit bd55adea07
28 changed files with 2727 additions and 3460 deletions

View File

@ -1,66 +1,68 @@
<?php <?php
/** //
* This file is part of FPDI // FPDI - Version 1.3.1
* //
* @package FPDI // Copyright 2004-2009 Setasign - Jan Slabon
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (https://www.setasign.com) //
* @license http://opensource.org/licenses/mit-license The MIT License // Licensed under the Apache License, Version 2.0 (the "License");
* @version 1.6.2 // you may not use this file except in compliance with the License.
*/ // You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
/** if (!defined('ORD_z'))
* Class FilterASCII85 define('ORD_z',ord('z'));
*/ if (!defined('ORD_exclmark'))
class FilterASCII85 define('ORD_exclmark', ord('!'));
{ if (!defined('ORD_u'))
/** define('ORD_u', ord('u'));
* Decode ASCII85 encoded string if (!defined('ORD_tilde'))
* define('ORD_tilde', ord('~'));
* @param string $in
* @return string
* @throws Exception
*/
public function decode($in)
{
$ord = array(
'~' => ord('~'),
'z' => ord('z'),
'u' => ord('u'),
'!' => ord('!')
);
class FilterASCII85 {
function error($msg) {
die($msg);
}
function decode($in) {
$out = ''; $out = '';
$state = 0; $state = 0;
$chn = null; $chn = null;
$l = strlen($in); $l = strlen($in);
for ($k = 0; $k < $l; ++$k) { for ($k = 0; $k < $l; ++$k) {
$ch = ord($in[$k]) & 0xff; $ch = ord($in[$k]) & 0xff;
if ($ch == $ord['~']) { if ($ch == ORD_tilde) {
break; break;
} }
if (preg_match('/^\s$/',chr($ch))) { if (preg_match('/^\s$/',chr($ch))) {
continue; continue;
} }
if ($ch == $ord['z'] && $state == 0) { if ($ch == ORD_z && $state == 0) {
$out .= chr(0) . chr(0) . chr(0) . chr(0); $out .= chr(0).chr(0).chr(0).chr(0);
continue; continue;
} }
if ($ch < $ord['!'] || $ch > $ord['u']) { if ($ch < ORD_exclmark || $ch > ORD_u) {
throw new Exception('Illegal character in ASCII85Decode.'); $this->error('Illegal character in ASCII85Decode.');
} }
$chn[$state++] = $ch - $ord['!']; $chn[$state++] = $ch - ORD_exclmark;
if ($state == 5) { if ($state == 5) {
$state = 0; $state = 0;
$r = 0; $r = 0;
for ($j = 0; $j < 5; ++$j) { for ($j = 0; $j < 5; ++$j)
$r = (int)($r * 85 + $chn[$j]); $r = $r * 85 + $chn[$j];
}
$out .= chr($r >> 24); $out .= chr($r >> 24);
$out .= chr($r >> 16); $out .= chr($r >> 16);
$out .= chr($r >> 8); $out .= chr($r >> 8);
@ -68,21 +70,19 @@ class FilterASCII85
} }
} }
$r = 0; $r = 0;
if ($state == 1) { if ($state == 1)
throw new Exception('Illegal length in ASCII85Decode.'); $this->error('Illegal length in ASCII85Decode.');
}
if ($state == 2) { if ($state == 2) {
$r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1]+1) * 85 * 85 * 85; $r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1]+1) * 85 * 85 * 85;
$out .= chr($r >> 24); $out .= chr($r >> 24);
}
} else if ($state == 3) { else if ($state == 3) {
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2]+1) * 85 * 85; $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2]+1) * 85 * 85;
$out .= chr($r >> 24); $out .= chr($r >> 24);
$out .= chr($r >> 16); $out .= chr($r >> 16);
}
} else if ($state == 4) { else if ($state == 4) {
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3]+1) * 85 ; $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3]+1) * 85 ;
$out .= chr($r >> 24); $out .= chr($r >> 24);
$out .= chr($r >> 16); $out .= chr($r >> 16);
@ -91,16 +91,8 @@ class FilterASCII85
return $out; return $out;
} }
/** function encode($in) {
* NOT IMPLEMENTED $this->error("ASCII85 encoding not implemented.");
*
* @param string $in
* @return string
* @throws LogicException
*/
public function encode($in)
{
throw new LogicException("ASCII85 encoding not implemented.");
} }
} }

View File

@ -0,0 +1,33 @@
<?php
//
// FPDI - Version 1.3.1
//
// Copyright 2004-2009 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
require_once('FilterASCII85.php');
class FilterASCII85_FPDI extends FilterASCII85 {
var $fpdi;
function FPDI_FilterASCII85(&$fpdi) {
$this->fpdi =& $fpdi;
}
function error($msg) {
$this->fpdi->error($msg);
}
}

View File

@ -1,43 +0,0 @@
<?php
/**
* This file is part of FPDI
*
* @package FPDI
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (https://www.setasign.com)
* @license http://opensource.org/licenses/mit-license The MIT License
* @version 1.6.2
*/
/**
* Class FilterASCIIHexDecode
*/
class FilterASCIIHexDecode
{
/**
* Converts an ASCII hexadecimal encoded string into it's binary representation.
*
* @param string $data The input string
* @return string
*/
public function decode($data)
{
$data = preg_replace('/[^0-9A-Fa-f]/', '', rtrim($data, '>'));
if ((strlen($data) % 2) == 1) {
$data .= '0';
}
return pack('H*', $data);
}
/**
* Converts a string into ASCII hexadecimal representation.
*
* @param string $data The input string
* @param boolean $leaveEOD
* @return string
*/
public function encode($data, $leaveEOD = false)
{
return current(unpack('H*', $data)) . ($leaveEOD ? '' : '>');
}
}

View File

@ -1,164 +1,154 @@
<?php <?php
/** //
* This file is part of FPDI // FPDI - Version 1.3.1
* //
* @package FPDI // Copyright 2004-2009 Setasign - Jan Slabon
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (https://www.setasign.com) //
* @license http://opensource.org/licenses/mit-license The MIT License // Licensed under the Apache License, Version 2.0 (the "License");
* @version 1.6.2 // you may not use this file except in compliance with the License.
*/ // You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
/** class FilterLZW {
* Class FilterLZW
*/ var $sTable = array();
class FilterLZW var $data = null;
{ var $dataLength = 0;
protected $_sTable = array(); var $tIdx;
protected $_data = null; var $bitsToGet = 9;
protected $_dataLength = 0; var $bytePointer;
protected $_tIdx; var $bitPointer;
protected $_bitsToGet = 9; var $nextData = 0;
protected $_bytePointer; var $nextBits = 0;
protected $_bitPointer; var $andTable = array(511, 1023, 2047, 4095);
protected $_nextData = 0;
protected $_nextBits = 0;
protected $_andTable = array(511, 1023, 2047, 4095);
function error($msg) {
die($msg);
}
/** /**
* Decodes LZW compressed data. * Method to decode LZW compressed data.
* *
* @param string $data The compressed data. * @param string data The compressed data.
* @throws Exception
* @return string
*/ */
public function decode($data) function decode($data) {
{
if ($data[0] == 0x00 && $data[1] == 0x01) { if($data[0] == 0x00 && $data[1] == 0x01) {
throw new Exception('LZW flavour not supported.'); $this->error('LZW flavour not supported.');
} }
$this->_initsTable(); $this->initsTable();
$this->_data = $data; $this->data = $data;
$this->_dataLength = strlen($data); $this->dataLength = strlen($data);
// Initialize pointers // Initialize pointers
$this->_bytePointer = 0; $this->bytePointer = 0;
$this->_bitPointer = 0; $this->bitPointer = 0;
$this->_nextData = 0; $this->nextData = 0;
$this->_nextBits = 0; $this->nextBits = 0;
$oldCode = 0; $oldCode = 0;
$unCompData = ''; $string = '';
$uncompData = '';
while (($code = $this->_getNextCode()) != 257) { while (($code = $this->getNextCode()) != 257) {
if ($code == 256) { if ($code == 256) {
$this->_initsTable(); $this->initsTable();
$code = $this->_getNextCode(); $code = $this->getNextCode();
if ($code == 257) { if ($code == 257) {
break; break;
} }
if (!isset($this->_sTable[$code])) { $uncompData .= $this->sTable[$code];
throw new Exception('Error while decompression LZW compressed data.');
}
$unCompData .= $this->_sTable[$code];
$oldCode = $code; $oldCode = $code;
} else { } else {
if ($code < $this->_tIdx) { if ($code < $this->tIdx) {
$string = $this->_sTable[$code]; $string = $this->sTable[$code];
$unCompData .= $string; $uncompData .= $string;
$this->_addStringToTable($this->_sTable[$oldCode], $string[0]); $this->addStringToTable($this->sTable[$oldCode], $string[0]);
$oldCode = $code; $oldCode = $code;
} else { } else {
$string = $this->_sTable[$oldCode]; $string = $this->sTable[$oldCode];
$string = $string . $string[0]; $string = $string.$string[0];
$unCompData .= $string; $uncompData .= $string;
$this->_addStringToTable($string); $this->addStringToTable($string);
$oldCode = $code; $oldCode = $code;
} }
} }
} }
return $unCompData; return $uncompData;
} }
/** /**
* Initialize the string table. * Initialize the string table.
*/ */
protected function _initsTable() function initsTable() {
{ $this->sTable = array();
$this->_sTable = array();
for ($i = 0; $i < 256; $i++) for ($i = 0; $i < 256; $i++)
$this->_sTable[$i] = chr($i); $this->sTable[$i] = chr($i);
$this->_tIdx = 258; $this->tIdx = 258;
$this->_bitsToGet = 9; $this->bitsToGet = 9;
} }
/** /**
* Add a new string to the string table. * Add a new string to the string table.
*/ */
protected function _addStringToTable($oldString, $newString = '') function addStringToTable ($oldString, $newString='') {
{ $string = $oldString.$newString;
$string = $oldString . $newString;
// Add this new String to the table // Add this new String to the table
$this->_sTable[$this->_tIdx++] = $string; $this->sTable[$this->tIdx++] = $string;
if ($this->_tIdx == 511) { if ($this->tIdx == 511) {
$this->_bitsToGet = 10; $this->bitsToGet = 10;
} else if ($this->_tIdx == 1023) { } else if ($this->tIdx == 1023) {
$this->_bitsToGet = 11; $this->bitsToGet = 11;
} else if ($this->_tIdx == 2047) { } else if ($this->tIdx == 2047) {
$this->_bitsToGet = 12; $this->bitsToGet = 12;
} }
} }
/** // Returns the next 9, 10, 11 or 12 bits
* Returns the next 9, 10, 11 or 12 bits function getNextCode() {
* if ($this->bytePointer == $this->dataLength) {
* @return int
*/
protected function _getNextCode()
{
if ($this->_bytePointer == $this->_dataLength) {
return 257; return 257;
} }
$this->_nextData = ($this->_nextData << 8) | (ord($this->_data[$this->_bytePointer++]) & 0xff); $this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
$this->_nextBits += 8; $this->nextBits += 8;
if ($this->_nextBits < $this->_bitsToGet) { if ($this->nextBits < $this->bitsToGet) {
$this->_nextData = ($this->_nextData << 8) | (ord($this->_data[$this->_bytePointer++]) & 0xff); $this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
$this->_nextBits += 8; $this->nextBits += 8;
} }
$code = ($this->_nextData >> ($this->_nextBits - $this->_bitsToGet)) & $this->_andTable[$this->_bitsToGet-9]; $code = ($this->nextData >> ($this->nextBits - $this->bitsToGet)) & $this->andTable[$this->bitsToGet-9];
$this->_nextBits -= $this->_bitsToGet; $this->nextBits -= $this->bitsToGet;
return $code; return $code;
} }
/** function encode($in) {
* NOT IMPLEMENTED $this->error("LZW encoding not implemented.");
*
* @param string $in
* @return string
* @throws LogicException
*/
public function encode($in)
{
throw new LogicException("LZW encoding not implemented.");
} }
} }

View File

@ -0,0 +1,33 @@
<?php
//
// FPDI - Version 1.3.1
//
// Copyright 2004-2009 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
require_once('FilterLZW.php');
class FilterLZW_FPDI extends FilterLZW {
var $fpdi;
function FilterLZW_FPDI(&$fpdi) {
$this->fpdi =& $fpdi;
}
function error($msg) {
$this->fpdi->error($msg);
}
}

2
share/pnp/application/vendor/fpdf/font/courier.php vendored Normal file → Executable file
View File

@ -5,6 +5,4 @@ $up = -100;
$ut = 50; $ut = 50;
for($i=0;$i<=255;$i++) for($i=0;$i<=255;$i++)
$cw[chr($i)] = 600; $cw[chr($i)] = 600;
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/courierb.php vendored Normal file → Executable file
View File

@ -5,6 +5,4 @@ $up = -100;
$ut = 50; $ut = 50;
for($i=0;$i<=255;$i++) for($i=0;$i<=255;$i++)
$cw[chr($i)] = 600; $cw[chr($i)] = 600;
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/courierbi.php vendored Normal file → Executable file
View File

@ -5,6 +5,4 @@ $up = -100;
$ut = 50; $ut = 50;
for($i=0;$i<=255;$i++) for($i=0;$i<=255;$i++)
$cw[chr($i)] = 600; $cw[chr($i)] = 600;
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/courieri.php vendored Normal file → Executable file
View File

@ -5,6 +5,4 @@ $up = -100;
$ut = 50; $ut = 50;
for($i=0;$i<=255;$i++) for($i=0;$i<=255;$i++)
$cw[chr($i)] = 600; $cw[chr($i)] = 600;
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/helvetica.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/helveticab.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/helveticabi.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/helveticai.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

1
share/pnp/application/vendor/fpdf/font/symbol.php vendored Normal file → Executable file
View File

@ -16,5 +16,4 @@ $cw = array(
chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9));
?> ?>

2
share/pnp/application/vendor/fpdf/font/times.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/timesb.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/timesbi.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

2
share/pnp/application/vendor/fpdf/font/timesi.php vendored Normal file → Executable file
View File

@ -16,6 +16,4 @@ $cw = array(
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
$enc = 'cp1252';
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
?> ?>

1
share/pnp/application/vendor/fpdf/font/zapfdingbats.php vendored Normal file → Executable file
View File

@ -16,5 +16,4 @@ $cw = array(
chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14));
?> ?>

914
share/pnp/application/vendor/fpdf/fpdf.php vendored Normal file → Executable file

File diff suppressed because it is too large Load Diff

View File

@ -1,92 +1,81 @@
<?php <?php
/** //
* This file is part of FPDI // FPDF_TPL - Version 1.1.3
* //
* @package FPDI // Copyright 2004-2009 Setasign - Jan Slabon
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (https://www.setasign.com) //
* @license http://opensource.org/licenses/mit-license The MIT License // Licensed under the Apache License, Version 2.0 (the "License");
* @version 1.6.2 // you may not use this file except in compliance with the License.
*/ // You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
if (!class_exists('fpdi_bridge')) { class FPDF_TPL extends FPDF {
require_once('fpdi_bridge.php');
}
/**
* Class FPDF_TPL
*/
class FPDF_TPL extends fpdi_bridge
{
/** /**
* Array of template data * Array of Tpl-Data
*
* @var array * @var array
*/ */
protected $_tpls = array(); var $tpls = array();
/** /**
* Current Template-Id * Current Template-ID
*
* @var int * @var int
*/ */
public $tpl = 0; var $tpl = 0;
/** /**
* "In Template"-Flag * "In Template"-Flag
*
* @var boolean * @var boolean
*/ */
protected $_inTpl = false; var $_intpl = false;
/** /**
* Name prefix of templates used in Resources dictionary * Nameprefix of Templates used in Resources-Dictonary
* * @var string A String defining the Prefix used as Template-Object-Names. Have to beginn with an /
* @var string A String defining the Prefix used as Template-Object-Names. Have to begin with an /
*/ */
public $tplPrefix = "/TPL"; var $tplprefix = "/TPL";
/** /**
* Resources used by templates and pages * Resources used By Templates and Pages
* @var array
*/
var $_res = array();
/**
* Last used Template data
* *
* @var array * @var array
*/ */
protected $_res = array(); var $lastUsedTemplateData = array();
/** /**
* Last used template data * Start a Template
*
* @var array
*/
public $lastUsedTemplateData = array();
/**
* Start a template.
* *
* This method starts a template. You can give own coordinates to build an own sized * This method starts a template. You can give own coordinates to build an own sized
* template. Pay attention, that the margins are adapted to the new template size. * Template. Pay attention, that the margins are adapted to the new templatesize.
* If you want to write outside the template, for example to build a clipped template, * If you want to write outside the template, for example to build a clipped Template,
* you have to set the margins and "cursor"-position manual after beginTemplate()-call. * you have to set the Margins and "Cursor"-Position manual after beginTemplate-Call.
* *
* If no parameter is given, the template uses the current page-size. * If no parameter is given, the template uses the current page-size.
* The method returns an id of the current template. This id is used later for using this template. * The Method returns an ID of the current Template. This ID is used later for using this template.
* Warning: A created template is saved in the resulting PDF at all events. Also if you don't use it after creation! * Warning: A created Template is used in PDF at all events. Still if you don't use it after creation!
* *
* @param int $x The x-coordinate given in user-unit * @param int $x The x-coordinate given in user-unit
* @param int $y The y-coordinate given in user-unit * @param int $y The y-coordinate given in user-unit
* @param int $w The width given in user-unit * @param int $w The width given in user-unit
* @param int $h The height given in user-unit * @param int $h The height given in user-unit
* @return int The id of new created template * @return int The ID of new created Template
* @throws LogicException
*/ */
public function beginTemplate($x = null, $y = null, $w = null, $h = null) function beginTemplate($x=null, $y=null, $w=null, $h=null) {
{ if ($this->page <= 0)
if (is_subclass_of($this, 'TCPDF')) { $this->error("You have to add a page to fpdf first!");
throw new LogicException('This method is only usable with FPDF. Use TCPDF methods startTemplate() instead.');
}
if ($this->page <= 0) {
throw new LogicException("You have to add at least a page first!");
}
if ($x == null) if ($x == null)
$x = 0; $x = 0;
@ -99,7 +88,7 @@ class FPDF_TPL extends fpdi_bridge
// Save settings // Save settings
$this->tpl++; $this->tpl++;
$tpl =& $this->_tpls[$this->tpl]; $tpl =& $this->tpls[$this->tpl];
$tpl = array( $tpl = array(
'o_x' => $this->x, 'o_x' => $this->x,
'o_y' => $this->y, 'o_y' => $this->y,
@ -110,10 +99,6 @@ class FPDF_TPL extends fpdi_bridge
'o_rMargin' => $this->rMargin, 'o_rMargin' => $this->rMargin,
'o_h' => $this->h, 'o_h' => $this->h,
'o_w' => $this->w, 'o_w' => $this->w,
'o_FontFamily' => $this->FontFamily,
'o_FontStyle' => $this->FontStyle,
'o_FontSizePt' => $this->FontSizePt,
'o_FontSize' => $this->FontSize,
'buffer' => '', 'buffer' => '',
'x' => $x, 'x' => $x,
'y' => $y, 'y' => $y,
@ -122,43 +107,29 @@ class FPDF_TPL extends fpdi_bridge
); );
$this->SetAutoPageBreak(false); $this->SetAutoPageBreak(false);
// Define own high and width to calculate correct positions // Define own high and width to calculate possitions correct
$this->h = $h; $this->h = $h;
$this->w = $w; $this->w = $w;
$this->_inTpl = true; $this->_intpl = true;
$this->SetXY($x + $this->lMargin, $y + $this->tMargin); $this->SetXY($x+$this->lMargin, $y+$this->tMargin);
$this->SetRightMargin($this->w - $w + $this->rMargin); $this->SetRightMargin($this->w-$w+$this->rMargin);
if ($this->CurrentFont) {
$fontKey = $this->FontFamily . $this->FontStyle;
if ($fontKey) {
$this->_res['tpl'][$this->tpl]['fonts'][$fontKey] =& $this->fonts[$fontKey];
$this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
}
}
return $this->tpl; return $this->tpl;
} }
/** /**
* End template. * End Template
* *
* This method ends a template and reset initiated variables collected in {@link beginTemplate()}. * This method ends a template and reset initiated variables on beginTemplate.
* *
* @return int|boolean If a template is opened, the id is returned. If not a false is returned. * @return mixed If a template is opened, the ID is returned. If not a false is returned.
*/ */
public function endTemplate() function endTemplate() {
{ if ($this->_intpl) {
if (is_subclass_of($this, 'TCPDF')) { $this->_intpl = false;
$args = func_get_args(); $tpl =& $this->tpls[$this->tpl];
return call_user_func_array(array($this, 'TCPDF::endTemplate'), $args);
}
if ($this->_inTpl) {
$this->_inTpl = false;
$tpl = $this->_tpls[$this->tpl];
$this->SetXY($tpl['o_x'], $tpl['o_y']); $this->SetXY($tpl['o_x'], $tpl['o_y']);
$this->tMargin = $tpl['o_tMargin']; $this->tMargin = $tpl['o_tMargin'];
$this->lMargin = $tpl['o_lMargin']; $this->lMargin = $tpl['o_lMargin'];
@ -166,381 +137,271 @@ class FPDF_TPL extends fpdi_bridge
$this->h = $tpl['o_h']; $this->h = $tpl['o_h'];
$this->w = $tpl['o_w']; $this->w = $tpl['o_w'];
$this->SetAutoPageBreak($tpl['o_AutoPageBreak'], $tpl['o_bMargin']); $this->SetAutoPageBreak($tpl['o_AutoPageBreak'], $tpl['o_bMargin']);
$this->FontFamily = $tpl['o_FontFamily'];
$this->FontStyle = $tpl['o_FontStyle'];
$this->FontSizePt = $tpl['o_FontSizePt'];
$this->FontSize = $tpl['o_FontSize'];
$fontKey = $this->FontFamily . $this->FontStyle;
if ($fontKey)
$this->CurrentFont =& $this->fonts[$fontKey];
return $this->tpl; return $this->tpl;
} else { } else {
return false; return false;
} }
} }
/** /**
* Use a template in current page or other template. * Use a Template in current Page or other Template
* *
* You can use a template in a page or in another template. * You can use a template in a page or in another template.
* You can give the used template a new size. * You can give the used template a new size like you use the Image()-method.
* All parameters are optional. The width or height is calculated automatically * All parameters are optional. The width or height is calculated automaticaly
* if one is given. If no parameter is given the origin size as defined in * if one is given. If no parameter is given the origin size as defined in
* {@link beginTemplate()} method is used. * beginTemplate() is used.
*
* The calculated or used width and height are returned as an array. * The calculated or used width and height are returned as an array.
* *
* @param int $tplIdx A valid template-id * @param int $tplidx A valid template-Id
* @param int $x The x-position * @param int $_x The x-position
* @param int $y The y-position * @param int $_y The y-position
* @param int $w The new width of the template * @param int $_w The new width of the template
* @param int $h The new height of the template * @param int $_h The new height of the template
* @return array The height and width of the template (array('w' => ..., 'h' => ...)) * @retrun array The height and width of the template
* @throws LogicException|InvalidArgumentException
*/ */
public function useTemplate($tplIdx, $x = null, $y = null, $w = 0, $h = 0) function useTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0) {
{ if ($this->page <= 0)
if ($this->page <= 0) { $this->error("You have to add a page to fpdf first!");
throw new LogicException('You have to add at least a page first!');
if (!isset($this->tpls[$tplidx]))
$this->error("Template does not exist!");
if ($this->_intpl) {
$this->_res['tpl'][$this->tpl]['tpls'][$tplidx] =& $this->tpls[$tplidx];
} }
if (!isset($this->_tpls[$tplIdx])) { $tpl =& $this->tpls[$tplidx];
throw new InvalidArgumentException('Template does not exist!'); $w = $tpl['w'];
} $h = $tpl['h'];
if ($this->_inTpl) { if ($_x == null)
$this->_res['tpl'][$this->tpl]['tpls'][$tplIdx] =& $this->_tpls[$tplIdx]; $_x = 0;
} if ($_y == null)
$_y = 0;
$tpl = $this->_tpls[$tplIdx];
$_w = $tpl['w']; $_x += $tpl['x'];
$_h = $tpl['h']; $_y += $tpl['y'];
if ($x == null) { $wh = $this->getTemplateSize($tplidx, $_w, $_h);
$x = 0; $_w = $wh['w'];
} $_h = $wh['h'];
if ($y == null) { $tData = array(
$y = 0;
}
$x += $tpl['x'];
$y += $tpl['y'];
$wh = $this->getTemplateSize($tplIdx, $w, $h);
$w = $wh['w'];
$h = $wh['h'];
$tplData = array(
'x' => $this->x, 'x' => $this->x,
'y' => $this->y, 'y' => $this->y,
'w' => $w, 'w' => $_w,
'h' => $h, 'h' => $_h,
'scaleX' => ($w / $_w), 'scaleX' => ($_w/$w),
'scaleY' => ($h / $_h), 'scaleY' => ($_h/$h),
'tx' => $x, 'tx' => $_x,
'ty' => ($this->h - $y - $h), 'ty' => ($this->h-$_y-$_h),
'lty' => ($this->h - $y - $h) - ($this->h - $_h) * ($h / $_h) 'lty' => ($this->h-$_y-$_h) - ($this->h-$h) * ($_h/$h)
); );
$this->_out(sprintf("q %.4F 0 0 %.4F %.4F %.4F cm", $tData['scaleX'], $tData['scaleY'], $tData['tx']*$this->k, $tData['ty']*$this->k)); // Translate
$this->_out(sprintf('%s%d Do Q', $this->tplprefix, $tplidx));
$this->_out(sprintf('q %.4F 0 0 %.4F %.4F %.4F cm', $this->lastUsedTemplateData = $tData;
$tplData['scaleX'], $tplData['scaleY'], $tplData['tx'] * $this->k, $tplData['ty'] * $this->k)
); // Translate return array("w" => $_w, "h" => $_h);
$this->_out(sprintf('%s%d Do Q', $this->tplPrefix, $tplIdx));
$this->lastUsedTemplateData = $tplData;
return array('w' => $w, 'h' => $h);
} }
/** /**
* Get the calculated size of a template. * Get The calculated Size of a Template
* *
* If one size is given, this method calculates the other one. * If one size is given, this method calculates the other one.
* *
* @param int $tplIdx A valid template-id * @param int $tplidx A valid template-Id
* @param int $w The width of the template * @param int $_w The width of the template
* @param int $h The height of the template * @param int $_h The height of the template
* @return array The height and width of the template (array('w' => ..., 'h' => ...)) * @return array The height and width of the template
*/ */
public function getTemplateSize($tplIdx, $w = 0, $h = 0) function getTemplateSize($tplidx, $_w=0, $_h=0) {
{ if (!$this->tpls[$tplidx])
if (!isset($this->_tpls[$tplIdx]))
return false; return false;
$tpl = $this->_tpls[$tplIdx]; $tpl =& $this->tpls[$tplidx];
$_w = $tpl['w']; $w = $tpl['w'];
$_h = $tpl['h']; $h = $tpl['h'];
if ($w == 0 && $h == 0) { if ($_w == 0 and $_h == 0) {
$w = $_w; $_w = $w;
$h = $_h; $_h = $h;
} }
if ($w == 0) if($_w==0)
$w = $h * $_w / $_h; $_w = $_h*$w/$h;
if($h == 0) if($_h==0)
$h = $w * $_h / $_w; $_h = $_w*$h/$w;
return array("w" => $w, "h" => $h); return array("w" => $_w, "h" => $_h);
} }
/** /**
* Sets the font used to print character strings. * See FPDF/TCPDF-Documentation ;-)
*
* See FPDF/TCPDF documentation.
*
* @see http://fpdf.org/en/doc/setfont.htm
* @see http://www.tcpdf.org/doc/code/classTCPDF.html#afd56e360c43553830d543323e81bc045
*/ */
public function SetFont($family, $style = '', $size = null, $fontfile = '', $subset = 'default', $out = true) function SetFont($family, $style='', $size=0, $fontfile='') {
{ if (!is_subclass_of($this, 'TCPDF') && func_num_args() > 3) {
if (is_subclass_of($this, 'TCPDF')) { $this->Error('More than 3 arguments for the SetFont method are only available in TCPDF.');
$args = func_get_args();
return call_user_func_array(array($this, 'TCPDF::SetFont'), $args);
} }
/**
parent::SetFont($family, $style, $size); * force the resetting of font changes in a template
*/
$fontkey = $this->FontFamily . $this->FontStyle; if ($this->_intpl)
$this->FontFamily = '';
if ($this->_inTpl) {
parent::SetFont($family, $style, $size, $fontfile);
$fontkey = $this->FontFamily.$this->FontStyle;
if ($this->_intpl) {
$this->_res['tpl'][$this->tpl]['fonts'][$fontkey] =& $this->fonts[$fontkey]; $this->_res['tpl'][$this->tpl]['fonts'][$fontkey] =& $this->fonts[$fontkey];
} else { } else {
$this->_res['page'][$this->page]['fonts'][$fontkey] =& $this->fonts[$fontkey]; $this->_res['page'][$this->page]['fonts'][$fontkey] =& $this->fonts[$fontkey];
} }
} }
/** /**
* Puts an image. * See FPDF/TCPDF-Documentation ;-)
*
* See FPDF/TCPDF documentation.
*
* @see http://fpdf.org/en/doc/image.htm
* @see http://www.tcpdf.org/doc/code/classTCPDF.html#a714c2bee7d6b39d4d6d304540c761352
*/ */
public function Image( function Image($file, $x, $y, $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0) {
$file, $x = '', $y = '', $w = 0, $h = 0, $type = '', $link = '', $align = '', $resize = false, if (!is_subclass_of($this, 'TCPDF') && func_num_args() > 7) {
$dpi = 300, $palign = '', $ismask = false, $imgmask = false, $border = 0, $fitbox = false, $this->Error('More than 7 arguments for the Image method are only available in TCPDF.');
$hidden = false, $fitonpage = false, $alt = false, $altimgs = array()
)
{
if (is_subclass_of($this, 'TCPDF')) {
$args = func_get_args();
return call_user_func_array(array($this, 'TCPDF::Image'), $args);
} }
$ret = parent::Image($file, $x, $y, $w, $h, $type, $link); parent::Image($file, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, $ismask, $imgmask, $border);
if ($this->_inTpl) { if ($this->_intpl) {
$this->_res['tpl'][$this->tpl]['images'][$file] =& $this->images[$file]; $this->_res['tpl'][$this->tpl]['images'][$file] =& $this->images[$file];
} else { } else {
$this->_res['page'][$this->page]['images'][$file] =& $this->images[$file]; $this->_res['page'][$this->page]['images'][$file] =& $this->images[$file];
} }
}
return $ret;
/**
* See FPDF-Documentation ;-)
*
* AddPage is not available when you're "in" a template.
*/
function AddPage($orientation='', $format='') {
if ($this->_intpl)
$this->Error('Adding pages in templates isn\'t possible!');
parent::AddPage($orientation, $format);
} }
/** /**
* Adds a new page to the document. * Preserve adding Links in Templates ...won't work
*
* See FPDF/TCPDF documentation.
*
* This method cannot be used if you'd started a template.
*
* @see http://fpdf.org/en/doc/addpage.htm
* @see http://www.tcpdf.org/doc/code/classTCPDF.html#a5171e20b366b74523709d84c349c1ced
*/ */
public function AddPage($orientation = '', $format = '', $rotationOrKeepmargins = false, $tocpage = false) function Link($x, $y, $w, $h, $link, $spaces=0) {
{ if (!is_subclass_of($this, 'TCPDF') && func_num_args() > 5) {
if (is_subclass_of($this, 'TCPDF')) { $this->Error('More than 7 arguments for the Image method are only available in TCPDF.');
$args = func_get_args();
return call_user_func_array(array($this, 'TCPDF::AddPage'), $args);
} }
if ($this->_inTpl) { if ($this->_intpl)
throw new LogicException('Adding pages in templates is not possible!'); $this->Error('Using links in templates aren\'t possible!');
} parent::Link($x, $y, $w, $h, $link, $spaces);
parent::AddPage($orientation, $format, $rotationOrKeepmargins);
} }
/** function AddLink() {
* Puts a link on a rectangular area of the page. if ($this->_intpl)
* $this->Error('Adding links in templates aren\'t possible!');
* Overwritten because adding links in a template will not work.
*
* @see http://fpdf.org/en/doc/link.htm
* @see http://www.tcpdf.org/doc/code/classTCPDF.html#ab87bf1826384fbfe30eb499d42f1d994
*/
public function Link($x, $y, $w, $h, $link, $spaces = 0)
{
if (is_subclass_of($this, 'TCPDF')) {
$args = func_get_args();
return call_user_func_array(array($this, 'TCPDF::Link'), $args);
}
if ($this->_inTpl) {
throw new LogicException('Using links in templates is not posible!');
}
parent::Link($x, $y, $w, $h, $link);
}
/**
* Creates a new internal link and returns its identifier.
*
* Overwritten because adding links in a template will not work.
*
* @see http://fpdf.org/en/doc/addlink.htm
* @see http://www.tcpdf.org/doc/code/classTCPDF.html#a749522038ed7786c3e1701435dcb891e
*/
public function AddLink()
{
if (is_subclass_of($this, 'TCPDF')) {
$args = func_get_args();
return call_user_func_array(array($this, 'TCPDF::AddLink'), $args);
}
if ($this->_inTpl) {
throw new LogicException('Adding links in templates is not possible!');
}
return parent::AddLink(); return parent::AddLink();
} }
/** function SetLink($link, $y=0, $page=-1) {
* Defines the page and position a link points to. if ($this->_intpl)
* $this->Error('Setting links in templates aren\'t possible!');
* Overwritten because adding links in a template will not work.
*
* @see http://fpdf.org/en/doc/setlink.htm
* @see http://www.tcpdf.org/doc/code/classTCPDF.html#ace5be60e7857953ea5e2b89cb90df0ae
*/
public function SetLink($link, $y = 0, $page = -1)
{
if (is_subclass_of($this, 'TCPDF')) {
$args = func_get_args();
return call_user_func_array(array($this, 'TCPDF::SetLink'), $args);
}
if ($this->_inTpl) {
throw new LogicException('Setting links in templates is not possible!');
}
parent::SetLink($link, $y, $page); parent::SetLink($link, $y, $page);
} }
/** /**
* Writes the form XObjects to the PDF document. * Private Method that writes the form xobjects
*/ */
protected function _putformxobjects() function _putformxobjects() {
{
$filter=($this->compress) ? '/Filter /FlateDecode ' : ''; $filter=($this->compress) ? '/Filter /FlateDecode ' : '';
reset($this->_tpls); reset($this->tpls);
foreach($this->tpls AS $tplidx => $tpl) {
foreach($this->_tpls AS $tplIdx => $tpl) { $p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
$this->_newobj(); $this->_newobj();
$this->_tpls[$tplIdx]['n'] = $this->n; $this->tpls[$tplidx]['n'] = $this->n;
$this->_out('<<'.$filter.'/Type /XObject'); $this->_out('<<'.$filter.'/Type /XObject');
$this->_out('/Subtype /Form'); $this->_out('/Subtype /Form');
$this->_out('/FormType 1'); $this->_out('/FormType 1');
$this->_out(sprintf('/BBox [%.2F %.2F %.2F %.2F]', $this->_out(sprintf('/BBox [%.2F %.2F %.2F %.2F]',
// llx // llx
$tpl['x'] * $this->k, $tpl['x'],
// lly // lly
-$tpl['y'] * $this->k, -$tpl['y'],
// urx // urx
($tpl['w'] + $tpl['x']) * $this->k, ($tpl['w']+$tpl['x'])*$this->k,
// ury // ury
($tpl['h'] - $tpl['y']) * $this->k ($tpl['h']-$tpl['y'])*$this->k
)); ));
if ($tpl['x'] != 0 || $tpl['y'] != 0) { if ($tpl['x'] != 0 || $tpl['y'] != 0) {
$this->_out(sprintf('/Matrix [1 0 0 1 %.5F %.5F]', $this->_out(sprintf('/Matrix [1 0 0 1 %.5F %.5F]',
-$tpl['x'] * $this->k * 2, $tpl['y'] * $this->k * 2 -$tpl['x']*$this->k*2, $tpl['y']*$this->k*2
)); ));
} }
$this->_out('/Resources '); $this->_out('/Resources ');
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); $this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
if (isset($this->_res['tpl'][$tplidx]['fonts']) && count($this->_res['tpl'][$tplidx]['fonts'])) {
if (isset($this->_res['tpl'][$tplIdx])) { $this->_out('/Font <<');
$res = $this->_res['tpl'][$tplIdx]; foreach($this->_res['tpl'][$tplidx]['fonts'] as $font)
if (isset($res['fonts']) && count($res['fonts'])) { $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
$this->_out('/Font <<'); $this->_out('>>');
foreach($res['fonts'] as $font) {
$this->_out('/F' . $font['i'] . ' ' . $font['n'] . ' 0 R');
}
$this->_out('>>');
}
if(isset($res['images']) || isset($res['tpls'])) {
$this->_out('/XObject <<');
if (isset($res['images'])) {
foreach($res['images'] as $image)
$this->_out('/I' . $image['i'] . ' ' . $image['n'] . ' 0 R');
}
if (isset($res['tpls'])) {
foreach($res['tpls'] as $i => $_tpl)
$this->_out($this->tplPrefix . $i . ' ' . $_tpl['n'] . ' 0 R');
}
$this->_out('>>');
}
} }
if(isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images']) ||
$this->_out('>>'); isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls']))
{
$buffer = ($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer']; $this->_out('/XObject <<');
$this->_out('/Length ' . strlen($buffer) . ' >>'); if (isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images'])) {
$this->_putstream($buffer); foreach($this->_res['tpl'][$tplidx]['images'] as $image)
$this->_out('endobj'); $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
if (isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls'])) {
foreach($this->_res['tpl'][$tplidx]['tpls'] as $i => $tpl)
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
$this->_out('/Length '.strlen($p).' >>');
$this->_putstream($p);
$this->_out('endobj');
} }
} }
/** /**
* Output images. * Overwritten to add _putformxobjects() after _putimages()
* *
* Overwritten to add {@link _putformxobjects()} after _putimages().
*/ */
public function _putimages() function _putimages() {
{
parent::_putimages(); parent::_putimages();
$this->_putformxobjects(); $this->_putformxobjects();
} }
/** function _putxobjectdict() {
* Writes the references of XObject resources to the document.
*
* Overwritten to add the the templates to the XObject resource dictionary.
*/
public function _putxobjectdict()
{
parent::_putxobjectdict(); parent::_putxobjectdict();
foreach($this->_tpls as $tplIdx => $tpl) { if (count($this->tpls)) {
$this->_out(sprintf('%s%d %d 0 R', $this->tplPrefix, $tplIdx, $tpl['n'])); foreach($this->tpls as $tplidx => $tpl) {
$this->_out(sprintf('%s%d %d 0 R', $this->tplprefix, $tplidx, $tpl['n']));
}
} }
} }
/** /**
* Writes bytes to the resulting document. * Private Method
*
* Overwritten to delegate the data to the template buffer.
*
* @param string $s
*/ */
public function _out($s) function _out($s) {
{ if ($this->state==2 && $this->_intpl) {
if ($this->state == 2 && $this->_inTpl) { $this->tpls[$this->tpl]['buffer'] .= $s."\n";
$this->_tpls[$this->tpl]['buffer'] .= $s . "\n";
} else { } else {
parent::_out($s); parent::_out($s);
} }

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,171 @@
<?php
//
// FPDI - Version 1.3.1
//
// Copyright 2004-2009 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
/**
* This class is used as a bridge between TCPDF and FPDI
* and will create the possibility to use both FPDF and TCPDF
* via one FPDI version.
*
* We'll simply remap TCPDF to FPDF again.
*
* It'll be loaded and extended by FPDF_TPL.
*/
class FPDF extends TCPDF {
function __get($name) {
switch ($name) {
case 'PDFVersion':
return $this->PDFVersion;
case 'k':
return $this->k;
default:
// Error handling
$this->Error('Cannot access protected property '.get_class($this).':$'.$name.' / Undefined property: '.get_class($this).'::$'.$name);
}
}
function __set($name, $value) {
switch ($name) {
case 'PDFVersion':
$this->PDFVersion = $value;
break;
default:
// Error handling
$this->Error('Cannot access protected property '.get_class($this).':$'.$name.' / Undefined property: '.get_class($this).'::$'.$name);
}
}
/**
* Encryption of imported data by FPDI
*
* @param array $value
*/
function pdf_write_value(&$value) {
switch ($value[0]) {
case PDF_TYPE_STRING :
if ($this->encrypted) {
$value[1] = $this->_unescape($value[1]);
$value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]);
$value[1] = $this->_escape($value[1]);
}
break;
case PDF_TYPE_STREAM :
if ($this->encrypted) {
$value[2][1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[2][1]);
}
break;
case PDF_TYPE_HEX :
if ($this->encrypted) {
$value[1] = $this->hex2str($value[1]);
$value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]);
// remake hexstring of encrypted string
$value[1] = $this->str2hex($value[1]);
}
break;
}
}
/**
* Unescapes a PDF string
*
* @param string $s
* @return string
*/
function _unescape($s) {
$out = '';
for ($count = 0, $n = strlen($s); $count < $n; $count++) {
if ($s[$count] != '\\' || $count == $n-1) {
$out .= $s[$count];
} else {
switch ($s[++$count]) {
case ')':
case '(':
case '\\':
$out .= $s[$count];
break;
case 'f':
$out .= chr(0x0C);
break;
case 'b':
$out .= chr(0x08);
break;
case 't':
$out .= chr(0x09);
break;
case 'r':
$out .= chr(0x0D);
break;
case 'n':
$out .= chr(0x0A);
break;
case "\r":
if ($count != $n-1 && $s[$count+1] == "\n")
$count++;
break;
case "\n":
break;
default:
// Octal-Values
if (ord($s[$count]) >= ord('0') &&
ord($s[$count]) <= ord('9')) {
$oct = ''. $s[$count];
if (ord($s[$count+1]) >= ord('0') &&
ord($s[$count+1]) <= ord('9')) {
$oct .= $s[++$count];
if (ord($s[$count+1]) >= ord('0') &&
ord($s[$count+1]) <= ord('9')) {
$oct .= $s[++$count];
}
}
$out .= chr(octdec($oct));
} else {
$out .= $s[$count];
}
}
}
}
return $out;
}
/**
* Hexadecimal to string
*
* @param string $hex
* @return string
*/
function hex2str($hex) {
return pack('H*', str_replace(array("\r", "\n", ' '), '', $hex));
}
/**
* String to hexadecimal
*
* @param string $str
* @return string
*/
function str2hex($str) {
return current(unpack('H*', $str));
}
}

View File

@ -1,206 +0,0 @@
<?php
/**
* This file is part of FPDI
*
* @package FPDI
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (https://www.setasign.com)
* @license http://opensource.org/licenses/mit-license The MIT License
* @version 1.6.2
*/
/**
* This file is used as a bridge between TCPDF or FPDF
* It will dynamically create the class extending the available
* class FPDF or TCPDF.
*
* This way it is possible to use FPDI for both FPDF and TCPDF with one FPDI version.
*/
if (!class_exists('TCPDF', false)) {
/**
* Class fpdi_bridge
*/
class fpdi_bridge extends FPDF
{
// empty body
}
} else {
/**
* Class fpdi_bridge
*/
class fpdi_bridge extends TCPDF
{
/**
* Array of Tpl-Data
*
* @var array
*/
protected $_tpls = array();
/**
* Name-prefix of Templates used in Resources-Dictionary
*
* @var string A String defining the Prefix used as Template-Object-Names. Have to begin with an /
*/
public $tplPrefix = "/TPL";
/**
* Current Object Id.
*
* @var integer
*/
protected $_currentObjId;
/**
* Return XObjects Dictionary.
*
* Overwritten to add additional XObjects to the resources dictionary of TCPDF
*
* @return string
*/
protected function _getxobjectdict()
{
$out = parent::_getxobjectdict();
foreach ($this->_tpls as $tplIdx => $tpl) {
$out .= sprintf('%s%d %d 0 R', $this->tplPrefix, $tplIdx, $tpl['n']);
}
return $out;
}
/**
* Writes a PDF value to the resulting document.
*
* Prepares the value for encryption of imported data by FPDI
*
* @param array $value
*/
protected function _prepareValue(&$value)
{
switch ($value[0]) {
case pdf_parser::TYPE_STRING:
if ($this->encrypted) {
$value[1] = $this->_unescape($value[1]);
$value[1] = $this->_encrypt_data($this->_currentObjId, $value[1]);
$value[1] = TCPDF_STATIC::_escape($value[1]);
}
break;
case pdf_parser::TYPE_STREAM:
if ($this->encrypted) {
$value[2][1] = $this->_encrypt_data($this->_currentObjId, $value[2][1]);
$value[1][1]['/Length'] = array(
pdf_parser::TYPE_NUMERIC,
strlen($value[2][1])
);
}
break;
case pdf_parser::TYPE_HEX:
if ($this->encrypted) {
$value[1] = $this->hex2str($value[1]);
$value[1] = $this->_encrypt_data($this->_currentObjId, $value[1]);
// remake hexstring of encrypted string
$value[1] = $this->str2hex($value[1]);
}
break;
}
}
/**
* Un-escapes a PDF string
*
* @param string $s
* @return string
*/
protected function _unescape($s)
{
$out = '';
for ($count = 0, $n = strlen($s); $count < $n; $count++) {
if ($s[$count] != '\\' || $count == $n-1) {
$out .= $s[$count];
} else {
switch ($s[++$count]) {
case ')':
case '(':
case '\\':
$out .= $s[$count];
break;
case 'f':
$out .= chr(0x0C);
break;
case 'b':
$out .= chr(0x08);
break;
case 't':
$out .= chr(0x09);
break;
case 'r':
$out .= chr(0x0D);
break;
case 'n':
$out .= chr(0x0A);
break;
case "\r":
if ($count != $n-1 && $s[$count+1] == "\n")
$count++;
break;
case "\n":
break;
default:
// Octal-Values
if (ord($s[$count]) >= ord('0') &&
ord($s[$count]) <= ord('9')) {
$oct = ''. $s[$count];
if (ord($s[$count+1]) >= ord('0') &&
ord($s[$count+1]) <= ord('9')) {
$oct .= $s[++$count];
if (ord($s[$count+1]) >= ord('0') &&
ord($s[$count+1]) <= ord('9')) {
$oct .= $s[++$count];
}
}
$out .= chr(octdec($oct));
} else {
$out .= $s[$count];
}
}
}
}
return $out;
}
/**
* Hexadecimal to string
*
* @param string $data
* @return string
*/
public function hex2str($data)
{
$data = preg_replace('/[^0-9A-Fa-f]/', '', rtrim($data, '>'));
if ((strlen($data) % 2) == 1) {
$data .= '0';
}
return pack('H*', $data);
}
/**
* String to hexadecimal
*
* @param string $str
* @return string
*/
public function str2hex($str)
{
return current(unpack('H*', $str));
}
}
}

View File

@ -1,355 +1,384 @@
<?php <?php
/** //
* This file is part of FPDI // FPDI - Version 1.3.1
* //
* @package FPDI // Copyright 2004-2009 Setasign - Jan Slabon
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (http://www.setasign.com) //
* @license http://opensource.org/licenses/mit-license The MIT License // Licensed under the Apache License, Version 2.0 (the "License");
* @version 1.6.2 // you may not use this file except in compliance with the License.
*/ // You may obtain a copy of the License at
//
if (!class_exists('pdf_parser')) { // http://www.apache.org/licenses/LICENSE-2.0
require_once('pdf_parser.php'); //
} // Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
/** // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* Class fpdi_pdf_parser // See the License for the specific language governing permissions and
*/ // limitations under the License.
class fpdi_pdf_parser extends pdf_parser //
{
/** require_once('pdf_parser.php');
* Pages
* class fpdi_pdf_parser extends pdf_parser {
* Index begins at 0
* /**
* @var array * Pages
*/ * Index beginns at 0
protected $_pages; *
* @var array
/** */
* Page count var $pages;
*
* @var integer /**
*/ * Page count
protected $_pageCount; * @var integer
*/
/** var $page_count;
* Current page number
* /**
* @var integer * actual page number
*/ * @var integer
public $pageNo; */
var $pageno;
/**
* PDF version of imported document /**
* * PDF Version of imported Document
* @var string * @var string
*/ */
public $_pdfVersion; var $pdfVersion;
/** /**
* Available BoxTypes * FPDI Reference
* * @var object
* @var array */
*/ var $fpdi;
public $availableBoxes = array('/MediaBox', '/CropBox', '/BleedBox', '/TrimBox', '/ArtBox');
/**
/** * Available BoxTypes
* The constructor. *
* * @var array
* @param string $filename The source filename */
*/ var $availableBoxes = array('/MediaBox', '/CropBox', '/BleedBox', '/TrimBox', '/ArtBox');
public function __construct($filename)
{ /**
parent::__construct($filename); * Constructor
*
// resolve Pages-Dictonary * @param string $filename Source-Filename
$pages = $this->resolveObject($this->_root[1][1]['/Pages']); * @param object $fpdi Object of type fpdi
*/
// Read pages function fpdi_pdf_parser($filename, &$fpdi) {
$this->_readPages($pages, $this->_pages); $this->fpdi =& $fpdi;
// count pages; parent::pdf_parser($filename);
$this->_pageCount = count($this->_pages);
} // resolve Pages-Dictonary
$pages = $this->pdf_resolve_object($this->c, $this->root[1][1]['/Pages']);
/**
* Get page count from source file. // Read pages
* $this->read_pages($this->c, $pages, $this->pages);
* @return int
*/ // count pages;
public function getPageCount() $this->page_count = count($this->pages);
{ }
return $this->_pageCount;
} /**
* Overwrite parent::error()
/** *
* Set the page number. * @param string $msg Error-Message
* */
* @param int $pageNo Page number to use function error($msg) {
* @throws InvalidArgumentException $this->fpdi->error($msg);
*/ }
public function setPageNo($pageNo)
{ /**
$pageNo = ((int) $pageNo) - 1; * Get pagecount from sourcefile
*
if ($pageNo < 0 || $pageNo >= $this->getPageCount()) { * @return int
throw new InvalidArgumentException('Invalid page number!'); */
} function getPageCount() {
return $this->page_count;
$this->pageNo = $pageNo; }
}
/** /**
* Get page-resources from current page * Set pageno
* *
* @return array|boolean * @param int $pageno Pagenumber to use
*/ */
public function getPageResources() function setPageno($pageno) {
{ $pageno = ((int) $pageno) - 1;
return $this->_getPageResources($this->_pages[$this->pageNo]);
} if ($pageno < 0 || $pageno >= $this->getPageCount()) {
$this->fpdi->error('Pagenumber is wrong!');
/** }
* Get page-resources from a /Page dictionary.
* $this->pageno = $pageno;
* @param array $obj Array of pdf-data }
* @return array|boolean
*/ /**
protected function _getPageResources($obj) * Get page-resources from current page
{ *
$obj = $this->resolveObject($obj); * @return array
*/
// If the current object has a resources function getPageResources() {
// dictionary associated with it, we use return $this->_getPageResources($this->pages[$this->pageno]);
// it. Otherwise, we move back to its }
// parent object.
if (isset($obj[1][1]['/Resources'])) { /**
$res = $this->resolveObject($obj[1][1]['/Resources']); * Get page-resources from /Page
if ($res[0] == pdf_parser::TYPE_OBJECT) *
return $res[1]; * @param array $obj Array of pdf-data
return $res; */
} function _getPageResources ($obj) { // $obj = /Page
$obj = $this->pdf_resolve_object($this->c, $obj);
if (!isset($obj[1][1]['/Parent'])) {
return false; // If the current object has a resources
} // dictionary associated with it, we use
// it. Otherwise, we move back to its
$res = $this->_getPageResources($obj[1][1]['/Parent']); // parent object.
if ($res[0] == pdf_parser::TYPE_OBJECT) if (isset ($obj[1][1]['/Resources'])) {
return $res[1]; $res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Resources']);
return $res; if ($res[0] == PDF_TYPE_OBJECT)
} return $res[1];
return $res;
/** } else {
* Get content of current page. if (!isset ($obj[1][1]['/Parent'])) {
* return false;
* If /Contents is an array, the streams are concatenated } else {
* $res = $this->_getPageResources($obj[1][1]['/Parent']);
* @return string if ($res[0] == PDF_TYPE_OBJECT)
*/ return $res[1];
public function getContent() return $res;
{ }
$buffer = ''; }
}
if (isset($this->_pages[$this->pageNo][1][1]['/Contents'])) {
$contents = $this->_getPageContent($this->_pages[$this->pageNo][1][1]['/Contents']);
foreach ($contents AS $tmpContent) { /**
if ($tmpContent[0] !== pdf_parser::TYPE_STREAM) { * Get content of current page
continue; *
} * If more /Contents is an array, the streams are concated
*
$buffer .= $this->_unFilterStream($tmpContent) . ' '; * @return string
} */
} function getContent() {
$buffer = '';
return $buffer;
} if (isset($this->pages[$this->pageno][1][1]['/Contents'])) {
$contents = $this->_getPageContent($this->pages[$this->pageno][1][1]['/Contents']);
/** foreach($contents AS $tmp_content) {
* Resolve all content objects. $buffer .= $this->_rebuildContentStream($tmp_content).' ';
* }
* @param array $contentRef }
* @return array
*/ return $buffer;
protected function _getPageContent($contentRef) }
{
$contents = array();
/**
if ($contentRef[0] == pdf_parser::TYPE_OBJREF) { * Resolve all content-objects
$content = $this->resolveObject($contentRef); *
if ($content[1][0] == pdf_parser::TYPE_ARRAY) { * @param array $content_ref
$contents = $this->_getPageContent($content[1]); * @return array
} else { */
$contents[] = $content; function _getPageContent($content_ref) {
} $contents = array();
} else if ($contentRef[0] == pdf_parser::TYPE_ARRAY) {
foreach ($contentRef[1] AS $tmp_content_ref) { if ($content_ref[0] == PDF_TYPE_OBJREF) {
$contents = array_merge($contents, $this->_getPageContent($tmp_content_ref)); $content = $this->pdf_resolve_object($this->c, $content_ref);
} if ($content[1][0] == PDF_TYPE_ARRAY) {
} $contents = $this->_getPageContent($content[1]);
} else {
return $contents; $contents[] = $content;
} }
} else if ($content_ref[0] == PDF_TYPE_ARRAY) {
/** foreach ($content_ref[1] AS $tmp_content_ref) {
* Get a boundary box from a page $contents = array_merge($contents,$this->_getPageContent($tmp_content_ref));
* }
* Array format is same as used by FPDF_TPL. }
*
* @param array $page a /Page dictionary return $contents;
* @param string $boxIndex Type of box {see {@link $availableBoxes}) }
* @param float Scale factor from user space units to points
*
* @return array|boolean /**
*/ * Rebuild content-streams
protected function _getPageBox($page, $boxIndex, $k) *
{ * @param array $obj
$page = $this->resolveObject($page); * @return string
$box = null; */
if (isset($page[1][1][$boxIndex])) { function _rebuildContentStream($obj) {
$box = $page[1][1][$boxIndex]; $filters = array();
}
if (isset($obj[1][1]['/Filter'])) {
if (!is_null($box) && $box[0] == pdf_parser::TYPE_OBJREF) { $_filter = $obj[1][1]['/Filter'];
$tmp_box = $this->resolveObject($box);
$box = $tmp_box[1]; if ($_filter[0] == PDF_TYPE_TOKEN) {
} $filters[] = $_filter;
} else if ($_filter[0] == PDF_TYPE_ARRAY) {
if (!is_null($box) && $box[0] == pdf_parser::TYPE_ARRAY) { $filters = $_filter[1];
$b = $box[1]; }
return array( }
'x' => $b[0][1] / $k,
'y' => $b[1][1] / $k, $stream = $obj[2][1];
'w' => abs($b[0][1] - $b[2][1]) / $k,
'h' => abs($b[1][1] - $b[3][1]) / $k, foreach ($filters AS $_filter) {
'llx' => min($b[0][1], $b[2][1]) / $k, switch ($_filter[1]) {
'lly' => min($b[1][1], $b[3][1]) / $k, case '/FlateDecode':
'urx' => max($b[0][1], $b[2][1]) / $k, if (function_exists('gzuncompress')) {
'ury' => max($b[1][1], $b[3][1]) / $k, $stream = (strlen($stream) > 0) ? @gzuncompress($stream) : '';
); } else {
} else if (!isset($page[1][1]['/Parent'])) { $this->error(sprintf('To handle %s filter, please compile php with zlib support.',$_filter[1]));
return false; }
} else { if ($stream === false) {
return $this->_getPageBox($this->resolveObject($page[1][1]['/Parent']), $boxIndex, $k); $this->error('Error while decompressing stream.');
} }
} break;
case '/LZWDecode':
/** include_once('filters/FilterLZW_FPDI.php');
* Get all page boundary boxes by page number $decoder = new FilterLZW_FPDI($this->fpdi);
* $stream = $decoder->decode($stream);
* @param int $pageNo The page number break;
* @param float $k Scale factor from user space units to points case '/ASCII85Decode':
* @return array include_once('filters/FilterASCII85_FPDI.php');
* @throws InvalidArgumentException $decoder = new FilterASCII85_FPDI($this->fpdi);
*/ $stream = $decoder->decode($stream);
public function getPageBoxes($pageNo, $k) break;
{ case null:
if (!isset($this->_pages[$pageNo - 1])) { $stream = $stream;
throw new InvalidArgumentException('Page ' . $pageNo . ' does not exists.'); break;
} default:
$this->error(sprintf('Unsupported Filter: %s',$_filter[1]));
return $this->_getPageBoxes($this->_pages[$pageNo - 1], $k); }
} }
/** return $stream;
* Get all boxes from /Page dictionary }
*
* @param array $page A /Page dictionary
* @param float $k Scale factor from user space units to points /**
* @return array * Get a Box from a page
*/ * Arrayformat is same as used by fpdf_tpl
protected function _getPageBoxes($page, $k) *
{ * @param array $page a /Page
$boxes = array(); * @param string $box_index Type of Box @see $availableBoxes
* @return array
foreach($this->availableBoxes AS $box) { */
if ($_box = $this->_getPageBox($page, $box, $k)) { function getPageBox($page, $box_index) {
$boxes[$box] = $_box; $page = $this->pdf_resolve_object($this->c,$page);
} $box = null;
} if (isset($page[1][1][$box_index]))
$box =& $page[1][1][$box_index];
return $boxes;
} if (!is_null($box) && $box[0] == PDF_TYPE_OBJREF) {
$tmp_box = $this->pdf_resolve_object($this->c,$box);
/** $box = $tmp_box[1];
* Get the page rotation by page number }
*
* @param integer $pageNo if (!is_null($box) && $box[0] == PDF_TYPE_ARRAY) {
* @throws InvalidArgumentException $b =& $box[1];
* @return array return array('x' => $b[0][1]/$this->fpdi->k,
*/ 'y' => $b[1][1]/$this->fpdi->k,
public function getPageRotation($pageNo) 'w' => abs($b[0][1]-$b[2][1])/$this->fpdi->k,
{ 'h' => abs($b[1][1]-$b[3][1])/$this->fpdi->k,
if (!isset($this->_pages[$pageNo - 1])) { 'llx' => min($b[0][1], $b[2][1])/$this->fpdi->k,
throw new InvalidArgumentException('Page ' . $pageNo . ' does not exists.'); 'lly' => min($b[1][1], $b[3][1])/$this->fpdi->k,
} 'urx' => max($b[0][1], $b[2][1])/$this->fpdi->k,
'ury' => max($b[1][1], $b[3][1])/$this->fpdi->k,
return $this->_getPageRotation($this->_pages[$pageNo - 1]); );
} } else if (!isset ($page[1][1]['/Parent'])) {
return false;
/** } else {
* Get the rotation value of a page return $this->getPageBox($this->pdf_resolve_object($this->c, $page[1][1]['/Parent']), $box_index);
* }
* @param array $obj A /Page dictionary }
* @return array|bool
*/ function getPageBoxes($pageno) {
protected function _getPageRotation($obj) return $this->_getPageBoxes($this->pages[$pageno-1]);
{ }
$obj = $this->resolveObject($obj);
if (isset($obj[1][1]['/Rotate'])) { /**
$res = $this->resolveObject($obj[1][1]['/Rotate']); * Get all Boxes from /Page
if ($res[0] == pdf_parser::TYPE_OBJECT) *
return $res[1]; * @param array a /Page
return $res; * @return array
} */
function _getPageBoxes($page) {
if (!isset($obj[1][1]['/Parent'])) { $boxes = array();
return false;
} foreach($this->availableBoxes AS $box) {
if ($_box = $this->getPageBox($page,$box)) {
$res = $this->_getPageRotation($obj[1][1]['/Parent']); $boxes[$box] = $_box;
if ($res[0] == pdf_parser::TYPE_OBJECT) }
return $res[1]; }
return $res; return $boxes;
} }
/** /**
* Read all pages * Get the page rotation by pageno
* *
* @param array $pages /Pages dictionary * @param integer $pageno
* @param array $result The result array * @return array
* @throws Exception */
*/ function getPageRotation($pageno) {
protected function _readPages(&$pages, &$result) return $this->_getPageRotation($this->pages[$pageno-1]);
{ }
// Get the kids dictionary
$_kids = $this->resolveObject($pages[1][1]['/Kids']); function _getPageRotation ($obj) { // $obj = /Page
$obj = $this->pdf_resolve_object($this->c, $obj);
if (!is_array($_kids)) { if (isset ($obj[1][1]['/Rotate'])) {
throw new Exception('Cannot find /Kids in current /Page-Dictionary'); $res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Rotate']);
} if ($res[0] == PDF_TYPE_OBJECT)
return $res[1];
if ($_kids[0] === self::TYPE_OBJECT) { return $res;
$_kids = $_kids[1]; } else {
} if (!isset ($obj[1][1]['/Parent'])) {
return false;
$kids = $_kids[1]; } else {
$res = $this->_getPageRotation($obj[1][1]['/Parent']);
foreach ($kids as $v) { if ($res[0] == PDF_TYPE_OBJECT)
$pg = $this->resolveObject($v); return $res[1];
if ($pg[0] !== pdf_parser::TYPE_OBJECT) { return $res;
throw new Exception('Invalid data type in page tree.'); }
} }
}
if ($pg[1][1]['/Type'][1] === '/Pages') {
// If one of the kids is an embedded /**
// /Pages array, resolve it as well. * Read all /Page(es)
$this->_readPages($pg, $result); *
} else { * @param object pdf_context
$result[] = $pg; * @param array /Pages
} * @param array the result-array
} */
} function read_pages (&$c, &$pages, &$result) {
} // Get the kids dictionary
$kids = $this->pdf_resolve_object ($c, $pages[1][1]['/Kids']);
if (!is_array($kids))
$this->error('Cannot find /Kids in current /Page-Dictionary');
foreach ($kids[1] as $v) {
$pg = $this->pdf_resolve_object ($c, $v);
if ($pg[1][1]['/Type'][1] === '/Pages') {
// If one of the kids is an embedded
// /Pages array, resolve it as well.
$this->read_pages ($c, $pg, $result);
} else {
$result[] = $pg;
}
}
}
/**
* Get PDF-Version
*
* And reset the PDF Version used in FPDI if needed
*/
function getPDFVersion() {
parent::getPDFVersion();
$this->fpdi->PDFVersion = max($this->fpdi->PDFVersion, $this->pdfVersion);
}
}

View File

@ -1,6 +1,6 @@
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software to use, copy, modify, distribute, sublicense, and/or sell of this software to use, copy, modify, distribute, sublicense, and/or sell
copies of the software, and to permit persons to whom the software is furnished copies of the software, and to permit persons to whom the software is furnished
to do so. to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.

View File

@ -1,151 +1,97 @@
<?php <?php
/** //
* This file is part of FPDI // FPDI - Version 1.3.1
* //
* @package FPDI // Copyright 2004-2009 Setasign - Jan Slabon
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (https://www.setasign.com) //
* @license http://opensource.org/licenses/mit-license The MIT License // Licensed under the Apache License, Version 2.0 (the "License");
* @version 1.6.2 // you may not use this file except in compliance with the License.
*/ // You may obtain a copy of the License at
//
/** // http://www.apache.org/licenses/LICENSE-2.0
* Class pdf_context //
*/ // Unless required by applicable law or agreed to in writing, software
class pdf_context // distributed under the License is distributed on an "AS IS" BASIS,
{ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/** // See the License for the specific language governing permissions and
* Mode // limitations under the License.
* //
* @var integer 0 = file | 1 = string
*/ class pdf_context {
protected $_mode = 0;
/**
/** * Modi
* @var resource|string *
*/ * @var integer 0 = file | 1 = string
public $file; */
var $_mode = 0;
/**
* @var string var $file;
*/ var $buffer;
public $buffer; var $offset;
var $length;
/**
* @var integer var $stack;
*/
public $offset; // Constructor
/** function pdf_context(&$f) {
* @var integer $this->file =& $f;
*/ if (is_string($this->file))
public $length; $this->_mode = 1;
$this->reset();
/** }
* @var array
*/ // Optionally move the file
public $stack; // pointer to a new location
// and reset the buffered data
/**
* The constructor function reset($pos = null, $l = 100) {
* if ($this->_mode == 0) {
* @param resource $f if (!is_null ($pos)) {
*/ fseek ($this->file, $pos);
public function __construct(&$f) }
{
$this->file =& $f; $this->buffer = $l > 0 ? fread($this->file, $l) : '';
if (is_string($this->file)) $this->length = strlen($this->buffer);
$this->_mode = 1; if ($this->length < $l)
$this->increase_length($l - $this->length);
$this->reset(); } else {
} $this->buffer = $this->file;
$this->length = strlen($this->buffer);
/** }
* Get the position in the file stream $this->offset = 0;
* $this->stack = array();
* @return int }
*/
public function getPos() // Make sure that there is at least one
{ // character beyond the current offset in
if ($this->_mode == 0) { // the buffer to prevent the tokenizer
if (feof($this->file)) { // from attempting to access data that does
$stat = fstat($this->file); // not exist
fseek($this->file, $stat['size']);
} function ensure_content() {
if ($this->offset >= $this->length - 1) {
$pos = ftell($this->file); return $this->increase_length();
} else {
return $pos; return true;
} else { }
return 0; }
}
} // Forcefully read more data into the buffer
/** function increase_length($l=100) {
* Reset the position in the file stream. if ($this->_mode == 0 && feof($this->file)) {
* return false;
* Optionally move the file pointer to a new location and reset the buffered data. } else if ($this->_mode == 0) {
* $totalLength = $this->length + $l;
* @param null $pos do {
* @param int $l $this->buffer .= fread($this->file, $totalLength-$this->length);
*/ } while ((($this->length = strlen($this->buffer)) != $totalLength) && !feof($this->file));
public function reset($pos = null, $l = 100)
{ return true;
if ($this->_mode == 0) { } else {
if (!is_null($pos)) { return false;
fseek($this->file, $pos); }
} }
$this->buffer = $l > 0 ? fread($this->file, $l) : '';
$this->length = strlen($this->buffer);
if ($this->length < $l)
$this->increaseLength($l - $this->length);
} else {
$this->buffer = $this->file;
$this->length = strlen($this->buffer);
}
$this->offset = 0;
$this->stack = array();
}
/**
* Make sure that there is at least one character beyond the current offset in the buffer.
*
* To prevent the tokenizer from attempting to access data that does not exist.
*
* @return bool
*/
public function ensureContent()
{
if ($this->offset >= $this->length - 1) {
return $this->increaseLength();
} else {
return true;
}
}
/**
* Forcefully read more data into the buffer
*
* @param int $l
* @return bool
*/
public function increaseLength($l = 100)
{
if ($this->_mode == 0 && feof($this->file)) {
return false;
} else if ($this->_mode == 0) {
$totalLength = $this->length + $l;
do {
$toRead = $totalLength - $this->length;
if ($toRead < 1)
break;
$this->buffer .= fread($this->file, $toRead);
} while ((($this->length = strlen($this->buffer)) != $totalLength) && !feof($this->file));
return true;
} else {
return false;
}
}
} }

File diff suppressed because it is too large Load Diff