pdf-wrapper 0.0.7 → 0.1.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/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