pdf-wrapper 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +27 -0
- data/Rakefile +1 -1
- data/TODO +3 -1
- data/examples/cell.rb +2 -2
- data/examples/image.rb +4 -2
- data/examples/markup.rb +2 -2
- data/examples/repeating.rb +2 -2
- data/examples/scaled_image.rb +2 -2
- data/examples/shapes.rb +2 -2
- data/examples/table.rb +4 -6
- data/examples/table_fixed_col_width.rb +26 -0
- data/examples/translate.rb +2 -2
- data/examples/utf8-long.rb +3 -3
- data/examples/utf8.rb +2 -2
- data/examples/varied_page_size.rb +15 -0
- data/lib/pdf/wrapper.rb +158 -49
- data/lib/pdf/wrapper/table.rb +96 -21
- data/lib/pdf/wrapper/text.rb +52 -21
- data/specs/graphics_spec.rb +29 -26
- data/specs/image_spec.rb +21 -22
- data/specs/load_spec.rb +7 -6
- data/specs/spec_helper.rb +5 -0
- data/specs/tables_spec.rb +26 -25
- data/specs/text_spec.rb +72 -61
- data/specs/wrapper_spec.rb +162 -175
- metadata +4 -3
- data/examples/text.rb +0 -14
data/specs/wrapper_spec.rb
CHANGED
@@ -4,127 +4,120 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
4
4
|
|
5
5
|
context "The PDF::Wrapper class" do
|
6
6
|
|
7
|
+
before(:each) { create_pdf }
|
8
|
+
|
7
9
|
specify "should initilize with the correct default paper size and orientation" do
|
8
|
-
pdf
|
9
|
-
pdf.
|
10
|
-
pdf.page_height.should eql(PDF::Wrapper::PAGE_SIZES[:A4].last)
|
10
|
+
@pdf.page_width.should eql(PDF::Wrapper::PAGE_SIZES[:A4].first)
|
11
|
+
@pdf.page_height.should eql(PDF::Wrapper::PAGE_SIZES[:A4].last)
|
11
12
|
end
|
12
13
|
|
13
14
|
specify "should initilize with the correct custom paper size" do
|
14
|
-
|
15
|
+
output = StringIO.new
|
16
|
+
pdf = PDF::Wrapper.new(output, :paper => :A0)
|
15
17
|
pdf.page_width.should eql(PDF::Wrapper::PAGE_SIZES[:A0].first)
|
16
18
|
pdf.page_height.should eql(PDF::Wrapper::PAGE_SIZES[:A0].last)
|
17
19
|
end
|
18
20
|
|
19
21
|
specify "should initilize with the correct custom orientation" do
|
20
|
-
|
22
|
+
output = StringIO.new
|
23
|
+
pdf = PDF::Wrapper.new(output, :paper => :A4, :orientation => :landscape)
|
21
24
|
pdf.page_width.should eql(PDF::Wrapper::PAGE_SIZES[:A4].last)
|
22
25
|
pdf.page_height.should eql(PDF::Wrapper::PAGE_SIZES[:A4].first)
|
23
26
|
end
|
24
27
|
|
25
28
|
specify "should raise an exception if an invalid orientation is requested" do
|
26
|
-
|
29
|
+
output = StringIO.new
|
30
|
+
lambda {pdf = PDF::Wrapper.new(output, :paper => :A4, :orientation => :fake)}.should raise_error(ArgumentError)
|
27
31
|
end
|
28
32
|
|
29
33
|
specify "should store sensible default text options" do
|
30
|
-
pdf
|
31
|
-
pdf.default_text_options.should be_a_kind_of(Hash)
|
34
|
+
@pdf.default_text_options.should be_a_kind_of(Hash)
|
32
35
|
end
|
33
36
|
|
34
37
|
specify "should initilize with the correct default margins (5% of the page)" do
|
35
|
-
pdf
|
36
|
-
pdf.
|
37
|
-
pdf.
|
38
|
-
pdf.
|
39
|
-
pdf.margin_bottom.should eql((PDF::Wrapper::PAGE_SIZES[:A4].last * 0.05).ceil)
|
38
|
+
@pdf.margin_left.should eql((PDF::Wrapper::PAGE_SIZES[:A4].first * 0.05).ceil)
|
39
|
+
@pdf.margin_right.should eql((PDF::Wrapper::PAGE_SIZES[:A4].first * 0.05).ceil)
|
40
|
+
@pdf.margin_top.should eql((PDF::Wrapper::PAGE_SIZES[:A4].last * 0.05).ceil)
|
41
|
+
@pdf.margin_bottom.should eql((PDF::Wrapper::PAGE_SIZES[:A4].last * 0.05).ceil)
|
40
42
|
end
|
41
43
|
|
42
44
|
specify "should initilize with the correct default text and colour settings" do
|
43
|
-
pdf
|
44
|
-
pdf.instance_variable_get("@
|
45
|
-
pdf.instance_variable_get("@default_font_size").should eql(16)
|
45
|
+
@pdf.instance_variable_get("@default_font").should eql("Sans Serif")
|
46
|
+
@pdf.instance_variable_get("@default_font_size").should eql(16)
|
46
47
|
end
|
47
48
|
|
48
49
|
specify "should be able to change the default font" do
|
49
|
-
pdf
|
50
|
-
pdf.
|
51
|
-
pdf.instance_variable_get("@default_font").should eql("Arial")
|
50
|
+
@pdf.font("Arial")
|
51
|
+
@pdf.instance_variable_get("@default_font").should eql("Arial")
|
52
52
|
end
|
53
53
|
|
54
54
|
specify "should be able to change the default font size" do
|
55
|
-
pdf
|
56
|
-
pdf.
|
57
|
-
pdf.instance_variable_get("@default_font_size").should eql(24)
|
55
|
+
@pdf.font_size(24)
|
56
|
+
@pdf.instance_variable_get("@default_font_size").should eql(24)
|
58
57
|
end
|
59
58
|
|
60
59
|
specify "should initialize with the cursor at the top left of the body of the page" do
|
61
|
-
|
62
|
-
x
|
63
|
-
|
64
|
-
y.to_i.should eql(pdf.margin_top)
|
60
|
+
x,y = @pdf.current_point
|
61
|
+
x.to_i.should eql(@pdf.margin_left)
|
62
|
+
y.to_i.should eql(@pdf.margin_top)
|
65
63
|
end
|
66
64
|
|
67
65
|
specify "should calculate the absolute coordinates for the margins correctly" do
|
68
|
-
pdf
|
69
|
-
pdf.
|
70
|
-
pdf.
|
71
|
-
pdf.
|
72
|
-
pdf.absolute_bottom_margin.should eql(pdf.page_height - pdf.margin_bottom)
|
66
|
+
@pdf.absolute_left_margin.should eql(@pdf.margin_left)
|
67
|
+
@pdf.absolute_right_margin.should eql(@pdf.page_width - @pdf.margin_right)
|
68
|
+
@pdf.absolute_top_margin.should eql(@pdf.margin_top)
|
69
|
+
@pdf.absolute_bottom_margin.should eql(@pdf.page_height - @pdf.margin_bottom)
|
73
70
|
end
|
74
71
|
|
75
72
|
specify "should calculate various useful page coordinates correctly" do
|
76
|
-
pdf
|
77
|
-
pdf.
|
78
|
-
pdf.
|
79
|
-
pdf.
|
80
|
-
pdf.
|
81
|
-
pdf.
|
82
|
-
pdf.
|
83
|
-
pdf.
|
84
|
-
pdf.points_to_right_margin(300).should eql(pdf.absolute_right_margin - 300)
|
73
|
+
@pdf.absolute_x_middle.should eql(PDF::Wrapper::PAGE_SIZES[:A4].first / 2)
|
74
|
+
@pdf.absolute_y_middle.should eql(PDF::Wrapper::PAGE_SIZES[:A4].last / 2)
|
75
|
+
@pdf.body_width.should eql(@pdf.page_width - @pdf.margin_left - @pdf.margin_right)
|
76
|
+
@pdf.body_height.should eql(@pdf.page_height - @pdf.margin_top - @pdf.margin_bottom)
|
77
|
+
@pdf.body_x_middle.should eql(@pdf.margin_left + (@pdf.body_width/ 2))
|
78
|
+
@pdf.body_y_middle.should eql(@pdf.margin_top + (@pdf.body_height/ 2))
|
79
|
+
@pdf.points_to_bottom_margin(300).should eql(@pdf.absolute_bottom_margin - 300)
|
80
|
+
@pdf.points_to_right_margin(300).should eql(@pdf.absolute_right_margin - 300)
|
85
81
|
end
|
86
82
|
|
87
83
|
specify "should be able to move the cursor to any arbitary point on the canvas" do
|
88
|
-
pdf
|
89
|
-
pdf.
|
90
|
-
x,y = pdf.current_point
|
84
|
+
@pdf.move_to(100,100)
|
85
|
+
x,y = @pdf.current_point
|
91
86
|
x.to_i.should eql(100)
|
92
87
|
y.to_i.should eql(100)
|
93
88
|
end
|
94
89
|
|
95
90
|
specify "should be able to shift the y position of the cursor using pad" do
|
96
|
-
pdf
|
97
|
-
pdf.
|
98
|
-
|
99
|
-
x,y = pdf.current_point
|
91
|
+
@pdf.move_to(100,100)
|
92
|
+
newy = @pdf.pad(25)
|
93
|
+
x,y = @pdf.current_point
|
100
94
|
x.to_i.should eql(100)
|
101
95
|
y.to_i.should eql(125)
|
102
96
|
newy.should eql(125.0)
|
103
97
|
end
|
104
98
|
|
105
99
|
specify "should add additional pages at the users request" do
|
106
|
-
pdf
|
107
|
-
pdf.
|
108
|
-
pdf.
|
109
|
-
x
|
110
|
-
|
111
|
-
|
100
|
+
@pdf.move_to(100,100)
|
101
|
+
@pdf.start_new_page
|
102
|
+
x,y = @pdf.current_point
|
103
|
+
x.to_i.should eql(@pdf.margin_left)
|
104
|
+
y.to_i.should eql(@pdf.margin_top)
|
105
|
+
@pdf.finish
|
112
106
|
|
113
107
|
# verify the output
|
114
108
|
receiver = PageReceiver.new
|
115
|
-
reader = PDF::Reader.string(
|
109
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
116
110
|
receiver.pages.should eql(2)
|
117
111
|
end
|
118
112
|
|
119
113
|
|
120
114
|
specify "should leave the cursor in the bottom left of a layout when new text is added" do
|
121
|
-
|
122
|
-
x, y = pdf.current_point
|
115
|
+
x, y = @pdf.current_point
|
123
116
|
str = "Chunky Bacon!!"
|
124
117
|
opts = {:font_size => 16, :font => "Sans Serif", :alignment => :left, :justify => false }
|
125
|
-
height = pdf.text_height(str, pdf.page_width, opts)
|
126
|
-
pdf.text(str,opts)
|
127
|
-
newx, newy = pdf.current_point
|
118
|
+
height = @pdf.text_height(str, @pdf.page_width, opts)
|
119
|
+
@pdf.text(str,opts)
|
120
|
+
newx, newy = @pdf.current_point
|
128
121
|
|
129
122
|
newx.should eql(x)
|
130
123
|
# the top of our text box, plus its height
|
@@ -134,13 +127,14 @@ context "The PDF::Wrapper class" do
|
|
134
127
|
specify "should be able to render to a file" do
|
135
128
|
# generate a PDF
|
136
129
|
msg = "Chunky Bacon"
|
137
|
-
pdf = PDF::Wrapper.new
|
138
|
-
pdf.text msg
|
139
130
|
|
140
131
|
# write the PDF to a temp file
|
141
132
|
tmp = Tempfile.open("siftr")
|
142
133
|
tmp.close
|
143
|
-
|
134
|
+
|
135
|
+
pdf = PDF::Wrapper.new(tmp.path)
|
136
|
+
pdf.text msg
|
137
|
+
pdf.finish
|
144
138
|
|
145
139
|
# ensure an actual PDF was written out
|
146
140
|
File.open(tmp.path, "r") do |f|
|
@@ -152,27 +146,26 @@ context "The PDF::Wrapper class" do
|
|
152
146
|
end
|
153
147
|
|
154
148
|
specify "should be able to determine if a requested colour is valid or not" do
|
155
|
-
pdf
|
156
|
-
pdf.validate_color(
|
157
|
-
pdf.validate_color([1,0,0]).should be_true
|
158
|
-
pdf.validate_color(
|
159
|
-
lambda { pdf.validate_color(
|
160
|
-
lambda { pdf.validate_color([
|
161
|
-
lambda { pdf.validate_color([1000, 255, 0])}.should raise_error(ArgumentError)
|
149
|
+
@pdf.validate_color(:black).should be_true
|
150
|
+
@pdf.validate_color([1,0,0]).should be_true
|
151
|
+
@pdf.validate_color([1,0,0,0.5]).should be_true
|
152
|
+
lambda { @pdf.validate_color(:ponies)}.should raise_error(ArgumentError)
|
153
|
+
lambda { @pdf.validate_color([1])}.should raise_error(ArgumentError)
|
154
|
+
lambda { @pdf.validate_color([1000, 255, 0])}.should raise_error(ArgumentError)
|
162
155
|
end
|
163
156
|
|
164
157
|
specify "should be able to add repeating elements to :all pages" do
|
165
158
|
test_str = "repeating"
|
166
159
|
|
167
|
-
pdf
|
168
|
-
pdf.repeating_element(:all) { |page| page.text test_str }
|
160
|
+
@pdf.repeating_element(:all) { |page| page.text test_str }
|
169
161
|
|
170
|
-
pdf.start_new_page
|
171
|
-
pdf.start_new_page
|
172
|
-
pdf.start_new_page
|
162
|
+
@pdf.start_new_page
|
163
|
+
@pdf.start_new_page
|
164
|
+
@pdf.start_new_page
|
165
|
+
@pdf.finish
|
173
166
|
|
174
167
|
receiver = PageTextReceiver.new
|
175
|
-
reader = PDF::Reader.string(
|
168
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
176
169
|
|
177
170
|
receiver.content.size.should eql(4)
|
178
171
|
receiver.content[0].should eql(test_str)
|
@@ -184,15 +177,15 @@ context "The PDF::Wrapper class" do
|
|
184
177
|
specify "should be able to add repeating elements to :odd pages" do
|
185
178
|
test_str = "repeating"
|
186
179
|
|
187
|
-
pdf
|
188
|
-
pdf.repeating_element(:odd) { |page| page.text test_str }
|
180
|
+
@pdf.repeating_element(:odd) { |page| page.text test_str }
|
189
181
|
|
190
|
-
pdf.start_new_page
|
191
|
-
pdf.start_new_page
|
192
|
-
pdf.start_new_page
|
182
|
+
@pdf.start_new_page
|
183
|
+
@pdf.start_new_page
|
184
|
+
@pdf.start_new_page
|
185
|
+
@pdf.finish
|
193
186
|
|
194
187
|
receiver = PageTextReceiver.new
|
195
|
-
reader = PDF::Reader.string(
|
188
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
196
189
|
|
197
190
|
receiver.content.size.should eql(4)
|
198
191
|
receiver.content[0].should eql(test_str)
|
@@ -204,15 +197,15 @@ context "The PDF::Wrapper class" do
|
|
204
197
|
specify "should be able to add repeating elements to :even pages" do
|
205
198
|
test_str = "repeating"
|
206
199
|
|
207
|
-
pdf
|
208
|
-
pdf.repeating_element(:even) { |page| page.text test_str }
|
200
|
+
@pdf.repeating_element(:even) { |page| page.text test_str }
|
209
201
|
|
210
|
-
pdf.start_new_page
|
211
|
-
pdf.start_new_page
|
212
|
-
pdf.start_new_page
|
202
|
+
@pdf.start_new_page
|
203
|
+
@pdf.start_new_page
|
204
|
+
@pdf.start_new_page
|
205
|
+
@pdf.finish
|
213
206
|
|
214
207
|
receiver = PageTextReceiver.new
|
215
|
-
reader = PDF::Reader.string(
|
208
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
216
209
|
|
217
210
|
receiver.content.size.should eql(4)
|
218
211
|
receiver.content[0].should eql("")
|
@@ -224,15 +217,15 @@ context "The PDF::Wrapper class" do
|
|
224
217
|
specify "should be able to add repeating elements to a range of pages" do
|
225
218
|
test_str = "repeating"
|
226
219
|
|
227
|
-
pdf
|
228
|
-
pdf.repeating_element((2..3)) { |page| page.text test_str }
|
220
|
+
@pdf.repeating_element((2..3)) { |page| page.text test_str }
|
229
221
|
|
230
|
-
pdf.start_new_page
|
231
|
-
pdf.start_new_page
|
232
|
-
pdf.start_new_page
|
222
|
+
@pdf.start_new_page
|
223
|
+
@pdf.start_new_page
|
224
|
+
@pdf.start_new_page
|
225
|
+
@pdf.finish
|
233
226
|
|
234
227
|
receiver = PageTextReceiver.new
|
235
|
-
reader = PDF::Reader.string(
|
228
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
236
229
|
|
237
230
|
receiver.content.size.should eql(4)
|
238
231
|
receiver.content[0].should eql("")
|
@@ -244,15 +237,15 @@ context "The PDF::Wrapper class" do
|
|
244
237
|
specify "should be able to add repeating elements to a single page" do
|
245
238
|
test_str = "repeating"
|
246
239
|
|
247
|
-
pdf
|
248
|
-
pdf.repeating_element(2) { |page| page.text test_str }
|
240
|
+
@pdf.repeating_element(2) { |page| page.text test_str }
|
249
241
|
|
250
|
-
pdf.start_new_page
|
251
|
-
pdf.start_new_page
|
252
|
-
pdf.start_new_page
|
242
|
+
@pdf.start_new_page
|
243
|
+
@pdf.start_new_page
|
244
|
+
@pdf.start_new_page
|
245
|
+
@pdf.finish
|
253
246
|
|
254
247
|
receiver = PageTextReceiver.new
|
255
|
-
reader = PDF::Reader.string(
|
248
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
256
249
|
|
257
250
|
receiver.content.size.should eql(4)
|
258
251
|
receiver.content[0].should eql("")
|
@@ -264,15 +257,15 @@ context "The PDF::Wrapper class" do
|
|
264
257
|
specify "should be able to add repeating elements to an array of pages" do
|
265
258
|
test_str = "repeating"
|
266
259
|
|
267
|
-
pdf
|
268
|
-
pdf.repeating_element([1,3,4]) { |page| page.text test_str }
|
260
|
+
@pdf.repeating_element([1,3,4]) { |page| page.text test_str }
|
269
261
|
|
270
|
-
pdf.start_new_page
|
271
|
-
pdf.start_new_page
|
272
|
-
pdf.start_new_page
|
262
|
+
@pdf.start_new_page
|
263
|
+
@pdf.start_new_page
|
264
|
+
@pdf.start_new_page
|
265
|
+
@pdf.finish
|
273
266
|
|
274
267
|
receiver = PageTextReceiver.new
|
275
|
-
reader = PDF::Reader.string(
|
268
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
276
269
|
|
277
270
|
receiver.content.size.should eql(4)
|
278
271
|
receiver.content[0].should eql(test_str)
|
@@ -286,9 +279,8 @@ context "The PDF::Wrapper class" do
|
|
286
279
|
specify "should not allow a new page to be started while adding repeating elements" do
|
287
280
|
test_str = "repeating"
|
288
281
|
|
289
|
-
pdf = PDF::Wrapper.new
|
290
282
|
lambda do
|
291
|
-
pdf.repeating_element([1,3,4]) do |page|
|
283
|
+
@pdf.repeating_element([1,3,4]) do |page|
|
292
284
|
page.text test_str
|
293
285
|
page.start_new_page
|
294
286
|
end
|
@@ -297,120 +289,120 @@ context "The PDF::Wrapper class" do
|
|
297
289
|
end
|
298
290
|
|
299
291
|
specify "should leave the cursor on the bottom left corner of an object when using functions with optional positioning [func(data, opts)]" do
|
300
|
-
|
301
|
-
origx, origy = pdf.current_point
|
292
|
+
origx, origy = @pdf.current_point
|
302
293
|
|
303
294
|
# text()
|
304
|
-
pdf.text("Page #{pdf.page}!", :left => pdf.margin_left, :top => pdf.margin_top, :font_size => 18)
|
305
|
-
x, y = pdf.current_point
|
295
|
+
@pdf.text("Page #{@pdf.page}!", :left => @pdf.margin_left, :top => @pdf.margin_top, :font_size => 18)
|
296
|
+
x, y = @pdf.current_point
|
306
297
|
x.should eql(origx)
|
307
298
|
y.should eql(origy + 27)
|
308
299
|
|
309
300
|
# image() - palms it's works out to helper functions, so we have to check them individually
|
310
301
|
|
311
302
|
# TODO: work out why rcov segfaults when i use the draw_pdf method
|
312
|
-
#origx, origy = pdf.current_point
|
313
|
-
|
314
|
-
#x, y = pdf.current_point
|
303
|
+
#origx, origy = @pdf.current_point
|
304
|
+
#@pdf.draw_pdf(File.dirname(__FILE__) + "/data/utf8-long.pdf", :height => 50)
|
305
|
+
#x, y = @pdf.current_point
|
315
306
|
#x.should eql(origx)
|
316
307
|
#y.should eql(origy + 50)
|
317
308
|
|
318
|
-
origx, origy = pdf.current_point
|
319
|
-
pdf.draw_pixbuf(File.dirname(__FILE__) + "/data/zits.gif", :height => 50)
|
320
|
-
x, y = pdf.current_point
|
309
|
+
origx, origy = @pdf.current_point
|
310
|
+
@pdf.draw_pixbuf(File.dirname(__FILE__) + "/data/zits.gif", :height => 50)
|
311
|
+
x, y = @pdf.current_point
|
321
312
|
x.should eql(origx)
|
322
313
|
y.should eql(origy + 50)
|
323
314
|
|
324
|
-
origx, origy = pdf.current_point
|
325
|
-
pdf.draw_png(File.dirname(__FILE__) + "/data/google.png", :height => 200)
|
326
|
-
x, y = pdf.current_point
|
315
|
+
origx, origy = @pdf.current_point
|
316
|
+
@pdf.draw_png(File.dirname(__FILE__) + "/data/google.png", :height => 200)
|
317
|
+
x, y = @pdf.current_point
|
327
318
|
x.should eql(origx)
|
328
319
|
y.should eql(origy + 200)
|
329
320
|
|
330
|
-
origx, origy = pdf.current_point
|
331
|
-
pdf.draw_svg(File.dirname(__FILE__) + "/data/orc.svg", :height => 100)
|
332
|
-
x, y = pdf.current_point
|
321
|
+
origx, origy = @pdf.current_point
|
322
|
+
@pdf.draw_svg(File.dirname(__FILE__) + "/data/orc.svg", :height => 100)
|
323
|
+
x, y = @pdf.current_point
|
333
324
|
x.should eql(origx)
|
334
325
|
y.should eql(origy + 100)
|
335
326
|
end
|
336
327
|
|
337
328
|
specify "should leave the cursor unmodified when using functions with compulsory positioning [func(data, x, y, w, h, opts)]" do
|
338
|
-
|
339
|
-
origx, origy = pdf.current_point
|
329
|
+
origx, origy = @pdf.current_point
|
340
330
|
|
341
331
|
# cell()
|
342
|
-
pdf.cell("test", 100, 100, 100, 100)
|
343
|
-
x, y = pdf.current_point
|
332
|
+
@pdf.cell("test", 100, 100, 100, 100)
|
333
|
+
x, y = @pdf.current_point
|
344
334
|
x.should eql(origx)
|
345
335
|
y.should eql(origy)
|
346
336
|
|
347
337
|
# circle()
|
348
|
-
pdf.circle(200, 200, 50)
|
349
|
-
x, y = pdf.current_point
|
338
|
+
@pdf.circle(200, 200, 50)
|
339
|
+
x, y = @pdf.current_point
|
350
340
|
x.should eql(origx)
|
351
341
|
y.should eql(origy)
|
352
342
|
|
353
343
|
# line()
|
354
|
-
pdf.line(300, 200, 350, 300)
|
355
|
-
x, y = pdf.current_point
|
344
|
+
@pdf.line(300, 200, 350, 300)
|
345
|
+
x, y = @pdf.current_point
|
356
346
|
x.should eql(origx)
|
357
347
|
y.should eql(origy)
|
358
348
|
|
359
349
|
# rectangle()
|
360
|
-
pdf.rectangle(200, 400, 100, 100)
|
361
|
-
x, y = pdf.current_point
|
350
|
+
@pdf.rectangle(200, 400, 100, 100)
|
351
|
+
x, y = @pdf.current_point
|
362
352
|
x.should eql(origx)
|
363
353
|
y.should eql(origy)
|
364
354
|
end
|
365
355
|
|
366
356
|
specify "should maintain an internal counter of pages" do
|
367
|
-
pdf
|
368
|
-
pdf.
|
369
|
-
pdf.
|
370
|
-
pdf.
|
371
|
-
pdf.
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
lambda { PDF::Wrapper.new(:ponies => true)}.should raise_error(ArgumentError)
|
377
|
-
pdf
|
378
|
-
lambda { pdf.
|
379
|
-
lambda { pdf.
|
380
|
-
lambda { pdf.text("test", :ponies => true)}.should raise_error(ArgumentError)
|
381
|
-
lambda { pdf.
|
382
|
-
lambda { pdf.
|
383
|
-
lambda { pdf.
|
384
|
-
lambda { pdf.
|
385
|
-
lambda { pdf.
|
386
|
-
lambda { pdf.
|
387
|
-
lambda { pdf.image(File.dirname(__FILE__) + "/data/orc.svg", :ponies => true)}.should raise_error(ArgumentError)
|
357
|
+
@pdf.page.should eql(1)
|
358
|
+
@pdf.start_new_page
|
359
|
+
@pdf.page.should eql(2)
|
360
|
+
@pdf.start_new_page(:pageno => 50)
|
361
|
+
@pdf.page.should eql(50)
|
362
|
+
end
|
363
|
+
|
364
|
+
specify "should raise an ArgumentError when a function that accepts an options hash is passed an unrecognised option" do
|
365
|
+
output = StringIO.new
|
366
|
+
lambda { PDF::Wrapper.new(output, :ponies => true)}.should raise_error(ArgumentError)
|
367
|
+
lambda { @pdf.cell("test",100,100,100,100, :ponies => true)}.should raise_error(ArgumentError)
|
368
|
+
lambda { @pdf.table([[1,2]], :ponies => true)}.should raise_error(ArgumentError)
|
369
|
+
lambda { @pdf.text("test", :ponies => true)}.should raise_error(ArgumentError)
|
370
|
+
lambda { @pdf.text("test", :ponies => true)}.should raise_error(ArgumentError)
|
371
|
+
lambda { @pdf.text_height("test", 100, :ponies => true)}.should raise_error(ArgumentError)
|
372
|
+
lambda { @pdf.circle(100,100,100, :ponies => true)}.should raise_error(ArgumentError)
|
373
|
+
lambda { @pdf.line(100,100,200,200, :ponies => true)}.should raise_error(ArgumentError)
|
374
|
+
lambda { @pdf.rectangle(100,100,100,100, :ponies => true)}.should raise_error(ArgumentError)
|
375
|
+
lambda { @pdf.start_new_page(:ponies => true)}.should raise_error(ArgumentError)
|
376
|
+
lambda { @pdf.image(File.dirname(__FILE__) + "/data/orc.svg", :ponies => true)}.should raise_error(ArgumentError)
|
388
377
|
end
|
389
378
|
|
390
379
|
specify "should allow an existing file to be used as a template for page 1" do
|
391
|
-
|
380
|
+
output = StringIO.new
|
381
|
+
pdf = PDF::Wrapper.new(output, :paper => :A4, :template => File.dirname(__FILE__) + "/data/orc.svg")
|
392
382
|
pdf.start_new_page
|
383
|
+
pdf.finish
|
393
384
|
|
394
385
|
receiver = PageSizeReceiver.new
|
395
|
-
reader = PDF::Reader.string(
|
386
|
+
reader = PDF::Reader.string(output.string, receiver)
|
396
387
|
|
397
388
|
receiver.pages[0].should eql([0.0, 0.0, 734.0, 772.0])
|
398
389
|
receiver.pages[1].should eql([0.0, 0.0, 595.28, 841.89])
|
399
390
|
end
|
400
391
|
|
401
392
|
specify "should allow an existing file to be used as a template for page 2" do
|
402
|
-
pdf
|
403
|
-
pdf.
|
393
|
+
@pdf.start_new_page(:template => File.dirname(__FILE__) + "/data/orc.svg")
|
394
|
+
@pdf.finish
|
404
395
|
|
405
396
|
receiver = PageSizeReceiver.new
|
406
|
-
reader = PDF::Reader.string(
|
397
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
407
398
|
|
408
399
|
receiver.pages[0].should eql([0.0, 0.0, 595.28, 841.89])
|
409
400
|
receiver.pages[1].should eql([0.0, 0.0, 734.0, 772.0])
|
410
401
|
end
|
411
402
|
|
412
403
|
specify "should correctly convert a user x co-ordinate to device" do
|
413
|
-
|
404
|
+
output = StringIO.new
|
405
|
+
pdf = PDF::Wrapper.new(output, :paper => :A4, :margin_left => 40)
|
414
406
|
|
415
407
|
pdf.user_x_to_device_x(10).should eql(10.0)
|
416
408
|
|
@@ -422,7 +414,8 @@ context "The PDF::Wrapper class" do
|
|
422
414
|
end
|
423
415
|
|
424
416
|
specify "should correctly convert a user y co-ordinate to device" do
|
425
|
-
|
417
|
+
output = StringIO.new
|
418
|
+
pdf = PDF::Wrapper.new(output, :paper => :A4, :margin_top => 40)
|
426
419
|
|
427
420
|
pdf.user_y_to_device_y(10).should eql(10.0)
|
428
421
|
|
@@ -434,7 +427,8 @@ context "The PDF::Wrapper class" do
|
|
434
427
|
end
|
435
428
|
|
436
429
|
specify "should correctly convert a device x co-ordinate to user" do
|
437
|
-
|
430
|
+
output = StringIO.new
|
431
|
+
pdf = PDF::Wrapper.new(output, :paper => :A4, :margin_left => 40)
|
438
432
|
|
439
433
|
pdf.device_x_to_user_x(10).should eql(10.0)
|
440
434
|
|
@@ -445,7 +439,8 @@ context "The PDF::Wrapper class" do
|
|
445
439
|
end
|
446
440
|
|
447
441
|
specify "should correctly convert a device y co-ordinate to user" do
|
448
|
-
|
442
|
+
output = StringIO.new
|
443
|
+
pdf = PDF::Wrapper.new(output, :paper => :A4, :margin_top => 40)
|
449
444
|
|
450
445
|
pdf.device_y_to_user_y(10).should eql(10.0)
|
451
446
|
|
@@ -455,18 +450,10 @@ context "The PDF::Wrapper class" do
|
|
455
450
|
end
|
456
451
|
end
|
457
452
|
|
458
|
-
specify "should allow Wrapper#render to be called multiple times" do
|
459
|
-
pdf = PDF::Wrapper.new
|
460
|
-
pdf.text "Hi!"
|
461
|
-
pdf.render.should be_a_kind_of(String)
|
462
|
-
pdf.render.should be_a_kind_of(String)
|
463
|
-
end
|
464
|
-
|
465
453
|
specify "should be aware of when the underlying PDFSurface has been finished" do
|
466
|
-
pdf
|
467
|
-
pdf.
|
468
|
-
pdf.
|
469
|
-
pdf.
|
470
|
-
pdf.finished?.should be_true
|
454
|
+
@pdf.text "Hi!"
|
455
|
+
@pdf.finished?.should be_false
|
456
|
+
@pdf.finish
|
457
|
+
@pdf.finished?.should be_true
|
471
458
|
end
|
472
459
|
end
|