class PDF::Reader::Filter::Flate
implementation of the Flate
(zlib) stream filter
Constants
- ZLIB_AUTO_DETECT_ZLIB_OR_GZIP
- ZLIB_RAW_DEFLATE
Public Class Methods
Source
# File lib/pdf/reader/filter/flate.rb, line 16 def initialize(options = {}) @options = options end
Public Instance Methods
Source
# File lib/pdf/reader/filter/flate.rb, line 22 def filter(data) deflated = zlib_inflate(data) || zlib_inflate(data[0, data.bytesize-1]) if deflated.nil? raise MalformedPDFError, "Error while inflating a compressed stream (no suitable inflation algorithm found)" end Depredict.new(@options).filter(deflated) end
Decode the specified data with the Zlib compression algorithm
Private Instance Methods
Source
# File lib/pdf/reader/filter/flate.rb, line 34 def zlib_inflate(data) begin return Zlib::Inflate.new(ZLIB_AUTO_DETECT_ZLIB_OR_GZIP).inflate(data) rescue Zlib::Error # by default, Ruby's Zlib assumes the data it's inflating # is RFC1951 deflated data, wrapped in a RFC1950 zlib container. If that # fails, swallow the exception and attempt to inflate the data as a raw # RFC1951 stream. end begin return Zlib::Inflate.new(ZLIB_RAW_DEFLATE).inflate(data) rescue Zlib::Error # swallow this one too, so we can try some other fallback options end nil end