pdf-wrapper 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- # -* coding: UTF-8 -*-
1
+ # coding: utf-8
2
2
 
3
3
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
4
4
 
@@ -10,12 +10,17 @@ require 'pdf/reader'
10
10
  # make some private methods of PDF::Wrapper public for testing
11
11
  class PDF::Wrapper
12
12
  public :build_pango_layout
13
+ public :calc_image_dimensions
13
14
  public :load_librsvg
14
15
  public :load_libpixbuf
15
16
  public :load_libpango
16
17
  public :load_libpoppler
17
18
  public :default_text_options
18
19
  public :detect_image_type
20
+ public :draw_pdf
21
+ public :draw_pixbuf
22
+ public :draw_png
23
+ public :draw_svg
19
24
  public :validate_color
20
25
  end
21
26
 
@@ -24,7 +29,7 @@ class PageReceiver
24
29
  attr_accessor :page_count
25
30
 
26
31
  def initialize
27
- @page_count = 0
32
+ @page_count = 0
28
33
  end
29
34
 
30
35
  # Called when page parsing ends
@@ -53,7 +58,7 @@ class PageTextReceiver
53
58
  alias :super_show_text :show_text
54
59
  alias :move_to_next_line_and_show_text :show_text
55
60
  alias :set_spacing_next_line_show_text :show_text
56
-
61
+
57
62
  def show_text_with_positioning(*params)
58
63
  params = params.first
59
64
  params.each { |str| show_text(str) if str.kind_of?(String) }
@@ -68,7 +73,7 @@ context "The PDF::Wrapper class" do
68
73
  @shortstr = "Chunky Bacon"
69
74
  @medstr = "This is a medium length string\nthat is also multi line. one two three four."
70
75
  end
71
-
76
+
72
77
  specify "should load external libs correctly" do
73
78
  pdf = PDF::Wrapper.new
74
79
 
@@ -77,7 +82,7 @@ context "The PDF::Wrapper class" do
77
82
  pdf.load_libpixbuf
78
83
  ::Object.const_defined?(:Gdk).should eql(true)
79
84
  ::Gdk.const_defined?(:Pixbuf).should eql(true)
80
-
85
+
81
86
  # pango
82
87
  ::Object.const_defined?(:Pango).should eql(false)
83
88
  pdf.load_libpango
@@ -177,7 +182,7 @@ context "The PDF::Wrapper class" do
177
182
  lambda {pdf.move_to(PDF::Wrapper::PAGE_SIZES[:A4].first + 10,100)}.should raise_error(ArgumentError)
178
183
  lambda {pdf.move_to(100, PDF::Wrapper::PAGE_SIZES[:A4].last + 10)}.should raise_error(ArgumentError)
179
184
  end
180
-
185
+
181
186
  specify "should add additional pages at the users request" do
182
187
  pdf = PDF::Wrapper.new
183
188
  pdf.move_to(100,100)
@@ -231,7 +236,7 @@ context "The PDF::Wrapper class" do
231
236
  str = "Chunky Bacon!!"
232
237
  opts = {:font_size => 16, :font => "Sans Serif", :alignment => :left, :justify => false }
233
238
  height = pdf.text_height(str, pdf.page_width, opts)
234
- pdf.text(str,opts)
239
+ pdf.text(str,opts)
235
240
  newx, newy = pdf.current_point
236
241
 
237
242
  newx.should eql(x)
@@ -239,7 +244,7 @@ context "The PDF::Wrapper class" do
239
244
  newy.should eql(y + height)
240
245
  end
241
246
 
242
- specify "should be able to draw a filled rectangle onto the canvas"
247
+ specify "should be able to draw a filled rectangle onto the canvas"
243
248
  =begin
244
249
  do
245
250
  x = y = 100
@@ -254,7 +259,7 @@ context "The PDF::Wrapper class" do
254
259
  end
255
260
  =end
256
261
 
257
- specify "should be able to draw an empty rounded rectangle onto the canvas"
262
+ specify "should be able to draw an empty rounded rectangle onto the canvas"
258
263
  =begin
259
264
  do
260
265
  x = y = 100
@@ -270,7 +275,7 @@ context "The PDF::Wrapper class" do
270
275
  end
271
276
  =end
272
277
 
273
- specify "should be able to draw a filled rounded rectangle onto the canvas"
278
+ specify "should be able to draw a filled rounded rectangle onto the canvas"
274
279
  =begin
275
280
  do
276
281
  x = y = 100
@@ -286,7 +291,7 @@ context "The PDF::Wrapper class" do
286
291
  end
287
292
  =end
288
293
 
289
- specify "should be able to draw an empty circle onto the canvas"
294
+ specify "should be able to draw an empty circle onto the canvas"
290
295
  =begin
291
296
  do
292
297
  x = 100
@@ -302,7 +307,7 @@ context "The PDF::Wrapper class" do
302
307
  end
303
308
  =end
304
309
 
305
- specify "should be able to draw a filled circle onto the canvas"
310
+ specify "should be able to draw a filled circle onto the canvas"
306
311
  =begin
307
312
  do
308
313
  x = 100
@@ -318,7 +323,7 @@ context "The PDF::Wrapper class" do
318
323
  end
319
324
  =end
320
325
 
321
- specify "should be able to add ascii text to the canvas"
326
+ specify "should be able to add ascii text to the canvas"
322
327
  =begin
323
328
  do
324
329
  msg = "Chunky Bacon"
@@ -333,7 +338,7 @@ context "The PDF::Wrapper class" do
333
338
  end
334
339
  =end
335
340
 
336
- specify "should be able to add unicode text to the canvas"
341
+ specify "should be able to add unicode text to the canvas"
337
342
  =begin
338
343
  do
339
344
  msg = "メインページ"
@@ -348,7 +353,7 @@ context "The PDF::Wrapper class" do
348
353
  end
349
354
  =end
350
355
 
351
- specify "should be able to add text to the canvas in a bounding box using the cell method"
356
+ specify "should be able to add text to the canvas in a bounding box using the cell method"
352
357
  =begin
353
358
  do
354
359
  msg = "メインページ"
@@ -386,8 +391,10 @@ context "The PDF::Wrapper class" do
386
391
  specify "should be able to detect the filetype of an image" do
387
392
  pdf = PDF::Wrapper.new
388
393
  pdf.detect_image_type(File.dirname(__FILE__) + "/data/google.png").should eql(:png)
389
- pdf.detect_image_type(File.dirname(__FILE__) + "/data/graph.svg").should eql(:svg)
390
- pdf.detect_image_type(File.dirname(__FILE__) + "/data/shipsail.jpg").should eql(nil)
394
+ pdf.detect_image_type(File.dirname(__FILE__) + "/data/zits.gif").should eql(:gif)
395
+ pdf.detect_image_type(File.dirname(__FILE__) + "/data/orc.svg").should eql(:svg)
396
+ pdf.detect_image_type(File.dirname(__FILE__) + "/data/utf8-long.pdf").should eql(:pdf)
397
+ pdf.detect_image_type(File.dirname(__FILE__) + "/data/shipsail.jpg").should eql(:jpg)
391
398
  end
392
399
 
393
400
  specify "should be able to calculate the height of a string of text" do
@@ -435,7 +442,7 @@ context "The PDF::Wrapper class" do
435
442
  # TODO: improve this spec using mocks. Atm, I'm assume that if build_pango_layout didn't raise an exception when
436
443
  # passed in the non UTF-8 strings, then all worked fine. yuck.
437
444
  end
438
-
445
+
439
446
  specify "should raise an error when a string that isn't convertable to UTF-8 is passed into build_pango_layout()"
440
447
  end
441
448
 
@@ -448,4 +455,113 @@ context "The PDF::Wrapper class" do
448
455
  lambda { pdf.validate_color([1])}.should raise_error(ArgumentError)
449
456
  lambda { pdf.validate_color([1000, 255, 0])}.should raise_error(ArgumentError)
450
457
  end
458
+
459
+ specify "should be able to add repeating elements to various pages (:all, :odd, :even, :range, int)"
460
+
461
+ specify "should not change the state of the cairo canvas or PDF::Writer defaults (fonts, colors, etc) when adding repeating elements"
462
+
463
+ specify "should leave the cursor on the bottom left corner of an object when using functions with optional positioning [func(data, opts)]" do
464
+ pdf = PDF::Wrapper.new
465
+ origx, origy = pdf.current_point
466
+
467
+ # text()
468
+ pdf.text("Page #{pdf.page}!", :left => pdf.margin_left, :top => pdf.margin_top, :font_size => 18)
469
+ x, y = pdf.current_point
470
+ x.should eql(origx)
471
+ y.should eql(origy + 26.25)
472
+
473
+ # image() - palms it's works out to helper functions, so we have to check them individually
474
+
475
+ # TODO: work out why rcov segfaults when i use the draw_pdf method
476
+ #origx, origy = pdf.current_point
477
+ #pdf.draw_pdf(File.dirname(__FILE__) + "/data/utf8-long.pdf", :height => 50)
478
+ #x, y = pdf.current_point
479
+ #x.should eql(origx)
480
+ #y.should eql(origy + 50)
481
+
482
+ origx, origy = pdf.current_point
483
+ pdf.draw_pixbuf(File.dirname(__FILE__) + "/data/zits.gif", :height => 50)
484
+ x, y = pdf.current_point
485
+ x.should eql(origx)
486
+ y.should eql(origy + 50)
487
+
488
+ origx, origy = pdf.current_point
489
+ pdf.draw_png(File.dirname(__FILE__) + "/data/google.png", :height => 200)
490
+ x, y = pdf.current_point
491
+ x.should eql(origx)
492
+ y.should eql(origy + 200)
493
+
494
+ origx, origy = pdf.current_point
495
+ pdf.draw_svg(File.dirname(__FILE__) + "/data/orc.svg", :height => 100)
496
+ x, y = pdf.current_point
497
+ x.should eql(origx)
498
+ y.should eql(origy + 100)
499
+ end
500
+
501
+ specify "should leave the cursor unmodified when using functions with compulsory positioning [func(data, x, y, w, h, opts)]" do
502
+ pdf = PDF::Wrapper.new
503
+ origx, origy = pdf.current_point
504
+
505
+ # cell()
506
+ pdf.cell("test", 100, 100, 100, 100)
507
+ x, y = pdf.current_point
508
+ x.should eql(origx)
509
+ y.should eql(origy)
510
+
511
+ # circle()
512
+ pdf.circle(200, 200, 50)
513
+ x, y = pdf.current_point
514
+ x.should eql(origx)
515
+ y.should eql(origy)
516
+
517
+ # line()
518
+ pdf.line(300, 200, 350, 300)
519
+ x, y = pdf.current_point
520
+ x.should eql(origx)
521
+ y.should eql(origy)
522
+
523
+ # rectangle()
524
+ pdf.rectangle(200, 400, 100, 100)
525
+ x, y = pdf.current_point
526
+ x.should eql(origx)
527
+ y.should eql(origy)
528
+
529
+ # rounded_rectangle()
530
+ pdf.rounded_rectangle(200, 400, 100, 100, 10)
531
+ x, y = pdf.current_point
532
+ x.should eql(origx)
533
+ y.should eql(origy)
534
+ end
535
+
536
+ specify "should maintain an internal counter of pages" do
537
+ pdf = PDF::Wrapper.new
538
+ pdf.page.should eql(1)
539
+ pdf.start_new_page
540
+ pdf.page.should eql(2)
541
+ pdf.start_new_page(50)
542
+ pdf.page.should eql(50)
543
+ end
544
+
545
+ specify "should raise an ArgumentError when a function that accepts an options hash is passed an unreognised option" do
546
+ lambda { PDF::Wrapper.new(:ponies => true)}.should raise_error(ArgumentError)
547
+ pdf = PDF::Wrapper.new
548
+ lambda { pdf.cell("test",100,100,100,100, :ponies => true)}.should raise_error(ArgumentError)
549
+ lambda { pdf.table([[1,2]], :ponies => true)}.should raise_error(ArgumentError)
550
+ lambda { pdf.text("test", :ponies => true)}.should raise_error(ArgumentError)
551
+ lambda { pdf.text("test", :ponies => true)}.should raise_error(ArgumentError)
552
+ lambda { pdf.text_height("test", 100, :ponies => true)}.should raise_error(ArgumentError)
553
+ lambda { pdf.circle(100,100,100, :ponies => true)}.should raise_error(ArgumentError)
554
+ lambda { pdf.line(100,100,200,200, :ponies => true)}.should raise_error(ArgumentError)
555
+ lambda { pdf.rectangle(100,100,100,100, :ponies => true)}.should raise_error(ArgumentError)
556
+ lambda { pdf.rounded_rectangle(100,100,100,100,10, :ponies => true)}.should raise_error(ArgumentError)
557
+ lambda { pdf.image(File.dirname(__FILE__) + "/data/orc.svg", :ponies => true)}.should raise_error(ArgumentError)
558
+ end
559
+
560
+ specify "should be able to calculate image dimensions correctly" do
561
+ pdf = PDF::Wrapper.new
562
+ pdf.calc_image_dimensions(100, 100, 200, 200).should eql([100.0,100.0])
563
+ pdf.calc_image_dimensions(nil, nil, 200, 200).should eql([200.0,200.0])
564
+ pdf.calc_image_dimensions(150, 200, 200, 200, true).should eql([150.0,150.0])
565
+ pdf.calc_image_dimensions(300, 250, 200, 200, true).should eql([250.0,250.0])
566
+ end
451
567
  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.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Healy
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-11 00:00:00 +11:00
12
+ date: 2008-01-17 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: A unicode aware PDF writing library that uses the ruby bindings to various c libraries ( like, cairo, pango, poppler and rsvg ) to do the heavy lifting.
16
+ description: A unicode aware PDF writing library that uses the ruby bindings to various c libraries ( like cairo, pango, poppler and rsvg ) to do the heavy lifting.
17
17
  email: jimmy@deefa.com
18
18
  executables: []
19
19
 
@@ -21,9 +21,10 @@ extensions: []
21
21
 
22
22
  extra_rdoc_files:
23
23
  - README
24
- - DESIGN
25
24
  - CHANGELOG
25
+ - TODO
26
26
  files:
27
+ - examples/repeating.rb
27
28
  - examples/cell.rb
28
29
  - examples/image.rb
29
30
  - examples/utf8-long.rb
@@ -35,7 +36,6 @@ files:
35
36
  - lib/pdf/core.rb
36
37
  - specs/data
37
38
  - specs/data/google.png
38
- - specs/data/graph.svg
39
39
  - specs/data/shift_jis.txt
40
40
  - specs/data/utf8-long.txt
41
41
  - specs/data/iso-2022-jp.txt
@@ -48,8 +48,8 @@ files:
48
48
  - specs/wrapper_spec.rb
49
49
  - Rakefile
50
50
  - README
51
- - DESIGN
52
51
  - CHANGELOG
52
+ - TODO
53
53
  has_rdoc: true
54
54
  homepage: http://pdf-wrapper.rubyforge.org/
55
55
  post_install_message:
data/DESIGN DELETED
@@ -1,30 +0,0 @@
1
- *************************************
2
- * Overarching Design Principles
3
- *************************************
4
- - low level canvas drawing API
5
- - add text
6
- - add shapes / images
7
-
8
- - higher level "widget" API
9
- - text boxes
10
- - form helpers ( check boxes, etc)
11
- - water mark
12
- - repeating elements (page numbers, headers/footers, etc)
13
- - image boxes
14
- - lists
15
- - tables (port simple table?)
16
- - add pages from existing PDFs
17
-
18
- *************************************
19
- * Thoughts on the table API
20
- *************************************
21
-
22
- FPDF::Table
23
- - .table(data = [], columns = [])
24
- - http://source.mihelac.org/2006/6/19/creating-pdf-documents-with-tables-in-ruby-rails#comments
25
-
26
- PDF::SimpleTable
27
- - .table(data = [{}], columns = []
28
-
29
- XHTML?
30
- - .table(data = String, opts = {})
data/specs/data/graph.svg DELETED
@@ -1,138 +0,0 @@
1
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN" "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd" [
2
- <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
3
- <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
4
- <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
5
- <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
6
- <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
7
- <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
8
- <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
9
- <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
10
- <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
11
- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
12
- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
13
- ]>
14
- <svg xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;" i:viewOrigin="420 320" i:rulerOrigin="0 0" i:pageBounds="0 420 320 0" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="420" height="320" viewBox="0 0 420 320" style="overflow:visible;enable-background:new 0 0 420 320" xml:space="preserve"><g i:knockout="Off">
15
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
16
- <text id="XMLID_0_" transform="matrix(1 0 0 1 0 320)">
17
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$0.00</tspan>
18
- </text>
19
- </switch>
20
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
21
- <text id="XMLID_1_" transform="matrix(1 0 0 1 0 288)">
22
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$1,058.58</tspan>
23
- </text>
24
- </switch>
25
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
26
- <text id="XMLID_2_" transform="matrix(1 0 0 1 0 256)">
27
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$2,117.16</tspan>
28
- </text>
29
- </switch>
30
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
31
- <text id="XMLID_3_" transform="matrix(1 0 0 1 0 224)">
32
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$3,175.73</tspan>
33
- </text>
34
- </switch>
35
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
36
- <text id="XMLID_4_" transform="matrix(1 0 0 1 0 192)">
37
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$4,234.31</tspan>
38
- </text>
39
- </switch>
40
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
41
- <text id="XMLID_5_" transform="matrix(1 0 0 1 0 160)">
42
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$5,292.89</tspan>
43
- </text>
44
- </switch>
45
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
46
- <text id="XMLID_6_" transform="matrix(1 0 0 1 0 128)">
47
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$6,351.47</tspan>
48
- </text>
49
- </switch>
50
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
51
- <text id="XMLID_7_" transform="matrix(1 0 0 1 0 96)">
52
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$7,410.04</tspan>
53
- </text>
54
- </switch>
55
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
56
- <text id="XMLID_8_" transform="matrix(1 0 0 1 0 64)">
57
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$8,468.62</tspan>
58
- </text>
59
- </switch>
60
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
61
- <text id="XMLID_9_" transform="matrix(1 0 0 1 0 32)">
62
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;">$9,527.20</tspan>
63
- </text>
64
- </switch>
65
- <switch i:isolated="yes" i:knockout="Off" i:objectNS="&ns_flows;" i:objectType="pointText" style="enable-background:new ;">
66
- <text id="XMLID_0_" transform="matrix(1 0 0 1 0 320)">
67
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:11.976;"></tspan>
68
- </text>
69
- </switch></g>
70
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,320V7.509"/>
71
- <g i:knockout="Off">
72
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,320h345"/>
73
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,288h345"/>
74
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,256h345"/>
75
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,224h345"/>
76
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,192h345"/>
77
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,160h345"/>
78
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,128h345"/>
79
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,96h345"/>
80
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,64h345"/>
81
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,32h345"/>
82
- <path i:knockout="Off" style="fill:none;stroke:#000000;shape-rendering:crispEdges" d="M75,320h345"/>
83
- </g>
84
-
85
- <g i:knockout="Off">
86
- <path i:knockout="Off" style="fill:#191970;stroke:#000000;stroke-width:0.5;shape-rendering:crispEdges" d="M81.9,320 L 81.9 204.070861263578 L 140.55 204.070861263578 L 140.55 320
87
- z "/>
88
- </g>
89
- <text id="XMLID_32_0" transform="matrix(0.3677 0.93 -0.93 0.367 107.775 336)" >
90
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:12;shape-rendering:crispEdges">30/06/2005</tspan>
91
- </text>
92
- <text id="XMLID_46_0" transform="matrix(0 -1 1 0 114.675 197.670861263578)">
93
- <tspan x="0" y="0" style="font-family:'Verdana'; font-size:13; text-anchor:center">$3,835.00</tspan>
94
- </text>
95
-
96
- <g i:knockout="Off">
97
- <path i:knockout="Off" style="fill:#191970;stroke:#000000;stroke-width:0.5;shape-rendering:crispEdges" d="M147.45,320 L 147.45 188.949288103182 L 206.1 188.949288103182 L 206.1 320
98
- z "/>
99
- </g>
100
- <text id="XMLID_32_1" transform="matrix(0.3677 0.93 -0.93 0.367 173.325 336)" >
101
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:12;shape-rendering:crispEdges">30/06/2006</tspan>
102
- </text>
103
- <text id="XMLID_46_1" transform="matrix(0 -1 1 0 180.225 182.549288103182)">
104
- <tspan x="0" y="0" style="font-family:'Verdana'; font-size:13; text-anchor:center">$4,335.23</tspan>
105
- </text>
106
-
107
- <g i:knockout="Off">
108
- <path i:knockout="Off" style="fill:#191970;stroke:#000000;stroke-width:0.5;shape-rendering:crispEdges" d="M213,320 L 213 173.961025895022 L 271.65 173.961025895022 L 271.65 320
109
- z "/>
110
- </g>
111
- <text id="XMLID_32_2" transform="matrix(0.3677 0.93 -0.93 0.367 238.875 336)" >
112
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:12;shape-rendering:crispEdges">31/12/2006</tspan>
113
- </text>
114
- <text id="XMLID_46_2" transform="matrix(0 -1 1 0 245.775 167.561025895022)">
115
- <tspan x="0" y="0" style="font-family:'Verdana'; font-size:13; text-anchor:center">$4,831.05</tspan>
116
- </text>
117
-
118
- <g i:knockout="Off">
119
- <path i:knockout="Off" style="fill:#191970;stroke:#000000;stroke-width:0.5;shape-rendering:crispEdges" d="M278.55,320 L 278.55 94.5887127274994 L 337.2 94.5887127274994 L 337.2 320
120
- z "/>
121
- </g>
122
- <text id="XMLID_32_3" transform="matrix(0.3677 0.93 -0.93 0.367 304.425 336)" >
123
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:12;shape-rendering:crispEdges">30/06/2007</tspan>
124
- </text>
125
- <text id="XMLID_46_3" transform="matrix(0 -1 1 0 311.325 88.1887127274994)">
126
- <tspan x="0" y="0" style="font-family:'Verdana'; font-size:13; text-anchor:center">$7,456.73</tspan>
127
- </text>
128
-
129
- <g i:knockout="Off">
130
- <path i:knockout="Off" style="fill:#191970;stroke:#000000;stroke-width:0.5;shape-rendering:crispEdges" d="M344.1,320 L 344.1 58.1818241933149 L 402.75 58.1818241933149 L 402.75 320
131
- z "/>
132
- </g>
133
- <text id="XMLID_32_4" transform="matrix(0.3677 0.93 -0.93 0.367 369.975 336)" >
134
- <tspan x="0" y="0" style="font-family:'ArialMT'; font-size:12;shape-rendering:crispEdges">Current Estimate</tspan>
135
- </text>
136
- <text id="XMLID_46_4" transform="matrix(0 -1 1 0 376.875 51.7818241933149)">
137
- <tspan x="0" y="0" style="font-family:'Verdana'; font-size:13; text-anchor:center">$8,661.09</tspan>
138
- </text></svg>