pdf-wrapper 0.0.3 → 0.0.4

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.
Files changed (5) hide show
  1. data/CHANGELOG +12 -4
  2. data/Rakefile +1 -1
  3. data/lib/pdf/wrapper.rb +33 -15
  4. data/specs/wrapper_spec.rb +258 -20
  5. metadata +3 -3
data/CHANGELOG CHANGED
@@ -1,9 +1,17 @@
1
- v0.0.3 (xxx)
1
+ v0.0.4 (12th March 2008)
2
+ - added support for custom line widths on primitive drawing shapes (circles,
3
+ lines, etc). Thanks Paweł Kondzior
4
+ - fixed a bug where the first line of text in a multi-line cell appeared at the
5
+ current cursor location instead of inside the cell. Thanks Paweł Kondzior
6
+ - bumped dependency on PDF::Reader for running specs to 0.6.1
7
+
8
+ v0.0.3 (17th January 2008)
2
9
  - added support for repeating elements (like page numbers) via repeating_element
3
10
  - Ensured consistent behaviour WRT functions moving the internal cursor
4
- - functions that require positioning info (cell, shapes, etc) will not move the cursor at all
5
- - functions where positioning info in optional (text, image, etc), the cursor will be moved to the bottom left
6
- corner of the object
11
+ - functions that require positioning info (cell, shapes, etc) will not move
12
+ the cursor at all
13
+ - functions where positioning info in optional (text, image, etc), the cursor
14
+ will be moved to the bottom left corner of the object
7
15
  - Ensure no unrecognised options are provided to various functions
8
16
  - Add support for padding between a cell border and its text
9
17
  - added support for scaling images proportionally
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'rake/testtask'
6
6
  require "rake/gempackagetask"
7
7
  require 'spec/rake/spectask'
8
8
 
9
- PKG_VERSION = "0.0.3"
9
+ PKG_VERSION = "0.0.4"
10
10
  PKG_NAME = "pdf-wrapper"
11
11
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12
12
 
data/lib/pdf/wrapper.rb CHANGED
@@ -123,6 +123,7 @@ module PDF
123
123
 
124
124
  # set a default drawing colour and font style
125
125
  default_color(:black)
126
+ default_line_width(2.0)
126
127
  default_font("Sans Serif")
127
128
  default_font_size(16)
128
129
 
@@ -246,6 +247,15 @@ module PDF
246
247
  alias default_color= default_color
247
248
  alias stroke_color default_color # PDF::Writer compatibility
248
249
 
250
+ # change the default line width used to draw stroke on the canvas
251
+ #
252
+ # Parameters:
253
+ # <tt>f</tt>:: float value of stroke width from 0.01 to 255
254
+ def default_line_width(f)
255
+ @default_line_width = f
256
+ end
257
+ alias default_line_width= default_line_width
258
+
249
259
  # add text to the page, bounded by a box with dimensions HxW, with it's top left corner
250
260
  # at x,y. Any text that doesn't fit it the box will be silently dropped.
251
261
  #
@@ -256,7 +266,7 @@ module PDF
256
266
  # <tt>:border_width</tt>:: How wide should the border be?
257
267
  # <tt>:border_color</tt>:: What color should the border be?
258
268
  # <tt>:bgcolor</tt>:: A background color for the cell. Defaults to none.
259
- # <tt>:padding</tt>:: The number of points to leave between the inside of the border and text. Defaults to 3.
269
+ # <tt>:padding</tt>:: The number of points to leave between the inside of the border and text. Defaults to 3.
260
270
  def cell(str, x, y, w, h, opts={})
261
271
  # TODO: add support for pango markup (see http://ruby-gnome2.sourceforge.jp/hiki.cgi?pango-markup)
262
272
  # TODO: add a wrap option so wrapping can be disabled
@@ -302,9 +312,10 @@ module PDF
302
312
  end
303
313
 
304
314
  # draws a basic table onto the page
305
- # data - a 2d array with the data for the columns. The first row will be treated as the headings
306
315
  #
307
- # In addition to the standard text style options (see the documentation for text()), cell() supports
316
+ # <tt>data</tt>:: a 2d array with the data for the columns. The first row will be treated as the headings
317
+ #
318
+ # In addition to the standard text style options (see the documentation for text), table supports
308
319
  # the following options:
309
320
  #
310
321
  # <tt>:left</tt>:: The x co-ordinate of the left-hand side of the table. Defaults to the left margin
@@ -422,13 +433,15 @@ module PDF
422
433
  #
423
434
  # Options:
424
435
  # <tt>:color</tt>:: The colour of the circle outline
436
+ # <tt>:line_width</tt>:: The width of outline. Defaults to 2.0
425
437
  # <tt>:fill_color</tt>:: The colour to fill the circle with. Defaults to nil (no fill)
426
438
  def circle(x, y, r, opts = {})
427
439
  options = {:color => @default_color,
440
+ :line_width => @default_line_width,
428
441
  :fill_color => nil
429
442
  }
430
443
  options.merge!(opts)
431
- options.assert_valid_keys(:color, :fill_color)
444
+ options.assert_valid_keys(:color, :line_width, :fill_color)
432
445
 
433
446
  # save the cursor position so we can restore it at the end
434
447
  origx, origy = current_point
@@ -442,6 +455,7 @@ module PDF
442
455
  end
443
456
 
444
457
  set_color(options[:color])
458
+ @context.set_line_width(options[:line_width])
445
459
  @context.circle(x, y, r).stroke
446
460
 
447
461
  # restore the cursor position
@@ -452,16 +466,17 @@ module PDF
452
466
  #
453
467
  # Options:
454
468
  # <tt>:color</tt>:: The colour of the line
469
+ # <tt>:line_width</tt>:: The width of line. Defaults its 2.0
455
470
  def line(x0, y0, x1, y1, opts = {})
456
- options = {:color => @default_color }
471
+ options = {:color => @default_color, :line_width => @default_line_width }
457
472
  options.merge!(opts)
458
- options.assert_valid_keys(:color)
473
+ options.assert_valid_keys(:color, :line_width)
459
474
 
460
475
  # save the cursor position so we can restore it at the end
461
476
  origx, origy = current_point
462
477
 
463
478
  set_color(options[:color])
464
-
479
+ @context.set_line_width(options[:line_width])
465
480
  move_to(x0,y0)
466
481
  @context.line_to(x1,y1).stroke
467
482
 
@@ -478,13 +493,15 @@ module PDF
478
493
  #
479
494
  # Options:
480
495
  # <tt>:color</tt>:: The colour of the rectangle outline
496
+ # <tt>:line_width</tt>:: The width of outline. Defaults to 2.0
481
497
  # <tt>:fill_color</tt>:: The colour to fill the rectangle with. Defaults to nil (no fill)
482
498
  def rectangle(x, y, w, h, opts = {})
483
499
  options = {:color => @default_color,
500
+ :line_width => @default_line_width,
484
501
  :fill_color => nil
485
502
  }
486
503
  options.merge!(opts)
487
- options.assert_valid_keys(:color, :fill_color)
504
+ options.assert_valid_keys(:color, :line_width, :fill_color)
488
505
 
489
506
  # save the cursor position so we can restore it at the end
490
507
  origx, origy = current_point
@@ -496,6 +513,7 @@ module PDF
496
513
  end
497
514
 
498
515
  set_color(options[:color])
516
+ @context.set_line_width(options[:line_width])
499
517
  @context.rectangle(x, y, w, h).stroke
500
518
 
501
519
  # restore the cursor position
@@ -512,13 +530,15 @@ module PDF
512
530
  #
513
531
  # Options:
514
532
  # <tt>:color</tt>:: The colour of the rectangle outline
533
+ # <tt>:line_width</tt>:: The width of outline. Defaults to 2.0
515
534
  # <tt>:fill_color</tt>:: The colour to fill the rectangle with. Defaults to nil (no fill)
516
535
  def rounded_rectangle(x, y, w, h, r, opts = {})
517
536
  options = {:color => @default_color,
537
+ :line_width => @default_line_width,
518
538
  :fill_color => nil
519
539
  }
520
540
  options.merge!(opts)
521
- options.assert_valid_keys(:color, :fill_color)
541
+ options.assert_valid_keys(:color, :fill_color, :line_width)
522
542
 
523
543
  raise ArgumentError, "Argument r must be less than both w and h arguments" if r >= w || r >= h
524
544
 
@@ -532,6 +552,7 @@ module PDF
532
552
  end
533
553
 
534
554
  set_color(options[:color])
555
+ @context.set_line_width(options[:line_width])
535
556
  @context.rounded_rectangle(x, y, w, h, r).stroke
536
557
 
537
558
  # restore the cursor position
@@ -958,7 +979,7 @@ module PDF
958
979
  # distributed with rcairo - it's still black magic to me and has a few edge
959
980
  # cases where it doesn't work too well. Needs to be improved.
960
981
  def render_layout(layout, x, y, h, opts = {})
961
- # we can't use content.show_pango_layout, as that won't start
982
+ # we can't use context.show_pango_layout, as that won't start
962
983
  # a new page if the layout hits the bottom margin. Instead,
963
984
  # we iterate over each line of text in the layout and add it to
964
985
  # the canvas, page breaking as necessary
@@ -972,14 +993,9 @@ module PDF
972
993
 
973
994
  # for each line in the layout
974
995
  layout.lines.each do |line|
975
-
976
- # draw the line on the canvas
977
- @context.show_pango_layout_line(line)
978
-
979
996
  #calculate where the next line starts
980
997
  ink_rect, logical_rect = line.extents
981
998
  y = y + (logical_rect.height / Pango::SCALE * (3.0/4.0)) + 1
982
-
983
999
  if y >= (orig_y + h)
984
1000
  # our text is using the maximum amount of vertical space we want it to
985
1001
  if options[:auto_new_page]
@@ -996,6 +1012,8 @@ module PDF
996
1012
 
997
1013
  # move to the start of the next line
998
1014
  move_to(x, y)
1015
+ # draw the line on the canvas
1016
+ @context.show_pango_layout_line(line)
999
1017
  end
1000
1018
 
1001
1019
  # return the y co-ord we finished on
@@ -5,6 +5,9 @@ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
5
5
  require 'pdf/wrapper'
6
6
  require 'tempfile'
7
7
  require 'rubygems'
8
+
9
+ gem "pdf-reader", ">=0.6.1"
10
+
8
11
  require 'pdf/reader'
9
12
 
10
13
  # make some private methods of PDF::Wrapper public for testing
@@ -140,6 +143,31 @@ context "The PDF::Wrapper class" do
140
143
  pdf.instance_variable_get("@default_color").should eql([0.0,0.0,0.0,1.0])
141
144
  pdf.instance_variable_get("@default_font").should eql("Sans Serif")
142
145
  pdf.instance_variable_get("@default_font_size").should eql(16)
146
+ pdf.instance_variable_get("@default_line_width").should eql(2.0)
147
+ end
148
+
149
+ specify "should be able to change the default color" do
150
+ pdf = PDF::Wrapper.new
151
+ pdf.default_color(:red)
152
+ pdf.instance_variable_get("@default_color").should eql([1.0,0.0,0.0,1.0])
153
+ end
154
+
155
+ specify "should be able to change the default font" do
156
+ pdf = PDF::Wrapper.new
157
+ pdf.default_font("Arial")
158
+ pdf.instance_variable_get("@default_font").should eql("Arial")
159
+ end
160
+
161
+ specify "should be able to change the default font size" do
162
+ pdf = PDF::Wrapper.new
163
+ pdf.default_font_size(24)
164
+ pdf.instance_variable_get("@default_font_size").should eql(24)
165
+ end
166
+
167
+ specify "should be able to change the default line width" do
168
+ pdf = PDF::Wrapper.new
169
+ pdf.default_line_width(10)
170
+ pdf.instance_variable_get("@default_line_width").should eql(10)
143
171
  end
144
172
 
145
173
  specify "should initialize with the cursor at the top left of the body of the page" do
@@ -213,6 +241,25 @@ context "The PDF::Wrapper class" do
213
241
  receiver.first_occurance_of(:append_line)[:args].should eql([x1.to_f, y1.to_f])
214
242
  end
215
243
 
244
+ specify "should be able to draw a single line onto the canvas with a width of 5" do
245
+ x0 = y0 = 100
246
+ x1 = y1 = 200
247
+ width = 5
248
+ pdf = PDF::Wrapper.new
249
+ pdf.line(x0,y0,x1,y1, :line_width => width)
250
+
251
+ receiver = PDF::Reader::RegisterReceiver.new
252
+ reader = PDF::Reader.string(pdf.render, receiver)
253
+
254
+ # the begin_new_subpath command specifies the start of the line, append line specifies the end
255
+ receiver.count(:set_line_width).should eql(1)
256
+ receiver.count(:begin_new_subpath).should eql(1)
257
+ receiver.count(:append_line).should eql(1)
258
+ receiver.first_occurance_of(:set_line_width)[:args].should eql([width.to_f])
259
+ receiver.first_occurance_of(:begin_new_subpath)[:args].should eql([x0.to_f, y0.to_f])
260
+ receiver.first_occurance_of(:append_line)[:args].should eql([x1.to_f, y1.to_f])
261
+ end
262
+
216
263
  specify "should be able to draw an empty rectangle onto the canvas" do
217
264
  x = y = 100
218
265
  w = h = 200
@@ -230,6 +277,28 @@ context "The PDF::Wrapper class" do
230
277
  callbacks.shift[:args].should eql([x.to_f, (y+h).to_f])
231
278
  end
232
279
 
280
+ specify "should be able to draw an empty rectangle onto the canvas with a line width of 5" do
281
+ x = y = 100
282
+ w = h = 200
283
+ width = 5
284
+ pdf = PDF::Wrapper.new
285
+ pdf.rectangle(x,y,w,h, :line_width => width)
286
+
287
+ receiver = PDF::Reader::RegisterReceiver.new
288
+ reader = PDF::Reader.string(pdf.render, receiver)
289
+
290
+ # ensure the line width was set correctly
291
+ receiver.count(:set_line_width).should eql(1)
292
+ receiver.first_occurance_of(:set_line_width)[:args].should eql([width.to_f])
293
+
294
+ # the begin_new_subpath command specifies the start of the line, append line specifies the end
295
+ callbacks = receiver.series(:begin_new_subpath, :append_line,:append_line,:append_line, :close_subpath)
296
+ callbacks.shift[:args].should eql([x.to_f, y.to_f])
297
+ callbacks.shift[:args].should eql([(x+w).to_f, y.to_f])
298
+ callbacks.shift[:args].should eql([(x+w).to_f, (y+h).to_f])
299
+ callbacks.shift[:args].should eql([x.to_f, (y+h).to_f])
300
+ end
301
+
233
302
  specify "should leave the cursor in the bottom left of a layout when new text is added" do
234
303
  pdf = PDF::Wrapper.new
235
304
  x, y = pdf.current_point
@@ -275,6 +344,23 @@ context "The PDF::Wrapper class" do
275
344
  end
276
345
  =end
277
346
 
347
+ specify "should be able to draw an empty rounded rectangle onto the canvas with a line width of 5"
348
+ =begin
349
+ do
350
+ x = y = 100
351
+ w = h = 200
352
+ r = 5
353
+ w = 5
354
+ pdf = PDF::Wrapper.new
355
+ pdf.rounded_rectangle(x,y,w,h,r, :line_width => w)
356
+
357
+ receiver = PDF::Reader::RegisterReceiver.new
358
+ reader = PDF::Reader.string(pdf.render, receiver)
359
+
360
+ # TODO: test for the appropriate pattern of callbacks
361
+ end
362
+ =end
363
+
278
364
  specify "should be able to draw a filled rounded rectangle onto the canvas"
279
365
  =begin
280
366
  do
@@ -307,14 +393,15 @@ context "The PDF::Wrapper class" do
307
393
  end
308
394
  =end
309
395
 
310
- specify "should be able to draw a filled circle onto the canvas"
396
+ specify "should be able to draw an empty circle onto the canvas with a line width of 5"
311
397
  =begin
312
398
  do
313
399
  x = 100
314
400
  y = 200
315
401
  r = 5
402
+ w = 5
316
403
  pdf = PDF::Wrapper.new
317
- pdf.circle(x,y,r, :fill_color => :red)
404
+ pdf.circle(x,y,r, :line_width => w)
318
405
 
319
406
  receiver = PDF::Reader::RegisterReceiver.new
320
407
  reader = PDF::Reader.string(pdf.render, receiver)
@@ -323,9 +410,23 @@ context "The PDF::Wrapper class" do
323
410
  end
324
411
  =end
325
412
 
326
- specify "should be able to add ascii text to the canvas"
413
+ specify "should be able to draw a filled circle onto the canvas"
327
414
  =begin
328
415
  do
416
+ x = 100
417
+ y = 200
418
+ r = 5
419
+ pdf = PDF::Wrapper.new
420
+ pdf.circle(x,y,r, :fill_color => :red)
421
+
422
+ receiver = PDF::Reader::RegisterReceiver.new
423
+ reader = PDF::Reader.string(pdf.render, receiver)
424
+
425
+ # TODO: test for the appropriate pattern of callbacks
426
+ end
427
+ =end
428
+
429
+ specify "should be able to add ascii text to the canvas" do
329
430
  msg = "Chunky Bacon"
330
431
  pdf = PDF::Wrapper.new
331
432
  pdf.text msg
@@ -333,14 +434,11 @@ context "The PDF::Wrapper class" do
333
434
  receiver = PageTextReceiver.new
334
435
  reader = PDF::Reader.string(pdf.render, receiver)
335
436
 
336
- # TODO: test for the appropriate text on the page. Need to fix unicode spport in pdf-reader first
337
- #puts receiver.content.inspect
437
+ # TODO: test for the text is in the appropriate location on the page
438
+ receiver.content.first.should eql(msg)
338
439
  end
339
- =end
340
440
 
341
- specify "should be able to add unicode text to the canvas"
342
- =begin
343
- do
441
+ specify "should be able to add unicode text to the canvas" do
344
442
  msg = "メインページ"
345
443
  pdf = PDF::Wrapper.new
346
444
  pdf.text msg
@@ -348,25 +446,47 @@ context "The PDF::Wrapper class" do
348
446
  receiver = PageTextReceiver.new
349
447
  reader = PDF::Reader.string(pdf.render, receiver)
350
448
 
351
- # TODO: test for the appropriate text on the page. Need to fix unicode spport in pdf-reader first
352
- #puts receiver.content.inspect
449
+ # TODO: test for the text is in the appropriate location on the page
450
+ receiver.content.first.should eql(msg)
353
451
  end
354
- =end
355
452
 
356
- specify "should be able to add text to the canvas in a bounding box using the cell method"
357
- =begin
358
- do
453
+ specify "should be able to add text to the canvas in a bounding box using the cell method" do
359
454
  msg = "メインページ"
360
455
  pdf = PDF::Wrapper.new
361
- pdf.text msg
456
+ pdf.cell msg, 100, 100, 200, 200
362
457
 
363
458
  receiver = PageTextReceiver.new
364
459
  reader = PDF::Reader.string(pdf.render, receiver)
365
460
 
366
- # TODO: test for the appropriate text on the page. Need to fix unicode spport in pdf-reader first
367
- #puts receiver.content.inspect
461
+ # TODO: test for the text is in the appropriate location on the page
462
+ receiver.content.first.should eql(msg)
463
+ end
464
+
465
+ specify "should keep all text for a cell inside the cell boundaries" do
466
+ msg = "This is a text cell, added by James"
467
+ pdf = PDF::Wrapper.new
468
+ x = y = 100
469
+ w = h = 200
470
+ pdf.cell msg, x, y, w, h
471
+
472
+ receiver = PDF::Reader::RegisterReceiver.new
473
+ reader = PDF::Reader.string(pdf.render, receiver)
474
+
475
+ receiver.all(:set_text_matrix_and_text_line_matrix).each do |cb|
476
+ # horizontal location
477
+ # TODO: we're only testing the it doesn't start past the right boundary of the cell
478
+ # should also test that it doesn't start in the cell but overrun it
479
+ (cb[:args][4] >= x).should be_true
480
+ (cb[:args][4] <= x + w).should be_true
481
+
482
+ # vertical location
483
+ # TODO: we're only testing the it doesn't start past the bottom boundary of the cell
484
+ # should also test that it doesn't start in the cell but overrun it
485
+ cell_top_bound = pdf.page_height - y
486
+ (cb[:args][5] <= cell_top_bound).should be_true
487
+ (cb[:args][5] >= cell_top_bound - h).should be_true
488
+ end
368
489
  end
369
- =end
370
490
 
371
491
  specify "should be able to render to a file" do
372
492
  # generate a PDF
@@ -456,7 +576,125 @@ context "The PDF::Wrapper class" do
456
576
  lambda { pdf.validate_color([1000, 255, 0])}.should raise_error(ArgumentError)
457
577
  end
458
578
 
459
- specify "should be able to add repeating elements to various pages (:all, :odd, :even, :range, int)"
579
+ specify "should be able to add repeating elements to :all pages" do
580
+ test_str = "repeating"
581
+
582
+ pdf = PDF::Wrapper.new
583
+ pdf.repeating_element(:all) { pdf.text test_str }
584
+
585
+ pdf.start_new_page
586
+ pdf.start_new_page
587
+ pdf.start_new_page
588
+
589
+ receiver = PageTextReceiver.new
590
+ reader = PDF::Reader.string(pdf.render, receiver)
591
+
592
+ receiver.content.size.should eql(4)
593
+ receiver.content[0].should eql(test_str)
594
+ receiver.content[1].should eql(test_str)
595
+ receiver.content[2].should eql(test_str)
596
+ receiver.content[3].should eql(test_str)
597
+ end
598
+
599
+ specify "should be able to add repeating elements to :odd pages" do
600
+ test_str = "repeating"
601
+
602
+ pdf = PDF::Wrapper.new
603
+ pdf.repeating_element(:odd) { pdf.text test_str }
604
+
605
+ pdf.start_new_page
606
+ pdf.start_new_page
607
+ pdf.start_new_page
608
+
609
+ receiver = PageTextReceiver.new
610
+ reader = PDF::Reader.string(pdf.render, receiver)
611
+
612
+ receiver.content.size.should eql(4)
613
+ receiver.content[0].should eql(test_str)
614
+ receiver.content[1].should eql("")
615
+ receiver.content[2].should eql(test_str)
616
+ receiver.content[3].should eql("")
617
+ end
618
+
619
+ specify "should be able to add repeating elements to :even pages" do
620
+ test_str = "repeating"
621
+
622
+ pdf = PDF::Wrapper.new
623
+ pdf.repeating_element(:even) { pdf.text test_str }
624
+
625
+ pdf.start_new_page
626
+ pdf.start_new_page
627
+ pdf.start_new_page
628
+
629
+ receiver = PageTextReceiver.new
630
+ reader = PDF::Reader.string(pdf.render, receiver)
631
+
632
+ receiver.content.size.should eql(4)
633
+ receiver.content[0].should eql("")
634
+ receiver.content[1].should eql(test_str)
635
+ receiver.content[2].should eql("")
636
+ receiver.content[3].should eql(test_str)
637
+ end
638
+
639
+ specify "should be able to add repeating elements to a range of pages" do
640
+ test_str = "repeating"
641
+
642
+ pdf = PDF::Wrapper.new
643
+ pdf.repeating_element((2..3)) { pdf.text test_str }
644
+
645
+ pdf.start_new_page
646
+ pdf.start_new_page
647
+ pdf.start_new_page
648
+
649
+ receiver = PageTextReceiver.new
650
+ reader = PDF::Reader.string(pdf.render, receiver)
651
+
652
+ receiver.content.size.should eql(4)
653
+ receiver.content[0].should eql("")
654
+ receiver.content[1].should eql(test_str)
655
+ receiver.content[2].should eql(test_str)
656
+ receiver.content[3].should eql("")
657
+ end
658
+
659
+ specify "should be able to add repeating elements to a single page" do
660
+ test_str = "repeating"
661
+
662
+ pdf = PDF::Wrapper.new
663
+ pdf.repeating_element(2) { pdf.text test_str }
664
+
665
+ pdf.start_new_page
666
+ pdf.start_new_page
667
+ pdf.start_new_page
668
+
669
+ receiver = PageTextReceiver.new
670
+ reader = PDF::Reader.string(pdf.render, receiver)
671
+
672
+ receiver.content.size.should eql(4)
673
+ receiver.content[0].should eql("")
674
+ receiver.content[1].should eql(test_str)
675
+ receiver.content[2].should eql("")
676
+ receiver.content[3].should eql("")
677
+ end
678
+
679
+ specify "should be able to add repeating elements to an array of pages" do
680
+ test_str = "repeating"
681
+
682
+ pdf = PDF::Wrapper.new
683
+ pdf.repeating_element([1,3,4]) { pdf.text test_str }
684
+
685
+ pdf.start_new_page
686
+ pdf.start_new_page
687
+ pdf.start_new_page
688
+
689
+ receiver = PageTextReceiver.new
690
+ reader = PDF::Reader.string(pdf.render, receiver)
691
+
692
+ receiver.content.size.should eql(4)
693
+ receiver.content[0].should eql(test_str)
694
+ receiver.content[1].should eql("")
695
+ receiver.content[2].should eql(test_str)
696
+ receiver.content[3].should eql(test_str)
697
+ end
460
698
 
461
699
  specify "should not change the state of the cairo canvas or PDF::Writer defaults (fonts, colors, etc) when adding repeating elements"
462
700
 
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.3
4
+ version: 0.0.4
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-01-17 00:00:00 +11:00
12
+ date: 2008-03-12 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -35,8 +35,8 @@ files:
35
35
  - lib/pdf/wrapper.rb
36
36
  - lib/pdf/core.rb
37
37
  - specs/data
38
- - specs/data/google.png
39
38
  - specs/data/shift_jis.txt
39
+ - specs/data/google.png
40
40
  - specs/data/utf8-long.txt
41
41
  - specs/data/iso-2022-jp.txt
42
42
  - specs/data/utf8.txt