pdf-wrapper 0.1.3 → 0.2.0
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 +27 -0
- data/Rakefile +1 -1
- data/TODO +3 -1
- data/examples/cell.rb +2 -2
- data/examples/image.rb +4 -2
- data/examples/markup.rb +2 -2
- data/examples/repeating.rb +2 -2
- data/examples/scaled_image.rb +2 -2
- data/examples/shapes.rb +2 -2
- data/examples/table.rb +4 -6
- data/examples/table_fixed_col_width.rb +26 -0
- data/examples/translate.rb +2 -2
- data/examples/utf8-long.rb +3 -3
- data/examples/utf8.rb +2 -2
- data/examples/varied_page_size.rb +15 -0
- data/lib/pdf/wrapper.rb +158 -49
- data/lib/pdf/wrapper/table.rb +96 -21
- data/lib/pdf/wrapper/text.rb +52 -21
- data/specs/graphics_spec.rb +29 -26
- data/specs/image_spec.rb +21 -22
- data/specs/load_spec.rb +7 -6
- data/specs/spec_helper.rb +5 -0
- data/specs/tables_spec.rb +26 -25
- data/specs/text_spec.rb +72 -61
- data/specs/wrapper_spec.rb +162 -175
- metadata +4 -3
- data/examples/text.rb +0 -14
data/specs/image_spec.rb
CHANGED
@@ -3,38 +3,37 @@
|
|
3
3
|
require File.dirname(__FILE__) + '/spec_helper'
|
4
4
|
|
5
5
|
context "The PDF::Wrapper class" do
|
6
|
+
|
7
|
+
before(:each) { create_pdf }
|
8
|
+
|
6
9
|
specify "should be able to detect the filetype of an image" do
|
7
|
-
pdf
|
8
|
-
pdf.detect_image_type(File.dirname(__FILE__) + "/data/
|
9
|
-
pdf.detect_image_type(File.dirname(__FILE__) + "/data/
|
10
|
-
pdf.detect_image_type(File.dirname(__FILE__) + "/data/
|
11
|
-
pdf.detect_image_type(File.dirname(__FILE__) + "/data/
|
12
|
-
pdf.detect_image_type(File.dirname(__FILE__) + "/data/shipsail.jpg").should eql(:jpg)
|
10
|
+
@pdf.detect_image_type(File.dirname(__FILE__) + "/data/google.png").should eql(:png)
|
11
|
+
@pdf.detect_image_type(File.dirname(__FILE__) + "/data/zits.gif").should eql(:gif)
|
12
|
+
@pdf.detect_image_type(File.dirname(__FILE__) + "/data/orc.svg").should eql(:svg)
|
13
|
+
@pdf.detect_image_type(File.dirname(__FILE__) + "/data/utf8-long.pdf").should eql(:pdf)
|
14
|
+
@pdf.detect_image_type(File.dirname(__FILE__) + "/data/shipsail.jpg").should eql(:jpg)
|
13
15
|
end
|
14
16
|
|
15
17
|
specify "should be able to determine image dimensions correctly" do
|
16
|
-
pdf
|
17
|
-
pdf.image_dimensions(File.dirname(__FILE__) + "/data/
|
18
|
-
pdf.image_dimensions(File.dirname(__FILE__) + "/data/
|
19
|
-
pdf.image_dimensions(File.dirname(__FILE__) + "/data/
|
20
|
-
pdf.image_dimensions(File.dirname(__FILE__) + "/data/
|
21
|
-
pdf.image_dimensions(File.dirname(__FILE__) + "/data/shipsail.jpg").should eql([192,128])
|
18
|
+
@pdf.image_dimensions(File.dirname(__FILE__) + "/data/google.png").should eql([166,55])
|
19
|
+
@pdf.image_dimensions(File.dirname(__FILE__) + "/data/zits.gif").should eql([525,167])
|
20
|
+
@pdf.image_dimensions(File.dirname(__FILE__) + "/data/orc.svg").should eql([734, 772])
|
21
|
+
@pdf.image_dimensions(File.dirname(__FILE__) + "/data/utf8-long.pdf").map{ |d| d.to_i}.should eql([595,841])
|
22
|
+
@pdf.image_dimensions(File.dirname(__FILE__) + "/data/shipsail.jpg").should eql([192,128])
|
22
23
|
end
|
23
24
|
|
24
25
|
specify "should be able to calculate scaled image dimensions correctly" do
|
25
|
-
pdf
|
26
|
-
pdf.calc_image_dimensions(
|
27
|
-
pdf.calc_image_dimensions(
|
28
|
-
pdf.calc_image_dimensions(
|
29
|
-
pdf.calc_image_dimensions(300, 250, 200, 200, true).should eql([250.0,250.0])
|
26
|
+
@pdf.calc_image_dimensions(100, 100, 200, 200).should eql([100.0,100.0])
|
27
|
+
@pdf.calc_image_dimensions(nil, nil, 200, 200).should eql([200.0,200.0])
|
28
|
+
@pdf.calc_image_dimensions(150, 200, 200, 200, true).should eql([150.0,150.0])
|
29
|
+
@pdf.calc_image_dimensions(300, 250, 200, 200, true).should eql([250.0,250.0])
|
30
30
|
end
|
31
31
|
|
32
32
|
specify "should be able to draw rotated images correctly" do
|
33
|
-
pdf
|
34
|
-
pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :
|
35
|
-
pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :
|
36
|
-
pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :
|
37
|
-
pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :none)
|
33
|
+
@pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :clockwise)
|
34
|
+
@pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :counterclockwise)
|
35
|
+
@pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :upsidedown)
|
36
|
+
@pdf.image(File.dirname(__FILE__) + "/data/shipsail.jpg", :rotate => :none)
|
38
37
|
end
|
39
38
|
|
40
39
|
specify "should be able to draw an image with padding correctly"
|
data/specs/load_spec.rb
CHANGED
@@ -3,28 +3,29 @@
|
|
3
3
|
require File.dirname(__FILE__) + '/spec_helper'
|
4
4
|
|
5
5
|
context "The PDF::Wrapper class" do
|
6
|
-
specify "should load external libs correctly" do
|
7
|
-
pdf = PDF::Wrapper.new
|
8
6
|
|
7
|
+
before(:each) { create_pdf }
|
8
|
+
|
9
|
+
specify "should load external libs correctly" do
|
9
10
|
# lib gdkpixbuf
|
10
11
|
::Object.const_defined?(:Gdk).should eql(false)
|
11
|
-
pdf.load_libpixbuf
|
12
|
+
@pdf.load_libpixbuf
|
12
13
|
::Object.const_defined?(:Gdk).should eql(true)
|
13
14
|
::Gdk.const_defined?(:Pixbuf).should eql(true)
|
14
15
|
|
15
16
|
# pango
|
16
17
|
::Object.const_defined?(:Pango).should eql(false)
|
17
|
-
pdf.load_libpango
|
18
|
+
@pdf.load_libpango
|
18
19
|
::Object.const_defined?(:Pango).should eql(true)
|
19
20
|
|
20
21
|
# libpoppler
|
21
22
|
::Object.const_defined?(:Poppler).should eql(false)
|
22
|
-
pdf.load_libpoppler
|
23
|
+
@pdf.load_libpoppler
|
23
24
|
::Object.const_defined?(:Poppler).should eql(true)
|
24
25
|
|
25
26
|
# librsvg
|
26
27
|
::Object.const_defined?(:RSVG).should eql(false)
|
27
|
-
pdf.load_librsvg
|
28
|
+
@pdf.load_librsvg
|
28
29
|
::Object.const_defined?(:RSVG).should eql(true)
|
29
30
|
|
30
31
|
end
|
data/specs/spec_helper.rb
CHANGED
@@ -10,6 +10,11 @@ gem "pdf-reader", ">=0.7.3"
|
|
10
10
|
|
11
11
|
require 'pdf/reader'
|
12
12
|
|
13
|
+
def create_pdf
|
14
|
+
@output = StringIO.new
|
15
|
+
@pdf = PDF::Wrapper.new(@output, :paper => :A4)
|
16
|
+
end
|
17
|
+
|
13
18
|
# make some private methods of PDF::Wrapper public for testing
|
14
19
|
class PDF::Wrapper
|
15
20
|
public :build_pango_layout
|
data/specs/tables_spec.rb
CHANGED
@@ -3,13 +3,16 @@
|
|
3
3
|
require File.dirname(__FILE__) + '/spec_helper'
|
4
4
|
|
5
5
|
context "The PDF::Wrapper class" do
|
6
|
+
|
7
|
+
before(:each) { create_pdf }
|
8
|
+
|
6
9
|
specify "should be able to draw a table on the canvas using an array of data" do
|
7
|
-
pdf = PDF::Wrapper.new
|
8
10
|
data = [%w{data1 data2}, %w{data3 data4}]
|
9
|
-
pdf.table(data)
|
11
|
+
@pdf.table(data)
|
12
|
+
@pdf.finish
|
10
13
|
|
11
14
|
receiver = PageTextReceiver.new
|
12
|
-
reader = PDF::Reader.string(
|
15
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
13
16
|
|
14
17
|
receiver.content.first.include?("data1").should be_true
|
15
18
|
receiver.content.first.include?("data2").should be_true
|
@@ -18,15 +21,15 @@ context "The PDF::Wrapper class" do
|
|
18
21
|
end
|
19
22
|
|
20
23
|
specify "should be able to draw a table on the canvas using a PDF::Wrapper::Table object" do
|
21
|
-
pdf = PDF::Wrapper.new
|
22
24
|
table = PDF::Wrapper::Table.new do |t|
|
23
25
|
t.data = [%w{data1 data2}, %w{data3 data4}]
|
24
26
|
end
|
25
27
|
|
26
|
-
pdf.table(table)
|
28
|
+
@pdf.table(table)
|
29
|
+
@pdf.finish
|
27
30
|
|
28
31
|
receiver = PageTextReceiver.new
|
29
|
-
reader = PDF::Reader.string(
|
32
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
30
33
|
|
31
34
|
receiver.content.first.include?("data1").should be_true
|
32
35
|
receiver.content.first.include?("data2").should be_true
|
@@ -35,36 +38,36 @@ context "The PDF::Wrapper class" do
|
|
35
38
|
end
|
36
39
|
|
37
40
|
specify "should be able to draw a table on the canvas with no headings" do
|
38
|
-
pdf = PDF::Wrapper.new
|
39
41
|
|
40
42
|
table = PDF::Wrapper::Table.new do |t|
|
41
43
|
t.data = (1..50).collect { [1,2] }
|
42
|
-
t.headers
|
44
|
+
t.headers ["col1", "col2"]
|
43
45
|
t.show_headers = nil
|
44
46
|
end
|
45
47
|
|
46
|
-
pdf.table(table)
|
48
|
+
@pdf.table(table)
|
49
|
+
@pdf.finish
|
47
50
|
|
48
51
|
receiver = PageTextReceiver.new
|
49
|
-
reader = PDF::Reader.string(
|
52
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
50
53
|
|
51
54
|
receiver.content.first.include?("col1").should be_false
|
52
55
|
receiver.content.first.include?("col2").should be_false
|
53
56
|
end
|
54
57
|
|
55
58
|
specify "should be able to draw a table on the canvas with headers on the first page only" do
|
56
|
-
pdf = PDF::Wrapper.new
|
57
59
|
|
58
60
|
table = PDF::Wrapper::Table.new do |t|
|
59
61
|
t.data = (1..50).collect { [1,2] }
|
60
|
-
t.headers
|
62
|
+
t.headers ["col1", "col2"]
|
61
63
|
t.show_headers = :once
|
62
64
|
end
|
63
65
|
|
64
|
-
pdf.table(table)
|
66
|
+
@pdf.table(table)
|
67
|
+
@pdf.finish
|
65
68
|
|
66
69
|
receiver = PageTextReceiver.new
|
67
|
-
reader = PDF::Reader.string(
|
70
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
68
71
|
|
69
72
|
receiver.content[0].include?("col1").should be_true
|
70
73
|
receiver.content[0].include?("col2").should be_true
|
@@ -73,18 +76,18 @@ context "The PDF::Wrapper class" do
|
|
73
76
|
end
|
74
77
|
|
75
78
|
specify "should be able to draw a table on the canvas with headers on all pages" do
|
76
|
-
pdf = PDF::Wrapper.new
|
77
79
|
|
78
80
|
table = PDF::Wrapper::Table.new do |t|
|
79
81
|
t.data = (1..50).collect { [1,2] }
|
80
|
-
t.headers
|
82
|
+
t.headers ["col1", "col2"]
|
81
83
|
t.show_headers = :page
|
82
84
|
end
|
83
85
|
|
84
|
-
pdf.table(table)
|
86
|
+
@pdf.table(table)
|
87
|
+
@pdf.finish
|
85
88
|
|
86
89
|
receiver = PageTextReceiver.new
|
87
|
-
reader = PDF::Reader.string(
|
90
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
88
91
|
|
89
92
|
receiver.content[0].include?("col1").should be_true
|
90
93
|
receiver.content[0].include?("col2").should be_true
|
@@ -93,18 +96,16 @@ context "The PDF::Wrapper class" do
|
|
93
96
|
end
|
94
97
|
|
95
98
|
specify "should leave the cursor in the bottom left when adding a table" do
|
96
|
-
pdf = PDF::Wrapper.new
|
97
99
|
data = [%w{head1 head2},%w{data1 data2}]
|
98
|
-
pdf.table(data, :left => pdf.margin_left)
|
99
|
-
x,y = pdf.current_point
|
100
|
-
x.to_i.should eql(pdf.margin_left)
|
100
|
+
@pdf.table(data, :left => @pdf.margin_left)
|
101
|
+
x,y = @pdf.current_point
|
102
|
+
x.to_i.should eql(@pdf.margin_left)
|
101
103
|
end
|
102
104
|
|
103
105
|
specify "should default to using as much available space when adding a table that isn't left aligned with the left margin" do
|
104
|
-
pdf = PDF::Wrapper.new
|
105
106
|
data = [%w{head1 head2},%w{data1 data2}]
|
106
|
-
pdf.table(data, :left => 100)
|
107
|
-
x,y = pdf.current_point
|
107
|
+
@pdf.table(data, :left => 100)
|
108
|
+
x,y = @pdf.current_point
|
108
109
|
x.to_i.should eql(100)
|
109
110
|
end
|
110
111
|
|
data/specs/text_spec.rb
CHANGED
@@ -3,13 +3,30 @@
|
|
3
3
|
require File.dirname(__FILE__) + '/spec_helper'
|
4
4
|
|
5
5
|
context "The PDF::Wrapper class" do
|
6
|
+
|
7
|
+
before(:each) { create_pdf }
|
8
|
+
|
9
|
+
specify "should be able to permanantly change the font size" do
|
10
|
+
@pdf.font_size 20
|
11
|
+
@pdf.instance_variable_get("@default_font_size").should eql(20)
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "should be able to temporarily change the font size" do
|
15
|
+
@pdf.font_size 20
|
16
|
+
@pdf.instance_variable_get("@default_font_size").should eql(20)
|
17
|
+
@pdf.font_size(10) do
|
18
|
+
@pdf.instance_variable_get("@default_font_size").should eql(10)
|
19
|
+
end
|
20
|
+
@pdf.instance_variable_get("@default_font_size").should eql(20)
|
21
|
+
end
|
22
|
+
|
6
23
|
specify "should be able to add ascii text to the canvas" do
|
7
24
|
msg = "Chunky Bacon"
|
8
|
-
pdf
|
9
|
-
pdf.
|
25
|
+
@pdf.text msg
|
26
|
+
@pdf.finish
|
10
27
|
|
11
28
|
receiver = PageTextReceiver.new
|
12
|
-
reader = PDF::Reader.string(
|
29
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
13
30
|
|
14
31
|
# TODO: test for the text is in the appropriate location on the page
|
15
32
|
receiver.content.first.should eql(msg)
|
@@ -17,11 +34,11 @@ context "The PDF::Wrapper class" do
|
|
17
34
|
|
18
35
|
specify "should be able to add unicode text to the canvas" do
|
19
36
|
msg = "Alex Čihař"
|
20
|
-
pdf
|
21
|
-
pdf.
|
37
|
+
@pdf.text msg
|
38
|
+
@pdf.finish
|
22
39
|
|
23
40
|
receiver = PageTextReceiver.new
|
24
|
-
reader = PDF::Reader.string(
|
41
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
25
42
|
|
26
43
|
# TODO: test for the text is in the appropriate location on the page
|
27
44
|
receiver.content.first.should eql(msg)
|
@@ -29,11 +46,11 @@ context "The PDF::Wrapper class" do
|
|
29
46
|
|
30
47
|
specify "should be able to add unicode text that spans multiple pages to the canvas" do
|
31
48
|
msg = "James\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHealy"
|
32
|
-
pdf
|
33
|
-
pdf.
|
49
|
+
@pdf.text msg
|
50
|
+
@pdf.finish
|
34
51
|
|
35
52
|
receiver = PageTextReceiver.new
|
36
|
-
reader = PDF::Reader.string(
|
53
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
37
54
|
|
38
55
|
receiver.content.size.should eql(2)
|
39
56
|
receiver.content[0].should eql("James")
|
@@ -42,73 +59,72 @@ context "The PDF::Wrapper class" do
|
|
42
59
|
|
43
60
|
specify "should be align text on the left when using the text method" do
|
44
61
|
msg = "Chunky Bacon"
|
45
|
-
pdf
|
46
|
-
pdf.
|
62
|
+
@pdf.text msg, :alignment => :left
|
63
|
+
@pdf.finish
|
47
64
|
|
48
65
|
receiver = PDF::Reader::RegisterReceiver.new
|
49
|
-
reader = PDF::Reader.string(
|
66
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
50
67
|
|
51
68
|
# ensure the text is placed in the right location
|
52
69
|
params = receiver.first_occurance_of(:set_text_matrix_and_text_line_matrix)[:args]
|
53
|
-
params[4].should eql(pdf.margin_left.to_f)
|
70
|
+
params[4].should eql(@pdf.margin_left.to_f)
|
54
71
|
end
|
55
72
|
|
56
73
|
specify "should be able to align text on the left when using the text method" do
|
57
74
|
msg = "Chunky Bacon"
|
58
|
-
pdf
|
59
|
-
pdf.
|
75
|
+
@pdf.text msg, :alignment => :left
|
76
|
+
@pdf.finish
|
60
77
|
|
61
78
|
receiver = PDF::Reader::RegisterReceiver.new
|
62
|
-
reader = PDF::Reader.string(
|
79
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
63
80
|
|
64
81
|
# ensure the text is placed in the right location
|
65
82
|
params = receiver.first_occurance_of(:set_text_matrix_and_text_line_matrix)[:args]
|
66
|
-
params[4].should eql(pdf.margin_left.to_f)
|
83
|
+
params[4].should eql(@pdf.margin_left.to_f)
|
67
84
|
end
|
68
85
|
|
69
86
|
specify "should be able to align text in the centre when using the text method" do
|
70
87
|
msg = "Chunky Bacon"
|
71
|
-
pdf
|
72
|
-
pdf.
|
88
|
+
@pdf.text msg, :alignment => :center
|
89
|
+
@pdf.finish
|
73
90
|
|
74
91
|
receiver = PDF::Reader::RegisterReceiver.new
|
75
|
-
reader = PDF::Reader.string(
|
92
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
76
93
|
|
77
94
|
# ensure the text is placed in the right location - the left
|
78
95
|
# egde should be less than half way across the page, but not on the left margin
|
79
96
|
params = receiver.first_occurance_of(:set_text_matrix_and_text_line_matrix)[:args]
|
80
|
-
(params[4] < pdf.absolute_x_middle).should be_true
|
81
|
-
(params[4] > pdf.absolute_x_middle - 100).should be_true
|
97
|
+
(params[4] < @pdf.absolute_x_middle).should be_true
|
98
|
+
(params[4] > @pdf.absolute_x_middle - 100).should be_true
|
82
99
|
end
|
83
100
|
|
84
101
|
specify "should be able to align text on the right when using the text method" do
|
85
102
|
msg = "Chunky Bacon"
|
86
|
-
pdf
|
87
|
-
pdf.
|
103
|
+
@pdf.text msg, :alignment => :right
|
104
|
+
@pdf.finish
|
88
105
|
|
89
106
|
receiver = PDF::Reader::RegisterReceiver.new
|
90
|
-
reader = PDF::Reader.string(
|
107
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
91
108
|
|
92
109
|
# ensure the text is placed in the right location - the left
|
93
110
|
# egde should be more than half way across the page, but not on the right margin
|
94
111
|
params = receiver.first_occurance_of(:set_text_matrix_and_text_line_matrix)[:args]
|
95
|
-
(params[4] > pdf.absolute_x_middle).should be_true
|
96
|
-
(params[4] < pdf.absolute_right_margin).should be_true
|
112
|
+
(params[4] > @pdf.absolute_x_middle).should be_true
|
113
|
+
(params[4] < @pdf.absolute_right_margin).should be_true
|
97
114
|
end
|
98
115
|
|
99
116
|
specify "should raise an error when an invalid alignment is specified" do
|
100
117
|
msg = "James Healy"
|
101
|
-
pdf
|
102
|
-
lambda { pdf.text msg, :alignment => :ponies }.should raise_error(ArgumentError)
|
118
|
+
lambda { @pdf.text msg, :alignment => :ponies }.should raise_error(ArgumentError)
|
103
119
|
end
|
104
120
|
|
105
121
|
specify "should be able to add text to the canvas in a bounding box using the cell method" do
|
106
122
|
msg = "Alex Čihař"
|
107
|
-
pdf
|
108
|
-
pdf.
|
123
|
+
@pdf.cell msg, 100, 100, 200, 200
|
124
|
+
@pdf.finish
|
109
125
|
|
110
126
|
receiver = PageTextReceiver.new
|
111
|
-
reader = PDF::Reader.string(
|
127
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
112
128
|
|
113
129
|
# TODO: test for the text is in the appropriate location on the page
|
114
130
|
receiver.content.first.should eql(msg)
|
@@ -116,13 +132,13 @@ context "The PDF::Wrapper class" do
|
|
116
132
|
|
117
133
|
specify "should keep all text for a cell inside the cell boundaries" do
|
118
134
|
msg = "This is a text cell, added by James"
|
119
|
-
pdf = PDF::Wrapper.new
|
120
135
|
x = y = 100
|
121
136
|
w = h = 200
|
122
|
-
pdf.cell msg, x, y, w, h
|
137
|
+
@pdf.cell msg, x, y, w, h
|
138
|
+
@pdf.finish
|
123
139
|
|
124
140
|
receiver = PDF::Reader::RegisterReceiver.new
|
125
|
-
reader = PDF::Reader.string(
|
141
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
126
142
|
|
127
143
|
receiver.all(:set_text_matrix_and_text_line_matrix).each do |cb|
|
128
144
|
# horizontal location
|
@@ -134,7 +150,7 @@ context "The PDF::Wrapper class" do
|
|
134
150
|
# vertical location
|
135
151
|
# TODO: we're only testing the it doesn't start past the bottom boundary of the cell
|
136
152
|
# should also test that it doesn't start in the cell but overrun it
|
137
|
-
cell_top_bound = pdf.page_height - y
|
153
|
+
cell_top_bound = @pdf.page_height - y
|
138
154
|
(cb[:args][5] <= cell_top_bound).should be_true
|
139
155
|
(cb[:args][5] >= cell_top_bound - h).should be_true
|
140
156
|
end
|
@@ -142,37 +158,33 @@ context "The PDF::Wrapper class" do
|
|
142
158
|
|
143
159
|
specify "should be able to calculate the height of a string of text" do
|
144
160
|
str = "This is a medium length string\nthat is also multi line. one two three four."
|
145
|
-
pdf = PDF::Wrapper.new
|
146
161
|
opts = {:font_size => 16, :font => "Sans Serif", :alignment => :left, :justify => false }
|
147
|
-
pdf.text_height(str, pdf.body_width, opts).should eql(49)
|
162
|
+
@pdf.text_height(str, @pdf.body_width, opts).should eql(49)
|
148
163
|
end
|
149
164
|
|
150
165
|
specify "should be able to calculate the width of a string of text" do
|
151
166
|
str = "James Healy"
|
152
167
|
str2 = "James Healy is a Ruby dev that lives in Melbourne, Australia. His day job mostly involved Ruby on Rails."
|
153
|
-
pdf = PDF::Wrapper.new
|
154
168
|
opts = {:font_size => 16, :font => "Sans Serif"}
|
155
|
-
pdf.text(str, opts)
|
156
|
-
pdf.text_width(str, opts).should eql(131)
|
157
|
-
pdf.text_width(str2, opts).should eql(1107)
|
169
|
+
@pdf.text(str, opts)
|
170
|
+
@pdf.text_width(str, opts).should eql(131)
|
171
|
+
@pdf.text_width(str2, opts).should eql(1107)
|
158
172
|
end
|
159
173
|
|
160
174
|
specify "should raise an exception if build_pango_layout is passed anything other than a string" do
|
161
|
-
pdf
|
162
|
-
lambda { pdf.build_pango_layout(10) }.should raise_error(ArgumentError)
|
175
|
+
lambda { @pdf.build_pango_layout(10) }.should raise_error(ArgumentError)
|
163
176
|
end
|
164
177
|
|
165
178
|
if RUBY_VERSION >= "1.9"
|
166
179
|
specify "should accept non UTF-8 strings to build_pango_layout and convert them on the fly" do
|
167
|
-
pdf = PDF::Wrapper.new
|
168
180
|
|
169
181
|
# all three of these files have the same content, but in different encodings
|
170
182
|
iso2022_str = File.open(File.dirname(__FILE__) + "/data/shift_jis.txt", "r:ISO-2022-JP") { |f| f.read }.strip!
|
171
183
|
shiftjis_str = File.open(File.dirname(__FILE__) + "/data/iso-2022-jp.txt", "r:Shift_JIS") { |f| f.read }.strip!
|
172
184
|
utf8_str = File.open(File.dirname(__FILE__) + "/data/utf8.txt", "r:UTF-8") { |f| f.read }.strip!
|
173
185
|
|
174
|
-
pdf.build_pango_layout(shiftjis_str)
|
175
|
-
pdf.build_pango_layout(iso2022_str)
|
186
|
+
@pdf.build_pango_layout(shiftjis_str)
|
187
|
+
@pdf.build_pango_layout(iso2022_str)
|
176
188
|
|
177
189
|
# TODO: improve this spec using mocks. Atm, I'm assume that if build_pango_layout didn't raise an exception when
|
178
190
|
# passed in the non UTF-8 strings, then all worked fine. yuck.
|
@@ -183,11 +195,11 @@ context "The PDF::Wrapper class" do
|
|
183
195
|
|
184
196
|
specify "should accept and render pango markup correctly" do
|
185
197
|
msg = "<b>James</b>"
|
186
|
-
pdf
|
187
|
-
pdf.
|
198
|
+
@pdf.text msg, :markup => :pango
|
199
|
+
@pdf.finish
|
188
200
|
|
189
201
|
receiver = PageTextReceiver.new
|
190
|
-
reader = PDF::Reader.string(
|
202
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
191
203
|
|
192
204
|
page_one = receiver.content.first.dup
|
193
205
|
page_one.should eql("James")
|
@@ -195,11 +207,11 @@ context "The PDF::Wrapper class" do
|
|
195
207
|
|
196
208
|
specify "should be able to alle to wrap text on word boundaries" do
|
197
209
|
msg = "James Healy"
|
198
|
-
pdf
|
199
|
-
pdf.
|
210
|
+
@pdf.text msg, :wrap => :word
|
211
|
+
@pdf.finish
|
200
212
|
|
201
213
|
receiver = PageTextReceiver.new
|
202
|
-
reader = PDF::Reader.string(
|
214
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
203
215
|
|
204
216
|
# TODO: test for the text is in the appropriate location on the page
|
205
217
|
receiver.content.first.should eql(msg)
|
@@ -207,11 +219,11 @@ context "The PDF::Wrapper class" do
|
|
207
219
|
|
208
220
|
specify "should be able to able to wrap text on char boundaries" do
|
209
221
|
msg = "James Healy"
|
210
|
-
pdf
|
211
|
-
pdf.
|
222
|
+
@pdf.text msg, :wrap => :char
|
223
|
+
@pdf.finish
|
212
224
|
|
213
225
|
receiver = PageTextReceiver.new
|
214
|
-
reader = PDF::Reader.string(
|
226
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
215
227
|
|
216
228
|
# TODO: test for the text is in the appropriate location on the page
|
217
229
|
receiver.content.first.should eql(msg)
|
@@ -219,11 +231,11 @@ context "The PDF::Wrapper class" do
|
|
219
231
|
|
220
232
|
specify "should be able to wrap text on word and char boundaries" do
|
221
233
|
msg = "James Healy"
|
222
|
-
pdf
|
223
|
-
pdf.
|
234
|
+
@pdf.text msg, :wrap => :wordchar
|
235
|
+
@pdf.finish
|
224
236
|
|
225
237
|
receiver = PageTextReceiver.new
|
226
|
-
reader = PDF::Reader.string(
|
238
|
+
reader = PDF::Reader.string(@output.string, receiver)
|
227
239
|
|
228
240
|
# TODO: test for the text is in the appropriate location on the page
|
229
241
|
receiver.content.first.should eql(msg)
|
@@ -231,8 +243,7 @@ context "The PDF::Wrapper class" do
|
|
231
243
|
|
232
244
|
specify "should raise an error when an invalid wrapping technique is specified" do
|
233
245
|
msg = "James Healy"
|
234
|
-
pdf
|
235
|
-
lambda { pdf.text msg, :wrap => :ponies }.should raise_error(ArgumentError)
|
246
|
+
lambda { @pdf.text msg, :wrap => :ponies }.should raise_error(ArgumentError)
|
236
247
|
end
|
237
248
|
|
238
249
|
end
|