Exemple #1
0
function getDecodedStream($stream, $options)
{
    $data = "";
    if (empty($options["Filter"])) {
        $data = $stream;
    } else {
        $length = !empty($options["Length"]) ? $options["Length"] : strlen($stream);
        $_stream = substr($stream, 0, $length);
        foreach ($options as $key => $value) {
            if ($key == "ASCIIHexDecode") {
                $_stream = decodeAsciiHex($_stream);
            }
            if ($key == "ASCII85Decode") {
                $_stream = decodeAscii85($_stream);
            }
            if ($key == "FlateDecode") {
                $_stream = decodeFlate($_stream);
            }
        }
        $data = $_stream;
    }
    return $data;
}
Exemple #2
0
function getDecodedStream($stream, $options)
{
    // Итак, перед нами поток, возможно кодированный каким-нибудь
    // методом сжатия, а то и несколькими. Попробуем расшифровать.
    $data = "";
    // Если у текущего потока есть свойство Filter, то он точно
    // сжат или зашифрован. Иначе, просто возвращаем содержимое
    // потока назад.
    if (empty($options["Filter"])) {
        $data = $stream;
    } else {
        // Если в опциях есть длина потока данных, то нам нужно обрезать данные
        // по заданной длине, а не то расшифровать не сможем или ещё какая
        // беда случится.
        $length = !empty($options["Length"]) && strpos($options["Length"], " ") === false ? $options["Length"] : strlen($stream);
        $_stream = substr($stream, 0, $length);
        // Перебираем опции на предмет наличия указаний на сжатие данных в текущем
        // потоке. PDF поддерживает много всего и разного, но текст кодируется тремя
        // вариантами: ASCII Hex, ASCII 85-base и GZ/Deflate. Ищем соответствующие
        // ключи и применяем соответствующие функции для расжатия. Есть ещё вариант
        // Crypt, но распознавать шифрованные PDF'ки мы не будем.
        foreach ($options as $key => $value) {
            if ($key == "ASCIIHexDecode") {
                $_stream = decodeAsciiHex($_stream);
            }
            if ($key == "ASCII85Decode") {
                $_stream = decodeAscii85($_stream);
            }
            if ($key == "FlateDecode") {
                $_stream = decodeFlate($_stream);
            }
        }
        $data = $_stream;
    }
    // Возвращаем результат наших злодейств.
    return $data;
}