17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/combine_pdf/combine_pdf_filter.rb', line 17
def inflate_object object = nil, filter = :none
filter_array = object[:Filter]
if filter_array.is_a?(Hash) && filter_array[:is_reference_only]
filter_array = filter_array[:referenced_object]
end
if filter_array.is_a?(Symbol)
filter_array = [filter_array]
end
filter_array = [] if filter_array.nil?
params_array = object[:DecodeParms]
if params_array.is_a?(Hash) && params_array[:is_reference_only]
params_array = params_array[:referenced_object]
end
unless params_array.is_a?(Array)
params_array = [params_array]
end
while filter_array[0]
case filter_array[0]
when :FlateDecode
raise_unsupported_error params_array[0] unless params_array[0].nil?
if params_array[0] && params_array[0][:Predictor].to_i > 1
bits = params_array[0][:BitsPerComponent] || 8
predictor = params_array[0][:Predictor].to_i
columns = params_array[0][:Columns] || 1
if (2..9).include? params_array[0][:Predictor].to_i
elsif (10..15).include? params_array[0][:Predictor].to_i == 2
end
else
object[:raw_stream_content] = Zlib::Inflate.inflate object[:raw_stream_content]
object[:Length] = object[:raw_stream_content].bytesize
end
when nil
true
else
return false
end
params_array.shift
filter_array.shift
end
object.delete(:Filter)
true
end
|