Class: PDF::Core::Stream
- Inherits:
-
Object
- Object
- PDF::Core::Stream
- Defined in:
- lib/pdf/core/stream.rb
Overview
PDF Stream object
Instance Attribute Summary collapse
-
#filters ⇒ PDF::Core::FilterList
readonly
Stream filters.
Instance Method Summary collapse
-
#<<(io) ⇒ self
Append data to stream.
-
#compress! ⇒ void
Set up stream to be compressed when serialized.
-
#compressed? ⇒ Boolean
Is this stream compressed?.
-
#data ⇒ Hash
Stream dictionary.
-
#empty? ⇒ Boolean
Is there any data in this stream?.
-
#filtered_stream ⇒ Stream
Stream data with filters applied.
-
#initialize(io = nil) ⇒ Stream
constructor
A new instance of Stream.
-
#inspect ⇒ String
String representation of the stream for debugging purposes.
-
#length ⇒ Integer
Size of data in the stream.
-
#object ⇒ String
Serialized stream data.
Constructor Details
#initialize(io = nil) ⇒ Stream
Returns a new instance of Stream.
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
#filters ⇒ PDF::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.
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?
Source Code
lib/pdf/core/stream.rb, line 47
47 | def compressed? |
48 | @filters.names.include?(:FlateDecode) |
49 | end
|
#data ⇒ Hash
Stream dictionary
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?
Source Code
lib/pdf/core/stream.rb, line 54
54 | def empty? |
55 | @stream.nil? |
56 | end
|
#filtered_stream ⇒ Stream
Stream data with filters applied.
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
|
#inspect ⇒ String
String representation of the stream for debugging purposes.
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
|
#length ⇒ Integer
Size of data in the stream
Source Code
lib/pdf/core/stream.rb, line 81
81 | def length |
82 | @stream.length |
83 | end
|
#object ⇒ String
Serialized stream data
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
|