prawn 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|