pdf-wrapper 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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