57 private static $available_filters = array(
'ASCIIHexDecode',
'ASCII85Decode',
'LZWDecode',
'FlateDecode',
'RunLengthDecode');
68 return self::$available_filters;
81 case 'ASCIIHexDecode': {
82 return self::decodeFilterASCIIHexDecode($data);
85 case 'ASCII85Decode': {
86 return self::decodeFilterASCII85Decode($data);
90 return self::decodeFilterLZWDecode($data);
94 return self::decodeFilterFlateDecode($data);
97 case 'RunLengthDecode': {
98 return self::decodeFilterRunLengthDecode($data);
101 case 'CCITTFaxDecode': {
102 return self::decodeFilterCCITTFaxDecode($data);
105 case 'JBIG2Decode': {
106 return self::decodeFilterJBIG2Decode($data);
110 return self::decodeFilterDCTDecode($data);
114 return self::decodeFilterJPXDecode($data);
118 return self::decodeFilterCrypt($data);
122 return self::decodeFilterStandard($data);
154 $data = preg_replace(
'/[\s]/',
'', $data);
156 $eod = strpos($data,
'>');
157 if ($eod !==
false) {
159 $data = substr($data, 0, $eod);
163 $data_length = strlen($data);
164 if (($data_length % 2) != 0) {
168 $data = substr($data, 0, -1).
'0'.substr($data, -1);
170 self::Error(
'decodeFilterASCIIHexDecode: invalid code');
174 if (preg_match(
'/[^a-fA-F\d]/', $data) > 0) {
175 self::Error(
'decodeFilterASCIIHexDecode: invalid code');
178 $decoded = pack(
'H*', $data);
194 $data = preg_replace(
'/[\s]/',
'', $data);
196 if (strpos($data,
'<~') !==
false) {
198 $data = substr($data, 2);
201 $eod = strpos($data,
'~>');
202 if ($eod !==
false) {
204 $data = substr($data, 0, $eod);
207 $data_length = strlen($data);
209 if (preg_match(
'/[^\x21-\x75,\x74]/', $data) > 0) {
210 self::Error(
'decodeFilterASCII85Decode: invalid code');
213 $zseq = chr(0).chr(0).chr(0).chr(0);
217 $pow85 = array((85*85*85*85), (85*85*85), (85*85), 85, 1);
218 $last_pos = ($data_length - 1);
220 for ($i = 0; $i < $data_length; ++$i) {
222 $char = ord($data[$i]);
224 if ($group_pos == 0) {
227 self::Error(
'decodeFilterASCII85Decode: invalid code');
231 $tuple += (($char - 33) * $pow85[$group_pos]);
232 if ($group_pos == 4) {
233 $decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8).chr($tuple);
241 if ($group_pos > 1) {
242 $tuple += $pow85[($group_pos - 1)];
245 switch ($group_pos) {
247 $decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8);
251 $decoded .= chr($tuple >> 24).chr($tuple >> 16);
255 $decoded .= chr($tuple >> 24);
259 self::Error(
'decodeFilterASCII85Decode: invalid code');
278 $data_length = strlen($data);
281 for ($i = 0; $i < $data_length; ++$i) {
282 $bitstring .= sprintf(
'%08b', ord($data{$i}));
285 $data_length = strlen($bitstring);
291 $dictionary = array();
292 for ($i = 0; $i < 256; ++$i) {
293 $dictionary[$i] = chr($i);
298 while (($data_length > 0) AND (($index = bindec(substr($bitstring, 0, $bitlen))) != 257)) {
300 $bitstring = substr($bitstring, $bitlen);
302 $data_length -= $bitlen;
310 $dictionary = array();
311 for ($i = 0; $i < 256; ++$i) {
312 $dictionary[$i] = chr($i);
314 } elseif ($prev_index == 256) {
316 $decoded .= $dictionary[$index];
317 $prev_index = $index;
322 $decoded .= $dictionary[$index];
323 $dic_val = $dictionary[$prev_index].$dictionary[$index]{0};
325 $prev_index = $index;
328 $dic_val = $dictionary[$prev_index].$dictionary[$prev_index]{0};
329 $decoded .= $dic_val;
332 $dictionary[$dix] = $dic_val;
337 } elseif ($dix == 1023) {
339 } elseif ($dix == 511) {
357 $decoded = @gzuncompress($data);
358 if ($decoded ===
false) {
359 self::Error(
'decodeFilterFlateDecode: invalid code');
375 $data_length = strlen($data);
377 while($i < $data_length) {
379 $byte = ord($data{$i});
383 } elseif ($byte < 128) {
386 $decoded .= substr($data, ($i + 1), ($byte + 1));
392 $decoded .= str_repeat($data{($i + 1)}, (257 - $byte));
409 self::Error(
'~decodeFilterCCITTFaxDecode: this method has not been yet implemented');
422 self::Error(
'~decodeFilterJBIG2Decode: this method has not been yet implemented');
435 self::Error(
'~decodeFilterDCTDecode: this method has not been yet implemented');
448 self::Error(
'~decodeFilterJPXDecode: this method has not been yet implemented');
461 self::Error(
'~decodeFilterCrypt: this method has not been yet implemented');
473 public static function Error($msg) {
474 throw new Exception(
'TCPDF_PARSER ERROR: '.$msg);