94        public static $enc_padding = 
"\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
 
  107        public static $pageboxes = array(
'MediaBox', 
'CropBox', 
'BleedBox', 
'TrimBox', 
'ArtBox');
 
  128                return "\x54\x43\x50\x44\x46\x20".self::getTCPDFVersion().
"\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29";
 
  138                if (!defined(
'PHP_VERSION_ID')) {
 
  142                if (PHP_VERSION_ID < 50300) {
 
  143                        @set_magic_quotes_runtime($mqr);
 
  154                if (!defined(
'PHP_VERSION_ID')) {
 
  158                if (PHP_VERSION_ID < 50300) {
 
  159                        return @get_magic_quotes_runtime();
 
  172                $headers = @get_headers(
$url);
 
  173        return (strpos($headers[0], 
'200') !== 
false);
 
  194                $txt = preg_replace(
'/([\\xc2]{1}[\\xad]{1})/', 
'', 
$txt);
 
  196                        $txt = preg_replace(
'/([\\xad]{1})/', 
'', 
$txt);
 
  211        public static function getBorderMode($brd, $position=
'start', $opencell=
true) {
 
  212                if ((!$opencell) OR empty($brd)) {
 
  218                if (is_string($brd)) {
 
  220                        $slen = strlen($brd);
 
  222                        for (
$i = 0; 
$i < $slen; ++
$i) {
 
  223                                $newbrd[$brd[
$i]] = array(
'cap' => 
'square', 
'join' => 
'miter');
 
  230                                        if (strpos(
$border, 
'B') !== 
false) {
 
  232                                                $newkey = str_replace(
'B', 
'', 
$border);
 
  233                                                if (strlen($newkey) > 0) {
 
  241                                        if (strpos(
$border, 
'B') !== 
false) {
 
  243                                                $newkey = str_replace(
'B', 
'', 
$border);
 
  244                                                if (strlen($newkey) > 0) {
 
  250                                        if (strpos(
$border, 
'T') !== 
false) {
 
  252                                                $newkey = str_replace(
'T', 
'', 
$border);
 
  253                                                if (strlen($newkey) > 0) {
 
  261                                        if (strpos(
$border, 
'T') !== 
false) {
 
  263                                                $newkey = str_replace(
'T', 
'', 
$border);
 
  264                                                if (strlen($newkey) > 0) {
 
  284                return (is_null($str) OR (is_string($str) AND (strlen($str) == 0)));
 
  307                return strtr(
$s, array(
')' => 
'\\)', 
'(' => 
'\\(', 
'\\' => 
'\\\\', chr(13) => 
'\r'));
 
  318                $replaceTable = array(
"\0" => 
'', 
'&' => 
'&', 
'<' => 
'<', 
'>' => 
'>');
 
  319                $str = strtr($str, $replaceTable);
 
  331                if (($object instanceof Imagick) AND (version_compare(phpversion(
'imagick'), 
'3.0.1') !== 1)) {
 
  333                        return @$object->clone();
 
  335                return @clone($object);
 
  346                if (!isset(
$_SERVER[
'HTTP_ACCEPT_ENCODING']) OR empty(
$_SERVER[
'HTTP_ACCEPT_ENCODING'])) {
 
  348                        header(
'Content-Length: '.$length);
 
  362                foreach ($replace as $rep) {
 
  363                        foreach ($rep[3] as $a) {
 
  364                                if (strpos($page, $a) !== 
false) {
 
  365                                        $page = str_replace($a, $rep[0], $page);
 
  366                                        $diff += ($rep[2] - $rep[1]);
 
  370                return array($page, $diff);
 
  381                if (($date[0] == 
'D') AND ($date[1] == 
':')) {
 
  383                        $date = substr($date, 2);
 
  385                return strtotime($date);
 
  396                return substr_replace(date(
'YmdHisO', intval(
$time)), 
'\'', (0 - 2), 0).
'\'';
 
  408                $rnd = uniqid(rand().microtime(
true), 
true);
 
  409                if (function_exists(
'posix_getpid')) {
 
  410                        $rnd .= posix_getpid();
 
  412                if (function_exists(
'openssl_random_pseudo_bytes') AND (strtoupper(substr(PHP_OS, 0, 3)) !== 
'WIN')) {
 
  414                        $rnd .= openssl_random_pseudo_bytes(512);
 
  416                        for (
$i = 0; 
$i < 23; ++
$i) {
 
  417                                $rnd .= uniqid(
'', 
true);
 
  420                return $rnd.$seed.__FILE__.serialize(
$_SERVER).microtime(
true);
 
  431                return pack(
'H*', md5($str));
 
  446                $padding = 16 - (strlen(
$text) % 16);
 
  447                $text .= str_repeat(chr($padding), $padding);
 
  448                if (extension_loaded(
'openssl')) {
 
  449                        $iv = openssl_random_pseudo_bytes (openssl_cipher_iv_length(
'aes-256-cbc'));
 
  450                        $text = openssl_encrypt(
$text, 
'aes-256-cbc', 
$key, OPENSSL_RAW_DATA, $iv);
 
  451                        return $iv.substr(
$text, 0, -16);
 
  453                $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
 
  454                $text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, 
$key, 
$text, MCRYPT_MODE_CBC, $iv);
 
  470                if (extension_loaded(
'openssl')) {
 
  471                        $iv = str_repeat(
"\x00", openssl_cipher_iv_length(
'aes-256-cbc'));
 
  472                        $text = openssl_encrypt(
$text, 
'aes-256-cbc', 
$key, OPENSSL_RAW_DATA, $iv);
 
  473                        return substr(
$text, 0, -16);
 
  475                $iv = str_repeat(
"\x00", mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
 
  476                $text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, 
$key, 
$text, MCRYPT_MODE_CBC, $iv);
 
  492        public static function _RC4(
$key, 
$text, &$last_enc_key, &$last_enc_key_c) {
 
  493                if (function_exists(
'mcrypt_encrypt') AND (
$out = @mcrypt_encrypt(MCRYPT_ARCFOUR, 
$key, 
$text, MCRYPT_MODE_STREAM, 
''))) {
 
  497                if ($last_enc_key != 
$key) {
 
  498                        $k = str_repeat(
$key, ((256 / strlen(
$key)) + 1));
 
  499                        $rc4 = range(0, 255);
 
  501                        for (
$i = 0; 
$i < 256; ++
$i) {
 
  503                                $j = ($j + 
$t + ord($k[
$i])) % 256;
 
  507                        $last_enc_key = 
$key;
 
  508                        $last_enc_key_c = $rc4;
 
  510                        $rc4 = $last_enc_key_c;
 
  512                $len = strlen(
$text);
 
  516                for (
$i = 0; 
$i < $len; ++
$i) {
 
  519                        $b = ($b + 
$t) % 256;
 
  522                        $k = $rc4[($rc4[$a] + $rc4[$b]) % 256];
 
  548                $protection = 2147422012; 
 
  549                foreach ($permissions as $permission) {
 
  551                                if (($mode > 0) OR (
$options[$permission] <= 32)) {
 
  555                                                $protection += 
$options[$permission];
 
  557                                                $protection -= 
$options[$permission];
 
  575                $bslength = strlen($bs);
 
  576                if (($bslength % 2) != 0) {
 
  581                for (
$i = 0; 
$i < $bslength; 
$i += 2) {
 
  582                        $string .= chr(hexdec($bs[
$i].$bs[(
$i + 1)]));
 
  597                $chars = preg_split(
'//', 
$s, -1, PREG_SPLIT_NO_EMPTY);
 
  598                foreach ($chars as 
$c) {
 
  599                        $bs .= sprintf(
'%02s', dechex(ord(
$c)));
 
  613                $binprot = sprintf(
'%032b', $protection);
 
  614                $str = chr(bindec(substr($binprot, 24, 8)));
 
  615                $str .= chr(bindec(substr($binprot, 16, 8)));
 
  616                $str .= chr(bindec(substr($binprot, 8, 8)));
 
  617                $str .= chr(bindec(substr($binprot, 0, 8)));
 
  631                $length = strlen(
$name);
 
  632                for (
$i = 0; 
$i < $length; ++
$i) {
 
  634                        if (preg_match(
'/[0-9a-zA-Z#_=-]/', $chr) == 1) {
 
  637                                $escname .= sprintf(
'#%02X', ord($chr));
 
  654                if (isset($prop[
'aopt']) AND is_array($prop[
'aopt'])) {
 
  656                        return $prop[
'aopt'];
 
  660                if (isset($prop[
'alignment'])) {
 
  661                        switch ($prop[
'alignment']) {
 
  675                                        $opt[
'q'] = ($rtl)?2:0;
 
  681                if (isset($prop[
'lineWidth'])) {
 
  682                        $linewidth = intval($prop[
'lineWidth']);
 
  687                if (isset($prop[
'borderStyle'])) {
 
  688                        switch ($prop[
'borderStyle']) {
 
  691                                        $opt[
'border'] = array(0, 0, $linewidth, array(3, 2));
 
  692                                        $opt[
'bs'] = array(
'w'=>$linewidth, 
's'=>
'D', 
'd'=>array(3, 2));
 
  697                                        $opt[
'border'] = array(0, 0, $linewidth);
 
  698                                        $opt[
'bs'] = array(
'w'=>$linewidth, 
's'=>
'B');
 
  703                                        $opt[
'border'] = array(0, 0, $linewidth);
 
  704                                        $opt[
'bs'] = array(
'w'=>$linewidth, 
's'=>
'I');
 
  709                                        $opt[
'border'] = array(0, 0, $linewidth);
 
  710                                        $opt[
'bs'] = array(
'w'=>$linewidth, 
's'=>
'U');
 
  715                                        $opt[
'border'] = array(0, 0, $linewidth);
 
  716                                        $opt[
'bs'] = array(
'w'=>$linewidth, 
's'=>
'S');
 
  724                if (isset($prop[
'border']) AND is_array($prop[
'border'])) {
 
  725                        $opt[
'border'] = $prop[
'border'];
 
  727                if (!isset($opt[
'mk'])) {
 
  728                        $opt[
'mk'] = array();
 
  730                if (!isset($opt[
'mk'][
'if'])) {
 
  731                        $opt[
'mk'][
'if'] = array();
 
  733                $opt[
'mk'][
'if'][
'a'] = array(0.5, 0.5);
 
  735                if (isset($prop[
'buttonAlignX'])) {
 
  736                        $opt[
'mk'][
'if'][
'a'][0] = $prop[
'buttonAlignX'];
 
  739                if (isset($prop[
'buttonAlignY'])) {
 
  740                        $opt[
'mk'][
'if'][
'a'][1] = $prop[
'buttonAlignY'];
 
  743                if (isset($prop[
'buttonFitBounds']) AND ($prop[
'buttonFitBounds'] == 
'true')) {
 
  744                        $opt[
'mk'][
'if'][
'fb'] = 
true;
 
  747                if (isset($prop[
'buttonScaleHow'])) {
 
  748                        switch ($prop[
'buttonScaleHow']) {
 
  749                                case 'scaleHow.proportional': {
 
  750                                        $opt[
'mk'][
'if'][
's'] = 
'P';
 
  753                                case 'scaleHow.anamorphic': {
 
  754                                        $opt[
'mk'][
'if'][
's'] = 
'A';
 
  760                if (isset($prop[
'buttonScaleWhen'])) {
 
  761                        switch ($prop[
'buttonScaleWhen']) {
 
  762                                case 'scaleWhen.always': {
 
  763                                        $opt[
'mk'][
'if'][
'sw'] = 
'A';
 
  766                                case 'scaleWhen.never': {
 
  767                                        $opt[
'mk'][
'if'][
'sw'] = 
'N';
 
  770                                case 'scaleWhen.tooBig': {
 
  771                                        $opt[
'mk'][
'if'][
'sw'] = 
'B';
 
  774                                case 'scaleWhen.tooSmall': {
 
  775                                        $opt[
'mk'][
'if'][
'sw'] = 
'S';
 
  781                if (isset($prop[
'buttonPosition'])) {
 
  782                        switch ($prop[
'buttonPosition']) {
 
  784                                case 'position.textOnly': {
 
  785                                        $opt[
'mk'][
'tp'] = 0;
 
  789                                case 'position.iconOnly': {
 
  790                                        $opt[
'mk'][
'tp'] = 1;
 
  794                                case 'position.iconTextV': {
 
  795                                        $opt[
'mk'][
'tp'] = 2;
 
  799                                case 'position.textIconV': {
 
  800                                        $opt[
'mk'][
'tp'] = 3;
 
  804                                case 'position.iconTextH': {
 
  805                                        $opt[
'mk'][
'tp'] = 4;
 
  809                                case 'position.textIconH': {
 
  810                                        $opt[
'mk'][
'tp'] = 5;
 
  814                                case 'position.overlay': {
 
  815                                        $opt[
'mk'][
'tp'] = 6;
 
  821                if (isset($prop[
'fillColor'])) {
 
  822                        if (is_array($prop[
'fillColor'])) {
 
  823                                $opt[
'mk'][
'bg'] = $prop[
'fillColor'];
 
  829                if (isset($prop[
'strokeColor'])) {
 
  830                        if (is_array($prop[
'strokeColor'])) {
 
  831                                $opt[
'mk'][
'bc'] = $prop[
'strokeColor'];
 
  837                if (isset($prop[
'rotation'])) {
 
  838                        $opt[
'mk'][
'r'] = $prop[
'rotation'];
 
  841                if (isset($prop[
'charLimit'])) {
 
  842                        $opt[
'maxlen'] = intval($prop[
'charLimit']);
 
  848                if (isset($prop[
'readonly']) AND ($prop[
'readonly'] == 
'true')) {
 
  852                if (isset($prop[
'required']) AND ($prop[
'required'] == 
'true')) {
 
  856                if (isset($prop[
'multiline']) AND ($prop[
'multiline'] == 
'true')) {
 
  860                if (isset($prop[
'password']) AND ($prop[
'password'] == 
'true')) {
 
  864                if (isset($prop[
'NoToggleToOff']) AND ($prop[
'NoToggleToOff'] == 
'true')) {
 
  868                if (isset($prop[
'Radio']) AND ($prop[
'Radio'] == 
'true')) {
 
  872                if (isset($prop[
'Pushbutton']) AND ($prop[
'Pushbutton'] == 
'true')) {
 
  876                if (isset($prop[
'Combo']) AND ($prop[
'Combo'] == 
'true')) {
 
  880                if (isset($prop[
'editable']) AND ($prop[
'editable'] == 
'true')) {
 
  884                if (isset($prop[
'Sort']) AND ($prop[
'Sort'] == 
'true')) {
 
  888                if (isset($prop[
'fileSelect']) AND ($prop[
'fileSelect'] == 
'true')) {
 
  892                if (isset($prop[
'multipleSelection']) AND ($prop[
'multipleSelection'] == 
'true')) {
 
  896                if (isset($prop[
'doNotSpellCheck']) AND ($prop[
'doNotSpellCheck'] == 
'true')) {
 
  900                if (isset($prop[
'doNotScroll']) AND ($prop[
'doNotScroll'] == 
'true')) {
 
  904                if (isset($prop[
'comb']) AND ($prop[
'comb'] == 
'true')) {
 
  908                if (isset($prop[
'radiosInUnison']) AND ($prop[
'radiosInUnison'] == 
'true')) {
 
  912                if (isset($prop[
'richText']) AND ($prop[
'richText'] == 
'true')) {
 
  916                if (isset($prop[
'commitOnSelChange']) AND ($prop[
'commitOnSelChange'] == 
'true')) {
 
  921                if (isset($prop[
'defaultValue'])) {
 
  922                        $opt[
'dv'] = $prop[
'defaultValue'];
 
  926                if (isset($prop[
'readonly']) AND ($prop[
'readonly'] == 
'true')) {
 
  930                if (isset($prop[
'display'])) {
 
  931                        if ($prop[
'display'] == 
'display.visible') {
 
  933                        } elseif ($prop[
'display'] == 
'display.hidden') {
 
  935                        } elseif ($prop[
'display'] == 
'display.noPrint') {
 
  937                        } elseif ($prop[
'display'] == 
'display.noView') {
 
  943                if (isset($prop[
'currentValueIndices']) AND is_array($prop[
'currentValueIndices'])) {
 
  944                        $opt[
'i'] = $prop[
'currentValueIndices'];
 
  947                if (isset($prop[
'value'])) {
 
  948                        if (is_array($prop[
'value'])) {
 
  949                                $opt[
'opt'] = array();
 
  950                                foreach ($prop[
'value'] AS 
$key => $optval) {
 
  952                                        if (isset($prop[
'exportValues'][
$key])) {
 
  953                                                $opt[
'opt'][
$key] = array($prop[
'exportValues'][
$key], $prop[
'value'][
$key]);
 
  955                                                $opt[
'opt'][
$key] = $prop[
'value'][
$key];
 
  959                                $opt[
'v'] = $prop[
'value'];
 
  963                if (isset($prop[
'richValue'])) {
 
  964                        $opt[
'rv'] = $prop[
'richValue'];
 
  967                if (isset($prop[
'submitName'])) {
 
  968                        $opt[
'tm'] = $prop[
'submitName'];
 
  971                if (isset($prop[
'name'])) {
 
  972                        $opt[
't'] = $prop[
'name'];
 
  975                if (isset($prop[
'userName'])) {
 
  976                        $opt[
'tu'] = $prop[
'userName'];
 
  979                if (isset($prop[
'highlight'])) {
 
  980                        switch ($prop[
'highlight']) {
 
  982                                case 'highlight.n': {
 
  987                                case 'highlight.i': {
 
  992                                case 'highlight.p': {
 
  997                                case 'highlight.o': {
 
 1020                return number_format((
float)$num, 0, 
'', 
'.');
 
 1032                return number_format((
float)$num, 0, 
'', 
'.');
 
 1044                if (empty($cssdata)) {
 
 1048                $cssdata = preg_replace(
'/\/\*[^\*]*\*\//', 
'', $cssdata);
 
 1050                $cssdata = preg_replace(
'/[\s]+/', 
' ', $cssdata);
 
 1052                $cssdata = preg_replace(
'/[\s]*([;:\{\}]{1})[\s]*/', 
'\\1', $cssdata);
 
 1054                $cssdata = preg_replace(
'/([^\}\{]+)\{\}/', 
'', $cssdata);
 
 1056                $cssdata = preg_replace(
'/@media[\s]+([^\{]*)\{/i', 
'@media \\1§', $cssdata);
 
 1057                $cssdata = preg_replace(
'/\}\}/si', 
'}§', $cssdata);
 
 1059                $cssdata = trim($cssdata);
 
 1061                $cssblocks = array();
 
 1063                if (preg_match_all(
'/@media[\s]+([^\§]*)§([^§]*)§/i', $cssdata, $matches) > 0) {
 
 1064                        foreach ($matches[1] as 
$key => 
$type) {
 
 1068                        $cssdata = preg_replace(
'/@media[\s]+([^\§]*)§([^§]*)§/i', 
'', $cssdata);
 
 1071                if (isset($cssblocks[
'all']) AND !empty($cssblocks[
'all'])) {
 
 1072                        $cssdata .= $cssblocks[
'all'];
 
 1074                if (isset($cssblocks[
'print']) AND !empty($cssblocks[
'print'])) {
 
 1075                        $cssdata .= $cssblocks[
'print'];
 
 1078                $cssblocks = array();
 
 1081                if (substr($cssdata, -1) == 
'}') {
 
 1083                        $cssdata = substr($cssdata, 0, -1);
 
 1085                $matches = explode(
'}', $cssdata);
 
 1086                foreach ($matches as 
$key => $block) {
 
 1088                        $cssblocks[
$key] = explode(
'{', $block);
 
 1089                        if (!isset($cssblocks[
$key][1])) {
 
 1091                                unset($cssblocks[
$key]);
 
 1095                foreach ($cssblocks as 
$key => $block) {
 
 1096                        if (strpos($block[0], 
',') > 0) {
 
 1097                                $selectors = explode(
',', $block[0]);
 
 1098                                foreach ($selectors as $sel) {
 
 1099                                        $cssblocks[] = array(0 => trim($sel), 1 => $block[1]);
 
 1101                                unset($cssblocks[
$key]);
 
 1106                foreach ($cssblocks as $block) {
 
 1107                        $selector = $block[0];
 
 1111                        $b = intval(preg_match_all(
'/[\#]/', $selector, $matches)); 
 
 1112                        $c = intval(preg_match_all(
'/[\[\.]/', $selector, $matches)); 
 
 1113                        $c += intval(preg_match_all(
'/[\:]link|visited|hover|active|focus|target|lang|enabled|disabled|checked|indeterminate|root|nth|first|last|only|empty|contains|not/i', $selector, $matches)); 
 
 1114                        $d = intval(preg_match_all(
'/[>\+\~\s]{1}[a-zA-Z0-9]+/', 
' '.$selector, $matches)); 
 
 1115                        $d += intval(preg_match_all(
'/[\:][\:]/', $selector, $matches)); 
 
 1116                        $specificity = $a.$b.$c.$d;
 
 1118                        $cssdata[$specificity.
' '.$selector] = $block[1];
 
 1121                ksort($cssdata, SORT_STRING);
 
 1139        public static function fixHTMLCode(
$html, $default_css=
'', $tagvs=
'', $tidy_options=
'', &$tagvspaces) {
 
 1141                if ($tidy_options === 
'') {
 
 1142                        $tidy_options = array (
 
 1144                                'drop-empty-paras' => 0,
 
 1145                                'drop-proprietary-attributes' => 1,
 
 1146                                'fix-backslash' => 1,
 
 1147                                'hide-comments' => 1,
 
 1149                                'lower-literals' => 1,
 
 1152                                'output-xhtml' => 1,
 
 1162                $tidy = tidy_parse_string(
$html, $tidy_options);
 
 1164                $tidy->cleanRepair();
 
 1166                $tidy_head = tidy_get_head($tidy);
 
 1167                $css = $tidy_head->value;
 
 1168                $css = preg_replace(
'/<style([^>]+)>/ims', 
'<style>', $css);
 
 1169                $css = preg_replace(
'/<\/style>(.*)<style>/ims', 
"\n", $css);
 
 1170                $css = str_replace(
'/*<![CDATA[*/', 
'', $css);
 
 1171                $css = str_replace(
'/*]]>*/', 
'', $css);
 
 1172                preg_match(
'/<style>(.*)<\/style>/ims', $css, $matches);
 
 1173                if (isset($matches[1])) {
 
 1174                        $css = strtolower($matches[1]);
 
 1179                $css = 
'<style>'.$default_css.$css.
'</style>';
 
 1181                $tidy_body = tidy_get_body($tidy);
 
 1182                $html = $tidy_body->value;
 
 1184                $html = str_replace(
'<br>', 
'<br />', 
$html);
 
 1186                $html = preg_replace(
'/<div([^>]*)><\/div>/', 
'', 
$html);
 
 1187                $html = preg_replace(
'/<p([^>]*)><\/p>/', 
'', 
$html);
 
 1188                if ($tagvs !== 
'') {
 
 1190                        $tagvspaces = $tagvs;
 
 1209                if (isset($dom[
$key][
'attribute'][
'class']) AND !empty($dom[
$key][
'attribute'][
'class'])) {
 
 1210                        $class = explode(
' ', strtolower($dom[
$key][
'attribute'][
'class']));
 
 1213                if (isset($dom[
$key][
'attribute'][
'id']) AND !empty($dom[
$key][
'attribute'][
'id'])) {
 
 1214                        $id = strtolower($dom[
$key][
'attribute'][
'id']);
 
 1216                $selector = preg_replace(
'/([>\+\~\s]{1})([\.]{1})([^>\+\~\s]*)/si', 
'\\1*.\\3', $selector);
 
 1218                if (preg_match_all(
'/([>\+\~\s]{1})([a-zA-Z0-9\*]+)([^>\+\~\s]*)/si', $selector, $matches, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE) > 0) {
 
 1219                        $parentop = array_pop($matches[1]);
 
 1220                        $operator = $parentop[0];
 
 1221                        $offset = $parentop[1];
 
 1222                        $lasttag = array_pop($matches[2]);
 
 1223                        $lasttag = strtolower(trim($lasttag[0]));
 
 1224                        if (($lasttag == 
'*') OR ($lasttag == 
$tag)) {
 
 1226                                $attrib = array_pop($matches[3]);
 
 1232                                                        if (in_array(substr(
$attrib, 1), $class)) {
 
 1244                                                        $attrmatch = array();
 
 1245                                                        if (preg_match(
'/\[([a-zA-Z0-9]*)[\s]*([\~\^\$\*\|\=]*)[\s]*["]?([^"\]]*)["]?\]/i', 
$attrib, $attrmatch) > 0) {
 
 1246                                                                $att = strtolower($attrmatch[1]);
 
 1247                                                                $val = $attrmatch[3];
 
 1248                                                                if (isset($dom[
$key][
'attribute'][$att])) {
 
 1249                                                                        switch ($attrmatch[2]) {
 
 1251                                                                                        if ($dom[
$key][
'attribute'][$att] == $val) {
 
 1257                                                                                        if (in_array($val, explode(
' ', $dom[
$key][
'attribute'][$att]))) {
 
 1263                                                                                        if ($val == substr($dom[
$key][
'attribute'][$att], 0, strlen($val))) {
 
 1269                                                                                        if ($val == substr($dom[
$key][
'attribute'][$att], -strlen($val))) {
 
 1275                                                                                        if (strpos($dom[
$key][
'attribute'][$att], $val) !== 
false) {
 
 1281                                                                                        if ($dom[
$key][
'attribute'][$att] == $val) {
 
 1283                                                                                        } elseif (preg_match(
'/'.$val.
'[\-]{1}/i', $dom[
$key][
'attribute'][$att]) > 0) {
 
 1310                                if (
$valid AND ($offset > 0)) {
 
 1313                                        $selector = substr($selector, 0, $offset);
 
 1314                                        switch ($operator) {
 
 1316                                                        while ($dom[
$key][
'parent'] > 0) {
 
 1317                                                                if (self::isValidCSSSelectorForTag($dom, $dom[
$key][
'parent'], $selector)) {
 
 1332                                                                if ($dom[
$i][
'tag'] AND $dom[
$i][
'opening']) {
 
 1341                                                                if ($dom[
$i][
'tag'] AND $dom[
$i][
'opening']) {
 
 1342                                                                        if (self::isValidCSSSelectorForTag($dom, 
$i, $selector)) {
 
 1366                $cssarray = array(); 
 
 1368                $selectors = array();
 
 1369                if (isset($dom[($dom[
$key][
'parent'])][
'csssel'])) {
 
 1370                        $selectors = $dom[($dom[
$key][
'parent'])][
'csssel'];
 
 1373                foreach($css as $selector => 
$style) {
 
 1374                        $pos = strpos($selector, 
' ');
 
 1376                        $specificity = substr($selector, 0, $pos);
 
 1378                        $selector = substr($selector, $pos);
 
 1380                        if (self::isValidCSSSelectorForTag($dom, 
$key, $selector)) {
 
 1381                                if (!in_array($selector, $selectors)) {
 
 1383                                        $cssarray[] = array(
'k' => $selector, 
's' => $specificity, 
'c' => 
$style);
 
 1384                                        $selectors[] = $selector;
 
 1388                if (isset($dom[
$key][
'attribute'][
'style'])) {
 
 1390                        $cssarray[] = array(
'k' => 
'', 
's' => 
'1000', 
'c' => $dom[
$key][
'attribute'][
'style']);
 
 1393                $cssordered = array();
 
 1394                foreach ($cssarray as 
$key => $val) {
 
 1395                        $skey = sprintf(
'%04d', 
$key);
 
 1396                        $cssordered[$val[
's'].
'_'.$skey] = $val;
 
 1399                ksort($cssordered, SORT_STRING);
 
 1400                return array($selectors, $cssordered);
 
 1412                foreach ($css as 
$style) {
 
 1414                        $csscmds = explode(
';', 
$style[
'c']);
 
 1415                        foreach ($csscmds as $cmd) {
 
 1417                                        $pos = strpos($cmd, 
':');
 
 1418                                        if ($pos !== 
false) {
 
 1419                                                $cmd = substr($cmd, 0, ($pos + 1));
 
 1420                                                if (strpos($tagstyle, $cmd) !== 
false) {
 
 1422                                                        $tagstyle = preg_replace(
'/'.$cmd.
'[^;]+/i', 
'', $tagstyle);
 
 1427                        $tagstyle .= 
';'.$style[
'c'];
 
 1430                $tagstyle = preg_replace(
'/[;]+/', 
';', $tagstyle);
 
 1443                while ($number >= 1000) {
 
 1447                while ($number >= 900) {
 
 1451                while ($number >= 500) {
 
 1455                while ($number >= 400) {
 
 1459                while ($number >= 100) {
 
 1463                while ($number >= 90) {
 
 1467                while ($number >= 50) {
 
 1471                while ($number >= 40) {
 
 1475                while ($number >= 10) {
 
 1479                while ($number >= 9) {
 
 1483                while ($number >= 5) {
 
 1487                while ($number >= 4) {
 
 1491                while ($number >= 1) {
 
 1507        public static function revstrpos($haystack, $needle, $offset = 0) {
 
 1508                $length = strlen($haystack);
 
 1509                $offset = ($offset > 0)?($length - $offset):abs($offset);
 
 1510                $pos = strpos(strrev($haystack), strrev($needle), $offset);
 
 1511                return ($pos === 
false)?
false:($length - $pos - strlen($needle));
 
 1525                $data = file_get_contents($file);
 
 1526                $patterns = array();
 
 1528                $data = preg_replace(
'/\%[^\n]*/', 
'', 
$data);
 
 1530                preg_match(
'/\\\\patterns\{([^\}]*)\}/i', 
$data, $matches);
 
 1531                $data = trim(substr($matches[0], 10, -1));
 
 1533                $patterns_array = preg_split(
'/[\s]+/', 
$data);
 
 1535                $patterns = array();
 
 1536                foreach($patterns_array as $val) {
 
 1539                                $val = str_replace(
'\'', 
'\\\'', $val);
 
 1540                                $key = preg_replace(
'/[0-9]+/', 
'', $val);
 
 1541                                $patterns[
$key] = $val;
 
 1649                $tm[0] = ($ta[0] * $tb[0]) + ($ta[2] * $tb[1]);
 
 1650                $tm[1] = ($ta[1] * $tb[0]) + ($ta[3] * $tb[1]);
 
 1651                $tm[2] = ($ta[0] * $tb[2]) + ($ta[2] * $tb[3]);
 
 1652                $tm[3] = ($ta[1] * $tb[2]) + ($ta[3] * $tb[3]);
 
 1653                $tm[4] = ($ta[0] * $tb[4]) + ($ta[2] * $tb[5]) + $ta[4];
 
 1654                $tm[5] = ($ta[1] * $tb[4]) + ($ta[3] * $tb[5]) + $ta[5];
 
 1668                $tm = array(1, 0, 0, 1, 0, 0);
 
 1669                $transform = array();
 
 1670                if (preg_match_all(
'/(matrix|translate|scale|rotate|skewX|skewY)[\s]*\(([^\)]+)\)/si', $attribute, $transform, PREG_SET_ORDER) > 0) {
 
 1672                                if (!empty(
$data[2])) {
 
 1682                                                        if (preg_match(
'/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1693                                                        if (preg_match(
'/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1696                                                        } elseif (preg_match(
'/([a-z0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1702                                                        if (preg_match(
'/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1705                                                        } elseif (preg_match(
'/([a-z0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1712                                                        if (preg_match(
'/([0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1713                                                                $ang = deg2rad($regs[1]);
 
 1720                                                                $e = (
$x * (1 - $a)) - (
$y * 
$c);
 
 1722                                                        } elseif (preg_match(
'/([0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1723                                                                $ang = deg2rad($regs[1]);
 
 1734                                                        if (preg_match(
'/([0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1735                                                                $c = tan(deg2rad($regs[1]));
 
 1740                                                        if (preg_match(
'/([0-9\-\.]+)/si', 
$data[2], $regs)) {
 
 1741                                                                $b = tan(deg2rad($regs[1]));
 
 1764                $dprod = ($x1 * $x2) + ($y1 * $y2);
 
 1765                $dist1 = sqrt(($x1 * $x1) + ($y1 * $y1));
 
 1766                $dist2 = sqrt(($x2 * $x2) + ($y2 * $y2));
 
 1767                $angle = acos($dprod / ($dist1 * $dist2));
 
 1771                if ((($x1 * $y2) - ($x2 * $y1)) < 0) {
 
 1823        public static function pregSplit($pattern, $modifiers, $subject, $limit=NULL, $flags=NULL) {
 
 1825                if ((strpos($modifiers, 
'u') === FALSE) OR (count(preg_split(
'//u', 
"\n\t", -1, PREG_SPLIT_NO_EMPTY)) == 2)) {
 
 1826                        return preg_split($pattern.$modifiers, $subject, $limit, $flags);
 
 1830                while (($nl = strpos($subject, 
"\n")) !== FALSE) {
 
 1831                        $ret = array_merge(
$ret, preg_split($pattern.$modifiers, substr($subject, 0, $nl), $limit, $flags));
 
 1833                        $subject = substr($subject, ($nl + 1));
 
 1835                if (strlen($subject) > 0) {
 
 1836                        $ret = array_merge(
$ret, preg_split($pattern.$modifiers, $subject, $limit, $flags));
 
 1849                if (strpos(
$filename, 
'://') === 
false) {
 
 1851                } elseif (stream_is_local(
$filename) !== 
true) {
 
 1867                $alt = array($file);
 
 1869                if ((strlen($file) > 1)
 
 1870                    && ($file[0] === 
'/')
 
 1871                    && ($file[1] !== 
'/')
 
 1872                    && !empty(
$_SERVER[
'DOCUMENT_ROOT'])
 
 1873                    && (
$_SERVER[
'DOCUMENT_ROOT'] !== 
'/')
 
 1875                    $findroot = strpos($file, 
$_SERVER[
'DOCUMENT_ROOT']);
 
 1876                    if (($findroot === 
false) || ($findroot > 1)) {
 
 1877                        $alt[] = htmlspecialchars_decode(urldecode(
$_SERVER[
'DOCUMENT_ROOT'].$file));
 
 1882                if (!empty(
$_SERVER[
'HTTPS']) && (strtolower(
$_SERVER[
'HTTPS']) != 
'off')) {
 
 1887                if (preg_match(
'%^//%', 
$url) && !empty(
$_SERVER[
'HTTP_HOST'])) {
 
 1890                $url = htmlspecialchars_decode(
$url);
 
 1893                if (preg_match(
'%^(https?)://%', 
$url)
 
 1895                    && empty(
$_SERVER[
'DOCUMENT_ROOT'])
 
 1897                        $urldata = parse_url(
$url);
 
 1898                        if (empty($urldata[
'query'])) {
 
 1900                                if (strpos(
$url, $host) === 0) {
 
 1902                                    $tmp = str_replace($host, 
$_SERVER[
'DOCUMENT_ROOT'], 
$url);
 
 1903                                    $alt[] = htmlspecialchars_decode(urldecode($tmp));
 
 1909                    && !preg_match(
'%^(https?|ftp)://%', $file)
 
 1910                    && !preg_match(
'%^//%', $file)
 
 1912                    $urldata = @parse_url(
$_SERVER[
'SCRIPT_URI']);
 
 1913                    return $urldata[
'scheme'].
'://'.$urldata[
'host'].(($file[0] == 
'/') ? 
'' : 
'/').$file;
 
 1916                $alt = array_unique($alt);
 
 1918                foreach ($alt as 
$path) {
 
 1920                        if (
$ret !== 
false) {
 
 1924                        if (!ini_get(
'allow_url_fopen')
 
 1925                                && function_exists(
'curl_init')
 
 1926                                && preg_match(
'%^(https?|ftp)://%', 
$path)
 
 1930                                curl_setopt($crs, CURLOPT_URL, 
$path);
 
 1931                                curl_setopt($crs, CURLOPT_BINARYTRANSFER, 
true);
 
 1932                                curl_setopt($crs, CURLOPT_FAILONERROR, 
true);
 
 1933                                curl_setopt($crs, CURLOPT_RETURNTRANSFER, 
true);
 
 1934                                if ((ini_get(
'open_basedir') == 
'') && (!ini_get(
'safe_mode'))) {
 
 1935                                    curl_setopt($crs, CURLOPT_FOLLOWLOCATION, 
true);
 
 1937                                curl_setopt($crs, CURLOPT_CONNECTTIMEOUT, 5);
 
 1938                                curl_setopt($crs, CURLOPT_TIMEOUT, 30);
 
 1939                                curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, 
false);
 
 1940                                curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, 
false);
 
 1941                                curl_setopt($crs, CURLOPT_USERAGENT, 
'tc-lib-file');
 
 1942                                $ret = curl_exec($crs);
 
 1944                                if (
$ret !== 
false) {
 
 1964                $v = unpack(
'Ni', substr($str, $offset, 4));
 
 1978                $v = unpack(
'ni', substr($str, $offset, 2));
 
 1992                $v = unpack(
'si', substr($str, $offset, 2));
 
 2041                $v = floatval(
''.
$m.
'.'.
$f.
'');
 
 2055                $v = unpack(
'Ci', substr($str, $offset, 1));
 
 2068        public static function rfread($handle, $length) {
 
 2069                $data = fread($handle, $length);
 
 2070                if (
$data === 
false) {
 
 2074                if ((
$rest > 0) && !feof($handle)) {
 
 2087                $a = unpack(
'Ni', fread(
$f, 4));
 
 2099                'A0'                     => array( 2383.937,  3370.394), 
 
 2100                'A1'                     => array( 1683.780,  2383.937), 
 
 2101                'A2'                     => array( 1190.551,  1683.780), 
 
 2102                'A3'                     => array(  841.890,  1190.551), 
 
 2103                'A4'                     => array(  595.276,   841.890), 
 
 2104                'A5'                     => array(  419.528,   595.276), 
 
 2105                'A6'                     => array(  297.638,   419.528), 
 
 2106                'A7'                     => array(  209.764,   297.638), 
 
 2107                'A8'                     => array(  147.402,   209.764), 
 
 2108                'A9'                     => array(  104.882,   147.402), 
 
 2109                'A10'                    => array(   73.701,   104.882), 
 
 2110                'A11'                    => array(   51.024,    73.701), 
 
 2111                'A12'                    => array(   36.850,    51.024), 
 
 2113                'B0'                     => array( 2834.646,  4008.189), 
 
 2114                'B1'                     => array( 2004.094,  2834.646), 
 
 2115                'B2'                     => array( 1417.323,  2004.094), 
 
 2116                'B3'                     => array( 1000.630,  1417.323), 
 
 2117                'B4'                     => array(  708.661,  1000.630), 
 
 2118                'B5'                     => array(  498.898,   708.661), 
 
 2119                'B6'                     => array(  354.331,   498.898), 
 
 2120                'B7'                     => array(  249.449,   354.331), 
 
 2121                'B8'                     => array(  175.748,   249.449), 
 
 2122                'B9'                     => array(  124.724,   175.748), 
 
 2123                'B10'                    => array(   87.874,   124.724), 
 
 2124                'B11'                    => array(   62.362,    87.874), 
 
 2125                'B12'                    => array(   42.520,    62.362), 
 
 2127                'C0'                     => array( 2599.370,  3676.535), 
 
 2128                'C1'                     => array( 1836.850,  2599.370), 
 
 2129                'C2'                     => array( 1298.268,  1836.850), 
 
 2130                'C3'                     => array(  918.425,  1298.268), 
 
 2131                'C4'                     => array(  649.134,   918.425), 
 
 2132                'C5'                     => array(  459.213,   649.134), 
 
 2133                'C6'                     => array(  323.150,   459.213), 
 
 2134                'C7'                     => array(  229.606,   323.150), 
 
 2135                'C8'                     => array(  161.575,   229.606), 
 
 2136                'C9'                     => array(  113.386,   161.575), 
 
 2137                'C10'                    => array(   79.370,   113.386), 
 
 2138                'C11'                    => array(   56.693,    79.370), 
 
 2139                'C12'                    => array(   39.685,    56.693), 
 
 2140                'C76'                    => array(  229.606,   459.213), 
 
 2141                'DL'                     => array(  311.811,   623.622), 
 
 2142                'DLE'                    => array(  323.150,   637.795), 
 
 2143                'DLX'                    => array(  340.158,   666.142), 
 
 2144                'DLP'                    => array(  280.630,   595.276), 
 
 2146                'E0'                     => array( 2491.654,  3517.795), 
 
 2147                'E1'                     => array( 1757.480,  2491.654), 
 
 2148                'E2'                     => array( 1247.244,  1757.480), 
 
 2149                'E3'                     => array(  878.740,  1247.244), 
 
 2150                'E4'                     => array(  623.622,   878.740), 
 
 2151                'E5'                     => array(  439.370,   623.622), 
 
 2152                'E6'                     => array(  311.811,   439.370), 
 
 2153                'E7'                     => array(  221.102,   311.811), 
 
 2154                'E8'                     => array(  155.906,   221.102), 
 
 2155                'E9'                     => array(  110.551,   155.906), 
 
 2156                'E10'                    => array(   76.535,   110.551), 
 
 2157                'E11'                    => array(   53.858,    76.535), 
 
 2158                'E12'                    => array(   36.850,    53.858), 
 
 2160                'G0'                     => array( 2715.591,  3838.110), 
 
 2161                'G1'                     => array( 1919.055,  2715.591), 
 
 2162                'G2'                     => array( 1357.795,  1919.055), 
 
 2163                'G3'                     => array(  958.110,  1357.795), 
 
 2164                'G4'                     => array(  677.480,   958.110), 
 
 2165                'G5'                     => array(  479.055,   677.480), 
 
 2166                'G6'                     => array(  337.323,   479.055), 
 
 2167                'G7'                     => array(  238.110,   337.323), 
 
 2168                'G8'                     => array(  167.244,   238.110), 
 
 2169                'G9'                     => array(  119.055,   167.244), 
 
 2170                'G10'                    => array(   82.205,   119.055), 
 
 2171                'G11'                    => array(   59.528,    82.205), 
 
 2172                'G12'                    => array(   39.685,    59.528), 
 
 2174                'RA0'                    => array( 2437.795,  3458.268), 
 
 2175                'RA1'                    => array( 1729.134,  2437.795), 
 
 2176                'RA2'                    => array( 1218.898,  1729.134), 
 
 2177                'RA3'                    => array(  864.567,  1218.898), 
 
 2178                'RA4'                    => array(  609.449,   864.567), 
 
 2179                'SRA0'                   => array( 2551.181,  3628.346), 
 
 2180                'SRA1'                   => array( 1814.173,  2551.181), 
 
 2181                'SRA2'                   => array( 1275.591,  1814.173), 
 
 2182                'SRA3'                   => array(  907.087,  1275.591), 
 
 2183                'SRA4'                   => array(  637.795,   907.087), 
 
 2185                '4A0'                    => array( 4767.874,  6740.787), 
 
 2186                '2A0'                    => array( 3370.394,  4767.874), 
 
 2188                'A2_EXTRA'               => array( 1261.417,  1754.646), 
 
 2189                'A3+'                    => array(  932.598,  1369.134), 
 
 2190                'A3_EXTRA'               => array(  912.756,  1261.417), 
 
 2191                'A3_SUPER'               => array(  864.567,  1440.000), 
 
 2192                'SUPER_A3'               => array(  864.567,  1380.472), 
 
 2193                'A4_EXTRA'               => array(  666.142,   912.756), 
 
 2194                'A4_SUPER'               => array(  649.134,   912.756), 
 
 2195                'SUPER_A4'               => array(  643.465,  1009.134), 
 
 2196                'A4_LONG'                => array(  595.276,   986.457), 
 
 2197                'F4'                     => array(  595.276,   935.433), 
 
 2198                'SO_B5_EXTRA'            => array(  572.598,   782.362), 
 
 2199                'A5_EXTRA'               => array(  490.394,   666.142), 
 
 2201                'ANSI_E'                 => array( 2448.000,  3168.000), 
 
 2202                'ANSI_D'                 => array( 1584.000,  2448.000), 
 
 2203                'ANSI_C'                 => array( 1224.000,  1584.000), 
 
 2204                'ANSI_B'                 => array(  792.000,  1224.000), 
 
 2205                'ANSI_A'                 => array(  612.000,   792.000), 
 
 2207                'USLEDGER'               => array( 1224.000,   792.000), 
 
 2208                'LEDGER'                 => array( 1224.000,   792.000), 
 
 2209                'ORGANIZERK'             => array(  792.000,  1224.000), 
 
 2210                'BIBLE'                  => array(  792.000,  1224.000), 
 
 2211                'USTABLOID'              => array(  792.000,  1224.000), 
 
 2212                'TABLOID'                => array(  792.000,  1224.000), 
 
 2213                'ORGANIZERM'             => array(  612.000,   792.000), 
 
 2214                'USLETTER'               => array(  612.000,   792.000), 
 
 2215                'LETTER'                 => array(  612.000,   792.000), 
 
 2216                'USLEGAL'                => array(  612.000,  1008.000), 
 
 2217                'LEGAL'                  => array(  612.000,  1008.000), 
 
 2218                'GOVERNMENTLETTER'       => array(  576.000,   756.000), 
 
 2219                'GLETTER'                => array(  576.000,   756.000), 
 
 2220                'JUNIORLEGAL'            => array(  576.000,   360.000), 
 
 2221                'JLEGAL'                 => array(  576.000,   360.000), 
 
 2223                'QUADDEMY'               => array( 2520.000,  3240.000), 
 
 2224                'SUPER_B'                => array(  936.000,  1368.000), 
 
 2225                'QUARTO'                 => array(  648.000,   792.000), 
 
 2226                'GOVERNMENTLEGAL'        => array(  612.000,   936.000), 
 
 2227                'FOLIO'                  => array(  612.000,   936.000), 
 
 2228                'MONARCH'                => array(  522.000,   756.000), 
 
 2229                'EXECUTIVE'              => array(  522.000,   756.000), 
 
 2230                'ORGANIZERL'             => array(  396.000,   612.000), 
 
 2231                'STATEMENT'              => array(  396.000,   612.000), 
 
 2232                'MEMO'                   => array(  396.000,   612.000), 
 
 2233                'FOOLSCAP'               => array(  595.440,   936.000), 
 
 2234                'COMPACT'                => array(  306.000,   486.000), 
 
 2235                'ORGANIZERJ'             => array(  198.000,   360.000), 
 
 2237                'P1'                     => array( 1587.402,  2437.795), 
 
 2238                'P2'                     => array( 1218.898,  1587.402), 
 
 2239                'P3'                     => array(  793.701,  1218.898), 
 
 2240                'P4'                     => array(  609.449,   793.701), 
 
 2241                'P5'                     => array(  396.850,   609.449), 
 
 2242                'P6'                     => array(  303.307,   396.850), 
 
 2244                'ARCH_E'                 => array( 2592.000,  3456.000), 
 
 2245                'ARCH_E1'                => array( 2160.000,  3024.000), 
 
 2246                'ARCH_D'                 => array( 1728.000,  2592.000), 
 
 2247                'BROADSHEET'             => array( 1296.000,  1728.000), 
 
 2248                'ARCH_C'                 => array( 1296.000,  1728.000), 
 
 2249                'ARCH_B'                 => array(  864.000,  1296.000), 
 
 2250                'ARCH_A'                 => array(  648.000,   864.000), 
 
 2253                'ANNENV_A2'              => array(  314.640,   414.000), 
 
 2254                'ANNENV_A6'              => array(  342.000,   468.000), 
 
 2255                'ANNENV_A7'              => array(  378.000,   522.000), 
 
 2256                'ANNENV_A8'              => array(  396.000,   584.640), 
 
 2257                'ANNENV_A10'             => array(  450.000,   692.640), 
 
 2258                'ANNENV_SLIM'            => array(  278.640,   638.640), 
 
 2260                'COMMENV_N6_1/4'         => array(  252.000,   432.000), 
 
 2261                'COMMENV_N6_3/4'         => array(  260.640,   468.000), 
 
 2262                'COMMENV_N8'             => array(  278.640,   540.000), 
 
 2263                'COMMENV_N9'             => array(  278.640,   638.640), 
 
 2264                'COMMENV_N10'            => array(  296.640,   684.000), 
 
 2265                'COMMENV_N11'            => array(  324.000,   746.640), 
 
 2266                'COMMENV_N12'            => array(  342.000,   792.000), 
 
 2267                'COMMENV_N14'            => array(  360.000,   828.000), 
 
 2269                'CATENV_N1'              => array(  432.000,   648.000), 
 
 2270                'CATENV_N1_3/4'          => array(  468.000,   684.000), 
 
 2271                'CATENV_N2'              => array(  468.000,   720.000), 
 
 2272                'CATENV_N3'              => array(  504.000,   720.000), 
 
 2273                'CATENV_N6'              => array(  540.000,   756.000), 
 
 2274                'CATENV_N7'              => array(  576.000,   792.000), 
 
 2275                'CATENV_N8'              => array(  594.000,   810.000), 
 
 2276                'CATENV_N9_1/2'          => array(  612.000,   756.000), 
 
 2277                'CATENV_N9_3/4'          => array(  630.000,   810.000), 
 
 2278                'CATENV_N10_1/2'         => array(  648.000,   864.000), 
 
 2279                'CATENV_N12_1/2'         => array(  684.000,   900.000), 
 
 2280                'CATENV_N13_1/2'         => array(  720.000,   936.000), 
 
 2281                'CATENV_N14_1/4'         => array(  810.000,   882.000), 
 
 2282                'CATENV_N14_1/2'         => array(  828.000,  1044.000), 
 
 2284                'JIS_B0'                 => array( 2919.685,  4127.244), 
 
 2285                'JIS_B1'                 => array( 2063.622,  2919.685), 
 
 2286                'JIS_B2'                 => array( 1459.843,  2063.622), 
 
 2287                'JIS_B3'                 => array( 1031.811,  1459.843), 
 
 2288                'JIS_B4'                 => array(  728.504,  1031.811), 
 
 2289                'JIS_B5'                 => array(  515.906,   728.504), 
 
 2290                'JIS_B6'                 => array(  362.835,   515.906), 
 
 2291                'JIS_B7'                 => array(  257.953,   362.835), 
 
 2292                'JIS_B8'                 => array(  181.417,   257.953), 
 
 2293                'JIS_B9'                 => array(  127.559,   181.417), 
 
 2294                'JIS_B10'                => array(   90.709,   127.559), 
 
 2295                'JIS_B11'                => array(   62.362,    90.709), 
 
 2296                'JIS_B12'                => array(   45.354,    62.362), 
 
 2298                'PA0'                    => array( 2381.102,  3174.803), 
 
 2299                'PA1'                    => array( 1587.402,  2381.102), 
 
 2300                'PA2'                    => array( 1190.551,  1587.402), 
 
 2301                'PA3'                    => array(  793.701,  1190.551), 
 
 2302                'PA4'                    => array(  595.276,   793.701), 
 
 2303                'PA5'                    => array(  396.850,   595.276), 
 
 2304                'PA6'                    => array(  297.638,   396.850), 
 
 2305                'PA7'                    => array(  198.425,   297.638), 
 
 2306                'PA8'                    => array(  147.402,   198.425), 
 
 2307                'PA9'                    => array(   99.213,   147.402), 
 
 2308                'PA10'                   => array(   73.701,    99.213), 
 
 2310                'PASSPORT_PHOTO'         => array(   99.213,   127.559), 
 
 2311                'E'                      => array(  233.858,   340.157), 
 
 2312                'L'                      => array(  252.283,   360.000), 
 
 2313                '3R'                     => array(  252.283,   360.000), 
 
 2314                'KG'                     => array(  289.134,   430.866), 
 
 2315                '4R'                     => array(  289.134,   430.866), 
 
 2316                '4D'                     => array(  340.157,   430.866), 
 
 2317                '2L'                     => array(  360.000,   504.567), 
 
 2318                '5R'                     => array(  360.000,   504.567), 
 
 2319                '8P'                     => array(  430.866,   575.433), 
 
 2320                '6R'                     => array(  430.866,   575.433), 
 
 2321                '6P'                     => array(  575.433,   720.000), 
 
 2322                '8R'                     => array(  575.433,   720.000), 
 
 2323                '6PW'                    => array(  575.433,   864.567), 
 
 2324                'S8R'                    => array(  575.433,   864.567), 
 
 2325                '4P'                     => array(  720.000,   864.567), 
 
 2326                '10R'                    => array(  720.000,   864.567), 
 
 2327                '4PW'                    => array(  720.000,  1080.000), 
 
 2328                'S10R'                   => array(  720.000,  1080.000), 
 
 2329                '11R'                    => array(  790.866,  1009.134), 
 
 2330                'S11R'                   => array(  790.866,  1224.567), 
 
 2331                '12R'                    => array(  864.567,  1080.000), 
 
 2332                'S12R'                   => array(  864.567,  1292.598), 
 
 2334                'NEWSPAPER_BROADSHEET'   => array( 2125.984,  1700.787), 
 
 2335                'NEWSPAPER_BERLINER'     => array( 1332.283,   892.913), 
 
 2336                'NEWSPAPER_TABLOID'      => array( 1218.898,   793.701), 
 
 2337                'NEWSPAPER_COMPACT'      => array( 1218.898,   793.701), 
 
 2339                'CREDIT_CARD'            => array(  153.014,   242.646), 
 
 2340                'BUSINESS_CARD'          => array(  153.014,   242.646), 
 
 2341                'BUSINESS_CARD_ISO7810'  => array(  153.014,   242.646), 
 
 2342                'BUSINESS_CARD_ISO216'   => array(  147.402,   209.764), 
 
 2343                'BUSINESS_CARD_IT'       => array(  155.906,   240.945), 
 
 2344                'BUSINESS_CARD_UK'       => array(  155.906,   240.945), 
 
 2345                'BUSINESS_CARD_FR'       => array(  155.906,   240.945), 
 
 2346                'BUSINESS_CARD_DE'       => array(  155.906,   240.945), 
 
 2347                'BUSINESS_CARD_ES'       => array(  155.906,   240.945), 
 
 2348                'BUSINESS_CARD_CA'       => array(  144.567,   252.283), 
 
 2349                'BUSINESS_CARD_US'       => array(  144.567,   252.283), 
 
 2350                'BUSINESS_CARD_JP'       => array(  155.906,   257.953), 
 
 2351                'BUSINESS_CARD_HK'       => array(  153.071,   255.118), 
 
 2352                'BUSINESS_CARD_AU'       => array(  155.906,   255.118), 
 
 2353                'BUSINESS_CARD_DK'       => array(  155.906,   255.118), 
 
 2354                'BUSINESS_CARD_SE'       => array(  155.906,   255.118), 
 
 2355                'BUSINESS_CARD_RU'       => array(  141.732,   255.118), 
 
 2356                'BUSINESS_CARD_CZ'       => array(  141.732,   255.118), 
 
 2357                'BUSINESS_CARD_FI'       => array(  141.732,   255.118), 
 
 2358                'BUSINESS_CARD_HU'       => array(  141.732,   255.118), 
 
 2359                'BUSINESS_CARD_IL'       => array(  141.732,   255.118), 
 
 2361                '4SHEET'                 => array( 2880.000,  4320.000), 
 
 2362                '6SHEET'                 => array( 3401.575,  5102.362), 
 
 2363                '12SHEET'                => array( 8640.000,  4320.000), 
 
 2364                '16SHEET'                => array( 5760.000,  8640.000), 
 
 2365                '32SHEET'                => array(11520.000,  8640.000), 
 
 2366                '48SHEET'                => array(17280.000,  8640.000), 
 
 2367                '64SHEET'                => array(23040.000,  8640.000), 
 
 2368                '96SHEET'                => array(34560.000,  8640.000), 
 
 2371                'EN_EMPEROR'             => array( 3456.000,  5184.000), 
 
 2372                'EN_ANTIQUARIAN'         => array( 2232.000,  3816.000), 
 
 2373                'EN_GRAND_EAGLE'         => array( 2070.000,  3024.000), 
 
 2374                'EN_DOUBLE_ELEPHANT'     => array( 1926.000,  2880.000), 
 
 2375                'EN_ATLAS'               => array( 1872.000,  2448.000), 
 
 2376                'EN_COLOMBIER'           => array( 1692.000,  2484.000), 
 
 2377                'EN_ELEPHANT'            => array( 1656.000,  2016.000), 
 
 2378                'EN_DOUBLE_DEMY'         => array( 1620.000,  2556.000), 
 
 2379                'EN_IMPERIAL'            => array( 1584.000,  2160.000), 
 
 2380                'EN_PRINCESS'            => array( 1548.000,  2016.000), 
 
 2381                'EN_CARTRIDGE'           => array( 1512.000,  1872.000), 
 
 2382                'EN_DOUBLE_LARGE_POST'   => array( 1512.000,  2376.000), 
 
 2383                'EN_ROYAL'               => array( 1440.000,  1800.000), 
 
 2384                'EN_SHEET'               => array( 1404.000,  1692.000), 
 
 2385                'EN_HALF_POST'           => array( 1404.000,  1692.000), 
 
 2386                'EN_SUPER_ROYAL'         => array( 1368.000,  1944.000), 
 
 2387                'EN_DOUBLE_POST'         => array( 1368.000,  2196.000), 
 
 2388                'EN_MEDIUM'              => array( 1260.000,  1656.000), 
 
 2389                'EN_DEMY'                => array( 1260.000,  1620.000), 
 
 2390                'EN_LARGE_POST'          => array( 1188.000,  1512.000), 
 
 2391                'EN_COPY_DRAUGHT'        => array( 1152.000,  1440.000), 
 
 2392                'EN_POST'                => array( 1116.000,  1386.000), 
 
 2393                'EN_CROWN'               => array( 1080.000,  1440.000), 
 
 2394                'EN_PINCHED_POST'        => array( 1062.000,  1332.000), 
 
 2395                'EN_BRIEF'               => array(  972.000,  1152.000), 
 
 2396                'EN_FOOLSCAP'            => array(  972.000,  1224.000), 
 
 2397                'EN_SMALL_FOOLSCAP'      => array(  954.000,  1188.000), 
 
 2398                'EN_POTT'                => array(  900.000,  1080.000), 
 
 2400                'BE_GRAND_AIGLE'         => array( 1984.252,  2948.031), 
 
 2401                'BE_COLOMBIER'           => array( 1757.480,  2409.449), 
 
 2402                'BE_DOUBLE_CARRE'        => array( 1757.480,  2607.874), 
 
 2403                'BE_ELEPHANT'            => array( 1746.142,  2182.677), 
 
 2404                'BE_PETIT_AIGLE'         => array( 1700.787,  2381.102), 
 
 2405                'BE_GRAND_JESUS'         => array( 1559.055,  2069.291), 
 
 2406                'BE_JESUS'               => array( 1530.709,  2069.291), 
 
 2407                'BE_RAISIN'              => array( 1417.323,  1842.520), 
 
 2408                'BE_GRAND_MEDIAN'        => array( 1303.937,  1714.961), 
 
 2409                'BE_DOUBLE_POSTE'        => array( 1233.071,  1601.575), 
 
 2410                'BE_COQUILLE'            => array( 1218.898,  1587.402), 
 
 2411                'BE_PETIT_MEDIAN'        => array( 1176.378,  1502.362), 
 
 2412                'BE_RUCHE'               => array( 1020.472,  1303.937), 
 
 2413                'BE_PROPATRIA'           => array(  977.953,  1218.898), 
 
 2414                'BE_LYS'                 => array(  898.583,  1125.354), 
 
 2415                'BE_POT'                 => array(  870.236,  1088.504), 
 
 2416                'BE_ROSETTE'             => array(  765.354,   983.622), 
 
 2418                'FR_UNIVERS'             => array( 2834.646,  3685.039), 
 
 2419                'FR_DOUBLE_COLOMBIER'    => array( 2551.181,  3571.654), 
 
 2420                'FR_GRANDE_MONDE'        => array( 2551.181,  3571.654), 
 
 2421                'FR_DOUBLE_SOLEIL'       => array( 2267.717,  3401.575), 
 
 2422                'FR_DOUBLE_JESUS'        => array( 2154.331,  3174.803), 
 
 2423                'FR_GRAND_AIGLE'         => array( 2125.984,  3004.724), 
 
 2424                'FR_PETIT_AIGLE'         => array( 1984.252,  2664.567), 
 
 2425                'FR_DOUBLE_RAISIN'       => array( 1842.520,  2834.646), 
 
 2426                'FR_JOURNAL'             => array( 1842.520,  2664.567), 
 
 2427                'FR_COLOMBIER_AFFICHE'   => array( 1785.827,  2551.181), 
 
 2428                'FR_DOUBLE_CAVALIER'     => array( 1757.480,  2607.874), 
 
 2429                'FR_CLOCHE'              => array( 1700.787,  2267.717), 
 
 2430                'FR_SOLEIL'              => array( 1700.787,  2267.717), 
 
 2431                'FR_DOUBLE_CARRE'        => array( 1587.402,  2551.181), 
 
 2432                'FR_DOUBLE_COQUILLE'     => array( 1587.402,  2494.488), 
 
 2433                'FR_JESUS'               => array( 1587.402,  2154.331), 
 
 2434                'FR_RAISIN'              => array( 1417.323,  1842.520), 
 
 2435                'FR_CAVALIER'            => array( 1303.937,  1757.480), 
 
 2436                'FR_DOUBLE_COURONNE'     => array( 1303.937,  2040.945), 
 
 2437                'FR_CARRE'               => array( 1275.591,  1587.402), 
 
 2438                'FR_COQUILLE'            => array( 1247.244,  1587.402), 
 
 2439                'FR_DOUBLE_TELLIERE'     => array( 1247.244,  1927.559), 
 
 2440                'FR_DOUBLE_CLOCHE'       => array( 1133.858,  1700.787), 
 
 2441                'FR_DOUBLE_POT'          => array( 1133.858,  1757.480), 
 
 2442                'FR_ECU'                 => array( 1133.858,  1474.016), 
 
 2443                'FR_COURONNE'            => array( 1020.472,  1303.937), 
 
 2444                'FR_TELLIERE'            => array(  963.780,  1247.244), 
 
 2445                'FR_POT'                 => array(  878.740,  1133.858), 
 
 2457                if (isset(self::$page_formats[
$format])) {
 
 2458                        return self::$page_formats[
$format];
 
 2460                return self::$page_formats[
'A4'];
 
 2478        public static function setPageBoxes($page, 
$type, $llx, $lly, $urx, $ury, $points=
false, $k, $pagedim=array()) {
 
 2479                if (!isset($pagedim[$page])) {
 
 2481                        $pagedim[$page] = array();
 
 2483                if (!in_array(
$type, self::$pageboxes)) {
 
 2489                $pagedim[$page][
$type][
'llx'] = ($llx * $k);
 
 2490                $pagedim[$page][
$type][
'lly'] = ($lly * $k);
 
 2491                $pagedim[$page][
$type][
'urx'] = ($urx * $k);
 
 2492                $pagedim[$page][
$type][
'ury'] = ($ury * $k);
 
 2505                foreach (self::$pageboxes as 
$type) {
 
 2507                        if (isset($pagedim[$page][
$type])) {
 
 2508                                $tmp = $pagedim[$page][
$type][
'llx'];
 
 2509                                $pagedim[$page][
$type][
'llx'] = $pagedim[$page][
$type][
'lly'];
 
 2510                                $pagedim[$page][
$type][
'lly'] = $tmp;
 
 2511                                $tmp = $pagedim[$page][
$type][
'urx'];
 
 2512                                $pagedim[$page][
$type][
'urx'] = $pagedim[$page][
$type][
'ury'];
 
 2513                                $pagedim[$page][
$type][
'ury'] = $tmp;
 
 2529                        case 'SinglePage': {
 
 2530                                $layout_mode = 
'SinglePage';
 
 2535                                $layout_mode = 
'OneColumn';
 
 2539                        case 'TwoColumnLeft': {
 
 2540                                $layout_mode = 
'TwoColumnLeft';
 
 2543                        case 'TwoColumnRight': {
 
 2544                                $layout_mode = 
'TwoColumnRight';
 
 2547                        case 'TwoPageLeft': {
 
 2548                                $layout_mode = 
'TwoPageLeft';
 
 2551                        case 'TwoPageRight': {
 
 2552                                $layout_mode = 
'TwoPageRight';
 
 2556                                $layout_mode = 
'SinglePage';
 
 2559                return $layout_mode;
 
 2571                                $page_mode = 
'UseNone';
 
 2574                        case 'UseOutlines': {
 
 2575                                $page_mode = 
'UseOutlines';
 
 2579                                $page_mode = 
'UseThumbs';
 
 2582                        case 'FullScreen': {
 
 2583                                $page_mode = 
'FullScreen';
 
 2587                                $page_mode = 
'UseOC';
 
 2591                                $page_mode = 
'UseAttachments';
 
 2595                                $page_mode = 
'UseNone';
 
$attrib
Regular expression to match HTML/XML attribute pairs within a tag.
An exception for terminatinating execution or to throw for unit testing.
static convertHTMLColorToDec($hcolor, &$spotc, $defcol=array('R'=>128, 'G'=>128, 'B'=>128))
Returns an array (RGB or CMYK) from an html color name, or a six-digit (i.e.
Static methods used by the TCPDF class.
static setPageBoxes($page, $type, $llx, $lly, $urx, $ury, $points=false, $k, $pagedim=array())
Set page boundaries.
static getPathPaintOperator($style, $default='S')
Get the Path-Painting Operators.
static getPageMode($mode='UseNone')
Get the canonical page layout mode.
static fopenLocal($filename, $mode)
Wrapper to use fopen only with local files.
static _getFWORD($str, $offset)
Get FWORD from string (Big Endian 16-bit signed integer).
static getCSSdataArray($dom, $key, $css)
Returns the styles array that apply for the selected HTML tag.
static getUserPermissionCode($permissions, $mode=0)
Return the permission code used on encryption (P value).
static getFormattedDate($time)
Returns a formatted date-time.
static extractCSSproperties($cssdata)
Extracts the CSS properties from a CSS string.
static $alias_group_tot_pages
String alias for total number of pages in a single group.
static getAnnotOptFromJSProp($prop, &$spot_colors, $rtl=false)
Convert JavaScript form fields properties array to Annotation Properties array.
static getEncPermissionsString($protection)
Convert encryption P value to a string of bytes, low-order byte first.
static getPageLayoutMode($layout='SinglePage')
Get the canonical page layout mode.
static _escape($s)
Add "\" before "", "(" and ")".
static getObjFilename($type='tmp', $file_id='')
Returns a temporary filename for caching object on filesystem.
static getPageSizeFromFormat($format)
Get page dimensions from format name.
static _getSHORT($str, $offset)
Get SHORT from string (Big Endian 16-bit signed integer).
static $enc_padding
Encryption padding string.
static $pageboxes
Array page boxes names static.
static _freadint($f)
Read a 4-byte (32 bit) integer from file.
static $alias_tot_pages
String alias for total number of pages.
static getTagStyleFromCSSarray($css)
Compact CSS data array into single string.
static rfread($handle, $length)
Binary-safe and URL-safe file read.
static intToRoman($number)
Returns the Roman representation of an integer number.
static sendOutputData($data, $length)
Output input data and compress it if possible.
static replacePageNumAliases($page, $replace, $diff=0)
Replace page number aliases with number.
static fixHTMLCode($html, $default_css='', $tagvs='', $tidy_options='', &$tagvspaces)
Cleanup HTML code (requires HTML Tidy library).
static getTCPDFProducer()
Return the current TCPDF producer.
static getVectorsAngle($x1, $y1, $x2, $y2)
Returns the angle in radiants between two vectors.
static $alias_group_num_page
String alias for group page number.
static $byterange_string
ByteRange placemark used during digital signature process.
static objclone($object)
Creates a copy of a class object.
static encodeNameObject($name)
Encode a name object.
static fileGetContents($file)
Reads entire file into a string.
static formatPageNumber($num)
Format the page numbers.
static removeSHY($txt='', $unicode=true)
Removes SHY characters from text.
static pregSplit($pattern, $modifiers, $subject, $limit=NULL, $flags=NULL)
Split string by a regular expression.
static convertHexStringToString($bs)
Convert hexadecimal string to string.
static formatTOCPageNumber($num)
Format the page numbers on the Table Of Content.
static getTCPDFVersion()
Return the current TCPDF version.
static revstrpos($haystack, $needle, $offset=0)
Find position of last occurrence of a substring in a string.
static swapPageBoxCoordinates($page, $pagedim)
Swap X and Y coordinates of page boxes (change page boxes orientation).
static empty_string($str)
Determine whether a string is empty.
static convertStringToHexString($s)
Convert string to hexadecimal string (byte string)
static _AESnopad($key, $text)
Returns the input text exrypted using AES algorithm and the specified key.
static _getBYTE($str, $offset)
Get BYTE from string (8-bit unsigned integer).
static _escapeXML($str)
Escape some special characters (< > &) for XML output.
static set_mqr($mqr)
Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtim...
static getHyphenPatternsFromTEX($file)
Returns an array of hyphenation patterns.
static getRandomSeed($seed='')
Returns a string containing random data to be used as a seed for encryption methods.
static $tcpdf_version
Current TCPDF version.
static _AES($key, $text)
Returns the input text exrypted using AES algorithm and the specified key.
static _md5_16($str)
Encrypts a string using MD5 and returns it's value as a binary string.
static isValidCSSSelectorForTag($dom, $key, $selector)
Returns true if the CSS selector is valid for the selected HTML tag.
static _getUSHORT($str, $offset)
Get USHORT from string (Big Endian 16-bit unsigned integer).
static $page_formats
Array of page formats measures are calculated in this way: (inches * 72) or (millimeters * 72 / 25....
static getBorderMode($brd, $position='start', $opencell=true)
Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages)
static $alias_num_page
String alias for page number.
static _getUFWORD($str, $offset)
Get UFWORD from string (Big Endian 16-bit unsigned integer).
static _RC4($key, $text, &$last_enc_key, &$last_enc_key_c)
Returns the input text encrypted using RC4 algorithm and the specified key.
static getSVGTransformMatrix($attribute)
Get the tranformation matrix from SVG transform attribute.
static $alias_right_shift
String alias for right shift compensation used to correctly align page numbers on the right.
static getTransformationMatrixProduct($ta, $tb)
Get the product of two SVG tranformation matrices.
static isValidURL($url)
Check if the URL exist.
static _getULONG($str, $offset)
Get ULONG from string (Big Endian 32-bit unsigned integer).
static getTimestamp($date)
Returns timestamp in seconds from formatted date-time.
static _getFIXED($str, $offset)
Get FIXED from string (32-bit signed fixed-point number (16.16).
static get_mqr()
Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtim...
for( $i=6;$i< 13;$i++) for($i=1; $i< 13; $i++) $d
if(!array_key_exists('StateId', $_REQUEST)) $id
if(function_exists( 'posix_getuid') &&posix_getuid()===0) if(!array_key_exists('t', $options)) $tag
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
const K_PATH_CACHE
Cache directory for temporary files (full path).