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

Defined Under Namespace

Classes: Pool

Class Method Summary collapse

Class Method Details

.decoder(source, options = nil) ⇒ Object

See HexaPDF::Filter



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/hexapdf/filter/flate_decode.rb', line 72

def self.decoder(source, options = nil)
  fib = Fiber.new do
    inflater = @inflate_pool.next_available
    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



98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/hexapdf/filter/flate_decode.rb', line 98

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

  Fiber.new do
    deflater = @deflate_pool.next_available
    while source.alive? && (data = source.resume)
      data = deflater.deflate(data)
      Fiber.yield(data)
    end
    deflater.finish
  end
end