ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
TCPDF_FILTERS Class Reference

This is a PHP class for decoding common PDF filters (PDF 32000-2008 - 7.4 Filters). More...

+ Collaboration diagram for TCPDF_FILTERS:

Static Public Member Functions

static getAvailableFilters ()
 Get a list of available decoding filters. More...
 
static decodeFilter ($filter, $data)
 Decode data using the specified filter type. More...
 
static decodeFilterStandard ($data)
 Standard Default decoding filter (leaves data unchanged). More...
 
static decodeFilterASCIIHexDecode ($data)
 ASCIIHexDecode Decodes data encoded in an ASCII hexadecimal representation, reproducing the original binary data. More...
 
static decodeFilterASCII85Decode ($data)
 ASCII85Decode Decodes data encoded in an ASCII base-85 representation, reproducing the original binary data. More...
 
static decodeFilterLZWDecode ($data)
 LZWDecode Decompresses data encoded using the LZW (Lempel-Ziv-Welch) adaptive compression method, reproducing the original text or binary data. More...
 
static decodeFilterFlateDecode ($data)
 FlateDecode Decompresses data encoded using the zlib/deflate compression method, reproducing the original text or binary data. More...
 
static decodeFilterRunLengthDecode ($data)
 RunLengthDecode Decompresses data encoded using a byte-oriented run-length encoding algorithm. More...
 
static decodeFilterCCITTFaxDecode ($data)
 CCITTFaxDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the CCITT facsimile standard, reproducing the original data (typically monochrome image data at 1 bit per pixel). More...
 
static decodeFilterJBIG2Decode ($data)
 JBIG2Decode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the JBIG2 standard, reproducing the original monochrome (1 bit per pixel) image data (or an approximation of that data). More...
 
static decodeFilterDCTDecode ($data)
 DCTDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using a DCT (discrete cosine transform) technique based on the JPEG standard, reproducing image sample data that approximates the original data. More...
 
static decodeFilterJPXDecode ($data)
 JPXDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the wavelet-based JPEG2000 standard, reproducing the original image data. More...
 
static decodeFilterCrypt ($data)
 Crypt (NOT IMPLEMETED - RETURN AN EXCEPTION) Decrypts data encrypted by a security handler, reproducing the data as it was before encryption. More...
 
static Error ($msg)
 Throw an exception. More...
 

Static Private Attributes

static $available_filters = array('ASCIIHexDecode', 'ASCII85Decode', 'LZWDecode', 'FlateDecode', 'RunLengthDecode')
 Define a list of available filter decoders. More...
 

Detailed Description

This is a PHP class for decoding common PDF filters (PDF 32000-2008 - 7.4 Filters).


Definition at line 51 of file tcpdf_filters.php.

Member Function Documentation

◆ decodeFilter()

static TCPDF_FILTERS::decodeFilter (   $filter,
  $data 
)
static

Decode data using the specified filter type.

Parameters
$filter(string) Filter name.
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 79 of file tcpdf_filters.php.

References $data.

Referenced by TCPDF_PARSER\decodeStream().

79  {
80  switch ($filter) {
81  case 'ASCIIHexDecode': {
82  return self::decodeFilterASCIIHexDecode($data);
83  break;
84  }
85  case 'ASCII85Decode': {
86  return self::decodeFilterASCII85Decode($data);
87  break;
88  }
89  case 'LZWDecode': {
90  return self::decodeFilterLZWDecode($data);
91  break;
92  }
93  case 'FlateDecode': {
94  return self::decodeFilterFlateDecode($data);
95  break;
96  }
97  case 'RunLengthDecode': {
98  return self::decodeFilterRunLengthDecode($data);
99  break;
100  }
101  case 'CCITTFaxDecode': {
102  return self::decodeFilterCCITTFaxDecode($data);
103  break;
104  }
105  case 'JBIG2Decode': {
106  return self::decodeFilterJBIG2Decode($data);
107  break;
108  }
109  case 'DCTDecode': {
110  return self::decodeFilterDCTDecode($data);
111  break;
112  }
113  case 'JPXDecode': {
114  return self::decodeFilterJPXDecode($data);
115  break;
116  }
117  case 'Crypt': {
118  return self::decodeFilterCrypt($data);
119  break;
120  }
121  default: {
122  return self::decodeFilterStandard($data);
123  break;
124  }
125  }
126  }
+ Here is the caller graph for this function:

◆ decodeFilterASCII85Decode()

static TCPDF_FILTERS::decodeFilterASCII85Decode (   $data)
static

ASCII85Decode Decodes data encoded in an ASCII base-85 representation, reproducing the original binary data.

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 190 of file tcpdf_filters.php.

References $data, and array.

190  {
191  // initialize string to return
192  $decoded = '';
193  // all white-space characters shall be ignored
194  $data = preg_replace('/[\s]/', '', $data);
195  // remove start sequence 2-character sequence <~ (3Ch)(7Eh)
196  if (strpos($data, '<~') !== false) {
197  // remove EOD and extra data (if any)
198  $data = substr($data, 2);
199  }
200  // check for EOD: 2-character sequence ~> (7Eh)(3Eh)
201  $eod = strpos($data, '~>');
202  if ($eod !== false) {
203  // remove EOD and extra data (if any)
204  $data = substr($data, 0, $eod);
205  }
206  // data length
207  $data_length = strlen($data);
208  // check for invalid characters
209  if (preg_match('/[^\x21-\x75,\x74]/', $data) > 0) {
210  self::Error('decodeFilterASCII85Decode: invalid code');
211  }
212  // z sequence
213  $zseq = chr(0).chr(0).chr(0).chr(0);
214  // position inside a group of 4 bytes (0-3)
215  $group_pos = 0;
216  $tuple = 0;
217  $pow85 = array((85*85*85*85), (85*85*85), (85*85), 85, 1);
218  $last_pos = ($data_length - 1);
219  // for each byte
220  for ($i = 0; $i < $data_length; ++$i) {
221  // get char value
222  $char = ord($data[$i]);
223  if ($char == 122) { // 'z'
224  if ($group_pos == 0) {
225  $decoded .= $zseq;
226  } else {
227  self::Error('decodeFilterASCII85Decode: invalid code');
228  }
229  } else {
230  // the value represented by a group of 5 characters should never be greater than 2^32 - 1
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);
234  $tuple = 0;
235  $group_pos = 0;
236  } else {
237  ++$group_pos;
238  }
239  }
240  }
241  if ($group_pos > 1) {
242  $tuple += $pow85[($group_pos - 1)];
243  }
244  // last tuple (if any)
245  switch ($group_pos) {
246  case 4: {
247  $decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8);
248  break;
249  }
250  case 3: {
251  $decoded .= chr($tuple >> 24).chr($tuple >> 16);
252  break;
253  }
254  case 2: {
255  $decoded .= chr($tuple >> 24);
256  break;
257  }
258  case 1: {
259  self::Error('decodeFilterASCII85Decode: invalid code');
260  break;
261  }
262  }
263  return $decoded;
264  }
Create styles array
The data for the language used.

◆ decodeFilterASCIIHexDecode()

static TCPDF_FILTERS::decodeFilterASCIIHexDecode (   $data)
static

ASCIIHexDecode Decodes data encoded in an ASCII hexadecimal representation, reproducing the original binary data.

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 150 of file tcpdf_filters.php.

References $data.

150  {
151  // initialize string to return
152  $decoded = '';
153  // all white-space characters shall be ignored
154  $data = preg_replace('/[\s]/', '', $data);
155  // check for EOD character: GREATER-THAN SIGN (3Eh)
156  $eod = strpos($data, '>');
157  if ($eod !== false) {
158  // remove EOD and extra data (if any)
159  $data = substr($data, 0, $eod);
160  $eod = true;
161  }
162  // get data length
163  $data_length = strlen($data);
164  if (($data_length % 2) != 0) {
165  // odd number of hexadecimal digits
166  if ($eod) {
167  // EOD shall behave as if a 0 (zero) followed the last digit
168  $data = substr($data, 0, -1).'0'.substr($data, -1);
169  } else {
170  self::Error('decodeFilterASCIIHexDecode: invalid code');
171  }
172  }
173  // check for invalid characters
174  if (preg_match('/[^a-fA-F\d]/', $data) > 0) {
175  self::Error('decodeFilterASCIIHexDecode: invalid code');
176  }
177  // get one byte of binary data for each pair of ASCII hexadecimal digits
178  $decoded = pack('H*', $data);
179  return $decoded;
180  }

◆ decodeFilterCCITTFaxDecode()

static TCPDF_FILTERS::decodeFilterCCITTFaxDecode (   $data)
static

CCITTFaxDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the CCITT facsimile standard, reproducing the original data (typically monochrome image data at 1 bit per pixel).

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 408 of file tcpdf_filters.php.

408  {
409  self::Error('~decodeFilterCCITTFaxDecode: this method has not been yet implemented');
410  //return $data;
411  }

◆ decodeFilterCrypt()

static TCPDF_FILTERS::decodeFilterCrypt (   $data)
static

Crypt (NOT IMPLEMETED - RETURN AN EXCEPTION) Decrypts data encrypted by a security handler, reproducing the data as it was before encryption.

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 460 of file tcpdf_filters.php.

460  {
461  self::Error('~decodeFilterCrypt: this method has not been yet implemented');
462  //return $data;
463  }

◆ decodeFilterDCTDecode()

static TCPDF_FILTERS::decodeFilterDCTDecode (   $data)
static

DCTDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using a DCT (discrete cosine transform) technique based on the JPEG standard, reproducing image sample data that approximates the original data.

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 434 of file tcpdf_filters.php.

434  {
435  self::Error('~decodeFilterDCTDecode: this method has not been yet implemented');
436  //return $data;
437  }

◆ decodeFilterFlateDecode()

static TCPDF_FILTERS::decodeFilterFlateDecode (   $data)
static

FlateDecode Decompresses data encoded using the zlib/deflate compression method, reproducing the original text or binary data.

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 355 of file tcpdf_filters.php.

References $data.

355  {
356  // initialize string to return
357  $decoded = @gzuncompress($data);
358  if ($decoded === false) {
359  self::Error('decodeFilterFlateDecode: invalid code');
360  }
361  return $decoded;
362  }

◆ decodeFilterJBIG2Decode()

static TCPDF_FILTERS::decodeFilterJBIG2Decode (   $data)
static

JBIG2Decode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the JBIG2 standard, reproducing the original monochrome (1 bit per pixel) image data (or an approximation of that data).

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 421 of file tcpdf_filters.php.

421  {
422  self::Error('~decodeFilterJBIG2Decode: this method has not been yet implemented');
423  //return $data;
424  }

◆ decodeFilterJPXDecode()

static TCPDF_FILTERS::decodeFilterJPXDecode (   $data)
static

JPXDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the wavelet-based JPEG2000 standard, reproducing the original image data.

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 447 of file tcpdf_filters.php.

447  {
448  self::Error('~decodeFilterJPXDecode: this method has not been yet implemented');
449  //return $data;
450  }

◆ decodeFilterLZWDecode()

static TCPDF_FILTERS::decodeFilterLZWDecode (   $data)
static

LZWDecode Decompresses data encoded using the LZW (Lempel-Ziv-Welch) adaptive compression method, reproducing the original text or binary data.

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 274 of file tcpdf_filters.php.

References $data, and array.

274  {
275  // initialize string to return
276  $decoded = '';
277  // data length
278  $data_length = strlen($data);
279  // convert string to binary string
280  $bitstring = '';
281  for ($i = 0; $i < $data_length; ++$i) {
282  $bitstring .= sprintf('%08b', ord($data{$i}));
283  }
284  // get the number of bits
285  $data_length = strlen($bitstring);
286  // initialize code length in bits
287  $bitlen = 9;
288  // initialize dictionary index
289  $dix = 258;
290  // initialize the dictionary (with the first 256 entries).
291  $dictionary = array();
292  for ($i = 0; $i < 256; ++$i) {
293  $dictionary[$i] = chr($i);
294  }
295  // previous val
296  $prev_index = 0;
297  // while we encounter EOD marker (257), read code_length bits
298  while (($data_length > 0) AND (($index = bindec(substr($bitstring, 0, $bitlen))) != 257)) {
299  // remove read bits from string
300  $bitstring = substr($bitstring, $bitlen);
301  // update number of bits
302  $data_length -= $bitlen;
303  if ($index == 256) { // clear-table marker
304  // reset code length in bits
305  $bitlen = 9;
306  // reset dictionary index
307  $dix = 258;
308  $prev_index = 256;
309  // reset the dictionary (with the first 256 entries).
310  $dictionary = array();
311  for ($i = 0; $i < 256; ++$i) {
312  $dictionary[$i] = chr($i);
313  }
314  } elseif ($prev_index == 256) {
315  // first entry
316  $decoded .= $dictionary[$index];
317  $prev_index = $index;
318  } else {
319  // check if index exist in the dictionary
320  if ($index < $dix) {
321  // index exist on dictionary
322  $decoded .= $dictionary[$index];
323  $dic_val = $dictionary[$prev_index].$dictionary[$index][0];
324  // store current index
325  $prev_index = $index;
326  } else {
327  // index do not exist on dictionary
328  $dic_val = $dictionary[$prev_index].$dictionary[$prev_index][0];
329  $decoded .= $dic_val;
330  }
331  // update dictionary
332  $dictionary[$dix] = $dic_val;
333  ++$dix;
334  // change bit length by case
335  if ($dix == 2047) {
336  $bitlen = 12;
337  } elseif ($dix == 1023) {
338  $bitlen = 11;
339  } elseif ($dix == 511) {
340  $bitlen = 10;
341  }
342  }
343  }
344  return $decoded;
345  }
Create styles array
The data for the language used.

◆ decodeFilterRunLengthDecode()

static TCPDF_FILTERS::decodeFilterRunLengthDecode (   $data)
static

RunLengthDecode Decompresses data encoded using a byte-oriented run-length encoding algorithm.

Parameters
$data(string) Data to decode.
Since
1.0.000 (2011-05-23) static

Definition at line 371 of file tcpdf_filters.php.

References $data.

371  {
372  // initialize string to return
373  $decoded = '';
374  // data length
375  $data_length = strlen($data);
376  $i = 0;
377  while($i < $data_length) {
378  // get current byte value
379  $byte = ord($data{$i});
380  if ($byte == 128) {
381  // a length value of 128 denote EOD
382  break;
383  } elseif ($byte < 128) {
384  // if the length byte is in the range 0 to 127
385  // the following length + 1 (1 to 128) bytes shall be copied literally during decompression
386  $decoded .= substr($data, ($i + 1), ($byte + 1));
387  // move to next block
388  $i += ($byte + 2);
389  } else {
390  // if length is in the range 129 to 255,
391  // the following single byte shall be copied 257 - length (2 to 128) times during decompression
392  $decoded .= str_repeat($data{($i + 1)}, (257 - $byte));
393  // move to next block
394  $i += 2;
395  }
396  }
397  return $decoded;
398  }

◆ decodeFilterStandard()

static TCPDF_FILTERS::decodeFilterStandard (   $data)
static

Standard Default decoding filter (leaves data unchanged).

Parameters
$data(string) Data to decode.
Returns
Decoded data string.
Since
1.0.000 (2011-05-23) static

Definition at line 138 of file tcpdf_filters.php.

References $data.

138  {
139  return $data;
140  }

◆ Error()

static TCPDF_FILTERS::Error (   $msg)
static

Throw an exception.

Parameters
$msg(string) The error message
Since
1.0.000 (2011-05-23) static

Definition at line 473 of file tcpdf_filters.php.

473  {
474  throw new Exception('TCPDF_PARSER ERROR: '.$msg);
475  }

◆ getAvailableFilters()

static TCPDF_FILTERS::getAvailableFilters ( )
static

Get a list of available decoding filters.

Returns
(array) Array of available filter decoders.
Since
1.0.000 (2011-05-23) static

Definition at line 67 of file tcpdf_filters.php.

Referenced by TCPDF_PARSER\decodeStream().

67  {
68  return self::$available_filters;
69  }
+ Here is the caller graph for this function:

Field Documentation

◆ $available_filters

TCPDF_FILTERS::$available_filters = array('ASCIIHexDecode', 'ASCII85Decode', 'LZWDecode', 'FlateDecode', 'RunLengthDecode')
staticprivate

Define a list of available filter decoders.

static

Definition at line 57 of file tcpdf_filters.php.


The documentation for this class was generated from the following file: