prawn 2.4.0 → 2.5.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.
- 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
|