prawn 0.2.3 → 0.3.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 +6 -10
- data/Rakefile +4 -13
- data/data/encodings/win_ansi.txt +29 -0
- data/data/images/fractal.jpg +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/examples/bounding_box/bounding_boxes.rb +44 -0
- data/examples/bounding_box/lazy_bounding_boxes.rb +28 -0
- data/examples/bounding_box/padded_box.rb +24 -0
- data/examples/{russian_boxes.rb → bounding_box/russian_boxes.rb} +9 -6
- data/examples/general/background.rb +20 -0
- data/examples/{canvas.rb → general/canvas.rb} +6 -2
- data/examples/general/measurement_units.rb +52 -0
- data/examples/{multi_page_layout.rb → general/multi_page_layout.rb} +6 -3
- data/examples/{page_geometry.rb → general/page_geometry.rb} +6 -2
- data/examples/{image.rb → graphics/basic_images.rb} +8 -4
- data/examples/graphics/cmyk.rb +13 -0
- data/examples/graphics/curves.rb +12 -0
- data/examples/{hexagon.rb → graphics/hexagon.rb} +5 -5
- data/examples/graphics/image_fit.rb +16 -0
- data/examples/graphics/image_flow.rb +38 -0
- data/examples/graphics/image_position.rb +18 -0
- data/examples/{line.rb → graphics/line.rb} +4 -2
- data/examples/{png_types.rb → graphics/png_types.rb} +4 -4
- data/examples/{polygons.rb → graphics/polygons.rb} +5 -4
- data/examples/graphics/remote_images.rb +12 -0
- data/examples/{ruport_helpers.rb → graphics/ruport_style_helpers.rb} +8 -5
- data/examples/graphics/stroke_bounds.rb +23 -0
- data/examples/{chinese_text_wrapping.rb → m17n/chinese_text_wrapping.rb} +7 -4
- data/examples/m17n/euro.rb +16 -0
- data/examples/m17n/sjis.rb +29 -0
- data/examples/m17n/utf8.rb +14 -0
- data/examples/m17n/win_ansi_charset.rb +55 -0
- data/examples/{addressbook.csv → table/addressbook.csv} +0 -0
- data/examples/{cell.rb → table/cell.rb} +8 -6
- data/examples/{currency.csv → table/currency.csv} +0 -0
- data/examples/{fancy_table.rb → table/fancy_table.rb} +9 -6
- data/examples/{ruport_formatter.rb → table/ruport_formatter.rb} +6 -3
- data/examples/{table.rb → table/table.rb} +6 -2
- data/examples/table/table_alignment.rb +18 -0
- data/examples/table/table_border_color.rb +17 -0
- data/examples/table/table_colspan.rb +19 -0
- data/examples/table/table_header_color.rb +19 -0
- data/examples/table/table_header_underline.rb +15 -0
- data/examples/{alignment.rb → text/alignment.rb} +5 -2
- data/examples/text/family_based_styling.rb +25 -0
- data/examples/{flowing_text_with_header_and_footer.rb → text/flowing_text_with_header_and_footer.rb} +19 -8
- data/examples/text/font_calculations.rb +91 -0
- data/examples/text/font_size.rb +34 -0
- data/examples/{kerning.rb → text/kerning.rb} +5 -1
- data/examples/text/simple_text.rb +18 -0
- data/examples/text/simple_text_ttf.rb +18 -0
- data/examples/{span.rb → text/span.rb} +5 -2
- data/examples/text/text_box.rb +26 -0
- data/examples/{text_flow.rb → text/text_flow.rb} +5 -2
- data/lib/prawn.rb +26 -20
- data/lib/prawn/compatibility.rb +5 -8
- data/lib/prawn/document.rb +29 -13
- data/lib/prawn/document/annotations.rb +63 -0
- data/lib/prawn/document/bounding_box.rb +18 -3
- data/lib/prawn/document/destinations.rb +81 -0
- data/lib/prawn/document/internals.rb +16 -2
- data/lib/prawn/document/page_geometry.rb +58 -57
- data/lib/prawn/document/span.rb +8 -0
- data/lib/prawn/document/table.rb +81 -31
- data/lib/prawn/document/text.rb +66 -21
- data/lib/prawn/document/text/box.rb +77 -0
- data/lib/prawn/encoding.rb +121 -0
- data/lib/prawn/errors.rb +4 -0
- data/lib/prawn/font.rb +70 -42
- data/lib/prawn/font/metrics.rb +64 -119
- data/lib/prawn/graphics.rb +105 -87
- data/lib/prawn/graphics/cell.rb +55 -28
- data/lib/prawn/graphics/color.rb +8 -0
- data/lib/prawn/images.rb +55 -12
- data/lib/prawn/images/jpg.rb +2 -1
- data/lib/prawn/images/png.rb +2 -1
- data/lib/prawn/literal_string.rb +14 -0
- data/lib/prawn/measurement_extensions.rb +46 -0
- data/lib/prawn/measurements.rb +71 -0
- data/lib/prawn/name_tree.rb +165 -0
- data/lib/prawn/pdf_object.rb +8 -1
- data/spec/annotations_spec.rb +90 -0
- data/spec/destinations_spec.rb +15 -0
- data/spec/document_spec.rb +39 -2
- data/spec/font_spec.rb +22 -0
- data/spec/graphics_spec.rb +99 -87
- data/spec/images_spec.rb +29 -1
- data/spec/measurement_units_spec.rb +23 -0
- data/spec/metrics_spec.rb +3 -2
- data/spec/name_tree_spec.rb +103 -0
- data/spec/pdf_object_spec.rb +15 -5
- data/spec/png_spec.rb +14 -14
- data/spec/spec_helper.rb +8 -6
- data/spec/table_spec.rb +40 -0
- data/spec/text_spec.rb +6 -4
- data/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
- data/vendor/ttfunk/example.rb +5 -0
- data/vendor/ttfunk/lib/ttfunk.rb +48 -0
- data/vendor/ttfunk/lib/ttfunk/table.rb +27 -0
- data/vendor/ttfunk/lib/ttfunk/table/cmap.rb +94 -0
- data/vendor/ttfunk/lib/ttfunk/table/directory.rb +25 -0
- data/vendor/ttfunk/lib/ttfunk/table/head.rb +25 -0
- data/vendor/ttfunk/lib/ttfunk/table/hhea.rb +27 -0
- data/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +20 -0
- data/vendor/ttfunk/lib/ttfunk/table/kern.rb +48 -0
- data/vendor/ttfunk/lib/ttfunk/table/maxp.rb +17 -0
- data/vendor/ttfunk/lib/ttfunk/table/name.rb +52 -0
- metadata +93 -62
- data/examples/bounding_boxes.rb +0 -30
- data/examples/curves.rb +0 -10
- data/examples/family_based_styling.rb +0 -21
- data/examples/font_size.rb +0 -19
- data/examples/image2.rb +0 -13
- data/examples/image_flow.rb +0 -29
- data/examples/lazy_bounding_boxes.rb +0 -19
- data/examples/remote_images.rb +0 -7
- data/examples/simple_text.rb +0 -15
- data/examples/simple_text_ttf.rb +0 -16
- data/examples/sjis.rb +0 -21
- data/examples/utf8.rb +0 -12
- data/vendor/font_ttf/ttf.rb +0 -20
- data/vendor/font_ttf/ttf/datatypes.rb +0 -189
- data/vendor/font_ttf/ttf/encodings.rb +0 -140
- data/vendor/font_ttf/ttf/exceptions.rb +0 -28
- data/vendor/font_ttf/ttf/file.rb +0 -290
- data/vendor/font_ttf/ttf/fontchunk.rb +0 -77
- data/vendor/font_ttf/ttf/table/cmap.rb +0 -408
- data/vendor/font_ttf/ttf/table/cvt.rb +0 -49
- data/vendor/font_ttf/ttf/table/fpgm.rb +0 -48
- data/vendor/font_ttf/ttf/table/gasp.rb +0 -88
- data/vendor/font_ttf/ttf/table/glyf.rb +0 -452
- data/vendor/font_ttf/ttf/table/head.rb +0 -86
- data/vendor/font_ttf/ttf/table/hhea.rb +0 -96
- data/vendor/font_ttf/ttf/table/hmtx.rb +0 -98
- data/vendor/font_ttf/ttf/table/kern.rb +0 -186
- data/vendor/font_ttf/ttf/table/loca.rb +0 -75
- data/vendor/font_ttf/ttf/table/maxp.rb +0 -81
- data/vendor/font_ttf/ttf/table/name.rb +0 -222
- data/vendor/font_ttf/ttf/table/os2.rb +0 -172
- data/vendor/font_ttf/ttf/table/post.rb +0 -120
- data/vendor/font_ttf/ttf/table/prep.rb +0 -27
- data/vendor/font_ttf/ttf/table/vhea.rb +0 -45
- data/vendor/font_ttf/ttf/table/vmtx.rb +0 -36
data/lib/prawn/graphics/cell.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
|
4
3
|
# cell.rb : Table support functions
|
5
4
|
#
|
6
5
|
# Copyright June 2008, Gregory Brown. All Rights Reserved.
|
@@ -41,24 +40,33 @@ module Prawn
|
|
41
40
|
# <tt>:point</tt>:: Absolute [x,y] coordinate of the top-left corner of the cell.
|
42
41
|
# <tt>:document</tt>:: The Prawn::Document object to render on.
|
43
42
|
# <tt>:text</tt>:: The text to be flowed within the cell
|
43
|
+
# <tt>:text_color</tt>:: The color of the text to be displayed
|
44
44
|
# <tt>:width</tt>:: The width in PDF points of the cell.
|
45
|
-
# <tt>:
|
45
|
+
# <tt>:height</tt>:: The height in PDF points of the cell.
|
46
46
|
# <tt>:horizontal_padding</tt>:: The horizontal padding in PDF points
|
47
47
|
# <tt>:vertical_padding</tt>:: The vertical padding in PDF points
|
48
48
|
# <tt>:padding</tt>:: Overrides both horizontal and vertical padding
|
49
|
-
# <tt>:border_style</tt>:: One of <tt>:all</tt>, <tt>:no_top</tt>, <tt>:no_bottom</tt>, <tt>:sides</tt>
|
50
49
|
# <tt>:align</tt>:: One of <tt>:left</tt>, <tt>:right</tt>, <tt>:center</tt>
|
50
|
+
# <tt>:borders</tt>:: An array of sides which should have a border. Any of <tt>:top</tt>, <tt>:left</tt>, <tt>:right</tt>, <tt>:bottom</tt>
|
51
|
+
# <tt>:border_width</tt>:: The border line width. Defaults to 1.
|
52
|
+
# <tt>:border_style</tt>:: One of <tt>:all</tt>, <tt>:no_top</tt>, <tt>:no_bottom</tt>, <tt>:sides</tt>, <tt>:none</tt>, <tt>:bottom_only</tt>. Defaults to :all.
|
53
|
+
# <tt>:border_color</tt>:: The color of the cell border.
|
54
|
+
# <tt>:font_size</tt>:: The font size for the cell text.
|
51
55
|
#
|
52
56
|
def initialize(options={})
|
53
57
|
@point = options[:point]
|
54
58
|
@document = options[:document]
|
55
59
|
@text = options[:text].to_s
|
60
|
+
@text_color = options[:text_color]
|
56
61
|
@width = options[:width]
|
62
|
+
@height = options[:height]
|
57
63
|
@borders = options[:borders]
|
58
64
|
@border_width = options[:border_width] || 1
|
59
65
|
@border_style = options[:border_style] || :all
|
66
|
+
@border_color = options[:border_color]
|
60
67
|
@background_color = options[:background_color]
|
61
68
|
@align = options[:align] || :left
|
69
|
+
@font_size = options[:font_size]
|
62
70
|
|
63
71
|
@horizontal_padding = options[:horizontal_padding] || 0
|
64
72
|
@vertical_padding = options[:vertical_padding] || 0
|
@@ -70,7 +78,7 @@ module Prawn
|
|
70
78
|
|
71
79
|
attr_accessor :point, :border_style, :border_width, :background_color,
|
72
80
|
:document, :horizontal_padding, :vertical_padding, :align,
|
73
|
-
:borders
|
81
|
+
:borders, :text_color, :border_color
|
74
82
|
|
75
83
|
attr_writer :height, :width #:nodoc:
|
76
84
|
|
@@ -90,7 +98,7 @@ module Prawn
|
|
90
98
|
#
|
91
99
|
def width
|
92
100
|
@width || (@document.font.metrics.string_width(@text,
|
93
|
-
@document.font.size)) + 2*@horizontal_padding
|
101
|
+
@font_size || @document.font.size)) + 2*@horizontal_padding
|
94
102
|
end
|
95
103
|
|
96
104
|
# The height of the cell in PDF points
|
@@ -125,26 +133,30 @@ module Prawn
|
|
125
133
|
@document.mask(:line_width) do
|
126
134
|
@document.line_width = @border_width
|
127
135
|
|
128
|
-
|
129
|
-
@document.
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
136
|
+
@document.mask(:stroke_color) do
|
137
|
+
@document.stroke_color @border_color if @border_color
|
138
|
+
|
139
|
+
if borders.include?(:left)
|
140
|
+
@document.stroke_line [rel_point[0], rel_point[1] + (@border_width / 2.0)],
|
141
|
+
[rel_point[0], rel_point[1] - height - @border_width / 2.0 ]
|
142
|
+
end
|
143
|
+
|
144
|
+
if borders.include?(:right)
|
145
|
+
@document.stroke_line(
|
146
|
+
[rel_point[0] + width, rel_point[1] + (@border_width / 2.0)],
|
147
|
+
[rel_point[0] + width, rel_point[1] - height - @border_width / 2.0] )
|
148
|
+
end
|
149
|
+
|
150
|
+
if borders.include?(:top)
|
151
|
+
@document.stroke_line(
|
152
|
+
[ rel_point[0] + @border_width / 2.0, rel_point[1] ],
|
153
|
+
[ rel_point[0] - @border_width / 2.0 + width, rel_point[1] ])
|
154
|
+
end
|
155
|
+
|
156
|
+
if borders.include?(:bottom)
|
157
|
+
@document.stroke_line [rel_point[0], rel_point[1] - height ],
|
158
|
+
[rel_point[0] + width, rel_point[1] - height]
|
159
|
+
end
|
148
160
|
end
|
149
161
|
|
150
162
|
end
|
@@ -157,7 +169,16 @@ module Prawn
|
|
157
169
|
@point[1] - @vertical_padding],
|
158
170
|
:width => text_area_width,
|
159
171
|
:height => height - @vertical_padding) do
|
160
|
-
@document.
|
172
|
+
@document.move_up @document.font.line_gap
|
173
|
+
|
174
|
+
options = {:align => @align}
|
175
|
+
|
176
|
+
options[:size] = @font_size if @font_size
|
177
|
+
|
178
|
+
@document.mask(:fill_color) do
|
179
|
+
@document.fill_color @text_color if @text_color
|
180
|
+
@document.text @text, options
|
181
|
+
end
|
161
182
|
end
|
162
183
|
end
|
163
184
|
|
@@ -173,6 +194,10 @@ module Prawn
|
|
173
194
|
[:left,:right,:bottom]
|
174
195
|
when :no_bottom
|
175
196
|
[:left,:right,:top]
|
197
|
+
when :bottom_only
|
198
|
+
[:bottom]
|
199
|
+
when :none
|
200
|
+
[]
|
176
201
|
end
|
177
202
|
end
|
178
203
|
|
@@ -189,8 +214,8 @@ module Prawn
|
|
189
214
|
@height = 0
|
190
215
|
end
|
191
216
|
|
192
|
-
attr_reader :width, :height
|
193
|
-
attr_accessor :background_color
|
217
|
+
attr_reader :width, :height, :cells
|
218
|
+
attr_accessor :background_color, :text_color, :border_color
|
194
219
|
|
195
220
|
def <<(cell)
|
196
221
|
@cells << cell
|
@@ -208,6 +233,8 @@ module Prawn
|
|
208
233
|
y - @document.bounds.absolute_bottom]
|
209
234
|
e.height = @height
|
210
235
|
e.background_color ||= @background_color
|
236
|
+
e.text_color ||= @text_color
|
237
|
+
e.border_color ||= @border_color
|
211
238
|
e.draw
|
212
239
|
x += e.width
|
213
240
|
end
|
data/lib/prawn/graphics/color.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# color.rb : Implements color handling
|
4
|
+
#
|
5
|
+
# Copyright June 2008, Gregory Brown. All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
+
#
|
1
9
|
module Prawn
|
2
10
|
module Graphics
|
3
11
|
module Color
|
data/lib/prawn/images.rb
CHANGED
@@ -18,11 +18,13 @@ module Prawn
|
|
18
18
|
# <tt>file</tt>:: path to file or an object that responds to #read
|
19
19
|
#
|
20
20
|
# Options:
|
21
|
-
# <tt>:at</tt>:: the location of the top left corner of the image.
|
21
|
+
# <tt>:at</tt>:: an array [x,y] with the location of the top left corner of the image.
|
22
22
|
# <tt>:position</tt>:: One of (:left, :center, :right) or an x-offset
|
23
|
+
# <tt>:vposition</tt>:: One of (:top, :center, :center) or an y-offset
|
23
24
|
# <tt>:height</tt>:: the height of the image [actual height of the image]
|
24
25
|
# <tt>:width</tt>:: the width of the image [actual width of the image]
|
25
|
-
# <tt>:scale</tt>:: scale the dimensions of the image proportionally
|
26
|
+
# <tt>:scale</tt>:: scale the dimensions of the image proportionally
|
27
|
+
# <tt>:fit</tt>:: scale the dimensions of the image proportionally to fit inside [width,height]
|
26
28
|
#
|
27
29
|
# Prawn::Document.generate("image2.pdf", :page_layout => :landscape) do
|
28
30
|
# pigs = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
|
@@ -36,6 +38,11 @@ module Prawn
|
|
36
38
|
# proportionally. When both are provided, the image will be stretched to
|
37
39
|
# fit the dimensions without maintaining the aspect ratio.
|
38
40
|
#
|
41
|
+
#
|
42
|
+
# If :at is provided, the image will be place in the current page but
|
43
|
+
# the text position will not be changed.
|
44
|
+
#
|
45
|
+
#
|
39
46
|
# If instead of an explicit filename, an object with a read method is
|
40
47
|
# passed as +file+, you can embed images from IO objects and things
|
41
48
|
# that act like them (including Tempfiles and open-uri objects).
|
@@ -50,14 +57,15 @@ module Prawn
|
|
50
57
|
# dimensions of an image object if needed.
|
51
58
|
# (See also: Prawn::Images::PNG , Prawn::Images::JPG)
|
52
59
|
#
|
53
|
-
def image(file, options={})
|
54
|
-
Prawn.verify_options [:at
|
55
|
-
|
60
|
+
def image(file, options={})
|
61
|
+
Prawn.verify_options [:at, :position, :vposition, :height,
|
62
|
+
:width, :scale, :fit], options
|
63
|
+
|
56
64
|
if file.respond_to?(:read)
|
57
65
|
image_content = file.read
|
58
66
|
else
|
59
67
|
raise ArgumentError, "#{file} not found" unless File.file?(file)
|
60
|
-
image_content = File.
|
68
|
+
image_content = File.binread(file)
|
61
69
|
end
|
62
70
|
|
63
71
|
image_sha1 = Digest::SHA1.hexdigest(image_content)
|
@@ -86,7 +94,8 @@ module Prawn
|
|
86
94
|
|
87
95
|
# find where the image will be placed and how big it will be
|
88
96
|
w,h = calc_image_dimensions(info, options)
|
89
|
-
|
97
|
+
|
98
|
+
if options[:at]
|
90
99
|
x,y = translate(options[:at])
|
91
100
|
else
|
92
101
|
x,y = image_position(w,h,options)
|
@@ -109,6 +118,7 @@ module Prawn
|
|
109
118
|
|
110
119
|
def image_position(w,h,options)
|
111
120
|
options[:position] ||= :left
|
121
|
+
|
112
122
|
x = case options[:position]
|
113
123
|
when :left
|
114
124
|
bounds.absolute_left
|
@@ -118,8 +128,20 @@ module Prawn
|
|
118
128
|
bounds.absolute_right - w
|
119
129
|
when Numeric
|
120
130
|
options[:position] + bounds.absolute_left
|
121
|
-
end
|
122
|
-
|
131
|
+
end
|
132
|
+
|
133
|
+
y = case options[:vposition]
|
134
|
+
when :top
|
135
|
+
bounds.absolute_top
|
136
|
+
when :center
|
137
|
+
bounds.absolute_top - (bounds.height - h) / 2.0
|
138
|
+
when :bottom
|
139
|
+
bounds.absolute_bottom + h
|
140
|
+
when Numeric
|
141
|
+
bounds.absolute_top - options[:vposition]
|
142
|
+
else
|
143
|
+
self.y
|
144
|
+
end
|
123
145
|
return [x,y]
|
124
146
|
end
|
125
147
|
|
@@ -127,10 +149,12 @@ module Prawn
|
|
127
149
|
color_space = case jpg.channels
|
128
150
|
when 1
|
129
151
|
:DeviceGray
|
152
|
+
when 3
|
153
|
+
:DeviceRGB
|
130
154
|
when 4
|
131
155
|
:DeviceCMYK
|
132
156
|
else
|
133
|
-
|
157
|
+
raise ArgumentError, 'JPG uses an unsupported number of channels'
|
134
158
|
end
|
135
159
|
obj = ref(:Type => :XObject,
|
136
160
|
:Subtype => :Image,
|
@@ -140,6 +164,14 @@ module Prawn
|
|
140
164
|
:Width => jpg.width,
|
141
165
|
:Height => jpg.height,
|
142
166
|
:Length => data.size )
|
167
|
+
|
168
|
+
# add extra decode params for CMYK images. By swapping the
|
169
|
+
# min and max values from the default, we invert the colours. See
|
170
|
+
# section 4.8.4 of the spec.
|
171
|
+
if color_space == :DeviceCMYK
|
172
|
+
obj.data[:Decode] = [ 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0 ]
|
173
|
+
end
|
174
|
+
|
143
175
|
obj << data
|
144
176
|
return obj
|
145
177
|
end
|
@@ -252,7 +284,6 @@ module Prawn
|
|
252
284
|
end
|
253
285
|
|
254
286
|
def calc_image_dimensions(info, options)
|
255
|
-
# TODO: allow the image to be aligned in a box
|
256
287
|
w = options[:width] || info.width
|
257
288
|
h = options[:height] || info.height
|
258
289
|
|
@@ -267,8 +298,20 @@ module Prawn
|
|
267
298
|
elsif options[:scale]
|
268
299
|
w = info.width * options[:scale]
|
269
300
|
h = info.height * options[:scale]
|
301
|
+
elsif options[:fit]
|
302
|
+
bw, bh = options[:fit]
|
303
|
+
bp = bw / bh.to_f
|
304
|
+
ip = info.width / info.height.to_f
|
305
|
+
if ip > bp
|
306
|
+
w = bw
|
307
|
+
h = bw / ip
|
308
|
+
else
|
309
|
+
h = bh
|
310
|
+
w = bh * ip
|
311
|
+
end
|
270
312
|
end
|
271
|
-
|
313
|
+
info.scaled_width = w
|
314
|
+
info.scaled_height = h
|
272
315
|
[w,h]
|
273
316
|
end
|
274
317
|
|
data/lib/prawn/images/jpg.rb
CHANGED
@@ -14,7 +14,8 @@ module Prawn
|
|
14
14
|
# of a PNG image that we need to embed them in a PDF
|
15
15
|
class JPG
|
16
16
|
attr_reader :width, :height, :bits, :channels
|
17
|
-
|
17
|
+
attr_accessor :scaled_width, :scaled_height
|
18
|
+
|
18
19
|
JPEG_SOF_BLOCKS = %W(\xc0 \xc1 \xc2 \xc3 \xc5 \xc6 \xc7 \xc9 \xca \xcb \xcd \xce \xcf)
|
19
20
|
JPEG_APP_BLOCKS = %W(\xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef)
|
20
21
|
|
data/lib/prawn/images/png.rb
CHANGED
@@ -19,7 +19,8 @@ module Prawn
|
|
19
19
|
attr_reader :width, :height, :bits
|
20
20
|
attr_reader :color_type, :compression_method, :filter_method
|
21
21
|
attr_reader :interlace_method, :alpha_channel
|
22
|
-
|
22
|
+
attr_accessor :scaled_width, :scaled_height
|
23
|
+
|
23
24
|
# Process a new PNG image
|
24
25
|
#
|
25
26
|
# <tt>:data</tt>:: A string containing a full PNG file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Prawn
|
3
|
+
# This is used to differentiate strings that must be encoded as
|
4
|
+
# a *literal* string, versus those that can be encoded in
|
5
|
+
# the PDF hexadecimal format.
|
6
|
+
#
|
7
|
+
# Some features of the PDF format appear to require that literal
|
8
|
+
# strings be used. One such feature is the /Dest key of a link
|
9
|
+
# annotation; if a hex encoded string is used there, the links
|
10
|
+
# do not work (as tested in Mac OS X Preview, and Adobe Acrobat
|
11
|
+
# Reader).
|
12
|
+
class LiteralString < String #:nodoc:
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# measurement_extensions.rb: Core extensions for Prawn::Measurements
|
3
|
+
#
|
4
|
+
# Copyright December 2008, Florian Witteler. All Rights Reserved.
|
5
|
+
#
|
6
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
7
|
+
|
8
|
+
require 'prawn/measurements'
|
9
|
+
|
10
|
+
class Numeric
|
11
|
+
include Prawn::Measurements
|
12
|
+
# prawns' basic unit is PostScript-Point
|
13
|
+
# 72 points per inch
|
14
|
+
|
15
|
+
def mm
|
16
|
+
return mm2pt(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def cm
|
20
|
+
return cm2pt(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def dm
|
24
|
+
return dm2pt(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
def m
|
28
|
+
return m2pt(self)
|
29
|
+
end
|
30
|
+
|
31
|
+
def in
|
32
|
+
return in2pt(self)
|
33
|
+
end
|
34
|
+
|
35
|
+
def yd
|
36
|
+
return yd2pt(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
def ft
|
40
|
+
return ft2pt(self)
|
41
|
+
end
|
42
|
+
|
43
|
+
def pt
|
44
|
+
return self
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# measurements.rb: Conversions from other measurements to PDF points
|
3
|
+
#
|
4
|
+
# Copyright December 2008, Florian Witteler. All Rights Reserved.
|
5
|
+
#
|
6
|
+
module Prawn
|
7
|
+
module Measurements
|
8
|
+
|
9
|
+
# ============================================================================
|
10
|
+
#metric conversions
|
11
|
+
def cm2mm(cm)
|
12
|
+
return cm*10
|
13
|
+
end
|
14
|
+
|
15
|
+
def dm2mm(dm)
|
16
|
+
return dm*100
|
17
|
+
end
|
18
|
+
|
19
|
+
def m2mm(m)
|
20
|
+
return m*1000
|
21
|
+
end
|
22
|
+
|
23
|
+
# ============================================================================
|
24
|
+
# imperial conversions
|
25
|
+
# from http://en.wikipedia.org/wiki/Imperial_units
|
26
|
+
|
27
|
+
def ft2in(ft)
|
28
|
+
return ft * 12
|
29
|
+
end
|
30
|
+
|
31
|
+
def yd2in(yd)
|
32
|
+
return yd*36
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# ============================================================================
|
37
|
+
# PostscriptPoint-converisons
|
38
|
+
|
39
|
+
def in2pt(inch)
|
40
|
+
return inch * 72
|
41
|
+
end
|
42
|
+
|
43
|
+
def ft2pt(ft)
|
44
|
+
return in2pt(ft2in(ft))
|
45
|
+
end
|
46
|
+
|
47
|
+
def yd2pt(yd)
|
48
|
+
return in2pt(yd2in(yd))
|
49
|
+
end
|
50
|
+
|
51
|
+
def mm2pt(mm)
|
52
|
+
return mm*(72 / 25.4)
|
53
|
+
end
|
54
|
+
|
55
|
+
def cm2pt(cm)
|
56
|
+
return mm2pt(cm2mm(cm))
|
57
|
+
end
|
58
|
+
|
59
|
+
def dm2pt(dm)
|
60
|
+
return mm2pt(dm2mm(dm))
|
61
|
+
end
|
62
|
+
|
63
|
+
def m2pt(m)
|
64
|
+
return mm2pt(m2mm(m))
|
65
|
+
end
|
66
|
+
|
67
|
+
def pt2mm(pt)
|
68
|
+
return pt * 1 / mm2pt(1)# (25.4 / 72)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|