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