prawn 0.1.2 → 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/README +16 -2
- data/Rakefile +3 -3
- data/data/images/arrow.png +0 -0
- data/data/images/arrow2.png +0 -0
- data/data/images/barcode_issue.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/examples/cell.rb +14 -3
- data/examples/chinese_text_wrapping.rb +17 -0
- data/examples/family_based_styling.rb +21 -0
- data/examples/fancy_table.rb +4 -4
- data/examples/flowing_text_with_header_and_footer.rb +72 -0
- data/examples/font_size.rb +2 -2
- data/examples/lazy_bounding_boxes.rb +19 -0
- data/examples/table.rb +13 -11
- data/examples/text_flow.rb +1 -1
- data/lib/prawn.rb +44 -15
- data/lib/prawn/compatibility.rb +20 -7
- data/lib/prawn/document.rb +72 -122
- data/lib/prawn/document/bounding_box.rb +124 -24
- data/lib/prawn/document/internals.rb +107 -0
- data/lib/prawn/document/table.rb +99 -70
- data/lib/prawn/document/text.rb +92 -314
- data/lib/prawn/errors.rb +13 -2
- data/lib/prawn/font.rb +312 -1
- data/lib/prawn/font/cmap.rb +1 -1
- data/lib/prawn/font/metrics.rb +52 -49
- data/lib/prawn/font/wrapping.rb +14 -12
- data/lib/prawn/graphics.rb +23 -74
- data/lib/prawn/graphics/cell.rb +30 -25
- data/lib/prawn/graphics/color.rb +132 -0
- data/lib/prawn/images.rb +37 -16
- data/lib/prawn/images/png.rb +29 -24
- data/lib/prawn/pdf_object.rb +3 -1
- data/spec/bounding_box_spec.rb +12 -3
- data/spec/document_spec.rb +40 -72
- data/spec/font_spec.rb +97 -0
- data/spec/graphics_spec.rb +46 -99
- data/spec/images_spec.rb +4 -21
- data/spec/pdf_object_spec.rb +8 -8
- data/spec/png_spec.rb +47 -12
- data/spec/spec_helper.rb +5 -24
- data/spec/table_spec.rb +53 -59
- data/spec/text_spec.rb +28 -93
- data/vendor/pdf-inspector/README +18 -0
- data/vendor/pdf-inspector/lib/pdf/inspector.rb +25 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +80 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/page.rb +16 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/text.rb +31 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +19 -0
- metadata +63 -38
- data/examples/on_page_start.rb +0 -17
- data/examples/table_bench.rb +0 -92
- data/spec/box_calculation_spec.rb +0 -17
@@ -0,0 +1,80 @@
|
|
1
|
+
module PDF
|
2
|
+
class Inspector
|
3
|
+
module Graphics
|
4
|
+
class Line < Inspector
|
5
|
+
attr_accessor :points, :widths
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@points = []
|
9
|
+
@widths = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def append_line(*params)
|
13
|
+
@points << params
|
14
|
+
end
|
15
|
+
|
16
|
+
def begin_new_subpath(*params)
|
17
|
+
@points << params
|
18
|
+
end
|
19
|
+
|
20
|
+
def set_line_width(params)
|
21
|
+
@widths << params
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
class Rectangle < Inspector
|
27
|
+
attr_reader :rectangles
|
28
|
+
|
29
|
+
def initialize
|
30
|
+
@rectangles = []
|
31
|
+
end
|
32
|
+
|
33
|
+
def append_rectangle(*params)
|
34
|
+
@rectangles << { :point => params[0..1],
|
35
|
+
:width => params[2],
|
36
|
+
:height => params[3] }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Curve < Inspector
|
41
|
+
|
42
|
+
attr_reader :coords
|
43
|
+
|
44
|
+
def initialize
|
45
|
+
@coords = []
|
46
|
+
end
|
47
|
+
|
48
|
+
def begin_new_subpath(*params)
|
49
|
+
@coords += params
|
50
|
+
end
|
51
|
+
|
52
|
+
def append_curved_segment(*params)
|
53
|
+
@coords += params
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class Color < Inspector
|
59
|
+
attr_reader :stroke_color, :fill_color, :stroke_color_count,
|
60
|
+
:fill_color_count
|
61
|
+
|
62
|
+
def initialize
|
63
|
+
@stroke_color_count = 0
|
64
|
+
@fill_color_count = 0
|
65
|
+
end
|
66
|
+
|
67
|
+
def set_rgb_color_for_stroking(*params)
|
68
|
+
@stroke_color_count += 1
|
69
|
+
@stroke_color = params
|
70
|
+
end
|
71
|
+
|
72
|
+
def set_rgb_color_for_nonstroking(*params)
|
73
|
+
@fill_color_count += 1
|
74
|
+
@fill_color = params
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module PDF
|
2
|
+
class Inspector
|
3
|
+
class Text < Inspector
|
4
|
+
attr_accessor :font_settings, :size, :strings
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@font_settings = []
|
8
|
+
@fonts = {}
|
9
|
+
@strings = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource_font(*params)
|
13
|
+
@fonts[params[0]] = params[1].basefont
|
14
|
+
end
|
15
|
+
|
16
|
+
def set_text_font_and_size(*params)
|
17
|
+
@font_settings << { :name => @fonts[params[0]], :size => params[1] }
|
18
|
+
end
|
19
|
+
|
20
|
+
def show_text(*params)
|
21
|
+
@strings << params[0]
|
22
|
+
end
|
23
|
+
|
24
|
+
def show_text_with_positioning(*params)
|
25
|
+
# ignore kerning information
|
26
|
+
@strings << params[0].reject { |e| Numeric === e }.join
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PDF
|
2
|
+
class Inspector
|
3
|
+
class XObject < Inspector
|
4
|
+
attr_accessor :page_xobjects
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@page_xobjects = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def resource_xobject(*params)
|
11
|
+
@page_xobjects.last << params.first
|
12
|
+
end
|
13
|
+
|
14
|
+
def begin_page(*params)
|
15
|
+
@page_xobjects << []
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,51 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: prawn
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2008-08-11 00:00:00 -04:00
|
8
|
-
summary: A fast and nimble PDF generator for Ruby
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: " gregory.t.brown@gmail.com"
|
12
|
-
homepage: http://prawn.majesticseacreature.com
|
13
|
-
rubyforge_project: prawn
|
14
|
-
description: Prawn is a fast, tiny, and nimble PDF generator for Ruby
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.2.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Gregory Brown
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-09-12 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Prawn is a fast, tiny, and nimble PDF generator for Ruby
|
17
|
+
email: " gregory.t.brown@gmail.com"
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- LICENSE
|
25
|
+
- COPYING
|
31
26
|
files:
|
32
27
|
- examples/addressbook.csv
|
33
28
|
- examples/alignment.rb
|
34
29
|
- examples/bounding_boxes.rb
|
35
30
|
- examples/canvas.rb
|
36
31
|
- examples/cell.rb
|
32
|
+
- examples/chinese_text_wrapping.rb
|
37
33
|
- examples/currency.csv
|
38
34
|
- examples/curves.rb
|
35
|
+
- examples/family_based_styling.rb
|
39
36
|
- examples/fancy_table.rb
|
37
|
+
- examples/flowing_text_with_header_and_footer.rb
|
40
38
|
- examples/font_size.rb
|
41
39
|
- examples/hexagon.rb
|
42
40
|
- examples/image.rb
|
43
41
|
- examples/image2.rb
|
44
42
|
- examples/image_flow.rb
|
45
43
|
- examples/kerning.rb
|
44
|
+
- examples/lazy_bounding_boxes.rb
|
46
45
|
- examples/line.rb
|
47
46
|
- examples/multi_page_layout.rb
|
48
|
-
- examples/on_page_start.rb
|
49
47
|
- examples/page_geometry.rb
|
50
48
|
- examples/png_types.rb
|
51
49
|
- examples/polygons.rb
|
@@ -56,13 +54,13 @@ files:
|
|
56
54
|
- examples/simple_text_ttf.rb
|
57
55
|
- examples/sjis.rb
|
58
56
|
- examples/table.rb
|
59
|
-
- examples/table_bench.rb
|
60
57
|
- examples/text_flow.rb
|
61
58
|
- examples/utf8.rb
|
62
59
|
- lib/prawn
|
63
60
|
- lib/prawn/compatibility.rb
|
64
61
|
- lib/prawn/document
|
65
62
|
- lib/prawn/document/bounding_box.rb
|
63
|
+
- lib/prawn/document/internals.rb
|
66
64
|
- lib/prawn/document/page_geometry.rb
|
67
65
|
- lib/prawn/document/table.rb
|
68
66
|
- lib/prawn/document/text.rb
|
@@ -75,6 +73,7 @@ files:
|
|
75
73
|
- lib/prawn/font.rb
|
76
74
|
- lib/prawn/graphics
|
77
75
|
- lib/prawn/graphics/cell.rb
|
76
|
+
- lib/prawn/graphics/color.rb
|
78
77
|
- lib/prawn/graphics.rb
|
79
78
|
- lib/prawn/images
|
80
79
|
- lib/prawn/images/jpg.rb
|
@@ -84,8 +83,8 @@ files:
|
|
84
83
|
- lib/prawn/reference.rb
|
85
84
|
- lib/prawn.rb
|
86
85
|
- spec/bounding_box_spec.rb
|
87
|
-
- spec/box_calculation_spec.rb
|
88
86
|
- spec/document_spec.rb
|
87
|
+
- spec/font_spec.rb
|
89
88
|
- spec/graphics_spec.rb
|
90
89
|
- spec/images_spec.rb
|
91
90
|
- spec/jpg_spec.rb
|
@@ -122,6 +121,16 @@ files:
|
|
122
121
|
- vendor/font_ttf/ttf/table/vhea.rb
|
123
122
|
- vendor/font_ttf/ttf/table/vmtx.rb
|
124
123
|
- vendor/font_ttf/ttf.rb
|
124
|
+
- vendor/pdf-inspector
|
125
|
+
- vendor/pdf-inspector/lib
|
126
|
+
- vendor/pdf-inspector/lib/pdf
|
127
|
+
- vendor/pdf-inspector/lib/pdf/inspector
|
128
|
+
- vendor/pdf-inspector/lib/pdf/inspector/graphics.rb
|
129
|
+
- vendor/pdf-inspector/lib/pdf/inspector/page.rb
|
130
|
+
- vendor/pdf-inspector/lib/pdf/inspector/text.rb
|
131
|
+
- vendor/pdf-inspector/lib/pdf/inspector/xobject.rb
|
132
|
+
- vendor/pdf-inspector/lib/pdf/inspector.rb
|
133
|
+
- vendor/pdf-inspector/README
|
125
134
|
- data/fonts
|
126
135
|
- data/fonts/Activa.ttf
|
127
136
|
- data/fonts/Chalkboard.ttf
|
@@ -145,6 +154,9 @@ files:
|
|
145
154
|
- data/fonts/Times-Roman.afm
|
146
155
|
- data/fonts/ZapfDingbats.afm
|
147
156
|
- data/images
|
157
|
+
- data/images/arrow.png
|
158
|
+
- data/images/arrow2.png
|
159
|
+
- data/images/barcode_issue.png
|
148
160
|
- data/images/dice.alpha
|
149
161
|
- data/images/dice.dat
|
150
162
|
- data/images/dice.png
|
@@ -157,6 +169,7 @@ files:
|
|
157
169
|
- data/images/ruport.png
|
158
170
|
- data/images/ruport_data.dat
|
159
171
|
- data/images/ruport_transparent.png
|
172
|
+
- data/images/ruport_type0.png
|
160
173
|
- data/images/stef.jpg
|
161
174
|
- data/images/web-links.dat
|
162
175
|
- data/images/web-links.png
|
@@ -165,23 +178,35 @@ files:
|
|
165
178
|
- README
|
166
179
|
- LICENSE
|
167
180
|
- COPYING
|
168
|
-
|
169
|
-
|
181
|
+
has_rdoc: true
|
182
|
+
homepage: http://prawn.majesticseacreature.com
|
183
|
+
post_install_message:
|
170
184
|
rdoc_options:
|
171
185
|
- --title
|
172
186
|
- Prawn Documentation
|
173
187
|
- --main
|
174
188
|
- README
|
175
189
|
- -q
|
176
|
-
|
177
|
-
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
190
|
+
require_paths:
|
191
|
+
- lib
|
192
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: "0"
|
197
|
+
version:
|
198
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: "0"
|
203
|
+
version:
|
184
204
|
requirements: []
|
185
205
|
|
186
|
-
|
206
|
+
rubyforge_project: prawn
|
207
|
+
rubygems_version: 1.2.0
|
208
|
+
signing_key:
|
209
|
+
specification_version: 2
|
210
|
+
summary: A fast and nimble PDF generator for Ruby
|
211
|
+
test_files: []
|
187
212
|
|
data/examples/on_page_start.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
-
require "prawn"
|
5
|
-
|
6
|
-
page_start = lambda do |doc|
|
7
|
-
doc.stroke_line [100,100], [300,300]
|
8
|
-
end
|
9
|
-
|
10
|
-
pdf = Prawn::Document.new(:on_page_start => page_start)
|
11
|
-
|
12
|
-
pdf.stroke_line [0,0], [100,100]
|
13
|
-
pdf.start_new_page
|
14
|
-
pdf.stroke_line [300,300],[400,400]
|
15
|
-
pdf.start_new_page
|
16
|
-
pdf.render_file "page_start_hooks.pdf"
|
17
|
-
|
data/examples/table_bench.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require "rubygems"
|
4
|
-
require "pdf/writer"
|
5
|
-
require "pdf/simpletable"
|
6
|
-
gem "pdf-wrapper", ">=0.1.2"
|
7
|
-
require "pdf/wrapper"
|
8
|
-
require "fastercsv"
|
9
|
-
require "benchmark"
|
10
|
-
|
11
|
-
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
12
|
-
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'examples')
|
13
|
-
require "prawn"
|
14
|
-
require "ruport_formatter"
|
15
|
-
|
16
|
-
csv_data = FasterCSV.read("#{Prawn::BASEDIR}/examples/currency.csv") *
|
17
|
-
(ARGV.first || 1).to_i
|
18
|
-
|
19
|
-
####################################
|
20
|
-
# PDF::Writer Table Rendering Prep #
|
21
|
-
####################################
|
22
|
-
pdf = PDF::Writer.new
|
23
|
-
pdf.select_font("Helvetica")
|
24
|
-
|
25
|
-
table = PDF::SimpleTable.new do |tab|
|
26
|
-
tab.column_order.push(*%w(date rate))
|
27
|
-
|
28
|
-
tab.columns["date"] = PDF::SimpleTable::Column.new("date") { |col|
|
29
|
-
col.heading = "Date"
|
30
|
-
}
|
31
|
-
tab.columns["rate"] = PDF::SimpleTable::Column.new("rate") { |col|
|
32
|
-
col.heading = "Rate"
|
33
|
-
}
|
34
|
-
|
35
|
-
tab.orientation = :center
|
36
|
-
|
37
|
-
data = csv_data.map do |e|
|
38
|
-
{ "date" => e[0], "rate" => e[1] }
|
39
|
-
end
|
40
|
-
|
41
|
-
tab.data.replace data
|
42
|
-
end
|
43
|
-
|
44
|
-
##############################
|
45
|
-
# Prawn Table Rendering Prep #
|
46
|
-
##############################
|
47
|
-
doc = Prawn::Document.new
|
48
|
-
|
49
|
-
#####################
|
50
|
-
# Ruport/Prawn Prep #
|
51
|
-
#####################
|
52
|
-
|
53
|
-
ruport_table = Table(%w[Date Rate], :data => csv_data)
|
54
|
-
ruport_doc = Prawn::Document.new
|
55
|
-
|
56
|
-
##############################
|
57
|
-
# PDF::Wrapper Table Rendering Prep
|
58
|
-
##############################
|
59
|
-
wrapper_doc = PDF::Wrapper.new
|
60
|
-
wrapper_table = PDF::Wrapper::Table.new do |t|
|
61
|
-
t.data = csv_data
|
62
|
-
t.table_options :font_size => 6
|
63
|
-
end
|
64
|
-
|
65
|
-
#######################
|
66
|
-
# Benchmarking code #
|
67
|
-
#######################
|
68
|
-
|
69
|
-
puts "Processing #{csv_data.length} records"
|
70
|
-
|
71
|
-
Benchmark.bmbm do |x|
|
72
|
-
x.report("PDF Wrapper") do
|
73
|
-
wrapper_doc.table( wrapper_table, :width => 100 ) unless wrapper_doc.finished?
|
74
|
-
wrapper_doc.render_to_file('currency_pdf_wrapper.pdf')
|
75
|
-
end
|
76
|
-
x.report("Prawn") do
|
77
|
-
doc.table(csv_data, :font_size => 10,
|
78
|
-
:vertical_padding => 2,
|
79
|
-
:horizontal_padding => 5,
|
80
|
-
:position => :center,
|
81
|
-
:row_colors => :pdf_writer,
|
82
|
-
:headers => ["Date","Rate"])
|
83
|
-
doc.render_file('currency_prawn.pdf')
|
84
|
-
end
|
85
|
-
x.report("Ruport/Prawn") do
|
86
|
-
ruport_table.save_as('currency_ruport.pdf', :document => ruport_doc)
|
87
|
-
end
|
88
|
-
x.report("PDF Writer") do
|
89
|
-
table.render_on(pdf)
|
90
|
-
pdf.save_as('currency_pdf_writer.pdf')
|
91
|
-
end
|
92
|
-
end
|