Class: PDF::Core::Stream

Inherits:
Object
  • Object
show all
Defined in:
lib/pdf/core/stream.rb

Overview

PDF Stream object

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(io = nil) ⇒ Stream

Returns a new instance of Stream.

Parameters:

  • io (String) (defaults to: nil)

    must be mutable

Source Code
lib/pdf/core/stream.rb, line 18
18
def initialize(io = nil)
19
  @filtered_stream = ''
20
  @stream = io
21
  @filters = FilterList.new
22
end

Instance Attribute Details

#filtersPDF::Core::FilterList (readonly)

Stream filters

Source Code
lib/pdf/core/stream.rb, line 15
15
def filters
16
  @filters
17
end

Instance Method Details

#<<(io) ⇒ self

Append data to stream.

Parameters:

  • io (String)

Returns:

  • (self)
Source Code
lib/pdf/core/stream.rb, line 28
28
def <<(io)
29
  (@stream ||= +'') << io
30
  @filtered_stream = nil
31
  self
32
end

#compress!void

This method returns an undefined value.

Set up stream to be compressed when serialized.

Source Code
lib/pdf/core/stream.rb, line 37
37
def compress!
38
  unless @filters.names.include?(:FlateDecode)
39
    @filtered_stream = nil
40
    @filters << :FlateDecode
41
  end
42
end

#compressed?Boolean

Is this stream compressed?

Returns:

  • (Boolean)
Source Code
lib/pdf/core/stream.rb, line 47
47
def compressed?
48
  @filters.names.include?(:FlateDecode)
49
end

#dataHash

Stream dictionary

Returns:

  • (Hash)
Source Code
lib/pdf/core/stream.rb, line 99
99
def data
100
  if @stream
101
    filter_names = @filters.names
102
    filter_params = @filters.decode_params
103
104
    d = {
105
      Length: filtered_stream.length,
106
    }
107
    if filter_names.any?
108
      d[:Filter] = filter_names
109
    end
110
    if filter_params.any? { |f| !f.nil? }
111
      d[:DecodeParms] = filter_params
112
    end
113
114
    d
115
  else
116
    {}
117
  end
118
end

#empty?Boolean

Is there any data in this stream?

Returns:

  • (Boolean)
Source Code
lib/pdf/core/stream.rb, line 54
54
def empty?
55
  @stream.nil?
56
end

#filtered_streamStream

Stream data with filters applied.

Returns:

Source Code
lib/pdf/core/stream.rb, line 61
61
def filtered_stream
62
  if @stream
63
    if @filtered_stream.nil?
64
      @filtered_stream = @stream.dup
65
66
      @filters.each do |(filter_name, params)|
67
        filter = PDF::Core::Filters.const_get(filter_name)
68
        if filter
69
          @filtered_stream = filter.encode(@filtered_stream, params)
70
        end
71
      end
72
    end
73
74
    @filtered_stream
75
  end
76
end

#inspectString

String representation of the stream for debugging purposes.

Returns:

  • (String)
Source Code
lib/pdf/core/stream.rb, line 123
123
def inspect
124
  format(
125
    '#<%<class>s:0x%<object_id>014x @stream=%<stream>s, @filters=%<filters>s>',
126
    class: self.class.name,
127
    object_id: object_id,
128
    stream: @stream.inspect,
129
    filters: @filters.inspect,
130
  )
131
end

#lengthInteger

Size of data in the stream

Returns:

  • (Integer)
Source Code
lib/pdf/core/stream.rb, line 81
81
def length
82
  @stream.length
83
end

#objectString

Serialized stream data

Returns:

  • (String)
Source Code
lib/pdf/core/stream.rb, line 88
88
def object
89
  if filtered_stream
90
    "stream\n#{filtered_stream}\nendstream\n"
91
  else
92
    ''
93
  end
94
end