prawn 0.11.1 → 0.12.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/GPLv2 +340 -0
- data/GPLv3 +674 -0
- data/README.md +96 -0
- data/Rakefile +0 -12
- data/examples/example_helper.rb +3 -0
- data/lib/prawn.rb +1 -1
- data/lib/prawn/core/page.rb +4 -2
- data/lib/prawn/core/pdf_object.rb +7 -7
- data/lib/prawn/core/text/formatted/arranger.rb +2 -1
- data/lib/prawn/core/text/formatted/line_wrap.rb +2 -1
- data/lib/prawn/core/text/formatted/wrap.rb +5 -1
- data/lib/prawn/document.rb +135 -112
- data/lib/prawn/document/bounding_box.rb +51 -5
- data/lib/prawn/document/column_box.rb +0 -19
- data/lib/prawn/document/internals.rb +1 -0
- data/lib/prawn/document/snapshot.rb +3 -0
- data/lib/prawn/font.rb +4 -3
- data/lib/prawn/font/afm.rb +11 -2
- data/lib/prawn/font/ttf.rb +15 -0
- data/lib/prawn/images.rb +1 -1
- data/lib/prawn/table.rb +23 -7
- data/lib/prawn/table/cell.rb +31 -9
- data/lib/prawn/table/cell/text.rb +2 -2
- data/prawn.gemspec +5 -6
- data/spec/bounding_box_spec.rb +157 -0
- data/spec/data/curves.pdf +66 -0
- data/spec/document_spec.rb +59 -4
- data/spec/extensions/mocha.rb +1 -3
- data/spec/font_spec.rb +23 -0
- data/spec/formatted_text_box_spec.rb +40 -0
- data/spec/images_spec.rb +7 -0
- data/spec/object_store_spec.rb +3 -3
- data/spec/snapshot_spec.rb +33 -0
- data/spec/table_spec.rb +75 -0
- data/spec/template_spec.rb +11 -5
- data/spec/text_spacing_spec.rb +18 -0
- data/spec/text_spec.rb +32 -0
- metadata +217 -283
- data/HACKING +0 -50
- data/README +0 -141
- data/examples/bounding_box/bounding_boxes.rb +0 -44
- data/examples/bounding_box/indentation.rb +0 -35
- data/examples/bounding_box/stretched_nesting.rb +0 -68
- data/examples/general/background.rb +0 -24
- data/examples/general/canvas.rb +0 -16
- data/examples/general/float.rb +0 -12
- data/examples/general/margin.rb +0 -37
- data/examples/general/measurement_units.rb +0 -52
- data/examples/general/metadata-info.rb +0 -17
- data/examples/general/multi_page_layout.rb +0 -19
- data/examples/general/outlines.rb +0 -67
- data/examples/general/page_geometry.rb +0 -32
- data/examples/general/page_numbering.rb +0 -40
- data/examples/general/page_templates.rb +0 -20
- data/examples/general/repeaters.rb +0 -48
- data/examples/general/stamp.rb +0 -42
- data/examples/general/templates.rb +0 -14
- data/examples/graphics/basic_images.rb +0 -24
- data/examples/graphics/curves.rb +0 -12
- data/examples/graphics/hexagon.rb +0 -14
- data/examples/graphics/image_fit.rb +0 -16
- data/examples/graphics/image_flow.rb +0 -38
- data/examples/graphics/image_position.rb +0 -18
- data/examples/graphics/line.rb +0 -33
- data/examples/graphics/polygons.rb +0 -17
- data/examples/graphics/rounded_polygons.rb +0 -20
- data/examples/graphics/rounded_rectangle.rb +0 -21
- data/examples/graphics/ruport_style_helpers.rb +0 -20
- data/examples/graphics/stroke_bounds.rb +0 -21
- data/examples/graphics/stroke_cap_and_join.rb +0 -46
- data/examples/graphics/stroke_dash.rb +0 -43
- data/examples/graphics/transformations.rb +0 -53
- data/examples/graphics/transparency.rb +0 -27
- data/examples/grid/bounding_boxes.rb +0 -22
- data/examples/grid/column_gutter_grid.rb +0 -21
- data/examples/grid/multi_boxes.rb +0 -52
- data/examples/grid/show_grid.rb +0 -14
- data/examples/grid/simple_grid.rb +0 -21
- data/examples/m17n/chinese_text_wrapping.rb +0 -18
- data/examples/m17n/euro.rb +0 -16
- data/examples/m17n/utf8.rb +0 -14
- data/examples/security/hello_foo.rb +0 -9
- data/examples/table/borders.rb +0 -25
- data/examples/table/cell.rb +0 -13
- data/examples/table/checkerboard.rb +0 -23
- data/examples/table/inline_format_table.rb +0 -13
- data/examples/table/multi_page_table.rb +0 -10
- data/examples/table/simple_table.rb +0 -25
- data/examples/table/subtable.rb +0 -13
- data/examples/table/widths.rb +0 -21
- data/examples/text/alignment.rb +0 -19
- data/examples/text/character_spacing.rb +0 -13
- data/examples/text/dfont.rb +0 -49
- data/examples/text/family_based_styling.rb +0 -25
- data/examples/text/font_size.rb +0 -34
- data/examples/text/inline_format.rb +0 -104
- data/examples/text/kerning.rb +0 -31
- data/examples/text/rendering_mode.rb +0 -21
- data/examples/text/rotated.rb +0 -99
- data/examples/text/shaped_text_box.rb +0 -32
- data/examples/text/simple_text.rb +0 -18
- data/examples/text/simple_text_ttf.rb +0 -18
- data/examples/text/span.rb +0 -30
- data/examples/text/text_box.rb +0 -90
- data/examples/text/text_box_returning_excess.rb +0 -52
- data/examples/text/text_flow.rb +0 -68
data/examples/m17n/utf8.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Shows that Prawn works out of the box with UTF-8 text, so long as you use
|
4
|
-
# a TTF file with the necessary glyphs for your content.
|
5
|
-
#
|
6
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
7
|
-
%w[.. example_helper]))
|
8
|
-
|
9
|
-
Prawn::Document.generate("utf8.pdf") do
|
10
|
-
font "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"
|
11
|
-
text "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει." * 20
|
12
|
-
end
|
13
|
-
|
14
|
-
|
@@ -1,9 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
2
|
-
%w[.. example_helper]))
|
3
|
-
|
4
|
-
Prawn::Document.generate("security_hello_foo.pdf") do
|
5
|
-
text "Hello, world!"
|
6
|
-
encrypt_document :user_password => 'foo', :owner_password => 'bar',
|
7
|
-
:permissions => { :print_document => false }
|
8
|
-
end
|
9
|
-
|
data/examples/table/borders.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
4
|
-
%w[.. example_helper]))
|
5
|
-
|
6
|
-
Prawn::Document.generate("borders.pdf") do |pdf|
|
7
|
-
pdf.text "This example demonstrates alignment of the background and " +
|
8
|
-
"borders, including proper corner alignment without overlap."
|
9
|
-
pdf.move_down 20
|
10
|
-
|
11
|
-
pdf.cell :content => "all borders", :background_color => 'ff0000'
|
12
|
-
pdf.move_down 15
|
13
|
-
|
14
|
-
[:top, :bottom, :left, :right].each do |border|
|
15
|
-
y = pdf.cursor
|
16
|
-
pdf.cell :content => "no #{border} border", :background_color => 'ff0000',
|
17
|
-
:borders => ([:top, :bottom, :left, :right] - [border])
|
18
|
-
pdf.cell :content => "#{border} border 0", :background_color => 'ff0000',
|
19
|
-
:"border_#{border}_width" => 0, :at => [150, y]
|
20
|
-
pdf.cell :content => "#{border} border 2", :background_color => 'ff0000',
|
21
|
-
:"border_#{border}_width" => 2, :at => [300, y]
|
22
|
-
pdf.move_down 15
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
data/examples/table/cell.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Low level cell and row implementation, which form the basic building
|
4
|
-
# blocks for Prawn tables. Only necessary to know about if you plan on
|
5
|
-
# building your own table implementation from scratch or heavily modify
|
6
|
-
# the existing table system.
|
7
|
-
#
|
8
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
9
|
-
%w[.. example_helper]))
|
10
|
-
|
11
|
-
Prawn::Document.generate("cell.pdf") do
|
12
|
-
cell :content => "test", :padding => 10, :font_style => :bold, :size => 7
|
13
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# Shows how to use the style() method with a block to style each cell with
|
4
|
-
# custom code.
|
5
|
-
|
6
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
7
|
-
%w[.. example_helper]))
|
8
|
-
|
9
|
-
Prawn::Document.generate("checkerboard.pdf") do
|
10
|
-
|
11
|
-
text "Here is a checkerboard:"
|
12
|
-
|
13
|
-
table [[""] * 8] * 8 do |t|
|
14
|
-
t.cells.style :width => 24, :height => 24
|
15
|
-
t.cells.style do |c|
|
16
|
-
c.background_color = ((c.row + c.column) % 2).zero? ? '000000' : 'ffffff'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
move_down 12
|
21
|
-
text "Hope you enjoyed it!"
|
22
|
-
|
23
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
4
|
-
%w[.. example_helper]))
|
5
|
-
|
6
|
-
Prawn::Document.generate("inline_format_table.pdf") do
|
7
|
-
|
8
|
-
table([%w[foo bar baz<b>baz</b>], %w[baz bar <i>foo</i>foo]],
|
9
|
-
:cell_style => { :padding => 12, :inline_format => true },
|
10
|
-
:width => bounds.width)
|
11
|
-
|
12
|
-
end
|
13
|
-
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
4
|
-
%w[.. example_helper]))
|
5
|
-
|
6
|
-
Prawn::Document.generate("simple_table.pdf") do
|
7
|
-
|
8
|
-
table([["foo", "bar " * 15, "baz"],
|
9
|
-
["baz", "bar", "foo " * 15]], :cell_style => { :padding => 12 }) do
|
10
|
-
cells.borders = []
|
11
|
-
|
12
|
-
# Use the row() and style() methods to select and style a row.
|
13
|
-
style row(0), :border_width => 2, :borders => [:bottom]
|
14
|
-
|
15
|
-
# The style method can take a block, allowing you to customize properties
|
16
|
-
# per-cell.
|
17
|
-
style(columns(0..1)) { |cell| cell.borders |= [:right] }
|
18
|
-
end
|
19
|
-
|
20
|
-
move_down 12
|
21
|
-
|
22
|
-
table([%w[foo bar bazbaz], %w[baz bar foofoo]],
|
23
|
-
:cell_style => { :padding => 12 }, :width => bounds.width)
|
24
|
-
|
25
|
-
end
|
data/examples/table/subtable.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
4
|
-
%w[.. example_helper]))
|
5
|
-
|
6
|
-
Prawn::Document.generate("subtable.pdf") do |pdf|
|
7
|
-
|
8
|
-
subtable = Prawn::Table.new([%w[one two], %w[three four]], pdf)
|
9
|
-
|
10
|
-
pdf.table([["Subtable ->", subtable, "<-"]])
|
11
|
-
|
12
|
-
end
|
13
|
-
|
data/examples/table/widths.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
4
|
-
%w[.. example_helper]))
|
5
|
-
|
6
|
-
Prawn::Document.generate("widths.pdf") do
|
7
|
-
|
8
|
-
text "Some 300-pt tables:"
|
9
|
-
|
10
|
-
table([%w[A B C]], :width => 300)
|
11
|
-
move_down 12
|
12
|
-
|
13
|
-
table([%w[A B C], %w[D Everything\ under\ the\ sun F]], :width => 300)
|
14
|
-
move_down 12
|
15
|
-
|
16
|
-
# TODO: what should this be doing? Like the current prawn-layout, it does
|
17
|
-
# not attempt to reflow the second column.
|
18
|
-
# table([["A", "Blah " * 20, "C"]], :width => 300)
|
19
|
-
# move_down 12
|
20
|
-
|
21
|
-
end
|
data/examples/text/alignment.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# This example demonstrates usage of Document#text with the :align option.
|
4
|
-
# Available options are :left, :right, and :center, with :left as default.
|
5
|
-
#
|
6
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
7
|
-
%w[.. example_helper]))
|
8
|
-
|
9
|
-
Prawn::Document.generate("alignment.pdf") do
|
10
|
-
text "This text should be left aligned"
|
11
|
-
text "This text should be centered", :align => :center
|
12
|
-
text "This text should be right aligned", :align => :right
|
13
|
-
|
14
|
-
pad(20) { text "This is Flowing from the left. " * 20 }
|
15
|
-
|
16
|
-
pad(20) { text "This is Flowing from the center. " * 20, :align => :center }
|
17
|
-
|
18
|
-
pad(20) { text "This is Flowing from the right. " * 20, :align => :right }
|
19
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Example of character spacing
|
4
|
-
#
|
5
|
-
#
|
6
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
7
|
-
%w[.. example_helper]))
|
8
|
-
|
9
|
-
Prawn::Document.generate "character_spacing.pdf" do |pdf|
|
10
|
-
string = "hello world " * 50
|
11
|
-
pdf.text(string, :character_spacing => 2.5)
|
12
|
-
pdf.text(string)
|
13
|
-
end
|
data/examples/text/dfont.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
4
|
-
%w[.. example_helper]))
|
5
|
-
|
6
|
-
DFONT_FILE = "#{Prawn::BASEDIR}/data/fonts/Action Man.dfont"
|
7
|
-
puts "There are #{Prawn::Font::DFont.font_count(DFONT_FILE)} fonts in #{DFONT_FILE}:"
|
8
|
-
Prawn::Font::DFont.named_fonts(DFONT_FILE).each do |name|
|
9
|
-
puts "* #{name}"
|
10
|
-
end
|
11
|
-
|
12
|
-
puts
|
13
|
-
puts "generating sample document in 'dfont.pdf'..."
|
14
|
-
|
15
|
-
Prawn::Document.generate "dfont.pdf" do
|
16
|
-
fill_color "0000ff"
|
17
|
-
|
18
|
-
font DFONT_FILE, :font => "ActionMan-Bold", :size => 24
|
19
|
-
text "Introducing Action Man!"
|
20
|
-
|
21
|
-
move_text_position 24
|
22
|
-
|
23
|
-
font_families["Action Man"] = {
|
24
|
-
:normal => { :file => DFONT_FILE, :font => "ActionMan" },
|
25
|
-
:bold => { :file => DFONT_FILE, :font => "ActionMan-Bold" },
|
26
|
-
:italic => { :file => DFONT_FILE, :font => "ActionMan-Italic" },
|
27
|
-
:bold_italic => { :file => DFONT_FILE, :font => "ActionMan-BoldItalic" }
|
28
|
-
}
|
29
|
-
|
30
|
-
font "Action Man", :size => 16
|
31
|
-
text "Action Man is feeling normal here."
|
32
|
-
|
33
|
-
move_text_position 16
|
34
|
-
|
35
|
-
font "Action Man", :style => :bold, :size => 16
|
36
|
-
text "Action Man is feeling bold here!"
|
37
|
-
|
38
|
-
move_text_position 16
|
39
|
-
|
40
|
-
font "Action Man", :style => :italic, :size => 16
|
41
|
-
text "Here, we see Action Man feeling italicized. Slick!"
|
42
|
-
|
43
|
-
move_text_position 16
|
44
|
-
|
45
|
-
font "Action Man", :style => :bold_italic, :size => 16
|
46
|
-
text "Lastly, we observe Mr. Action Man being bold AND italicized. Excellent!"
|
47
|
-
end
|
48
|
-
|
49
|
-
puts "done"
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# This example demonstrates using the :style option for Document#text.
|
4
|
-
# If you are working with TTF fonts, you'll want to check out the
|
5
|
-
# documentation for Document#font_families and register your fonts with it.
|
6
|
-
#
|
7
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
8
|
-
%w[.. example_helper]))
|
9
|
-
|
10
|
-
Prawn::Document.generate("family_style.pdf") do
|
11
|
-
["Courier","Helvetica","Times-Roman"].each do |f|
|
12
|
-
[:bold,:bold_italic,:italic,:normal].each do |s|
|
13
|
-
font f, :style => s
|
14
|
-
text "I'm writing in #{f} (#{s})"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
font "Helvetica"
|
19
|
-
|
20
|
-
text "Normal"
|
21
|
-
text "Bold", :style => :bold
|
22
|
-
text "Bold Italic", :style => :bold_italic
|
23
|
-
text "Italic", :style => :italic
|
24
|
-
text "Normal"
|
25
|
-
end
|
data/examples/text/font_size.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# This example shows the many ways of setting font sizes in Prawn
|
4
|
-
#
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
%w[.. example_helper]))
|
7
|
-
|
8
|
-
Prawn::Document.generate "font_size.pdf", :page_size => "A4" do
|
9
|
-
|
10
|
-
# Explicit global changes
|
11
|
-
font 'Helvetica'
|
12
|
-
self.font_size = 16
|
13
|
-
|
14
|
-
text 'Font at 16 point'
|
15
|
-
|
16
|
-
# Transactional changes rolled back after block exit
|
17
|
-
font_size 9 do
|
18
|
-
text 'Font at 9 point'
|
19
|
-
# single line changes, not persisted.
|
20
|
-
text 'Font at manual override 20 point', :size => 20
|
21
|
-
text 'Font at 9 point'
|
22
|
-
end
|
23
|
-
|
24
|
-
# Transactional changes rolled back after block exit on full fonts.
|
25
|
-
font("Times-Roman", :style => :italic, :size => 12) do
|
26
|
-
text "Font in times at 12"
|
27
|
-
font_size(16) { text "Font in Times at 16" }
|
28
|
-
end
|
29
|
-
|
30
|
-
text 'Font at 16 point'
|
31
|
-
|
32
|
-
font "Courier", :size => 40
|
33
|
-
text "40 pt!"
|
34
|
-
end
|
@@ -1,104 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# This example shows how to use inline formatting
|
4
|
-
#
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
%w[.. example_helper]))
|
7
|
-
|
8
|
-
Prawn::Document.generate("inline_format.pdf") do |pdf|
|
9
|
-
|
10
|
-
pdf.text("hello <strikethrough><b>world\nhow <i>are</i></b> you?</strikethrough> world, <u>how are you</u> now?",
|
11
|
-
:inline_format => true)
|
12
|
-
pdf.text("<font size='14'>left: </font>" + "hello <b>world <font name='Times-Roman' size='28'>how</font> <i>are</i></b> you? <font size='14'><b>Goodbye.</b></font> " * 8,
|
13
|
-
:inline_format => true)
|
14
|
-
pdf.text("right: " + "hello <b>world how <i>are</i></b> you? " * 2,
|
15
|
-
:inline_format => true,
|
16
|
-
:align => :right)
|
17
|
-
pdf.text("center: " + "hello <b>world <font size='48'>ho<sub>w</sub> <i>are</i></font></b> you? " * 2,
|
18
|
-
:inline_format => true,
|
19
|
-
:align => :center)
|
20
|
-
pdf.text("\njustify: " + "hello <b>world <i>goodbye</i></b> " * 12 + "the end ",
|
21
|
-
:inline_format => true,
|
22
|
-
:align => :justify)
|
23
|
-
pdf.text("\njustify: " + "hello world goodbye " * 12 + "the end ",
|
24
|
-
:inline_format => true,
|
25
|
-
:align => :justify)
|
26
|
-
pdf.text("\njustify: " + "hello world goodbye " * 12 + "the end ",
|
27
|
-
:align => :justify)
|
28
|
-
|
29
|
-
|
30
|
-
pdf.text("<color rgb='00ff00'>link: <font size='24' character_spacing='7.5'>please make</font> <color rgb='#0000ff'><u><link href='http://wiki.github.com/sandal/prawn/'>this</link></u></color> clickable.</color> Here we have A<color rgb='#0000ff'><sup><link href='http://wiki.github.com/sandal/prawn/'>superscript</link></sup></color> link and A<color rgb='#0000ff'><sub><link href='http://wiki.github.com/sandal/prawn/'> subscript</link></sub></color> link.",
|
31
|
-
:inline_format => true)
|
32
|
-
|
33
|
-
pdf.text("<color c='100' m='0' y='0' k='0'><font size='24'>CMYK</font></color>",
|
34
|
-
:inline_format => true)
|
35
|
-
|
36
|
-
file = "#{Prawn::BASEDIR}/data/fonts/Action Man.dfont"
|
37
|
-
pdf.font_families["Action Man"] = {
|
38
|
-
:normal => { :file => file, :font => "ActionMan" },
|
39
|
-
:italic => { :file => file, :font => "ActionMan-Italic" },
|
40
|
-
:bold => { :file => file, :font => "ActionMan-Bold" },
|
41
|
-
:bold_italic => { :file => file, :font => "ActionMan-BoldItalic" }
|
42
|
-
}
|
43
|
-
|
44
|
-
pdf.font("Action Man")
|
45
|
-
pdf.text("\nhello <b>world\nhow <i>are</i></b> you?",
|
46
|
-
:inline_format => true)
|
47
|
-
|
48
|
-
|
49
|
-
pdf.font("Helvetica")
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
class Highlight
|
54
|
-
def initialize(options)
|
55
|
-
@color = options[:color]
|
56
|
-
@document = options[:document]
|
57
|
-
end
|
58
|
-
|
59
|
-
def render_behind(fragment)
|
60
|
-
original_color = @document.fill_color
|
61
|
-
@document.fill_color = @color
|
62
|
-
@document.fill_rectangle(fragment.top_left,
|
63
|
-
fragment.width,
|
64
|
-
fragment.height)
|
65
|
-
@document.fill_color = original_color
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class FragmentBorder
|
70
|
-
def initialize(options)
|
71
|
-
@radius = options[:radius]
|
72
|
-
@connect_corners = options[:connect_corners]
|
73
|
-
@document = options[:document]
|
74
|
-
end
|
75
|
-
|
76
|
-
def render_in_front(fragment)
|
77
|
-
box = fragment.bounding_box
|
78
|
-
if @connect_corners
|
79
|
-
@document.stroke_polygon(fragment.top_left, fragment.top_right,
|
80
|
-
fragment.bottom_right, fragment.bottom_left)
|
81
|
-
end
|
82
|
-
@document.stroke_circle(fragment.top_left, @radius)
|
83
|
-
@document.stroke_circle(fragment.top_right, @radius)
|
84
|
-
@document.stroke_circle(fragment.bottom_right, @radius)
|
85
|
-
@document.stroke_circle(fragment.bottom_left, @radius)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
highlight_callback = Highlight.new(:color => 'ffff00', :document => pdf)
|
90
|
-
border_callback = FragmentBorder.new(:radius => 2.5,
|
91
|
-
:connect_corners => true,
|
92
|
-
:document => pdf)
|
93
|
-
pdf.formatted_text([
|
94
|
-
{ :text => "\n" },
|
95
|
-
{ :text => "hello ",
|
96
|
-
:callback => highlight_callback },
|
97
|
-
{ :text => "world",
|
98
|
-
:size => 24,
|
99
|
-
:character_spacing => 0,
|
100
|
-
:callback => [highlight_callback, border_callback] },
|
101
|
-
{ :text => " hello" }
|
102
|
-
], :indent_paragraphs => 40, :character_spacing => -2)
|
103
|
-
end
|
104
|
-
|
data/examples/text/kerning.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Demonstration of enabling and disabling kerning support
|
4
|
-
#
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
%w[.. example_helper]))
|
7
|
-
|
8
|
-
Prawn::Document.generate "kerning.pdf" do
|
9
|
-
draw_text "To kern?", :at => [200,720], :size => 24, :kerning => true
|
10
|
-
draw_text "To not kern?", :at => [200,690], :size => 24, :kerning => false
|
11
|
-
|
12
|
-
move_down 100
|
13
|
-
|
14
|
-
pad(30) do
|
15
|
-
text "To kern and wrap. " * 5, :size => 24, :kerning => true
|
16
|
-
end
|
17
|
-
|
18
|
-
text "To not kern and wrap. " * 5, :size => 24, :kerning => false
|
19
|
-
|
20
|
-
font "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"
|
21
|
-
|
22
|
-
draw_text "To kern?", :at => [200,660], :size => 24, :kerning => true
|
23
|
-
draw_text "To not kern?", :at => [200,630], :size => 24, :kerning => false
|
24
|
-
|
25
|
-
pad(30) do
|
26
|
-
text "To kern and wrap. " * 5, :size => 24, :kerning => true
|
27
|
-
end
|
28
|
-
|
29
|
-
text "To not kern and wrap. " * 5, :size => 24, :kerning => false
|
30
|
-
|
31
|
-
end
|