prawn 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/prawn/document/bounding_box.rb +213 -141
- data/lib/prawn/document/column_box.rb +61 -26
- data/lib/prawn/document/internals.rb +25 -16
- data/lib/prawn/document/span.rb +20 -18
- data/lib/prawn/document.rb +257 -171
- data/lib/prawn/encoding.rb +2 -5
- data/lib/prawn/errors.rb +23 -34
- data/lib/prawn/font.rb +248 -135
- data/lib/prawn/font_metric_cache.rb +11 -10
- data/lib/prawn/fonts/afm.rb +85 -45
- data/lib/prawn/fonts/dfont.rb +7 -1
- data/lib/prawn/fonts/otf.rb +4 -1
- data/lib/prawn/fonts/to_unicode_cmap.rb +151 -0
- data/lib/prawn/fonts/ttc.rb +7 -2
- data/lib/prawn/fonts/ttf.rb +305 -93
- data/lib/prawn/fonts.rb +14 -0
- data/lib/prawn/graphics/blend_mode.rb +25 -28
- data/lib/prawn/graphics/cap_style.rb +9 -12
- data/lib/prawn/graphics/color.rb +57 -34
- data/lib/prawn/graphics/dash.rb +45 -42
- data/lib/prawn/graphics/join_style.rb +17 -11
- data/lib/prawn/graphics/patterns.rb +190 -69
- data/lib/prawn/graphics/transformation.rb +48 -41
- data/lib/prawn/graphics/transparency.rb +16 -40
- data/lib/prawn/graphics.rb +363 -253
- data/lib/prawn/grid.rb +184 -57
- data/lib/prawn/image_handler.rb +27 -10
- data/lib/prawn/images/image.rb +8 -10
- data/lib/prawn/images/jpg.rb +42 -19
- data/lib/prawn/images/png.rb +92 -41
- data/lib/prawn/images.rb +44 -57
- data/lib/prawn/measurement_extensions.rb +39 -8
- data/lib/prawn/measurements.rb +60 -5
- data/lib/prawn/outline.rb +114 -108
- data/lib/prawn/repeater.rb +51 -35
- data/lib/prawn/security/arcfour.rb +4 -4
- data/lib/prawn/security.rb +75 -70
- data/lib/prawn/soft_mask.rb +42 -30
- data/lib/prawn/stamp.rb +38 -42
- data/lib/prawn/text/box.rb +146 -96
- data/lib/prawn/text/formatted/arranger.rb +87 -26
- data/lib/prawn/text/formatted/box.rb +221 -150
- data/lib/prawn/text/formatted/fragment.rb +130 -14
- data/lib/prawn/text/formatted/line_wrap.rb +33 -24
- data/lib/prawn/text/formatted/parser.rb +112 -72
- data/lib/prawn/text/formatted/wrap.rb +12 -17
- data/lib/prawn/text/formatted.rb +75 -0
- data/lib/prawn/text.rb +441 -196
- data/lib/prawn/transformation_stack.rb +29 -10
- data/lib/prawn/utilities.rb +13 -13
- data/lib/prawn/version.rb +2 -1
- data/lib/prawn/view.rb +68 -53
- data/lib/prawn.rb +23 -18
- data.tar.gz.sig +0 -0
- metadata +54 -177
- metadata.gz.sig +0 -0
- data/.yardopts +0 -10
- data/Gemfile +0 -5
- data/Rakefile +0 -25
- data/manual/absolute_position.pdf +0 -0
- data/manual/basic_concepts/adding_pages.rb +0 -26
- data/manual/basic_concepts/basic_concepts.rb +0 -43
- data/manual/basic_concepts/creation.rb +0 -38
- data/manual/basic_concepts/cursor.rb +0 -32
- data/manual/basic_concepts/measurement.rb +0 -24
- data/manual/basic_concepts/origin.rb +0 -37
- data/manual/basic_concepts/other_cursor_helpers.rb +0 -39
- data/manual/basic_concepts/view.rb +0 -48
- data/manual/bounding_box/bounding_box.rb +0 -41
- data/manual/bounding_box/bounds.rb +0 -48
- data/manual/bounding_box/canvas.rb +0 -23
- data/manual/bounding_box/creation.rb +0 -22
- data/manual/bounding_box/indentation.rb +0 -45
- data/manual/bounding_box/nesting.rb +0 -52
- data/manual/bounding_box/russian_boxes.rb +0 -40
- data/manual/bounding_box/stretchy.rb +0 -29
- data/manual/contents.rb +0 -35
- data/manual/cover.rb +0 -43
- data/manual/document_and_page_options/background.rb +0 -29
- data/manual/document_and_page_options/document_and_page_options.rb +0 -34
- data/manual/document_and_page_options/metadata.rb +0 -25
- data/manual/document_and_page_options/page_margins.rb +0 -36
- data/manual/document_and_page_options/page_size.rb +0 -34
- data/manual/document_and_page_options/print_scaling.rb +0 -23
- data/manual/example_helper.rb +0 -8
- data/manual/graphics/blend_mode.rb +0 -52
- data/manual/graphics/circle_and_ellipse.rb +0 -21
- data/manual/graphics/color.rb +0 -22
- data/manual/graphics/common_lines.rb +0 -29
- data/manual/graphics/fill_and_stroke.rb +0 -41
- data/manual/graphics/fill_rules.rb +0 -38
- data/manual/graphics/gradients.rb +0 -43
- data/manual/graphics/graphics.rb +0 -64
- data/manual/graphics/helper.rb +0 -34
- data/manual/graphics/line_width.rb +0 -36
- data/manual/graphics/lines_and_curves.rb +0 -40
- data/manual/graphics/polygon.rb +0 -27
- data/manual/graphics/rectangle.rb +0 -20
- data/manual/graphics/rotate.rb +0 -25
- data/manual/graphics/scale.rb +0 -42
- data/manual/graphics/soft_masks.rb +0 -44
- data/manual/graphics/stroke_cap.rb +0 -30
- data/manual/graphics/stroke_dash.rb +0 -47
- data/manual/graphics/stroke_join.rb +0 -29
- data/manual/graphics/translate.rb +0 -29
- data/manual/graphics/transparency.rb +0 -33
- data/manual/how_to_read_this_manual.rb +0 -39
- data/manual/images/absolute_position.rb +0 -22
- data/manual/images/fit.rb +0 -20
- data/manual/images/horizontal.rb +0 -24
- data/manual/images/images.rb +0 -41
- data/manual/images/plain_image.rb +0 -17
- data/manual/images/scale.rb +0 -21
- data/manual/images/vertical.rb +0 -30
- data/manual/images/width_and_height.rb +0 -24
- data/manual/layout/boxes.rb +0 -26
- data/manual/layout/content.rb +0 -24
- data/manual/layout/layout.rb +0 -27
- data/manual/layout/simple_grid.rb +0 -22
- data/manual/outline/add_subsection_to.rb +0 -60
- data/manual/outline/insert_section_after.rb +0 -46
- data/manual/outline/outline.rb +0 -33
- data/manual/outline/sections_and_pages.rb +0 -66
- data/manual/repeatable_content/alternate_page_numbering.rb +0 -36
- data/manual/repeatable_content/page_numbering.rb +0 -55
- data/manual/repeatable_content/repeatable_content.rb +0 -35
- data/manual/repeatable_content/repeater.rb +0 -54
- data/manual/repeatable_content/stamp.rb +0 -40
- data/manual/security/encryption.rb +0 -28
- data/manual/security/permissions.rb +0 -43
- data/manual/security/security.rb +0 -28
- data/manual/table.rb +0 -16
- data/manual/text/alignment.rb +0 -43
- data/manual/text/color.rb +0 -24
- data/manual/text/column_box.rb +0 -30
- data/manual/text/fallback_fonts.rb +0 -41
- data/manual/text/font.rb +0 -40
- data/manual/text/font_size.rb +0 -44
- data/manual/text/font_style.rb +0 -25
- data/manual/text/formatted_callbacks.rb +0 -70
- data/manual/text/formatted_text.rb +0 -61
- data/manual/text/free_flowing_text.rb +0 -50
- data/manual/text/inline.rb +0 -40
- data/manual/text/kerning_and_character_spacing.rb +0 -38
- data/manual/text/leading.rb +0 -24
- data/manual/text/line_wrapping.rb +0 -60
- data/manual/text/paragraph_indentation.rb +0 -31
- data/manual/text/positioned_text.rb +0 -37
- data/manual/text/registering_families.rb +0 -51
- data/manual/text/rendering_and_color.rb +0 -36
- data/manual/text/right_to_left_text.rb +0 -54
- data/manual/text/rotation.rb +0 -52
- data/manual/text/single_usage.rb +0 -36
- data/manual/text/text.rb +0 -75
- data/manual/text/text_box_excess.rb +0 -35
- data/manual/text/text_box_extensions.rb +0 -48
- data/manual/text/text_box_overflow.rb +0 -51
- data/manual/text/utf8.rb +0 -27
- data/manual/text/win_ansi_charset.rb +0 -62
- data/prawn.gemspec +0 -51
- data/spec/data/curves.pdf +0 -66
- data/spec/extensions/encoding_helpers.rb +0 -11
- data/spec/prawn/document/bounding_box_spec.rb +0 -550
- data/spec/prawn/document/column_box_spec.rb +0 -75
- data/spec/prawn/document/security_spec.rb +0 -176
- data/spec/prawn/document_annotations_spec.rb +0 -76
- data/spec/prawn/document_destinations_spec.rb +0 -15
- data/spec/prawn/document_grid_spec.rb +0 -99
- data/spec/prawn/document_reference_spec.rb +0 -27
- data/spec/prawn/document_span_spec.rb +0 -44
- data/spec/prawn/document_spec.rb +0 -805
- data/spec/prawn/font_metric_cache_spec.rb +0 -54
- data/spec/prawn/font_spec.rb +0 -544
- data/spec/prawn/graphics/blend_mode_spec.rb +0 -63
- data/spec/prawn/graphics/transparency_spec.rb +0 -81
- data/spec/prawn/graphics_spec.rb +0 -872
- data/spec/prawn/graphics_stroke_styles_spec.rb +0 -229
- data/spec/prawn/image_handler_spec.rb +0 -53
- data/spec/prawn/images/jpg_spec.rb +0 -20
- data/spec/prawn/images/png_spec.rb +0 -283
- data/spec/prawn/images_spec.rb +0 -229
- data/spec/prawn/measurements_extensions_spec.rb +0 -24
- data/spec/prawn/outline_spec.rb +0 -512
- data/spec/prawn/repeater_spec.rb +0 -166
- data/spec/prawn/soft_mask_spec.rb +0 -74
- data/spec/prawn/stamp_spec.rb +0 -173
- data/spec/prawn/text/box_spec.rb +0 -1110
- data/spec/prawn/text/formatted/arranger_spec.rb +0 -466
- data/spec/prawn/text/formatted/box_spec.rb +0 -849
- data/spec/prawn/text/formatted/fragment_spec.rb +0 -343
- data/spec/prawn/text/formatted/line_wrap_spec.rb +0 -495
- data/spec/prawn/text/formatted/parser_spec.rb +0 -697
- data/spec/prawn/text_draw_text_spec.rb +0 -150
- data/spec/prawn/text_rendering_mode_spec.rb +0 -48
- data/spec/prawn/text_spacing_spec.rb +0 -95
- data/spec/prawn/text_spec.rb +0 -603
- data/spec/prawn/text_with_inline_formatting_spec.rb +0 -35
- data/spec/prawn/transformation_stack_spec.rb +0 -66
- data/spec/prawn/view_spec.rb +0 -63
- data/spec/prawn_manual_spec.rb +0 -35
- data/spec/spec_helper.rb +0 -48
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Blend modes can be used to change the way two layers (images, graphics,
|
4
|
-
# text, etc.) are blended together. The <code>blend_mode</code> method
|
5
|
-
# accepts a single blend mode or an array of blend modes. PDF viewers should
|
6
|
-
# blend the layers based on the first recognized blend mode.
|
7
|
-
#
|
8
|
-
# Valid blend modes in v1.4 of the PDF spec include :Normal, :Multiply, :Screen,
|
9
|
-
# :Overlay, :Darken, :Lighten, :ColorDodge, :ColorBurn, :HardLight, :SoftLight,
|
10
|
-
# :Difference, :Exclusion, :Hue, :Saturation, :Color, and :Luminosity.
|
11
|
-
|
12
|
-
require_relative '../example_helper'
|
13
|
-
|
14
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
16
|
-
start_new_page
|
17
|
-
|
18
|
-
# https://commons.wikimedia.org/wiki/File:Blend_modes_2.-bottom-layer.jpg#/media/File:Blend_modes_2.-bottom-layer.jpg
|
19
|
-
bottom_layer = "#{Prawn::DATADIR}/images/blend_modes_bottom_layer.jpg"
|
20
|
-
|
21
|
-
# https://commons.wikimedia.org/wiki/File:Blend_modes_1.-top-layer.jpg#/media/File:Blend_modes_1.-top-layer.jpg
|
22
|
-
top_layer = "#{Prawn::DATADIR}/images/blend_modes_top_layer.jpg"
|
23
|
-
|
24
|
-
blend_modes = %i[
|
25
|
-
Normal Multiply Screen Overlay Darken Lighten ColorDodge
|
26
|
-
ColorBurn HardLight SoftLight Difference Exclusion Hue
|
27
|
-
Saturation Color Luminosity
|
28
|
-
]
|
29
|
-
blend_modes.each_with_index do |blend_mode, index|
|
30
|
-
x = index % 4 * 135
|
31
|
-
y = cursor - (index / 4 * 200)
|
32
|
-
|
33
|
-
image bottom_layer, at: [x, y], fit: [125, 125]
|
34
|
-
blend_mode(blend_mode) do
|
35
|
-
image top_layer, at: [x, y], fit: [125, 125]
|
36
|
-
end
|
37
|
-
|
38
|
-
y -= 130
|
39
|
-
|
40
|
-
fill_color '009ddc'
|
41
|
-
fill_rectangle [x, y], 75, 25
|
42
|
-
blend_mode(blend_mode) do
|
43
|
-
fill_color 'fdb827'
|
44
|
-
fill_rectangle [x + 50, y], 75, 25
|
45
|
-
end
|
46
|
-
|
47
|
-
y -= 30
|
48
|
-
|
49
|
-
fill_color '000000'
|
50
|
-
text_box blend_mode.to_s, at: [x, y]
|
51
|
-
end
|
52
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# To define a <code>circle</code> all you need is the center point and the
|
4
|
-
# radius.
|
5
|
-
#
|
6
|
-
# To define an <code>ellipse</code> you provide the center point and two radii
|
7
|
-
# (or axes) values. If the second radius value is ommitted, both radii will be
|
8
|
-
# equal and you will end up drawing a circle.
|
9
|
-
|
10
|
-
require_relative '../example_helper'
|
11
|
-
|
12
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
13
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
14
|
-
stroke_axis
|
15
|
-
|
16
|
-
stroke_circle [100, 300], 100
|
17
|
-
|
18
|
-
fill_ellipse [200, 100], 100, 50
|
19
|
-
|
20
|
-
fill_ellipse [400, 100], 50
|
21
|
-
end
|
data/manual/graphics/color.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# We can change the stroke and fill colors providing an HTML rgb 6 digit color
|
4
|
-
# code string ("AB1234") or 4 values for CMYK.
|
5
|
-
|
6
|
-
require_relative '../example_helper'
|
7
|
-
|
8
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
9
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
10
|
-
stroke_axis
|
11
|
-
|
12
|
-
# Fill with Yellow using RGB (Unlike css, there is no leading #)
|
13
|
-
fill_color 'FFFFCC'
|
14
|
-
fill_polygon [50, 150], [150, 200], [250, 150], [250, 50], [150, 0], [50, 50]
|
15
|
-
|
16
|
-
# Stroke with Purple using CMYK
|
17
|
-
stroke_color 50, 100, 0, 0
|
18
|
-
stroke_rectangle [300, 300], 200, 100
|
19
|
-
|
20
|
-
# Both together
|
21
|
-
fill_and_stroke_circle [400, 100], 50
|
22
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Prawn provides helpers for drawing some commonly used lines:
|
4
|
-
#
|
5
|
-
# <code>vertical_line</code> and <code>horizontal_line</code> do just what their
|
6
|
-
# names imply. Specify the start and end point at a fixed coordinate to define
|
7
|
-
# the line.
|
8
|
-
#
|
9
|
-
# <code>horizontal_rule</code> draws a horizontal line on the current bounding
|
10
|
-
# box from border to border, using the current y position.
|
11
|
-
|
12
|
-
require_relative '../example_helper'
|
13
|
-
|
14
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
16
|
-
stroke_axis
|
17
|
-
|
18
|
-
stroke_color 'ff0000'
|
19
|
-
|
20
|
-
stroke do
|
21
|
-
# just lower the current y position
|
22
|
-
move_down 50
|
23
|
-
horizontal_rule
|
24
|
-
|
25
|
-
vertical_line 100, 300, at: 50
|
26
|
-
|
27
|
-
horizontal_line 200, 500, at: 150
|
28
|
-
end
|
29
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# There are two drawing primitives in Prawn: <code>fill</code> and
|
4
|
-
# <code>stroke</code>.
|
5
|
-
#
|
6
|
-
# These are the methods that actually draw stuff on the document. All the other
|
7
|
-
# drawing shapes like <code>rectangle</code>, <code>circle</code> or
|
8
|
-
# <code>line_to</code> define drawing paths. These paths need to be either
|
9
|
-
# stroked or filled to gain form on the document.
|
10
|
-
#
|
11
|
-
# Calling these methods without a block will act on the drawing path that
|
12
|
-
# has been defined prior to the call.
|
13
|
-
#
|
14
|
-
# Calling with a block will act on the drawing path set within the
|
15
|
-
# block.
|
16
|
-
#
|
17
|
-
# Most of the methods which define drawing paths have methods of the same name
|
18
|
-
# starting with stroke_ and fill_ which create the drawing path and then stroke
|
19
|
-
# or fill it.
|
20
|
-
|
21
|
-
require_relative '../example_helper'
|
22
|
-
|
23
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
24
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
25
|
-
stroke_axis
|
26
|
-
|
27
|
-
# No block
|
28
|
-
line [0, 200], [100, 150]
|
29
|
-
stroke
|
30
|
-
|
31
|
-
rectangle [0, 100], 100, 100
|
32
|
-
fill
|
33
|
-
|
34
|
-
# With block
|
35
|
-
stroke { line [200, 200], [300, 150] }
|
36
|
-
fill { rectangle [200, 100], 100, 100 }
|
37
|
-
|
38
|
-
# Method hook
|
39
|
-
stroke_line [400, 200], [500, 150]
|
40
|
-
fill_rectangle [400, 100], 100, 100
|
41
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Prawn's fill operators (<code>fill</code> and <code>fill_and_stroke</code>
|
4
|
-
# both accept a <code>:fill_rule</code> option. These rules determine which
|
5
|
-
# parts of the page are counted as "inside" vs. "outside" the path. There are
|
6
|
-
# two fill rules:
|
7
|
-
#
|
8
|
-
# * <code>:nonzero_winding_number</code> (default): a point is inside the path
|
9
|
-
# if a ray from that point to infinity crosses a nonzero "net number" of path
|
10
|
-
# segments, where path segments intersecting in one direction are counted as
|
11
|
-
# positive and those in the other direction negative.
|
12
|
-
#
|
13
|
-
# * <code>:even_odd</code>: A point is inside the path if a ray from that point
|
14
|
-
# to infinity crosses an odd number of path segments, regardless of direction.
|
15
|
-
#
|
16
|
-
# The differences between the fill rules only come into play with complex
|
17
|
-
# paths; they are identical for simple shapes.
|
18
|
-
|
19
|
-
require_relative '../example_helper'
|
20
|
-
|
21
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
22
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
23
|
-
pentagram = [[181, 95], [0, 36], [111, 190], [111, 0], [0, 154]]
|
24
|
-
|
25
|
-
stroke_color 'ff0000'
|
26
|
-
line_width 2
|
27
|
-
|
28
|
-
text_box 'Nonzero Winding Number',
|
29
|
-
at: [50, 215],
|
30
|
-
width: 170,
|
31
|
-
align: :center
|
32
|
-
polygon(*pentagram.map { |x, y| [x + 50, y] })
|
33
|
-
fill_and_stroke
|
34
|
-
|
35
|
-
text_box 'Even-Odd', at: [330, 215], width: 170, align: :center
|
36
|
-
polygon(*pentagram.map { |x, y| [x + 330, y] })
|
37
|
-
fill_and_stroke(fill_rule: :even_odd)
|
38
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Note that because of the way PDF renders radial gradients in order to get
|
4
|
-
# solid fill your start circle must be fully inside your end circle.
|
5
|
-
# Otherwise you will get triangle fill like illustrated in the example below.
|
6
|
-
|
7
|
-
require_relative '../example_helper'
|
8
|
-
|
9
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
10
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
11
|
-
self.line_width = 10
|
12
|
-
|
13
|
-
# Linear Gradients
|
14
|
-
fill_gradient [0, 250], [100, 150], 'ff0000', '0000ff'
|
15
|
-
fill_rectangle [0, 250], 100, 100
|
16
|
-
|
17
|
-
stroke_gradient [150, 150], [250, 250], '00ffff', 'ffff00'
|
18
|
-
stroke_rectangle [150, 250], 100, 100
|
19
|
-
|
20
|
-
fill_gradient [300, 250], [400, 150], 'ff0000', '0000ff'
|
21
|
-
stroke_gradient [300, 150], [400, 250], '00ffff', 'ffff00'
|
22
|
-
fill_and_stroke_rectangle [300, 250], 100, 100
|
23
|
-
|
24
|
-
rotate 45, origin: [500, 200] do
|
25
|
-
stops = { 0 => 'ff0000', 0.6 => '999900', 0.8 => '00cc00', 1 => '4444ff' }
|
26
|
-
fill_gradient from: [460, 240], to: [540, 160], stops: stops
|
27
|
-
fill_rectangle [460, 240], 80, 80
|
28
|
-
end
|
29
|
-
|
30
|
-
# Radial gradients
|
31
|
-
fill_gradient [50, 50], 0, [50, 50], 70.71, 'ff0000', '0000ff'
|
32
|
-
fill_rectangle [0, 100], 100, 100
|
33
|
-
|
34
|
-
stroke_gradient [200, 50], 45, [200, 50], 70.71, '00ffff', 'ffff00'
|
35
|
-
stroke_rectangle [150, 100], 100, 100
|
36
|
-
|
37
|
-
stroke_gradient [350, 50], 45, [350, 50], 70.71, '00ffff', 'ffff00'
|
38
|
-
fill_gradient [350, 50], 0, [350, 50], 70.71, 'ff0000', '0000ff'
|
39
|
-
fill_and_stroke_rectangle [300, 100], 100, 100
|
40
|
-
|
41
|
-
fill_gradient [500, 100], 50, [500, 0], 0, 'ff0000', '0000ff'
|
42
|
-
fill_rectangle [450, 100], 100, 100
|
43
|
-
end
|
data/manual/graphics/graphics.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Examples for the Graphics package.
|
4
|
-
|
5
|
-
require_relative '../example_helper'
|
6
|
-
|
7
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
8
|
-
Prawn::ManualBuilder::Example.generate(filename, page_size: 'FOLIO') do
|
9
|
-
package 'graphics' do |p|
|
10
|
-
p.section 'Basics' do |s|
|
11
|
-
s.example 'helper'
|
12
|
-
s.example 'fill_and_stroke'
|
13
|
-
end
|
14
|
-
|
15
|
-
p.section 'Shapes' do |s|
|
16
|
-
s.example 'lines_and_curves'
|
17
|
-
s.example 'common_lines'
|
18
|
-
s.example 'rectangle'
|
19
|
-
s.example 'polygon'
|
20
|
-
s.example 'circle_and_ellipse'
|
21
|
-
end
|
22
|
-
|
23
|
-
p.section 'Fill and Stroke settings' do |s|
|
24
|
-
s.example 'line_width'
|
25
|
-
s.example 'stroke_cap'
|
26
|
-
s.example 'stroke_join'
|
27
|
-
s.example 'stroke_dash'
|
28
|
-
s.example 'color'
|
29
|
-
s.example 'gradients'
|
30
|
-
s.example 'transparency'
|
31
|
-
s.example 'soft_masks'
|
32
|
-
s.example 'blend_mode'
|
33
|
-
s.example 'fill_rules'
|
34
|
-
end
|
35
|
-
|
36
|
-
p.section 'Transformations' do |s|
|
37
|
-
s.example 'rotate'
|
38
|
-
s.example 'translate'
|
39
|
-
s.example 'scale'
|
40
|
-
end
|
41
|
-
|
42
|
-
p.intro do
|
43
|
-
prose <<-TEXT
|
44
|
-
Here we show all the drawing methods provided by Prawn. Use them to draw
|
45
|
-
the most beautiful imaginable things.
|
46
|
-
|
47
|
-
Most of the content that you'll add to your pdf document will use the
|
48
|
-
graphics package. Even text is rendered on a page just like a rectangle
|
49
|
-
so even if you never use any of the shapes described here you should at
|
50
|
-
least read the basic examples.
|
51
|
-
|
52
|
-
The examples show:
|
53
|
-
TEXT
|
54
|
-
|
55
|
-
list(
|
56
|
-
'All the possible ways that you can fill or stroke shapes on a page',
|
57
|
-
'How to draw all the shapes that Prawn has to offer from a measly '\
|
58
|
-
'line to a mighty polygon or ellipse',
|
59
|
-
'The configuration options for stroking lines and filling shapes',
|
60
|
-
'How to apply transformations to your drawing space'
|
61
|
-
)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
data/manual/graphics/helper.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# To produce this manual we use the <code>stroke_axis</code> helper method
|
4
|
-
# within the examples.
|
5
|
-
#
|
6
|
-
# <code>stroke_axis</code> prints the x and y axis for the current bounding box
|
7
|
-
# with markers in 100 increments. The defaults can be changed with various
|
8
|
-
# options.
|
9
|
-
#
|
10
|
-
# Note that the examples define a custom <code>:height</code> option so that
|
11
|
-
# only the example canvas is used (as seen with the output of the first line of
|
12
|
-
# the example code).
|
13
|
-
|
14
|
-
require_relative '../example_helper'
|
15
|
-
|
16
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
18
|
-
stroke_axis
|
19
|
-
stroke_axis(
|
20
|
-
at: [70, 70],
|
21
|
-
height: 200,
|
22
|
-
step_length: 50,
|
23
|
-
negative_axes_length: 5,
|
24
|
-
color: '0000FF'
|
25
|
-
)
|
26
|
-
stroke_axis(
|
27
|
-
at: [140, 140],
|
28
|
-
width: 200,
|
29
|
-
height: cursor.to_i - 140,
|
30
|
-
step_length: 20,
|
31
|
-
negative_axes_length: 40,
|
32
|
-
color: 'FF0000'
|
33
|
-
)
|
34
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# The <code>line_width=</code> method sets the stroke width for subsequent
|
4
|
-
# stroke calls.
|
5
|
-
#
|
6
|
-
# Since Ruby assumes that an unknown variable on the left hand side of an
|
7
|
-
# assignment is a local temporary, rather than a setter method, if you are using
|
8
|
-
# the block call to <code>Prawn::Document.generate</code> without passing params
|
9
|
-
# you will need to call <code>line_width</code> on self.
|
10
|
-
|
11
|
-
# rubocop: disable Lint/UselessAssignment
|
12
|
-
require_relative '../example_helper'
|
13
|
-
|
14
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
16
|
-
stroke_axis
|
17
|
-
|
18
|
-
y = 250
|
19
|
-
|
20
|
-
3.times do |i|
|
21
|
-
case i
|
22
|
-
when 0 then line_width = 10 # This call will have no effect
|
23
|
-
when 1 then self.line_width = 10
|
24
|
-
when 2 then self.line_width = 25
|
25
|
-
end
|
26
|
-
|
27
|
-
stroke do
|
28
|
-
horizontal_line 50, 150, at: y
|
29
|
-
rectangle [275, y + 25], 50, 50
|
30
|
-
circle [500, y], 25
|
31
|
-
end
|
32
|
-
|
33
|
-
y -= 100
|
34
|
-
end
|
35
|
-
end
|
36
|
-
# rubocop: enable Lint/UselessAssignment
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Prawn supports drawing both lines and curves starting either at the current
|
4
|
-
# position, or from a specified starting position.
|
5
|
-
#
|
6
|
-
# <code>line_to</code> and <code>curve_to</code> set the drawing path from the
|
7
|
-
# current drawing position to the specified point. The initial drawing position
|
8
|
-
# can be set with <code>move_to</code>. They are useful when you want to chain
|
9
|
-
# successive calls because the drawing position will be set to the specified
|
10
|
-
# point afterwards.
|
11
|
-
#
|
12
|
-
# <code>line</code> and <code>curve</code> set the drawing path between the two
|
13
|
-
# specified points.
|
14
|
-
#
|
15
|
-
# Both curve methods define a Bezier curve bounded by two aditional points
|
16
|
-
# provided as the <code>:bounds</code> param.
|
17
|
-
|
18
|
-
require_relative '../example_helper'
|
19
|
-
|
20
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
21
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
22
|
-
stroke_axis
|
23
|
-
|
24
|
-
# line_to and curve_to
|
25
|
-
stroke do
|
26
|
-
move_to 0, 0
|
27
|
-
|
28
|
-
line_to 100, 100
|
29
|
-
line_to 0, 100
|
30
|
-
|
31
|
-
curve_to [150, 250], bounds: [[20, 200], [120, 200]]
|
32
|
-
curve_to [200, 0], bounds: [[150, 200], [450, 10]]
|
33
|
-
end
|
34
|
-
|
35
|
-
# line and curve
|
36
|
-
stroke do
|
37
|
-
line [300, 200], [400, 50]
|
38
|
-
curve [500, 0], [400, 200], bounds: [[600, 300], [300, 390]]
|
39
|
-
end
|
40
|
-
end
|
data/manual/graphics/polygon.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Drawing polygons in Prawn is easy, just pass a sequence of points to one of
|
4
|
-
# the polygon family of methods.
|
5
|
-
#
|
6
|
-
# Just like <code>rounded_rectangle</code> we also have
|
7
|
-
# <code>rounded_polygon</code>. The only difference is the radius param comes
|
8
|
-
# before the polygon points.
|
9
|
-
|
10
|
-
require_relative '../example_helper'
|
11
|
-
|
12
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
13
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
14
|
-
stroke_axis
|
15
|
-
|
16
|
-
# Triangle
|
17
|
-
stroke_polygon [50, 200], [50, 300], [150, 300]
|
18
|
-
|
19
|
-
# Hexagon
|
20
|
-
fill_polygon [50, 150], [150, 200], [250, 150], [250, 50], [150, 0], [50, 50]
|
21
|
-
|
22
|
-
# Pentagram
|
23
|
-
pentagon_points = [500, 100], [430, 5], [319, 41], [319, 159], [430, 195]
|
24
|
-
pentagram_points = [0, 2, 4, 1, 3].map { |i| pentagon_points[i] }
|
25
|
-
|
26
|
-
stroke_rounded_polygon(20, *pentagram_points)
|
27
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# To draw a rectangle, just provide the upper-left corner, width and height to
|
4
|
-
# the <code>rectangle</code> method.
|
5
|
-
#
|
6
|
-
# There's also <code>rounded_rectangle</code>. Just provide an additional radius
|
7
|
-
# value for the rounded corners.
|
8
|
-
|
9
|
-
require_relative '../example_helper'
|
10
|
-
|
11
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
12
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
13
|
-
stroke_axis
|
14
|
-
|
15
|
-
stroke do
|
16
|
-
rectangle [100, 300], 100, 200
|
17
|
-
|
18
|
-
rounded_rectangle [300, 300], 100, 200, 20
|
19
|
-
end
|
20
|
-
end
|
data/manual/graphics/rotate.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# This transformation is used to rotate the user space. Give it an angle
|
4
|
-
# and an <code>:origin</code> point about which to rotate and a block.
|
5
|
-
# Everything inside the block will be drawn with the rotated coordinates.
|
6
|
-
#
|
7
|
-
# The angle is in degrees.
|
8
|
-
#
|
9
|
-
# If you omit the <code>:origin</code> option the page origin will be used.
|
10
|
-
|
11
|
-
require_relative '../example_helper'
|
12
|
-
|
13
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
14
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
15
|
-
stroke_axis
|
16
|
-
|
17
|
-
fill_circle [250, 200], 2
|
18
|
-
|
19
|
-
12.times do |i|
|
20
|
-
rotate(i * 30, origin: [250, 200]) do
|
21
|
-
stroke_rectangle [350, 225], 100, 50
|
22
|
-
draw_text "Rotated #{i * 30}°", size: 10, at: [360, 205]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/manual/graphics/scale.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# This transformation is used to scale the user space. Give it an scale factor
|
4
|
-
# and an <code>:origin</code> point and everything inside the block will be
|
5
|
-
# scaled using the origin point as reference.
|
6
|
-
#
|
7
|
-
# If you omit the <code>:origin</code> option the page origin will be used.
|
8
|
-
|
9
|
-
require_relative '../example_helper'
|
10
|
-
|
11
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
12
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
13
|
-
stroke_axis
|
14
|
-
|
15
|
-
width = 100
|
16
|
-
height = 50
|
17
|
-
|
18
|
-
x = 50
|
19
|
-
y = 200
|
20
|
-
|
21
|
-
stroke_rectangle [x, y], width, height
|
22
|
-
text_box 'reference rectangle', at: [x + 10, y - 10], width: width - 20
|
23
|
-
|
24
|
-
scale(2, origin: [x, y]) do
|
25
|
-
stroke_rectangle [x, y], width, height
|
26
|
-
text_box 'rectangle scaled from upper-left corner',
|
27
|
-
at: [x, y - height - 5],
|
28
|
-
width: width
|
29
|
-
end
|
30
|
-
|
31
|
-
x = 350
|
32
|
-
|
33
|
-
stroke_rectangle [x, y], width, height
|
34
|
-
text_box 'reference rectangle', at: [x + 10, y - 10], width: width - 20
|
35
|
-
|
36
|
-
scale(2, origin: [x + width / 2, y - height / 2]) do
|
37
|
-
stroke_rectangle [x, y], width, height
|
38
|
-
text_box 'rectangle scaled from center',
|
39
|
-
at: [x, y - height - 5],
|
40
|
-
width: width
|
41
|
-
end
|
42
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Soft masks are used for more complex alpha channel manipulations. You can use
|
4
|
-
# arbitrary drawing functions for creation of soft masks. The resulting alpha
|
5
|
-
# channel is made of greyscale version of the drawing (luminosity channel to be
|
6
|
-
# precise). So while you can use any combination of colors for soft masks it's
|
7
|
-
# easier to use greyscales. Black will result in full transparency and white
|
8
|
-
# will make region fully opaque.
|
9
|
-
#
|
10
|
-
# Soft mask is a part of page graphic state. So if you want to apply soft mask
|
11
|
-
# only to a part of page you need to enclose drawing instructions in
|
12
|
-
# <code>save_graphics_state</code> block.
|
13
|
-
|
14
|
-
require_relative '../example_helper'
|
15
|
-
|
16
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
18
|
-
save_graphics_state do
|
19
|
-
soft_mask do
|
20
|
-
0.upto 15 do |i|
|
21
|
-
fill_color 0, 0, 0, 100.0 / 16.0 * (15 - i)
|
22
|
-
fill_circle [75 + i * 25, 100], 60
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
fill_color '009ddc'
|
27
|
-
fill_rectangle [0, 60], 600, 20
|
28
|
-
|
29
|
-
fill_color '963d97'
|
30
|
-
fill_rectangle [0, 80], 600, 20
|
31
|
-
|
32
|
-
fill_color 'e03a3e'
|
33
|
-
fill_rectangle [0, 100], 600, 20
|
34
|
-
|
35
|
-
fill_color 'f5821f'
|
36
|
-
fill_rectangle [0, 120], 600, 20
|
37
|
-
|
38
|
-
fill_color 'fdb827'
|
39
|
-
fill_rectangle [0, 140], 600, 20
|
40
|
-
|
41
|
-
fill_color '61bb46'
|
42
|
-
fill_rectangle [0, 160], 600, 20
|
43
|
-
end
|
44
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# The cap style defines how the edge of a line or curve will be drawn. There are
|
4
|
-
# three types: <code>:butt</code> (the default), <code>:round</code> and
|
5
|
-
# <code>:projecting_square</code>
|
6
|
-
#
|
7
|
-
# The difference is better seen with thicker lines. With <code>:butt</code>
|
8
|
-
# lines are drawn starting and ending at the exact points provided. With both
|
9
|
-
# <code>:round</code> and <code>:projecting_square</code> the line is projected
|
10
|
-
# beyond the start and end points.
|
11
|
-
#
|
12
|
-
# Just like <code>line_width=</code> the <code>cap_style=</code> method needs an
|
13
|
-
# explicit receiver to work.
|
14
|
-
|
15
|
-
require_relative '../example_helper'
|
16
|
-
|
17
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
18
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
19
|
-
stroke_axis
|
20
|
-
|
21
|
-
self.line_width = 25
|
22
|
-
|
23
|
-
%i[butt round projecting_square].each_with_index do |cap, i|
|
24
|
-
self.cap_style = cap
|
25
|
-
|
26
|
-
y = 250 - i * 100
|
27
|
-
stroke_horizontal_line 100, 300, at: y
|
28
|
-
stroke_circle [400, y], 15
|
29
|
-
end
|
30
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# This sets the dashed pattern for lines and curves. The (dash) length defines
|
4
|
-
# how long each dash will be.
|
5
|
-
#
|
6
|
-
# The <code>:space</code> option defines the length of the space between the
|
7
|
-
# dashes.
|
8
|
-
#
|
9
|
-
# The <code>:phase</code> option defines the start point of the sequence of
|
10
|
-
# dashes and spaces.
|
11
|
-
#
|
12
|
-
# Complex dash patterns can be specified by using an array with alternating
|
13
|
-
# dash/gap lengths for the first parameter (note that the <code>:space</code>
|
14
|
-
# option is ignored in this case).
|
15
|
-
|
16
|
-
require_relative '../example_helper'
|
17
|
-
|
18
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
19
|
-
Prawn::ManualBuilder::Example.generate(filename) do
|
20
|
-
stroke_axis
|
21
|
-
|
22
|
-
dash([1, 2, 3, 2, 1, 5], phase: 6)
|
23
|
-
stroke_horizontal_line 50, 500, at: 230
|
24
|
-
dash([1, 2, 3, 4, 5, 6, 7, 8])
|
25
|
-
stroke_horizontal_line 50, 500, at: 220
|
26
|
-
|
27
|
-
base_y = 210
|
28
|
-
|
29
|
-
24.times do |i|
|
30
|
-
length = (i / 4) + 1
|
31
|
-
space = length # space between dashes same length as dash
|
32
|
-
phase = 0 # start with dash
|
33
|
-
|
34
|
-
case i % 4
|
35
|
-
when 0 then base_y -= 5
|
36
|
-
when 1 then phase = length # start with space between dashes
|
37
|
-
when 2 then space = length * 0.5 # space between dashes half as long as dash
|
38
|
-
when 3
|
39
|
-
space = length * 0.5 # space between dashes half as long as dash
|
40
|
-
phase = length # start with space between dashes
|
41
|
-
end
|
42
|
-
base_y -= 5
|
43
|
-
|
44
|
-
dash(length, space: space, phase: phase)
|
45
|
-
stroke_horizontal_line 50, 500, at: base_y - (2 * i)
|
46
|
-
end
|
47
|
-
end
|