pdf-wrapper 0.0.2 → 0.0.3

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.
@@ -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>