pdf-wrapper 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/specs/text_spec.rb CHANGED
@@ -16,7 +16,7 @@ context "The PDF::Wrapper class" do
16
16
  end
17
17
 
18
18
  specify "should be able to add unicode text to the canvas" do
19
- msg = "メインページ"
19
+ msg = "Alex Čihař"
20
20
  pdf = PDF::Wrapper.new
21
21
  pdf.text msg
22
22
 
@@ -96,8 +96,14 @@ context "The PDF::Wrapper class" do
96
96
  (params[4] < pdf.absolute_right_margin).should be_true
97
97
  end
98
98
 
99
+ specify "should raise an error when an invalid alignment is specified" do
100
+ msg = "James Healy"
101
+ pdf = PDF::Wrapper.new
102
+ lambda { pdf.text msg, :alignment => :ponies }.should raise_error(ArgumentError)
103
+ end
104
+
99
105
  specify "should be able to add text to the canvas in a bounding box using the cell method" do
100
- msg = "メインページ"
106
+ msg = "Alex Čihař"
101
107
  pdf = PDF::Wrapper.new
102
108
  pdf.cell msg, 100, 100, 200, 200
103
109
 
@@ -174,4 +180,59 @@ context "The PDF::Wrapper class" do
174
180
 
175
181
  specify "should raise an error when a string that isn't convertable to UTF-8 is passed into build_pango_layout()"
176
182
  end
183
+
184
+ specify "should accept and render pango markup correctly" do
185
+ msg = "<b>James</b>"
186
+ pdf = PDF::Wrapper.new
187
+ pdf.text msg, :markup => :pango
188
+
189
+ receiver = PageTextReceiver.new
190
+ reader = PDF::Reader.string(pdf.render, receiver)
191
+
192
+ page_one = receiver.content.first.dup
193
+ page_one.should eql("James")
194
+ end
195
+
196
+ specify "should be able to alle to wrap text on word boundaries" do
197
+ msg = "James Healy"
198
+ pdf = PDF::Wrapper.new
199
+ pdf.text msg, :wrap => :word
200
+
201
+ receiver = PageTextReceiver.new
202
+ reader = PDF::Reader.string(pdf.render, receiver)
203
+
204
+ # TODO: test for the text is in the appropriate location on the page
205
+ receiver.content.first.should eql(msg)
206
+ end
207
+
208
+ specify "should be able to able to wrap text on char boundaries" do
209
+ msg = "James Healy"
210
+ pdf = PDF::Wrapper.new
211
+ pdf.text msg, :wrap => :char
212
+
213
+ receiver = PageTextReceiver.new
214
+ reader = PDF::Reader.string(pdf.render, receiver)
215
+
216
+ # TODO: test for the text is in the appropriate location on the page
217
+ receiver.content.first.should eql(msg)
218
+ end
219
+
220
+ specify "should be able to wrap text on word and char boundaries" do
221
+ msg = "James Healy"
222
+ pdf = PDF::Wrapper.new
223
+ pdf.text msg, :wrap => :wordchar
224
+
225
+ receiver = PageTextReceiver.new
226
+ reader = PDF::Reader.string(pdf.render, receiver)
227
+
228
+ # TODO: test for the text is in the appropriate location on the page
229
+ receiver.content.first.should eql(msg)
230
+ end
231
+
232
+ specify "should raise an error when an invalid wrapping technique is specified" do
233
+ msg = "James Healy"
234
+ pdf = PDF::Wrapper.new
235
+ lambda { pdf.text msg, :wrap => :ponies }.should raise_error(ArgumentError)
236
+ end
237
+
177
238
  end
@@ -41,36 +41,22 @@ context "The PDF::Wrapper class" do
41
41
 
42
42
  specify "should initilize with the correct default text and colour settings" do
43
43
  pdf = PDF::Wrapper.new
44
- pdf.instance_variable_get("@default_color").should eql([0.0,0.0,0.0,1.0])
45
44
  pdf.instance_variable_get("@default_font").should eql("Sans Serif")
46
45
  pdf.instance_variable_get("@default_font_size").should eql(16)
47
- pdf.instance_variable_get("@default_line_width").should eql(2.0)
48
- end
49
-
50
- specify "should be able to change the default color" do
51
- pdf = PDF::Wrapper.new
52
- pdf.default_color(:red)
53
- pdf.instance_variable_get("@default_color").should eql([1.0,0.0,0.0,1.0])
54
46
  end
55
47
 
56
48
  specify "should be able to change the default font" do
57
49
  pdf = PDF::Wrapper.new
58
- pdf.default_font("Arial")
50
+ pdf.font("Arial")
59
51
  pdf.instance_variable_get("@default_font").should eql("Arial")
60
52
  end
61
53
 
62
54
  specify "should be able to change the default font size" do
63
55
  pdf = PDF::Wrapper.new
64
- pdf.default_font_size(24)
56
+ pdf.font_size(24)
65
57
  pdf.instance_variable_get("@default_font_size").should eql(24)
66
58
  end
67
59
 
68
- specify "should be able to change the default line width" do
69
- pdf = PDF::Wrapper.new
70
- pdf.default_line_width(10)
71
- pdf.instance_variable_get("@default_line_width").should eql(10)
72
- end
73
-
74
60
  specify "should initialize with the cursor at the top left of the body of the page" do
75
61
  pdf = PDF::Wrapper.new
76
62
  x,y = pdf.current_point
@@ -92,8 +78,8 @@ context "The PDF::Wrapper class" do
92
78
  pdf.absolute_y_middle.should eql(PDF::Wrapper::PAGE_SIZES[:A4].last / 2)
93
79
  pdf.body_width.should eql(pdf.page_width - pdf.margin_left - pdf.margin_right)
94
80
  pdf.body_height.should eql(pdf.page_height - pdf.margin_top - pdf.margin_bottom)
95
- pdf.margin_x_middle.should eql(pdf.margin_left + (pdf.body_width/ 2))
96
- pdf.margin_y_middle.should eql(pdf.margin_top + (pdf.body_height/ 2))
81
+ pdf.body_x_middle.should eql(pdf.margin_left + (pdf.body_width/ 2))
82
+ pdf.body_y_middle.should eql(pdf.margin_top + (pdf.body_height/ 2))
97
83
  pdf.points_to_bottom_margin(300).should eql(pdf.absolute_bottom_margin - 300)
98
84
  pdf.points_to_right_margin(300).should eql(pdf.absolute_right_margin - 300)
99
85
  end
@@ -106,10 +92,14 @@ context "The PDF::Wrapper class" do
106
92
  y.to_i.should eql(100)
107
93
  end
108
94
 
109
- specify "should raise an exception if the user tries to move the cursor off the canvas" do
95
+ specify "should be able to move the cursor to any arbitary point on the canvas when scaled" do
110
96
  pdf = PDF::Wrapper.new
111
- lambda {pdf.move_to(PDF::Wrapper::PAGE_SIZES[:A4].first + 10,100)}.should raise_error(ArgumentError)
112
- lambda {pdf.move_to(100, PDF::Wrapper::PAGE_SIZES[:A4].last + 10)}.should raise_error(ArgumentError)
97
+ pdf.scale(pdf.page_width, pdf.page_height) do
98
+ pdf.move_to(0.5, 0.5)
99
+ x,y = pdf.current_point
100
+ sprintf("%0.1f",x).should eql("0.5")
101
+ sprintf("%0.1f",y).should eql("0.5")
102
+ end
113
103
  end
114
104
 
115
105
  specify "should be able to shift the y position of the cursor using pad" do
@@ -171,24 +161,6 @@ context "The PDF::Wrapper class" do
171
161
  tmp.unlink
172
162
  end
173
163
 
174
- specify "should be able to draw a table on the canvas"
175
-
176
- specify "should leave the cursor in the bottom left when adding a table" do
177
- pdf = PDF::Wrapper.new
178
- data = [%w{head1 head2},%w{data1 data2}]
179
- pdf.table(data, :left => pdf.margin_left)
180
- x,y = pdf.current_point
181
- x.to_i.should eql(pdf.margin_left)
182
- end
183
-
184
- specify "should default to using as much available space when adding a table that isn't left aligned with the left margin" do
185
- pdf = PDF::Wrapper.new
186
- data = [%w{head1 head2},%w{data1 data2}]
187
- pdf.table(data, :left => 100)
188
- x,y = pdf.current_point
189
- x.to_i.should eql(100)
190
- end
191
-
192
164
  specify "should be able to determine if a requested colour is valid or not" do
193
165
  pdf = PDF::Wrapper.new
194
166
  pdf.validate_color(:black).should be_true
@@ -203,15 +175,15 @@ context "The PDF::Wrapper class" do
203
175
  test_str = "repeating"
204
176
 
205
177
  pdf = PDF::Wrapper.new
206
- pdf.repeating_element(:all) { pdf.text test_str }
207
-
178
+ pdf.repeating_element(:all) { pdf.text test_str }
179
+
208
180
  pdf.start_new_page
209
181
  pdf.start_new_page
210
182
  pdf.start_new_page
211
-
183
+
212
184
  receiver = PageTextReceiver.new
213
185
  reader = PDF::Reader.string(pdf.render, receiver)
214
-
186
+
215
187
  receiver.content.size.should eql(4)
216
188
  receiver.content[0].should eql(test_str)
217
189
  receiver.content[1].should eql(test_str)
@@ -223,15 +195,15 @@ context "The PDF::Wrapper class" do
223
195
  test_str = "repeating"
224
196
 
225
197
  pdf = PDF::Wrapper.new
226
- pdf.repeating_element(:odd) { pdf.text test_str }
227
-
198
+ pdf.repeating_element(:odd) { pdf.text test_str }
199
+
228
200
  pdf.start_new_page
229
201
  pdf.start_new_page
230
202
  pdf.start_new_page
231
-
203
+
232
204
  receiver = PageTextReceiver.new
233
205
  reader = PDF::Reader.string(pdf.render, receiver)
234
-
206
+
235
207
  receiver.content.size.should eql(4)
236
208
  receiver.content[0].should eql(test_str)
237
209
  receiver.content[1].should eql("")
@@ -243,15 +215,15 @@ context "The PDF::Wrapper class" do
243
215
  test_str = "repeating"
244
216
 
245
217
  pdf = PDF::Wrapper.new
246
- pdf.repeating_element(:even) { pdf.text test_str }
247
-
218
+ pdf.repeating_element(:even) { pdf.text test_str }
219
+
248
220
  pdf.start_new_page
249
221
  pdf.start_new_page
250
222
  pdf.start_new_page
251
-
223
+
252
224
  receiver = PageTextReceiver.new
253
225
  reader = PDF::Reader.string(pdf.render, receiver)
254
-
226
+
255
227
  receiver.content.size.should eql(4)
256
228
  receiver.content[0].should eql("")
257
229
  receiver.content[1].should eql(test_str)
@@ -263,15 +235,15 @@ context "The PDF::Wrapper class" do
263
235
  test_str = "repeating"
264
236
 
265
237
  pdf = PDF::Wrapper.new
266
- pdf.repeating_element((2..3)) { pdf.text test_str }
267
-
238
+ pdf.repeating_element((2..3)) { pdf.text test_str }
239
+
268
240
  pdf.start_new_page
269
241
  pdf.start_new_page
270
242
  pdf.start_new_page
271
-
243
+
272
244
  receiver = PageTextReceiver.new
273
245
  reader = PDF::Reader.string(pdf.render, receiver)
274
-
246
+
275
247
  receiver.content.size.should eql(4)
276
248
  receiver.content[0].should eql("")
277
249
  receiver.content[1].should eql(test_str)
@@ -283,15 +255,15 @@ context "The PDF::Wrapper class" do
283
255
  test_str = "repeating"
284
256
 
285
257
  pdf = PDF::Wrapper.new
286
- pdf.repeating_element(2) { pdf.text test_str }
287
-
258
+ pdf.repeating_element(2) { pdf.text test_str }
259
+
288
260
  pdf.start_new_page
289
261
  pdf.start_new_page
290
262
  pdf.start_new_page
291
-
263
+
292
264
  receiver = PageTextReceiver.new
293
265
  reader = PDF::Reader.string(pdf.render, receiver)
294
-
266
+
295
267
  receiver.content.size.should eql(4)
296
268
  receiver.content[0].should eql("")
297
269
  receiver.content[1].should eql(test_str)
@@ -303,15 +275,15 @@ context "The PDF::Wrapper class" do
303
275
  test_str = "repeating"
304
276
 
305
277
  pdf = PDF::Wrapper.new
306
- pdf.repeating_element([1,3,4]) { pdf.text test_str }
307
-
278
+ pdf.repeating_element([1,3,4]) { pdf.text test_str }
279
+
308
280
  pdf.start_new_page
309
281
  pdf.start_new_page
310
282
  pdf.start_new_page
311
-
283
+
312
284
  receiver = PageTextReceiver.new
313
285
  reader = PDF::Reader.string(pdf.render, receiver)
314
-
286
+
315
287
  receiver.content.size.should eql(4)
316
288
  receiver.content[0].should eql(test_str)
317
289
  receiver.content[1].should eql("")
@@ -386,12 +358,6 @@ context "The PDF::Wrapper class" do
386
358
  x, y = pdf.current_point
387
359
  x.should eql(origx)
388
360
  y.should eql(origy)
389
-
390
- # rounded_rectangle()
391
- pdf.rounded_rectangle(200, 400, 100, 100, 10)
392
- x, y = pdf.current_point
393
- x.should eql(origx)
394
- y.should eql(origy)
395
361
  end
396
362
 
397
363
  specify "should maintain an internal counter of pages" do
@@ -415,14 +381,13 @@ context "The PDF::Wrapper class" do
415
381
  lambda { pdf.line(100,100,200,200, :ponies => true)}.should raise_error(ArgumentError)
416
382
  lambda { pdf.rectangle(100,100,100,100, :ponies => true)}.should raise_error(ArgumentError)
417
383
  lambda { pdf.start_new_page(:ponies => true)}.should raise_error(ArgumentError)
418
- lambda { pdf.rounded_rectangle(100,100,100,100,10, :ponies => true)}.should raise_error(ArgumentError)
419
384
  lambda { pdf.image(File.dirname(__FILE__) + "/data/orc.svg", :ponies => true)}.should raise_error(ArgumentError)
420
385
  end
421
386
 
422
387
  specify "should allow an existing file to be used as a template for page 1" do
423
388
  pdf = PDF::Wrapper.new(:paper => :A4, :template => File.dirname(__FILE__) + "/data/orc.svg")
424
389
  pdf.start_new_page
425
-
390
+
426
391
  receiver = PageSizeReceiver.new
427
392
  reader = PDF::Reader.string(pdf.render, receiver)
428
393
 
@@ -433,11 +398,119 @@ context "The PDF::Wrapper class" do
433
398
  specify "should allow an existing file to be used as a template for page 2" do
434
399
  pdf = PDF::Wrapper.new(:paper => :A4)
435
400
  pdf.start_new_page(:template => File.dirname(__FILE__) + "/data/orc.svg")
436
-
401
+
437
402
  receiver = PageSizeReceiver.new
438
403
  reader = PDF::Reader.string(pdf.render, receiver)
439
404
 
440
405
  receiver.pages[0].should eql([0.0, 0.0, 595.28, 841.89])
441
406
  receiver.pages[1].should eql([0.0, 0.0, 734.0, 772.0])
442
407
  end
408
+
409
+ specify "should return correct page dimensions when scaled" do
410
+ pdf = PDF::Wrapper.new(:paper => :A4)
411
+
412
+ pdf.scale(595.28, 841.89) do
413
+ pdf.page_width.should eql(1.0)
414
+ pdf.page_height.should eql(1.0)
415
+ pdf.absolute_x_middle.should eql(0.5)
416
+ pdf.absolute_y_middle.should eql(0.5)
417
+ end
418
+ end
419
+
420
+ specify "should return correct body dimensions when scaled" do
421
+ pdf = PDF::Wrapper.new(:paper => :A4, :margin_top => 10, :margin_right => 10, :margin_bottom => 10, :margin_left => 10)
422
+
423
+ # scale so the dimensions of the body are 1,1
424
+ pdf.scale(595.28 - 20, 841.89 - 20) do
425
+ pdf.body_width.should eql(1.0)
426
+ pdf.body_height.should eql(1.0)
427
+ pdf.body_x_middle.should eql(0.5)
428
+ pdf.body_y_middle.should eql(0.5)
429
+ end
430
+ end
431
+
432
+ specify "should correctly convert a user x co-ordinate to device" do
433
+ pdf = PDF::Wrapper.new(:paper => :A4, :margin_left => 40)
434
+
435
+ pdf.user_x_to_device_x(10).should eql(10.0)
436
+
437
+ # translate so that 0,0 is at the page body corner
438
+ pdf.translate(pdf.margin_left, pdf.margin_top) do
439
+ # a user x co-ord of 10 is now equal to a device co-ord of 50
440
+ pdf.user_x_to_device_x(10).should eql(50.0)
441
+ end
442
+
443
+ # scale so the dimensions of the page are 1,1
444
+ pdf.scale(pdf.page_width, pdf.page_height) do
445
+ pdf.user_x_to_device_x(0.5).should eql(595.28/2)
446
+ end
447
+ end
448
+
449
+ specify "should correctly convert a user y co-ordinate to device" do
450
+ pdf = PDF::Wrapper.new(:paper => :A4, :margin_top => 40)
451
+
452
+ pdf.user_y_to_device_y(10).should eql(10.0)
453
+
454
+ # translate so that 0,0 is at the page body corner
455
+ pdf.translate(pdf.margin_left, pdf.margin_top) do
456
+ # a user y co-ord of 10 is now equal to a device co-ord of 50
457
+ pdf.user_y_to_device_y(10).should eql(50.0)
458
+ end
459
+
460
+ # scale so the dimensions of the page are 1,1
461
+ pdf.scale(pdf.page_width, pdf.page_height) do
462
+ pdf.user_y_to_device_y(0.5).should eql(841.89/2)
463
+ end
464
+ end
465
+
466
+ specify "should correctly convert a device x co-ordinate to user" do
467
+ pdf = PDF::Wrapper.new(:paper => :A4, :margin_left => 40)
468
+
469
+ pdf.device_x_to_user_x(10).should eql(10.0)
470
+
471
+ # translate so that 0,0 is at the page body corner
472
+ pdf.translate(pdf.margin_left, pdf.margin_top) do
473
+ pdf.device_x_to_user_x(50).should eql(10.0)
474
+ end
475
+
476
+ # scale so the dimensions of the page are 1,1
477
+ pdf.scale(pdf.page_width, pdf.page_height) do
478
+ pdf.device_x_to_user_x(595.28/2).should eql(0.5)
479
+ end
480
+ end
481
+
482
+ specify "should correctly convert a device y co-ordinate to user" do
483
+ pdf = PDF::Wrapper.new(:paper => :A4, :margin_top => 40)
484
+
485
+ pdf.device_y_to_user_y(10).should eql(10.0)
486
+
487
+ # translate so that 0,0 is at the page body corner
488
+ pdf.translate(pdf.margin_left, pdf.margin_top) do
489
+ pdf.device_y_to_user_y(50).should eql(10.0)
490
+ end
491
+
492
+ # scale so the dimensions of the page are 1,1
493
+ pdf.scale(pdf.page_width, pdf.page_height) do
494
+ pdf.device_y_to_user_y(841.89/2).should eql(0.5)
495
+ end
496
+ end
497
+
498
+ specify "should correctly convert a user distance to distance" do
499
+ pdf = PDF::Wrapper.new(:paper => :A4, :margin_top => 40)
500
+
501
+ pdf.user_to_device_dist(10,0).should eql([10.0,0.0])
502
+ pdf.user_to_device_dist(0,10).should eql([0.0,10.0])
503
+
504
+ # translate so that 0,0 is at the page body corner
505
+ pdf.translate(pdf.margin_left, pdf.margin_top) do
506
+ pdf.user_to_device_dist(10,0).should eql([10.0,0.0])
507
+ pdf.user_to_device_dist(0,10).should eql([0.0,10.0])
508
+ end
509
+
510
+ # scale so the dimensions of the page are 1,1
511
+ pdf.scale(pdf.page_width, pdf.page_height) do
512
+ pdf.user_to_device_dist(0.5,0).should eql([595.28/2,0.0])
513
+ pdf.user_to_device_dist(0,0.5).should eql([0.0,841.89/2])
514
+ end
515
+ end
443
516
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pdf-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Healy
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-30 00:00:00 +10:00
12
+ date: 2008-05-28 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -26,16 +26,25 @@ extra_rdoc_files:
26
26
  files:
27
27
  - examples/cell.rb
28
28
  - examples/image.rb
29
+ - examples/markup.rb
29
30
  - examples/repeating.rb
31
+ - examples/scaled.rb
32
+ - examples/scaled_cells.rb
33
+ - examples/scaled_image.rb
30
34
  - examples/shapes.rb
31
35
  - examples/table.rb
36
+ - examples/translate.rb
32
37
  - examples/utf8-long.rb
33
38
  - examples/utf8.rb
34
- - examples/template.rb
35
- - examples/padded_image.rb
36
39
  - lib/pdf
37
40
  - lib/pdf/core.rb
38
41
  - lib/pdf/wrapper.rb
42
+ - lib/pdf/wrapper
43
+ - lib/pdf/wrapper/graphics.rb
44
+ - lib/pdf/wrapper/images.rb
45
+ - lib/pdf/wrapper/loading.rb
46
+ - lib/pdf/wrapper/table.rb
47
+ - lib/pdf/wrapper/text.rb
39
48
  - specs/data
40
49
  - specs/data/google.png
41
50
  - specs/data/iso-2022-jp.txt
@@ -46,13 +55,15 @@ files:
46
55
  - specs/data/utf8-long.pdf
47
56
  - specs/data/utf8-long.txt
48
57
  - specs/data/utf8.txt
58
+ - specs/data/windmill.jpg
49
59
  - specs/data/zits.gif
50
- - specs/wrapper_spec.rb
60
+ - specs/graphics_spec.rb
61
+ - specs/image_spec.rb
51
62
  - specs/load_spec.rb
52
- - specs/shapes_spec.rb
53
- - specs/text_spec.rb
54
63
  - specs/spec_helper.rb
55
- - specs/image_spec.rb
64
+ - specs/tables_spec.rb
65
+ - specs/text_spec.rb
66
+ - specs/wrapper_spec.rb
56
67
  - Rakefile
57
68
  - README
58
69
  - CHANGELOG
@@ -83,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
94
  requirements: []
84
95
 
85
96
  rubyforge_project: pdf-wrapper
86
- rubygems_version: 1.0.1
97
+ rubygems_version: 1.1.1
87
98
  signing_key:
88
99
  specification_version: 2
89
100
  summary: A PDF generating library built on top of cairo