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.
- data/CHANGELOG +11 -0
- data/README +7 -9
- data/Rakefile +4 -4
- data/TODO +1 -0
- data/examples/cell.rb +1 -0
- data/examples/image.rb +1 -0
- data/examples/repeating.rb +38 -0
- data/examples/shapes.rb +1 -0
- data/examples/table.rb +1 -0
- data/examples/utf8-long.rb +1 -0
- data/examples/utf8.rb +1 -0
- data/lib/pdf/core.rb +2 -0
- data/lib/pdf/wrapper.rb +216 -100
- data/specs/wrapper_spec.rb +134 -18
- metadata +6 -6
- data/DESIGN +0 -30
- data/specs/data/graph.svg +0 -138
data/specs/wrapper_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
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/
|
390
|
-
pdf.detect_image_type(File.dirname(__FILE__) + "/data/
|
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.
|
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-
|
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
|
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>
|