ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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.

79 {
80 switch ($filter) {
81 case 'ASCIIHexDecode': {
83 break;
84 }
85 case 'ASCII85Decode': {
87 break;
88 }
89 case 'LZWDecode': {
91 break;
92 }
93 case 'FlateDecode': {
95 break;
96 }
97 case 'RunLengthDecode': {
99 break;
100 }
101 case 'CCITTFaxDecode': {
103 break;
104 }
105 case 'JBIG2Decode': {
107 break;
108 }
109 case 'DCTDecode': {
111 break;
112 }
113 case 'JPXDecode': {
115 break;
116 }
117 case 'Crypt': {
119 break;
120 }
121 default: {
123 break;
124 }
125 }
126 }
static decodeFilterCrypt($data)
Crypt (NOT IMPLEMETED - RETURN AN EXCEPTION) Decrypts data encrypted by a security handler,...
static decodeFilterLZWDecode($data)
LZWDecode Decompresses data encoded using the LZW (Lempel-Ziv-Welch) adaptive compression method,...
static decodeFilterDCTDecode($data)
DCTDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using a DCT (discrete cosi...
static decodeFilterCCITTFaxDecode($data)
CCITTFaxDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the CCITT facsi...
static decodeFilterRunLengthDecode($data)
RunLengthDecode Decompresses data encoded using a byte-oriented run-length encoding algorithm.
static decodeFilterFlateDecode($data)
FlateDecode Decompresses data encoded using the zlib/deflate compression method, reproducing the orig...
static decodeFilterASCIIHexDecode($data)
ASCIIHexDecode Decodes data encoded in an ASCII hexadecimal representation, reproducing the original ...
static decodeFilterASCII85Decode($data)
ASCII85Decode Decodes data encoded in an ASCII base-85 representation, reproducing the original binar...
static decodeFilterStandard($data)
Standard Default decoding filter (leaves data unchanged).
static decodeFilterJBIG2Decode($data)
JBIG2Decode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the JBIG2 standard...
static decodeFilterJPXDecode($data)
JPXDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) Decompresses data encoded using the wavelet-based JP...
$data

References $data, decodeFilterASCII85Decode(), decodeFilterASCIIHexDecode(), decodeFilterCCITTFaxDecode(), decodeFilterCrypt(), decodeFilterDCTDecode(), decodeFilterFlateDecode(), decodeFilterJBIG2Decode(), decodeFilterJPXDecode(), decodeFilterLZWDecode(), decodeFilterRunLengthDecode(), and decodeFilterStandard().

Referenced by TCPDF_PARSER\decodeStream().

+ Here is the call graph for this function:
+ 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.

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 }
static Error($msg)
Throw an exception.

References $data, and Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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.

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 }

References $data, and Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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 }

References Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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 }

References Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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 }

References Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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.

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 }

References $data, and Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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 }

References Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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 }

References Error().

Referenced by decodeFilter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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.

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 }

References $data.

Referenced by decodeFilter().

+ Here is the caller graph for this function:

◆ 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.

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 }

References $data.

Referenced by decodeFilter().

+ Here is the caller graph for this function:

◆ 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.

138 {
139 return $data;
140 }

References $data.

Referenced by decodeFilter().

+ Here is the caller graph for this function:

◆ 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 }

Referenced by decodeFilterASCII85Decode(), decodeFilterASCIIHexDecode(), decodeFilterCCITTFaxDecode(), decodeFilterCrypt(), decodeFilterDCTDecode(), decodeFilterFlateDecode(), decodeFilterJBIG2Decode(), and decodeFilterJPXDecode().

+ Here is the caller graph for this function:

◆ 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.

67 {
69 }
static $available_filters
Define a list of available filter decoders.

References $available_filters.

Referenced by TCPDF_PARSER\decodeStream().

+ 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.

Referenced by getAvailableFilters().


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