prawn 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +4 -2
- data/lib/prawn.rb +5 -3
- data/lib/prawn/document.rb +7 -7
- data/lib/prawn/document/bounding_box.rb +1 -1
- data/lib/prawn/document/column_box.rb +3 -3
- data/lib/prawn/document/internals.rb +1 -1
- data/lib/prawn/font.rb +24 -8
- data/lib/prawn/font/afm.rb +4 -4
- data/lib/prawn/font_metric_cache.rb +1 -1
- data/lib/prawn/grid.rb +3 -1
- data/lib/prawn/image_handler.rb +3 -1
- data/lib/prawn/images/jpg.rb +1 -1
- data/lib/prawn/measurement_extensions.rb +1 -1
- data/lib/prawn/outline.rb +3 -1
- data/lib/prawn/security.rb +1 -1
- data/lib/prawn/security/arcfour.rb +4 -2
- data/lib/prawn/table.rb +14 -2
- data/lib/prawn/table/cell.rb +1 -1
- data/lib/prawn/table/cells.rb +1 -50
- data/lib/prawn/table/column_width_calculator.rb +131 -10
- data/lib/prawn/text.rb +1 -1
- data/lib/prawn/text/formatted.rb +2 -0
- data/lib/prawn/text/formatted/arranger.rb +1 -1
- data/lib/prawn/text/formatted/box.rb +5 -5
- data/lib/prawn/text/formatted/line_wrap.rb +1 -1
- data/lib/prawn/text/formatted/wrap.rb +2 -0
- data/lib/prawn/utilities.rb +3 -3
- data/manual/absolute_position.pdf +0 -0
- data/manual/basic_concepts/adding_pages.rb +3 -3
- data/manual/basic_concepts/basic_concepts.rb +6 -6
- data/manual/basic_concepts/cursor.rb +5 -5
- data/manual/basic_concepts/measurement.rb +2 -2
- data/manual/basic_concepts/origin.rb +3 -3
- data/manual/basic_concepts/other_cursor_helpers.rb +6 -6
- data/manual/bounding_box/bounding_box.rb +6 -6
- data/manual/bounding_box/bounds.rb +6 -6
- data/manual/bounding_box/canvas.rb +2 -2
- data/manual/bounding_box/creation.rb +3 -3
- data/manual/bounding_box/indentation.rb +9 -9
- data/manual/bounding_box/nesting.rb +8 -8
- data/manual/bounding_box/russian_boxes.rb +1 -1
- data/manual/bounding_box/stretchy.rb +8 -8
- data/manual/{manual/manual.rb → contents.rb} +6 -9
- data/manual/{manual/cover.rb → cover.rb} +6 -6
- data/manual/document_and_page_options/background.rb +2 -2
- data/manual/document_and_page_options/document_and_page_options.rb +4 -4
- data/manual/document_and_page_options/metadata.rb +2 -2
- data/manual/document_and_page_options/page_margins.rb +2 -2
- data/manual/document_and_page_options/page_size.rb +3 -3
- data/manual/example_helper.rb +5 -409
- data/manual/graphics/circle_and_ellipse.rb +4 -4
- data/manual/graphics/color.rb +4 -4
- data/manual/graphics/common_lines.rb +5 -5
- data/manual/graphics/fill_and_stroke.rb +5 -5
- data/manual/graphics/fill_rules.rb +1 -1
- data/manual/graphics/gradients.rb +1 -1
- data/manual/graphics/graphics.rb +8 -8
- data/manual/graphics/helper.rb +1 -1
- data/manual/graphics/line_width.rb +5 -5
- data/manual/graphics/lines_and_curves.rb +5 -5
- data/manual/graphics/polygon.rb +4 -4
- data/manual/graphics/rectangle.rb +3 -3
- data/manual/graphics/rotate.rb +5 -5
- data/manual/graphics/scale.rb +5 -5
- data/manual/graphics/soft_masks.rb +1 -1
- data/manual/graphics/stroke_cap.rb +3 -3
- data/manual/graphics/stroke_dash.rb +1 -1
- data/manual/graphics/stroke_join.rb +4 -4
- data/manual/graphics/translate.rb +5 -5
- data/manual/graphics/transparency.rb +5 -5
- data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +16 -17
- data/manual/images/absolute_position.rb +3 -3
- data/manual/images/fit.rb +2 -2
- data/manual/images/horizontal.rb +3 -3
- data/manual/images/images.rb +7 -7
- data/manual/images/plain_image.rb +1 -1
- data/manual/images/scale.rb +3 -3
- data/manual/images/vertical.rb +3 -3
- data/manual/images/width_and_height.rb +3 -3
- data/manual/layout/boxes.rb +4 -4
- data/manual/layout/content.rb +3 -3
- data/manual/layout/layout.rb +5 -5
- data/manual/layout/simple_grid.rb +2 -2
- data/manual/outline/add_subsection_to.rb +7 -7
- data/manual/outline/insert_section_after.rb +5 -5
- data/manual/outline/outline.rb +6 -6
- data/manual/outline/sections_and_pages.rb +9 -9
- data/manual/repeatable_content/page_numbering.rb +3 -3
- data/manual/repeatable_content/repeatable_content.rb +5 -5
- data/manual/repeatable_content/repeater.rb +4 -4
- data/manual/repeatable_content/stamp.rb +4 -4
- data/manual/security/encryption.rb +2 -2
- data/manual/security/permissions.rb +2 -2
- data/manual/security/security.rb +5 -5
- data/manual/table/basic_block.rb +5 -5
- data/manual/table/before_rendering_page.rb +1 -1
- data/manual/table/cell_border_lines.rb +4 -4
- data/manual/table/cell_borders_and_bg.rb +4 -4
- data/manual/table/cell_dimensions.rb +3 -3
- data/manual/table/cell_text.rb +6 -6
- data/manual/table/column_widths.rb +4 -4
- data/manual/table/content_and_subtables.rb +5 -5
- data/manual/table/creation.rb +2 -2
- data/manual/table/filtering.rb +6 -6
- data/manual/table/flow_and_header.rb +2 -2
- data/manual/table/image_cells.rb +1 -1
- data/manual/table/position.rb +1 -1
- data/manual/table/row_colors.rb +3 -3
- data/manual/table/span.rb +1 -1
- data/manual/table/style.rb +3 -3
- data/manual/table/table.rb +7 -7
- data/manual/table/width.rb +3 -3
- data/manual/text/alignment.rb +1 -1
- data/manual/text/color.rb +1 -1
- data/manual/text/column_box.rb +1 -1
- data/manual/text/fallback_fonts.rb +3 -3
- data/manual/text/font.rb +7 -7
- data/manual/text/font_size.rb +9 -9
- data/manual/text/font_style.rb +3 -3
- data/manual/text/formatted_callbacks.rb +3 -3
- data/manual/text/formatted_text.rb +3 -3
- data/manual/text/free_flowing_text.rb +6 -6
- data/manual/text/inline.rb +5 -5
- data/manual/text/kerning_and_character_spacing.rb +7 -7
- data/manual/text/leading.rb +4 -4
- data/manual/text/line_wrapping.rb +4 -4
- data/manual/text/paragraph_indentation.rb +3 -3
- data/manual/text/positioned_text.rb +3 -3
- data/manual/text/registering_families.rb +6 -6
- data/manual/text/rendering_and_color.rb +2 -2
- data/manual/text/right_to_left_text.rb +2 -2
- data/manual/text/rotation.rb +4 -4
- data/manual/text/single_usage.rb +3 -3
- data/manual/text/text.rb +9 -9
- data/manual/text/text_box_excess.rb +2 -2
- data/manual/text/text_box_extensions.rb +3 -3
- data/manual/text/text_box_overflow.rb +4 -4
- data/manual/text/utf8.rb +5 -5
- data/manual/text/win_ansi_charset.rb +1 -1
- data/prawn.gemspec +5 -3
- data/spec/acceptance/png.rb +5 -3
- data/spec/cell_spec.rb +1 -0
- data/spec/column_box_spec.rb +1 -1
- data/spec/extensions/encoding_helpers.rb +2 -0
- data/spec/extensions/mocha.rb +2 -0
- data/spec/font_spec.rb +15 -0
- data/spec/measurement_units_spec.rb +2 -0
- data/spec/repeater_spec.rb +2 -0
- data/spec/soft_mask_spec.rb +2 -0
- data/spec/stamp_spec.rb +2 -0
- data/spec/table_spec.rb +103 -10
- data/spec/text_spec.rb +1 -1
- data/spec/transparency_spec.rb +2 -0
- metadata +42 -18
- data/lib/prawn/layout.rb +0 -17
- data/manual/example_file.rb +0 -111
- data/manual/example_package.rb +0 -53
- data/manual/example_section.rb +0 -46
- data/manual/syntax_highlight.rb +0 -52
@@ -16,10 +16,10 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
16
16
|
%w[.. example_helper]))
|
17
17
|
|
18
18
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
19
|
-
Prawn::Example.generate(filename) do
|
19
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
20
20
|
fill_color "00ff00"
|
21
21
|
stroke_color "0000ff"
|
22
|
-
|
22
|
+
|
23
23
|
font_size(40) do
|
24
24
|
# normal rendering mode: fill
|
25
25
|
text "This text is filled with green."
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Prawn can be used with right-to-left text. The direction can be set
|
4
4
|
# document-wide, on particular text, or on a text-box. Setting the direction to
|
5
5
|
# <code>:rtl</code> automatically changes the default alignment to
|
@@ -13,7 +13,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
13
13
|
%w[.. example_helper]))
|
14
14
|
|
15
15
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
|
-
Prawn::Example.generate(filename) do
|
16
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
17
17
|
# set the direction document-wide
|
18
18
|
self.text_direction = :rtl
|
19
19
|
|
data/manual/text/rotation.rb
CHANGED
@@ -12,7 +12,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
12
12
|
%w[.. example_helper]))
|
13
13
|
|
14
14
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
|
-
Prawn::Example.generate(filename) do
|
15
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
16
16
|
width = 100
|
17
17
|
height = 60
|
18
18
|
angle = 30
|
@@ -22,15 +22,15 @@ Prawn::Example.generate(filename) do
|
|
22
22
|
stroke_rectangle [0, y], width, height
|
23
23
|
text_box("This text was not rotated",
|
24
24
|
:at => [0, y], :width => width, :height => height)
|
25
|
-
|
25
|
+
|
26
26
|
stroke_rectangle [0, y - 100], width, height
|
27
27
|
text_box("This text was rotated around the center",
|
28
28
|
:at => [0, y - 100], :width => width, :height => height,
|
29
29
|
:rotate => angle, :rotate_around => :center)
|
30
|
-
|
30
|
+
|
31
31
|
[:lower_left, :upper_left,
|
32
32
|
:lower_right, :upper_right].each_with_index do |corner, index|
|
33
|
-
|
33
|
+
|
34
34
|
y = y - 100 if index == 2
|
35
35
|
stroke_rectangle [x + (index % 2) * 200, y], width, height
|
36
36
|
text_box("This text was rotated around the #{corner} corner.",
|
data/manual/text/single_usage.rb
CHANGED
@@ -17,16 +17,16 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
17
17
|
%w[.. example_helper]))
|
18
18
|
|
19
19
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
20
|
-
Prawn::Example.generate(filename) do
|
20
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
21
21
|
# Using a TTF font file
|
22
22
|
font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf") do
|
23
23
|
text "Written with the DejaVu Sans TTF font."
|
24
24
|
end
|
25
25
|
move_down 20
|
26
|
-
|
26
|
+
|
27
27
|
text "Written with the default font."
|
28
28
|
move_down 20
|
29
|
-
|
29
|
+
|
30
30
|
# Using an DFONT font file
|
31
31
|
font("#{Prawn::DATADIR}/fonts/Panic+Sans.dfont") do
|
32
32
|
text "Written with the Panic Sans DFONT font"
|
data/manual/text/text.rb
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
6
|
%w[.. example_helper]))
|
7
7
|
|
8
|
-
Prawn::Example.generate("text.pdf", :page_size => "FOLIO") do
|
9
|
-
|
8
|
+
Prawn::ManualBuilder::Example.generate("text.pdf", :page_size => "FOLIO") do
|
9
|
+
|
10
10
|
package "text" do |p|
|
11
|
-
|
11
|
+
|
12
12
|
p.section "Basics" do |s|
|
13
13
|
s.example "free_flowing_text"
|
14
14
|
s.example "positioned_text"
|
@@ -16,7 +16,7 @@ Prawn::Example.generate("text.pdf", :page_size => "FOLIO") do
|
|
16
16
|
s.example "text_box_excess"
|
17
17
|
s.example "column_box"
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
p.section "Styling" do |s|
|
21
21
|
s.example "font"
|
22
22
|
s.example "font_size"
|
@@ -28,7 +28,7 @@ Prawn::Example.generate("text.pdf", :page_size => "FOLIO") do
|
|
28
28
|
s.example "paragraph_indentation"
|
29
29
|
s.example "rotation"
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
p.section "Advanced Styling" do |s|
|
33
33
|
s.example "inline"
|
34
34
|
s.example "formatted_text"
|
@@ -36,12 +36,12 @@ Prawn::Example.generate("text.pdf", :page_size => "FOLIO") do
|
|
36
36
|
s.example "rendering_and_color"
|
37
37
|
s.example "text_box_extensions"
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
p.section "External Fonts" do |s|
|
41
41
|
s.example "single_usage"
|
42
42
|
s.example "registering_families"
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
p.section "M17n" do |s|
|
46
46
|
s.example "utf8"
|
47
47
|
s.example "line_wrapping"
|
@@ -49,7 +49,7 @@ Prawn::Example.generate("text.pdf", :page_size => "FOLIO") do
|
|
49
49
|
s.example "fallback_fonts"
|
50
50
|
s.example "win_ansi_charset"
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
p.intro do
|
54
54
|
prose("This is probably the feature people will use the most. There is no shortage of options when it comes to text. You'll be hard pressed to find a use case that is not covered by one of the text methods and configurable options.
|
55
55
|
|
@@ -68,6 +68,6 @@ Prawn::Example.generate("text.pdf", :page_size => "FOLIO") do
|
|
68
68
|
"What happens when rendering text in different languages"
|
69
69
|
)
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
end
|
73
73
|
end
|
@@ -13,7 +13,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
13
13
|
%w[.. example_helper]))
|
14
14
|
|
15
15
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
|
-
Prawn::Example.generate(filename) do
|
16
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
17
17
|
string = "This is the beginning of the text. It will be cut somewhere and " +
|
18
18
|
"the rest of the text will procede to be rendered this time by " +
|
19
19
|
"calling another method." + " . " * 50
|
@@ -25,7 +25,7 @@ Prawn::Example.generate(filename) do
|
|
25
25
|
:overflow => :truncate,
|
26
26
|
:at => [100, y_position],
|
27
27
|
:size => 18
|
28
|
-
|
28
|
+
|
29
29
|
text_box excess_text,
|
30
30
|
:width => 300,
|
31
31
|
:at => [100, y_position - 100]
|
@@ -14,7 +14,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
14
14
|
%w[.. example_helper]))
|
15
15
|
|
16
16
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
|
-
Prawn::Example.generate(filename) do
|
17
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
18
18
|
module TriangleBox
|
19
19
|
def available_width
|
20
20
|
height + 25
|
@@ -24,14 +24,14 @@ Prawn::Example.generate(filename) do
|
|
24
24
|
y_position = cursor - 10
|
25
25
|
width = 100
|
26
26
|
height = 100
|
27
|
-
|
27
|
+
|
28
28
|
Prawn::Text::Box.extensions << TriangleBox
|
29
29
|
stroke_rectangle([0, y_position], width, height)
|
30
30
|
text_box("A" * 100,
|
31
31
|
:at => [0, y_position],
|
32
32
|
:width => width,
|
33
33
|
:height => height)
|
34
|
-
|
34
|
+
|
35
35
|
Prawn::Text::Formatted::Box.extensions << TriangleBox
|
36
36
|
stroke_rectangle([200, y_position], width, height)
|
37
37
|
formatted_text_box([:text => "A" * 100, :color => "009900"],
|
@@ -16,22 +16,22 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
16
16
|
%w[.. example_helper]))
|
17
17
|
|
18
18
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
19
|
-
Prawn::Example.generate(filename) do
|
19
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
20
20
|
string = "This is the sample text used for the text boxes. See how it " +
|
21
21
|
"behave with the various overflow options used."
|
22
22
|
|
23
23
|
text string
|
24
|
-
|
24
|
+
|
25
25
|
y_position = cursor - 20
|
26
26
|
[:truncate, :expand, :shrink_to_fit].each_with_index do |mode, i|
|
27
27
|
text_box string, :at => [i * 150, y_position],
|
28
28
|
:width => 100, :height => 50,
|
29
29
|
:overflow => mode
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
string = "If the box is too small for the text, :shrink_to_fit " +
|
33
33
|
"can render the text in a really small font size."
|
34
|
-
|
34
|
+
|
35
35
|
move_down 120
|
36
36
|
text string
|
37
37
|
y_position = cursor - 20
|
data/manual/text/utf8.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Multilingualization isn't much of a problem on Prawn as its default encoding
|
4
4
|
# is UTF-8. The only thing you need to worry about is if the font support the
|
5
5
|
# glyphs of your language.
|
@@ -8,19 +8,19 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
8
8
|
%w[.. example_helper]))
|
9
9
|
|
10
10
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
|
-
Prawn::Example.generate(filename) do
|
11
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
12
12
|
text "Take this example, a simple Euro sign:"
|
13
13
|
text "€", :size => 32
|
14
14
|
move_down 20
|
15
|
-
|
15
|
+
|
16
16
|
text "Seems ok. Now let's try something more complex:"
|
17
17
|
text "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει."
|
18
18
|
move_down 20
|
19
|
-
|
19
|
+
|
20
20
|
text "Looks like the current font (#{font.inspect}) doesn't support those."
|
21
21
|
text "Let's try them with another font."
|
22
22
|
move_down 20
|
23
|
-
|
23
|
+
|
24
24
|
font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf") do
|
25
25
|
text "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει."
|
26
26
|
text "There you go."
|
@@ -8,7 +8,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
8
8
|
%w[.. example_helper]))
|
9
9
|
|
10
10
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
|
-
Prawn::Example.generate(filename) do
|
11
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
12
12
|
FONT_SIZE = 9.5
|
13
13
|
|
14
14
|
x = 0
|
data/prawn.gemspec
CHANGED
@@ -20,17 +20,19 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.rubyforge_project = "prawn"
|
21
21
|
spec.licenses = ['RUBY', 'GPL-2', 'GPL-3']
|
22
22
|
|
23
|
-
spec.add_dependency('ttfunk', '~> 1.
|
24
|
-
spec.add_dependency('pdf-core', "~> 0.2.
|
23
|
+
spec.add_dependency('ttfunk', '~> 1.2.0')
|
24
|
+
spec.add_dependency('pdf-core', "~> 0.2.5")
|
25
25
|
|
26
26
|
spec.add_development_dependency('pdf-inspector', '~> 1.1.0')
|
27
27
|
spec.add_development_dependency('coderay', '~> 1.0.7')
|
28
28
|
spec.add_development_dependency('yard')
|
29
|
-
spec.add_development_dependency('rspec')
|
29
|
+
spec.add_development_dependency('rspec', '2.14.1')
|
30
30
|
spec.add_development_dependency('mocha')
|
31
31
|
spec.add_development_dependency('rake')
|
32
32
|
spec.add_development_dependency('simplecov')
|
33
|
+
spec.add_development_dependency('prawn-manual_builder', ">= 0.1.1")
|
33
34
|
spec.add_development_dependency('pdf-reader', '~>1.2')
|
35
|
+
spec.add_development_dependency('rubocop', '0.20.1')
|
34
36
|
|
35
37
|
spec.homepage = "http://prawn.majesticseacreature.com"
|
36
38
|
spec.description = <<END_DESC
|
data/spec/acceptance/png.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require_relative "../../lib/prawn"
|
2
4
|
|
3
5
|
images = [
|
@@ -15,9 +17,9 @@ Prawn::Document.generate("png_types.pdf", :page_size => "A5") do
|
|
15
17
|
fill_color "FF0000"
|
16
18
|
|
17
19
|
fill_rectangle bounds.top_left, bounds.width, bounds.height
|
18
|
-
text header
|
19
|
-
|
20
|
+
text header
|
21
|
+
|
20
22
|
image file, :at => [50,450]
|
21
|
-
end
|
23
|
+
end
|
22
24
|
end
|
23
25
|
|
data/spec/cell_spec.rb
CHANGED
data/spec/column_box_spec.rb
CHANGED
data/spec/extensions/mocha.rb
CHANGED
data/spec/font_spec.rb
CHANGED
@@ -159,6 +159,21 @@ describe "font style support" do
|
|
159
159
|
name = name.sub(/\w+\+/, "subset+")
|
160
160
|
name.should == "subset+DejaVuSans"
|
161
161
|
end
|
162
|
+
|
163
|
+
it "should accept IO objects for font files" do
|
164
|
+
io = File.open "#{Prawn::DATADIR}/fonts/DejaVuSans.ttf"
|
165
|
+
@pdf.font_families["DejaVu Sans"] = {
|
166
|
+
normal: Prawn::Font.load(@pdf, io)
|
167
|
+
}
|
168
|
+
|
169
|
+
@pdf.font "DejaVu Sans"
|
170
|
+
@pdf.text "In DejaVu Sans"
|
171
|
+
|
172
|
+
text = PDF::Inspector::Text.analyze(@pdf.render)
|
173
|
+
name = text.font_settings.map { |e| e[:name] }.first.to_s
|
174
|
+
name = name.sub(/\w+\+/, "subset+")
|
175
|
+
name.should == "subset+DejaVuSans"
|
176
|
+
end
|
162
177
|
end
|
163
178
|
|
164
179
|
describe "Transactional font handling" do
|
data/spec/repeater_spec.rb
CHANGED
data/spec/soft_mask_spec.rb
CHANGED
data/spec/stamp_spec.rb
CHANGED
data/spec/table_spec.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
# run rspec -t issue:XYZ to run tests for a specific github issue
|
4
|
+
# or rspec -t unresolved to run tests for all unresolved issues
|
5
|
+
|
6
|
+
|
3
7
|
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
8
|
+
|
9
|
+
require_relative "../lib/prawn/table"
|
4
10
|
require 'set'
|
5
11
|
|
6
12
|
describe "Prawn::Table" do
|
@@ -45,6 +51,48 @@ describe "Prawn::Table" do
|
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
54
|
+
describe "headers should allow for rowspan" do
|
55
|
+
it "should remember rowspans accross multiple pages", :issue => 721 do
|
56
|
+
pdf = Prawn::Document.new({:page_size => "A4", :page_layout => :portrait})
|
57
|
+
rows = [ [{:content=>"The\nNumber", :rowspan=>2}, {:content=>"Prefixed", :colspan=>2} ],
|
58
|
+
["A's", "B's"] ]
|
59
|
+
|
60
|
+
(1..50).each do |n|
|
61
|
+
rows.push( ["#{n}", "A#{n}", "B#{n}"] )
|
62
|
+
end
|
63
|
+
|
64
|
+
pdf.table( rows, :header=>2 ) do
|
65
|
+
row(0..1).style :background_color=>"FFFFCC"
|
66
|
+
end
|
67
|
+
|
68
|
+
#ensure that the header on page 1 is identical to the header on page 0
|
69
|
+
output = PDF::Inspector::Page.analyze(pdf.render)
|
70
|
+
output.pages[0][:strings][0..4].should == output.pages[1][:strings][0..4]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "Text may be longer than the available space in a row on a single page" do
|
75
|
+
it "should not glitch the layout if there is too much text to fit onto a single row on a single page", :unresolved, :issue => 562 do
|
76
|
+
pdf = Prawn::Document.new({:page_size => "A4", :page_layout => :portrait})
|
77
|
+
|
78
|
+
table_data = Array.new
|
79
|
+
text = 'This will be a very long text. ' * 5
|
80
|
+
table_data.push([{:content => text, :rowspan => 2}, 'b', 'c'])
|
81
|
+
table_data.push(['b','c'])
|
82
|
+
|
83
|
+
column_widths = [50, 60, 400]
|
84
|
+
|
85
|
+
table = Prawn::Table.new table_data, pdf,:column_widths => column_widths
|
86
|
+
|
87
|
+
#render the table onto the pdf
|
88
|
+
table.draw
|
89
|
+
|
90
|
+
#expected behavior would be for the long text to be cut off or an exception to be raised
|
91
|
+
#thus we only expect a single page
|
92
|
+
pdf.page_count.should == 1
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
48
96
|
describe "You can explicitly set the column widths and use a colspan > 1" do
|
49
97
|
|
50
98
|
it "should tolerate floating point rounding errors < 0.000000001" do
|
@@ -53,9 +101,9 @@ describe "Prawn::Table" do
|
|
53
101
|
]
|
54
102
|
#we need values with lots of decimals so that arithmetic errors will occur
|
55
103
|
#the values are not arbitrary but where found converting mm to pdf pt
|
56
|
-
column_widths=[137, 40, 40, 54.69291338582678, 54.69291338582678,
|
57
|
-
54.69291338582678, 54.69291338582678, 54.69291338582678,
|
58
|
-
54.69291338582678, 54.69291338582678, 54.69291338582678,
|
104
|
+
column_widths=[137, 40, 40, 54.69291338582678, 54.69291338582678,
|
105
|
+
54.69291338582678, 54.69291338582678, 54.69291338582678,
|
106
|
+
54.69291338582678, 54.69291338582678, 54.69291338582678,
|
59
107
|
54.69291338582678]
|
60
108
|
|
61
109
|
pdf = Prawn::Document.new({:page_size => 'A4', :page_layout => :landscape})
|
@@ -63,10 +111,10 @@ describe "Prawn::Table" do
|
|
63
111
|
table.column_widths.should == column_widths
|
64
112
|
end
|
65
113
|
|
66
|
-
it "should work with two different given colspans", :issue => 628 do
|
114
|
+
it "should work with two different given colspans", :issue => 628 do
|
67
115
|
data = [
|
68
|
-
[" ", " ", " "],
|
69
|
-
[{:content=>" ", :colspan=>3}],
|
116
|
+
[" ", " ", " "],
|
117
|
+
[{:content=>" ", :colspan=>3}],
|
70
118
|
[" ", {:content=>" ", :colspan=>2}]
|
71
119
|
]
|
72
120
|
column_widths = [60, 240, 60]
|
@@ -114,21 +162,49 @@ describe "Prawn::Table" do
|
|
114
162
|
:unresolved, :issue => 612 do
|
115
163
|
|
116
164
|
pdf = Prawn::Document.new
|
117
|
-
|
165
|
+
|
118
166
|
first = {:content=>"Foooo fo foooooo",:width=>50,:align=>:center}
|
119
167
|
second = {:content=>"Foooo",:colspan=>2,:width=>70,:align=>:center}
|
120
168
|
third = {:content=>"fooooooooooo, fooooooooooooo, fooo, foooooo fooooo",:width=>50,:align=>:center}
|
121
169
|
fourth = {:content=>"Bar",:width=>20,:align=>:center}
|
122
|
-
|
170
|
+
|
123
171
|
table_content = [[
|
124
172
|
first,
|
125
173
|
[[second],[third,fourth]]
|
126
174
|
]]
|
127
|
-
|
175
|
+
|
128
176
|
table = Prawn::Table.new table_content, pdf
|
129
177
|
table.column_widths.should == [50.0, 70.0]
|
130
178
|
end
|
131
179
|
|
180
|
+
it "illustrates issue #710", :issue => 710 do
|
181
|
+
partial_width = 40
|
182
|
+
pdf = Prawn::Document.new({page_size: "LETTER", page_layout: :portrait})
|
183
|
+
col_widths = [
|
184
|
+
50,
|
185
|
+
partial_width, partial_width, partial_width, partial_width
|
186
|
+
]
|
187
|
+
|
188
|
+
day_header = [{
|
189
|
+
content: "Monday, August 5th, A.S. XLIX",
|
190
|
+
colspan: 5,
|
191
|
+
}]
|
192
|
+
|
193
|
+
times = [{
|
194
|
+
content: "Loc",
|
195
|
+
colspan: 1,
|
196
|
+
}, {
|
197
|
+
content: "8:00",
|
198
|
+
colspan: 4,
|
199
|
+
}]
|
200
|
+
|
201
|
+
data = [ day_header ] + [ times ]
|
202
|
+
|
203
|
+
#raised a Prawn::Errors::CannotFit:
|
204
|
+
#Table's width was set larger than its contents' maximum width (max width 210, requested 218.0)
|
205
|
+
table = Prawn::Table.new data, pdf, :column_widths => col_widths
|
206
|
+
end
|
207
|
+
|
132
208
|
it "illustrate issue #533" do
|
133
209
|
data = [['', '', '', '', '',''],
|
134
210
|
['',{:content => '', :colspan => 5}]]
|
@@ -162,7 +238,7 @@ describe "Prawn::Table" do
|
|
162
238
|
table.column_widths.should == [50.0, 200.0]
|
163
239
|
end
|
164
240
|
|
165
|
-
it "illustrates a variant of problem in issue #407 - comment 28556698" do
|
241
|
+
it "illustrates a variant of problem in issue #407 - comment 28556698" do
|
166
242
|
pdf = Prawn::Document.new
|
167
243
|
table_data = [["a", "b", "c"], [{:content=>"d", :colspan=>3}]]
|
168
244
|
column_widths = [50, 60, 400]
|
@@ -711,6 +787,23 @@ describe "Prawn::Table" do
|
|
711
787
|
output.pages[1][:strings].should == ["Header", "Body"]
|
712
788
|
end
|
713
789
|
|
790
|
+
it 'should only draw first-page header if the first multi-row fits',
|
791
|
+
:issue => 707 do
|
792
|
+
pdf = Prawn::Document.new
|
793
|
+
|
794
|
+
pdf.y = 100 # not enough room for the header and multirow cell
|
795
|
+
pdf.table [
|
796
|
+
[{content: 'Header', colspan: 2}],
|
797
|
+
[{content: 'Multirow cell', rowspan: 3}, 'Line 1'],
|
798
|
+
] + (2..3).map { |i| ["Line #{i}"] }, :header => true
|
799
|
+
|
800
|
+
output = PDF::Inspector::Page.analyze(pdf.render)
|
801
|
+
# Ensure we only drew the header once, on the second page
|
802
|
+
output.pages[0][:strings].should == []
|
803
|
+
output.pages[1][:strings].should == ['Header', 'Multirow cell', 'Line 1',
|
804
|
+
'Line 2', 'Line 3']
|
805
|
+
end
|
806
|
+
|
714
807
|
it "should draw background before borders, but only within pages" do
|
715
808
|
seq = sequence("drawing_order")
|
716
809
|
|