Module: HexaPDF::Filter::FlateDecode

Defined in:
lib/hexapdf/filter/flate_decode.rb

Overview

Implements the Deflate filter using the Zlib library.

See: HexaPDF::Filter, PDF1.7 s7.4.4

Class Method Summary collapse

Class Method Details

.decoder(source, options = nil) ⇒ Object

See HexaPDF::Filter



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/hexapdf/filter/flate_decode.rb', line 49

def self.decoder(source, options = nil)
  fib = Fiber.new do
    inflater = Zlib::Inflate.new
    while source.alive? && (data = source.resume)
      begin
        data = inflater.inflate(data)
      rescue
        raise FilterError, "Problem while decoding Flate encoded stream: #{$!}"
      end
      Fiber.yield(data)
    end
    begin
      inflater.finish
    rescue
      raise FilterError, "Problem while decoding Flate encoded stream: #{$!}"
    end
  end

  if options && options[:Predictor]
    Predictor.decoder(fib, options)
  else
    fib
  end
end

.encoder(source, options = nil) ⇒ Object

See HexaPDF::Filter



75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/hexapdf/filter/flate_decode.rb', line 75

def self.encoder(source, options = nil)
  if options && options[:Predictor]
    source = Predictor.encoder(source, options)
  end

  Fiber.new do
    deflater = Zlib::Deflate.new(HexaPDF::GlobalConfiguration['filter.flate_compression'])
    while source.alive? && (data = source.resume)
      data = deflater.deflate(data)
      Fiber.yield(data)
    end
    deflater.finish
  end
end