prawn 0.13.0 → 2.4.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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.yardopts +10 -0
- data/GPLv2 +20 -21
- data/Gemfile +3 -16
- data/Rakefile +17 -39
- data/lib/prawn/document/bounding_box.rb +85 -42
- data/lib/prawn/document/column_box.rb +21 -11
- data/lib/prawn/document/internals.rb +40 -147
- data/lib/prawn/document/span.rb +25 -17
- data/lib/prawn/document.rb +286 -245
- data/lib/prawn/encoding.rb +68 -101
- data/lib/prawn/errors.rb +47 -43
- data/lib/prawn/font.rb +204 -155
- data/lib/prawn/font_metric_cache.rb +25 -21
- data/lib/prawn/fonts/afm.rb +292 -0
- data/lib/prawn/{font → fonts}/dfont.rb +7 -13
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/fonts/ttc.rb +36 -0
- data/lib/prawn/{font → fonts}/ttf.rb +142 -80
- data/lib/prawn/graphics/blend_mode.rb +65 -0
- data/lib/prawn/graphics/cap_style.rb +6 -5
- data/lib/prawn/graphics/color.rb +47 -44
- data/lib/prawn/graphics/dash.rb +30 -13
- data/lib/prawn/graphics/join_style.rb +13 -6
- data/lib/prawn/graphics/patterns.rb +221 -90
- data/lib/prawn/graphics/transformation.rb +21 -12
- data/lib/prawn/graphics/transparency.rb +21 -17
- data/lib/prawn/graphics.rb +155 -128
- data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
- data/lib/prawn/image_handler.rb +16 -2
- data/lib/prawn/images/image.rb +4 -2
- data/lib/prawn/images/jpg.rb +39 -30
- data/lib/prawn/images/png.rb +132 -169
- data/lib/prawn/images.rb +70 -62
- data/lib/prawn/measurement_extensions.rb +15 -10
- data/lib/prawn/measurements.rb +22 -23
- data/lib/prawn/outline.rb +301 -13
- data/lib/prawn/repeater.rb +19 -17
- data/lib/prawn/security/arcfour.rb +54 -0
- data/lib/prawn/security.rb +108 -86
- data/lib/prawn/soft_mask.rb +40 -41
- data/lib/prawn/stamp.rb +29 -12
- data/lib/prawn/text/box.rb +27 -29
- data/lib/prawn/text/formatted/arranger.rb +110 -67
- data/lib/prawn/text/formatted/box.rb +233 -165
- data/lib/prawn/text/formatted/fragment.rb +27 -27
- data/lib/prawn/text/formatted/line_wrap.rb +137 -97
- data/lib/prawn/text/formatted/parser.rb +149 -127
- data/lib/prawn/text/formatted/wrap.rb +57 -37
- data/lib/prawn/text/formatted.rb +6 -4
- data/lib/prawn/text.rb +105 -73
- data/lib/prawn/transformation_stack.rb +44 -0
- data/lib/prawn/utilities.rb +11 -21
- data/lib/prawn/version.rb +5 -0
- data/lib/prawn/view.rb +101 -0
- data/lib/prawn.rb +42 -68
- data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
- data/manual/basic_concepts/adding_pages.rb +9 -10
- data/manual/basic_concepts/basic_concepts.rb +33 -24
- data/manual/basic_concepts/creation.rb +10 -11
- data/manual/basic_concepts/cursor.rb +9 -10
- data/manual/basic_concepts/measurement.rb +10 -11
- data/manual/basic_concepts/origin.rb +8 -9
- data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
- data/manual/basic_concepts/view.rb +48 -0
- data/manual/bounding_box/bounding_box.rb +31 -29
- data/manual/bounding_box/bounds.rb +17 -18
- data/manual/bounding_box/canvas.rb +8 -9
- data/manual/bounding_box/creation.rb +8 -9
- data/manual/bounding_box/indentation.rb +22 -23
- data/manual/bounding_box/nesting.rb +32 -25
- data/manual/bounding_box/russian_boxes.rb +19 -19
- data/manual/bounding_box/stretchy.rb +18 -20
- data/manual/contents.rb +35 -0
- data/manual/cover.rb +43 -0
- data/manual/document_and_page_options/background.rb +16 -14
- data/manual/document_and_page_options/document_and_page_options.rb +26 -23
- data/manual/document_and_page_options/metadata.rb +21 -19
- data/manual/document_and_page_options/page_margins.rb +20 -22
- data/manual/document_and_page_options/page_size.rb +15 -15
- data/manual/document_and_page_options/print_scaling.rb +23 -0
- data/manual/example_helper.rb +5 -408
- data/manual/graphics/blend_mode.rb +52 -0
- data/manual/graphics/circle_and_ellipse.rb +8 -9
- data/manual/graphics/color.rb +11 -13
- data/manual/graphics/common_lines.rb +13 -12
- data/manual/graphics/fill_and_stroke.rb +10 -11
- data/manual/graphics/fill_rules.rb +13 -12
- data/manual/graphics/gradients.rb +28 -22
- data/manual/graphics/graphics.rb +52 -46
- data/manual/graphics/helper.rb +20 -10
- data/manual/graphics/line_width.rb +13 -12
- data/manual/graphics/lines_and_curves.rb +13 -14
- data/manual/graphics/polygon.rb +10 -12
- data/manual/graphics/rectangle.rb +7 -8
- data/manual/graphics/rotate.rb +9 -12
- data/manual/graphics/scale.rb +19 -18
- data/manual/graphics/soft_masks.rb +5 -7
- data/manual/graphics/stroke_cap.rb +10 -11
- data/manual/graphics/stroke_dash.rb +16 -17
- data/manual/graphics/stroke_join.rb +10 -11
- data/manual/graphics/translate.rb +13 -13
- data/manual/graphics/transparency.rb +11 -13
- data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
- data/manual/images/absolute_position.rb +9 -10
- data/manual/images/fit.rb +9 -10
- data/manual/images/horizontal.rb +13 -14
- data/manual/images/images.rb +31 -30
- data/manual/images/plain_image.rb +6 -7
- data/manual/images/scale.rb +12 -13
- data/manual/images/vertical.rb +19 -17
- data/manual/images/width_and_height.rb +13 -14
- data/manual/layout/boxes.rb +14 -15
- data/manual/layout/content.rb +12 -13
- data/manual/layout/layout.rb +19 -20
- data/manual/layout/simple_grid.rb +8 -9
- data/manual/outline/add_subsection_to.rb +26 -27
- data/manual/outline/insert_section_after.rb +19 -20
- data/manual/outline/outline.rb +23 -22
- data/manual/outline/sections_and_pages.rb +24 -25
- data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
- data/manual/repeatable_content/page_numbering.rb +20 -19
- data/manual/repeatable_content/repeatable_content.rb +26 -22
- data/manual/repeatable_content/repeater.rb +18 -19
- data/manual/repeatable_content/stamp.rb +18 -19
- data/manual/security/encryption.rb +8 -11
- data/manual/security/permissions.rb +20 -15
- data/manual/security/security.rb +20 -20
- data/manual/table.rb +16 -0
- data/manual/text/alignment.rb +17 -18
- data/manual/text/color.rb +13 -13
- data/manual/text/column_box.rb +10 -12
- data/manual/text/fallback_fonts.rb +29 -25
- data/manual/text/font.rb +17 -18
- data/manual/text/font_size.rb +21 -22
- data/manual/text/font_style.rb +12 -10
- data/manual/text/formatted_callbacks.rb +36 -26
- data/manual/text/formatted_text.rb +41 -34
- data/manual/text/free_flowing_text.rb +28 -29
- data/manual/text/inline.rb +23 -26
- data/manual/text/kerning_and_character_spacing.rb +20 -21
- data/manual/text/leading.rb +10 -11
- data/manual/text/line_wrapping.rb +40 -21
- data/manual/text/paragraph_indentation.rb +17 -12
- data/manual/text/positioned_text.rb +19 -20
- data/manual/text/registering_families.rb +33 -30
- data/manual/text/rendering_and_color.rb +11 -12
- data/manual/text/right_to_left_text.rb +31 -20
- data/manual/text/rotation.rb +36 -27
- data/manual/text/single_usage.rb +13 -14
- data/manual/text/text.rb +62 -62
- data/manual/text/text_box_excess.rb +22 -19
- data/manual/text/text_box_extensions.rb +21 -18
- data/manual/text/text_box_overflow.rb +28 -21
- data/manual/text/utf8.rb +16 -17
- data/manual/text/win_ansi_charset.rb +29 -26
- data/prawn.gemspec +45 -43
- data/spec/extensions/encoding_helpers.rb +4 -3
- data/spec/prawn/document/bounding_box_spec.rb +550 -0
- data/spec/prawn/document/column_box_spec.rb +75 -0
- data/spec/prawn/document/security_spec.rb +176 -0
- data/spec/prawn/document_annotations_spec.rb +76 -0
- data/spec/prawn/document_destinations_spec.rb +15 -0
- data/spec/prawn/document_grid_spec.rb +99 -0
- data/spec/prawn/document_reference_spec.rb +27 -0
- data/spec/prawn/document_span_spec.rb +44 -0
- data/spec/prawn/document_spec.rb +805 -0
- data/spec/prawn/font_metric_cache_spec.rb +54 -0
- data/spec/prawn/font_spec.rb +544 -0
- data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
- data/spec/prawn/graphics/transparency_spec.rb +81 -0
- data/spec/prawn/graphics_spec.rb +872 -0
- data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
- data/spec/prawn/image_handler_spec.rb +53 -0
- data/spec/prawn/images/jpg_spec.rb +20 -0
- data/spec/prawn/images/png_spec.rb +283 -0
- data/spec/prawn/images_spec.rb +229 -0
- data/spec/prawn/measurements_extensions_spec.rb +24 -0
- data/spec/prawn/outline_spec.rb +512 -0
- data/spec/prawn/repeater_spec.rb +166 -0
- data/spec/prawn/soft_mask_spec.rb +74 -0
- data/spec/prawn/stamp_spec.rb +173 -0
- data/spec/prawn/text/box_spec.rb +1110 -0
- data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
- data/spec/prawn/text/formatted/box_spec.rb +849 -0
- data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
- data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
- data/spec/prawn/text/formatted/parser_spec.rb +697 -0
- data/spec/prawn/text_draw_text_spec.rb +150 -0
- data/spec/prawn/text_rendering_mode_spec.rb +48 -0
- data/spec/prawn/text_spacing_spec.rb +95 -0
- data/spec/prawn/text_spec.rb +603 -0
- data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
- data/spec/prawn/transformation_stack_spec.rb +66 -0
- data/spec/prawn/view_spec.rb +63 -0
- data/spec/prawn_manual_spec.rb +35 -0
- data/spec/spec_helper.rb +22 -21
- data.tar.gz.sig +0 -0
- metadata +168 -307
- metadata.gz.sig +0 -0
- data/README.md +0 -109
- data/data/encodings/win_ansi.txt +0 -29
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/16bit.png +0 -0
- 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/dice.alpha +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/page_white_text.png +0 -0
- data/data/images/pigs.jpg +0 -0
- data/data/images/prawn.png +0 -0
- data/data/images/ruport.png +0 -0
- data/data/images/ruport_data.dat +0 -0
- data/data/images/ruport_transparent.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/data/images/stef.jpg +0 -0
- data/data/images/tru256.bmp +0 -0
- data/data/images/web-links.dat +0 -1
- data/data/images/web-links.png +0 -0
- data/data/pdfs/complex_template.pdf +0 -0
- data/data/pdfs/contains_ttf_font.pdf +0 -0
- data/data/pdfs/encrypted.pdf +0 -0
- data/data/pdfs/form.pdf +1 -819
- data/data/pdfs/hexagon.pdf +0 -61
- data/data/pdfs/indirect_reference.pdf +0 -86
- data/data/pdfs/multipage_template.pdf +0 -127
- data/data/pdfs/nested_pages.pdf +0 -118
- data/data/pdfs/page_without_mediabox.pdf +0 -193
- data/data/pdfs/resources_as_indirect_object.pdf +0 -83
- data/data/pdfs/two_hexagons.pdf +0 -90
- data/data/pdfs/version_1_6.pdf +0 -61
- data/data/shift_jis_text.txt +0 -1
- data/lib/pdf/core/annotations.rb +0 -60
- data/lib/pdf/core/byte_string.rb +0 -9
- data/lib/pdf/core/destinations.rb +0 -90
- data/lib/pdf/core/document_state.rb +0 -78
- data/lib/pdf/core/filter_list.rb +0 -51
- data/lib/pdf/core/filters.rb +0 -36
- data/lib/pdf/core/graphics_state.rb +0 -68
- data/lib/pdf/core/literal_string.rb +0 -16
- data/lib/pdf/core/name_tree.rb +0 -177
- data/lib/pdf/core/object_store.rb +0 -320
- data/lib/pdf/core/outline.rb +0 -315
- data/lib/pdf/core/page.rb +0 -212
- data/lib/pdf/core/page_geometry.rb +0 -126
- data/lib/pdf/core/pdf_object.rb +0 -124
- data/lib/pdf/core/reference.rb +0 -103
- data/lib/pdf/core/stream.rb +0 -98
- data/lib/pdf/core/text.rb +0 -275
- data/lib/pdf/core.rb +0 -35
- data/lib/prawn/compatibility.rb +0 -91
- data/lib/prawn/document/graphics_state.rb +0 -73
- data/lib/prawn/document/snapshot.rb +0 -89
- data/lib/prawn/font/afm.rb +0 -203
- data/lib/prawn/layout.rb +0 -20
- data/lib/prawn/table/cell/image.rb +0 -70
- data/lib/prawn/table/cell/in_table.rb +0 -27
- data/lib/prawn/table/cell/span_dummy.rb +0 -92
- data/lib/prawn/table/cell/subtable.rb +0 -65
- data/lib/prawn/table/cell/text.rb +0 -153
- data/lib/prawn/table/cell.rb +0 -770
- data/lib/prawn/table/cells.rb +0 -295
- data/lib/prawn/table.rb +0 -643
- data/manual/example_file.rb +0 -116
- data/manual/example_package.rb +0 -53
- data/manual/example_section.rb +0 -46
- data/manual/manual/cover.rb +0 -35
- data/manual/manual/foreword.rb +0 -85
- data/manual/manual/manual.rb +0 -35
- data/manual/syntax_highlight.rb +0 -52
- data/manual/table/basic_block.rb +0 -53
- data/manual/table/before_rendering_page.rb +0 -26
- data/manual/table/cell_border_lines.rb +0 -24
- data/manual/table/cell_borders_and_bg.rb +0 -31
- data/manual/table/cell_dimensions.rb +0 -30
- data/manual/table/cell_text.rb +0 -38
- data/manual/table/column_widths.rb +0 -30
- data/manual/table/content_and_subtables.rb +0 -39
- data/manual/table/creation.rb +0 -27
- data/manual/table/filtering.rb +0 -36
- data/manual/table/flow_and_header.rb +0 -17
- data/manual/table/image_cells.rb +0 -33
- data/manual/table/position.rb +0 -29
- data/manual/table/row_colors.rb +0 -20
- data/manual/table/span.rb +0 -30
- data/manual/table/style.rb +0 -22
- data/manual/table/table.rb +0 -52
- data/manual/table/width.rb +0 -27
- data/manual/templates/full_template.rb +0 -25
- data/manual/templates/page_template.rb +0 -48
- data/manual/templates/templates.rb +0 -27
- data/manual/text/group.rb +0 -29
- data/spec/acceptance/png.rb +0 -23
- data/spec/annotations_spec.rb +0 -74
- data/spec/bounding_box_spec.rb +0 -493
- data/spec/cell_spec.rb +0 -628
- data/spec/column_box_spec.rb +0 -33
- data/spec/destinations_spec.rb +0 -15
- data/spec/document_spec.rb +0 -761
- data/spec/extensions/mocha.rb +0 -44
- data/spec/filters_spec.rb +0 -34
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -464
- data/spec/formatted_text_arranger_spec.rb +0 -421
- data/spec/formatted_text_box_spec.rb +0 -650
- data/spec/formatted_text_fragment_spec.rb +0 -298
- data/spec/graphics_spec.rb +0 -651
- data/spec/grid_spec.rb +0 -85
- data/spec/image_handler_spec.rb +0 -42
- data/spec/images_spec.rb +0 -157
- data/spec/inline_formatted_text_parser_spec.rb +0 -564
- data/spec/jpg_spec.rb +0 -25
- data/spec/line_wrap_spec.rb +0 -333
- data/spec/measurement_units_spec.rb +0 -23
- data/spec/name_tree_spec.rb +0 -112
- data/spec/object_store_spec.rb +0 -170
- data/spec/outline_spec.rb +0 -448
- data/spec/pdf_object_spec.rb +0 -172
- data/spec/png_spec.rb +0 -240
- data/spec/reference_spec.rb +0 -82
- data/spec/repeater_spec.rb +0 -158
- data/spec/security_spec.rb +0 -158
- data/spec/snapshot_spec.rb +0 -186
- data/spec/soft_mask_spec.rb +0 -117
- data/spec/span_spec.rb +0 -44
- data/spec/stamp_spec.rb +0 -158
- data/spec/stream_spec.rb +0 -58
- data/spec/stroke_styles_spec.rb +0 -211
- data/spec/table/span_dummy_spec.rb +0 -17
- data/spec/table_spec.rb +0 -1355
- data/spec/template_spec.rb +0 -351
- data/spec/text_at_spec.rb +0 -130
- data/spec/text_box_spec.rb +0 -1030
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -425
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -89
data/lib/prawn/graphics.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# graphics.rb : Implements PDF drawing primitives
|
4
4
|
#
|
@@ -6,16 +6,16 @@
|
|
6
6
|
#
|
7
7
|
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
require_relative 'graphics/blend_mode'
|
10
|
+
require_relative 'graphics/color'
|
11
|
+
require_relative 'graphics/dash'
|
12
|
+
require_relative 'graphics/cap_style'
|
13
|
+
require_relative 'graphics/join_style'
|
14
|
+
require_relative 'graphics/transparency'
|
15
|
+
require_relative 'graphics/transformation'
|
16
|
+
require_relative 'graphics/patterns'
|
16
17
|
|
17
18
|
module Prawn
|
18
|
-
|
19
19
|
# Implements the drawing facilities for Prawn::Document.
|
20
20
|
# Use this to draw the most beautiful imaginable things.
|
21
21
|
#
|
@@ -23,7 +23,7 @@ module Prawn
|
|
23
23
|
# ruby-pdf.rubyforge.org
|
24
24
|
#
|
25
25
|
module Graphics
|
26
|
-
|
26
|
+
include BlendMode
|
27
27
|
include Color
|
28
28
|
include Dash
|
29
29
|
include CapStyle
|
@@ -32,6 +32,8 @@ module Prawn
|
|
32
32
|
include Transformation
|
33
33
|
include Patterns
|
34
34
|
|
35
|
+
# @group Stable API
|
36
|
+
|
35
37
|
#######################################################################
|
36
38
|
# Low level drawing operations must map the point to absolute coords! #
|
37
39
|
#######################################################################
|
@@ -43,8 +45,8 @@ module Prawn
|
|
43
45
|
# pdf.move_to(100,50)
|
44
46
|
#
|
45
47
|
def move_to(*point)
|
46
|
-
|
47
|
-
add_content("
|
48
|
+
xy = PDF::Core.real_params(map_to_absolute(point))
|
49
|
+
renderer.add_content("#{xy} m")
|
48
50
|
end
|
49
51
|
|
50
52
|
# Draws a line from the current drawing position to the specified point.
|
@@ -54,8 +56,8 @@ module Prawn
|
|
54
56
|
# pdf.line_to(50,50)
|
55
57
|
#
|
56
58
|
def line_to(*point)
|
57
|
-
|
58
|
-
add_content("
|
59
|
+
xy = PDF::Core.real_params(map_to_absolute(point))
|
60
|
+
renderer.add_content("#{xy} l")
|
59
61
|
end
|
60
62
|
|
61
63
|
# Draws a Bezier curve from the current drawing position to the
|
@@ -63,14 +65,18 @@ module Prawn
|
|
63
65
|
#
|
64
66
|
# pdf.curve_to [100,100], :bounds => [[90,90],[75,75]]
|
65
67
|
#
|
66
|
-
def curve_to(dest,options={})
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
def curve_to(dest, options = {})
|
69
|
+
options[:bounds] || raise(
|
70
|
+
Prawn::Errors::InvalidGraphicsPath,
|
71
|
+
'Bounding points for bezier curve must be specified ' \
|
72
|
+
'as :bounds => [[x1,y1],[x2,y2]]'
|
73
|
+
)
|
74
|
+
|
75
|
+
curve_points = PDF::Core.real_params(
|
76
|
+
(options[:bounds] << dest).flat_map { |e| map_to_absolute(e) }
|
77
|
+
)
|
70
78
|
|
71
|
-
|
72
|
-
add_content("%.3f %.3f %.3f %.3f %.3f %.3f c" %
|
73
|
-
curve_points.flatten )
|
79
|
+
renderer.add_content("#{curve_points} c")
|
74
80
|
end
|
75
81
|
|
76
82
|
# Draws a rectangle given <tt>point</tt>, <tt>width</tt> and
|
@@ -78,9 +84,11 @@ module Prawn
|
|
78
84
|
#
|
79
85
|
# pdf.rectangle [300,300], 100, 200
|
80
86
|
#
|
81
|
-
def rectangle(point,width,height)
|
82
|
-
x,y = map_to_absolute(point)
|
83
|
-
|
87
|
+
def rectangle(point, width, height)
|
88
|
+
x, y = map_to_absolute(point)
|
89
|
+
box = PDF::Core.real_params([x, y - height, width, height])
|
90
|
+
|
91
|
+
renderer.add_content("#{box} re")
|
84
92
|
end
|
85
93
|
|
86
94
|
# Draws a rounded rectangle given <tt>point</tt>, <tt>width</tt> and
|
@@ -89,12 +97,13 @@ module Prawn
|
|
89
97
|
#
|
90
98
|
# pdf.rounded_rectangle [300,300], 100, 200, 10
|
91
99
|
#
|
92
|
-
def rounded_rectangle(point,width,height,radius)
|
100
|
+
def rounded_rectangle(point, width, height, radius)
|
93
101
|
x, y = point
|
94
|
-
rounded_polygon(
|
102
|
+
rounded_polygon(
|
103
|
+
radius, point, [x + width, y], [x + width, y - height], [x, y - height]
|
104
|
+
)
|
95
105
|
end
|
96
106
|
|
97
|
-
|
98
107
|
###########################################################
|
99
108
|
# Higher level functions: May use relative coords #
|
100
109
|
###########################################################
|
@@ -114,7 +123,7 @@ module Prawn
|
|
114
123
|
# pdf.line_width(5)
|
115
124
|
# pdf.line_width #=> 5
|
116
125
|
#
|
117
|
-
def line_width(width=nil)
|
126
|
+
def line_width(width = nil)
|
118
127
|
if width
|
119
128
|
self.line_width = width
|
120
129
|
else
|
@@ -129,7 +138,7 @@ module Prawn
|
|
129
138
|
# pdf.line(100,100,200,250)
|
130
139
|
#
|
131
140
|
def line(*points)
|
132
|
-
x0,y0,x1,y1 = points.flatten
|
141
|
+
x0, y0, x1, y1 = points.flatten
|
133
142
|
move_to(x0, y0)
|
134
143
|
line_to(x1, y1)
|
135
144
|
end
|
@@ -140,14 +149,10 @@ module Prawn
|
|
140
149
|
# # draw a line from [25, 75] to [100, 75]
|
141
150
|
# horizontal_line 25, 100, :at => 75
|
142
151
|
#
|
143
|
-
def horizontal_line(x1,x2,options={})
|
144
|
-
|
145
|
-
y1 = options[:at]
|
146
|
-
else
|
147
|
-
y1 = y - bounds.absolute_bottom
|
148
|
-
end
|
152
|
+
def horizontal_line(x1, x2, options = {})
|
153
|
+
y1 = options[:at] || y - bounds.absolute_bottom
|
149
154
|
|
150
|
-
line(x1,y1,x2,y1)
|
155
|
+
line(x1, y1, x2, y1)
|
151
156
|
end
|
152
157
|
|
153
158
|
# Draws a horizontal line from the left border to the right border of the
|
@@ -162,8 +167,8 @@ module Prawn
|
|
162
167
|
# # draw a line from [25, 100] to [25, 300]
|
163
168
|
# vertical_line 100, 300, :at => 25
|
164
169
|
#
|
165
|
-
def vertical_line(y1,y2,params)
|
166
|
-
line(params[:at],y1,params[:at],y2)
|
170
|
+
def vertical_line(y1, y2, params)
|
171
|
+
line(params[:at], y1, params[:at], y2)
|
167
172
|
end
|
168
173
|
|
169
174
|
# Draws a Bezier curve between two points, bounded by two additional
|
@@ -171,9 +176,9 @@ module Prawn
|
|
171
176
|
#
|
172
177
|
# pdf.curve [50,100], [100,100], :bounds => [[90,90],[75,75]]
|
173
178
|
#
|
174
|
-
def curve(origin,dest, options={})
|
179
|
+
def curve(origin, dest, options = {})
|
175
180
|
move_to(*origin)
|
176
|
-
curve_to(dest,options)
|
181
|
+
curve_to(dest, options)
|
177
182
|
end
|
178
183
|
|
179
184
|
# This constant is used to approximate a symmetrical arc using a cubic
|
@@ -181,16 +186,9 @@ module Prawn
|
|
181
186
|
#
|
182
187
|
KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0)
|
183
188
|
|
184
|
-
#
|
185
|
-
|
186
|
-
|
187
|
-
"'circle_at' will be removed in release 1.1"
|
188
|
-
circle(point, options[:radius])
|
189
|
-
end
|
190
|
-
|
191
|
-
# Draws a circle of radius <tt>radius</tt> with the centre-point at <tt>point</tt>
|
192
|
-
# as a complete subpath. The drawing point will be moved to the
|
193
|
-
# centre-point upon completion of the drawing the circle.
|
189
|
+
# Draws a circle of radius <tt>radius</tt> with the centre-point at
|
190
|
+
# <tt>point</tt> as a complete subpath. The drawing point will be moved to
|
191
|
+
# the centre-point upon completion of the drawing the circle.
|
194
192
|
#
|
195
193
|
# pdf.circle [100,100], 25
|
196
194
|
#
|
@@ -198,43 +196,36 @@ module Prawn
|
|
198
196
|
ellipse(center, radius, radius)
|
199
197
|
end
|
200
198
|
|
201
|
-
#
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
ellipse(point, r1, r2)
|
206
|
-
end
|
207
|
-
|
208
|
-
# Draws an ellipse of +x+ radius <tt>r1</tt> and +y+ radius <tt>r2</tt>
|
209
|
-
# with the centre-point at <tt>point</tt> as a complete subpath. The
|
210
|
-
# drawing point will be moved to the centre-point upon completion of the
|
211
|
-
# drawing the ellipse.
|
199
|
+
# Draws an ellipse of +x+ radius <tt>radius1</tt> and +y+ radius
|
200
|
+
# <tt>radius2</tt> with the centre-point at <tt>point</tt> as a complete
|
201
|
+
# subpath. The drawing point will be moved to the centre-point upon
|
202
|
+
# completion of the drawing the ellipse.
|
212
203
|
#
|
213
204
|
# # draws an ellipse with x-radius 25 and y-radius 50
|
214
205
|
# pdf.ellipse [100,100], 25, 50
|
215
206
|
#
|
216
|
-
def ellipse(point,
|
207
|
+
def ellipse(point, radius1, radius2 = radius1)
|
217
208
|
x, y = point
|
218
|
-
l1 =
|
219
|
-
l2 =
|
209
|
+
l1 = radius1 * KAPPA
|
210
|
+
l2 = radius2 * KAPPA
|
220
211
|
|
221
|
-
move_to(x +
|
212
|
+
move_to(x + radius1, y)
|
222
213
|
|
223
214
|
# Upper right hand corner
|
224
|
-
curve_to [x,
|
225
|
-
:
|
215
|
+
curve_to [x, y + radius2],
|
216
|
+
bounds: [[x + radius1, y + l2], [x + l1, y + radius2]]
|
226
217
|
|
227
218
|
# Upper left hand corner
|
228
|
-
curve_to [x -
|
229
|
-
:
|
219
|
+
curve_to [x - radius1, y],
|
220
|
+
bounds: [[x - l1, y + radius2], [x - radius1, y + l2]]
|
230
221
|
|
231
222
|
# Lower left hand corner
|
232
|
-
curve_to [x, y -
|
233
|
-
:
|
223
|
+
curve_to [x, y - radius2],
|
224
|
+
bounds: [[x - radius1, y - l2], [x - l1, y - radius2]]
|
234
225
|
|
235
226
|
# Lower right hand corner
|
236
|
-
curve_to [x +
|
237
|
-
:
|
227
|
+
curve_to [x + radius1, y],
|
228
|
+
bounds: [[x + l1, y - radius2], [x + radius1, y - l2]]
|
238
229
|
|
239
230
|
move_to(x, y)
|
240
231
|
end
|
@@ -250,36 +241,47 @@ module Prawn
|
|
250
241
|
line_to(*point)
|
251
242
|
end
|
252
243
|
# close the path
|
253
|
-
add_content
|
244
|
+
renderer.add_content 'h'
|
254
245
|
end
|
255
246
|
|
256
|
-
# Draws a rounded polygon from specified points using the radius to define
|
247
|
+
# Draws a rounded polygon from specified points using the radius to define
|
248
|
+
# bezier curves
|
257
249
|
#
|
258
|
-
#
|
259
|
-
# pdf.fill_and_stroke_rounded_polygon(
|
260
|
-
#
|
250
|
+
# # draws a rounded filled in polygon
|
251
|
+
# pdf.fill_and_stroke_rounded_polygon(
|
252
|
+
# 10, [100, 250], [200, 300], [300, 250], [300, 150], [200, 100],
|
253
|
+
# [100, 150]
|
254
|
+
# )
|
261
255
|
def rounded_polygon(radius, *points)
|
262
256
|
move_to point_on_line(radius, points[1], points[0])
|
263
257
|
sides = points.size
|
264
258
|
points << points[0] << points[1]
|
265
|
-
|
259
|
+
sides.times do |i|
|
266
260
|
rounded_vertex(radius, points[i], points[i + 1], points[i + 2])
|
267
261
|
end
|
268
262
|
# close the path
|
269
|
-
add_content
|
263
|
+
renderer.add_content 'h'
|
270
264
|
end
|
271
265
|
|
272
|
-
|
273
|
-
#
|
274
|
-
#
|
275
|
-
# the
|
266
|
+
# Creates a rounded vertex for a line segment used for building a rounded
|
267
|
+
# polygon requires a radius to define bezier curve and three points. The
|
268
|
+
# first two points define the line segment and the third point helps define
|
269
|
+
# the curve for the vertex.
|
276
270
|
def rounded_vertex(radius, *points)
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
271
|
+
radial_point1 = point_on_line(radius, points[0], points[1])
|
272
|
+
bezier_point1 = point_on_line(
|
273
|
+
(radius - radius * KAPPA),
|
274
|
+
points[0],
|
275
|
+
points[1]
|
276
|
+
)
|
277
|
+
radial_point2 = point_on_line(radius, points[2], points[1])
|
278
|
+
bezier_point2 = point_on_line(
|
279
|
+
(radius - radius * KAPPA),
|
280
|
+
points[2],
|
281
|
+
points[1]
|
282
|
+
)
|
283
|
+
line_to(radial_point1)
|
284
|
+
curve_to(radial_point2, bounds: [bezier_point1, bezier_point2])
|
283
285
|
end
|
284
286
|
|
285
287
|
# Strokes the current path. If a block is provided, yields to the block
|
@@ -287,7 +289,7 @@ module Prawn
|
|
287
289
|
#
|
288
290
|
def stroke
|
289
291
|
yield if block_given?
|
290
|
-
add_content
|
292
|
+
renderer.add_content 'S'
|
291
293
|
end
|
292
294
|
|
293
295
|
# Closes and strokes the current path. If a block is provided, yields to
|
@@ -295,7 +297,7 @@ module Prawn
|
|
295
297
|
#
|
296
298
|
def close_and_stroke
|
297
299
|
yield if block_given?
|
298
|
-
add_content
|
300
|
+
renderer.add_content 's'
|
299
301
|
end
|
300
302
|
|
301
303
|
# Draws and strokes a rectangle represented by the current bounding box
|
@@ -330,38 +332,56 @@ module Prawn
|
|
330
332
|
#
|
331
333
|
def stroke_axis(options = {})
|
332
334
|
options = {
|
333
|
-
:
|
334
|
-
:
|
335
|
-
:
|
336
|
-
:
|
337
|
-
:
|
338
|
-
:
|
335
|
+
at: [0, 0],
|
336
|
+
height: bounds.height.to_i - (options[:at] || [0, 0])[1],
|
337
|
+
width: bounds.width.to_i - (options[:at] || [0, 0])[0],
|
338
|
+
step_length: 100,
|
339
|
+
negative_axes_length: 20,
|
340
|
+
color: '000000'
|
339
341
|
}.merge(options)
|
340
342
|
|
341
|
-
Prawn.verify_options(
|
342
|
-
|
343
|
+
Prawn.verify_options(
|
344
|
+
%i[at width height step_length negative_axes_length color],
|
345
|
+
options
|
346
|
+
)
|
343
347
|
|
344
348
|
save_graphics_state do
|
345
349
|
fill_color(options[:color])
|
346
350
|
stroke_color(options[:color])
|
347
351
|
|
348
|
-
dash(1, :
|
349
|
-
stroke_horizontal_line(
|
350
|
-
|
351
|
-
|
352
|
-
|
352
|
+
dash(1, space: 4)
|
353
|
+
stroke_horizontal_line(
|
354
|
+
options[:at][0] - options[:negative_axes_length],
|
355
|
+
options[:at][0] + options[:width],
|
356
|
+
at: options[:at][1]
|
357
|
+
)
|
358
|
+
stroke_vertical_line(
|
359
|
+
options[:at][1] - options[:negative_axes_length],
|
360
|
+
options[:at][1] + options[:height],
|
361
|
+
at: options[:at][0]
|
362
|
+
)
|
353
363
|
undash
|
354
364
|
|
355
365
|
fill_circle(options[:at], 1)
|
356
366
|
|
357
|
-
(options[:step_length]..options[:width])
|
367
|
+
(options[:step_length]..options[:width])
|
368
|
+
.step(options[:step_length]) do |point|
|
358
369
|
fill_circle([options[:at][0] + point, options[:at][1]], 1)
|
359
|
-
draw_text(
|
370
|
+
draw_text(
|
371
|
+
point,
|
372
|
+
at: [options[:at][0] + point - 5, options[:at][1] - 10],
|
373
|
+
size: 7
|
374
|
+
)
|
360
375
|
end
|
361
376
|
|
362
|
-
(options[:step_length]..options[:height])
|
377
|
+
(options[:step_length]..options[:height])
|
378
|
+
.step(options[:step_length]) do |point|
|
363
379
|
fill_circle([options[:at][0], options[:at][1] + point], 1)
|
364
|
-
draw_text(
|
380
|
+
draw_text(
|
381
|
+
point,
|
382
|
+
at: [options[:at][0] - 17, options[:at][1] + point - 2],
|
383
|
+
size: 7
|
384
|
+
)
|
365
385
|
end
|
366
386
|
end
|
367
387
|
end
|
@@ -373,9 +393,9 @@ module Prawn
|
|
373
393
|
# will be used. See the PDF reference, "Graphics -> Path Construction and
|
374
394
|
# Painting -> Clipping Path Operators" for details on the difference.
|
375
395
|
#
|
376
|
-
def fill(options={})
|
396
|
+
def fill(options = {})
|
377
397
|
yield if block_given?
|
378
|
-
add_content(options[:fill_rule] == :even_odd ?
|
398
|
+
renderer.add_content(options[:fill_rule] == :even_odd ? 'f*' : 'f')
|
379
399
|
end
|
380
400
|
|
381
401
|
# Closes, fills, and strokes the current path. If a block is provided,
|
@@ -387,15 +407,15 @@ module Prawn
|
|
387
407
|
# will be used. See the PDF reference, "Graphics -> Path Construction and
|
388
408
|
# Painting -> Clipping Path Operators" for details on the difference.
|
389
409
|
#
|
390
|
-
def fill_and_stroke(options={})
|
410
|
+
def fill_and_stroke(options = {})
|
391
411
|
yield if block_given?
|
392
|
-
add_content(options[:fill_rule] == :even_odd ?
|
412
|
+
renderer.add_content(options[:fill_rule] == :even_odd ? 'b*' : 'b')
|
393
413
|
end
|
394
414
|
|
395
415
|
# Closes the current path.
|
396
416
|
#
|
397
417
|
def close_path
|
398
|
-
add_content
|
418
|
+
renderer.add_content 'h'
|
399
419
|
end
|
400
420
|
|
401
421
|
##
|
@@ -604,12 +624,20 @@ module Prawn
|
|
604
624
|
# :call-seq:
|
605
625
|
# fill_and_stroke_rounded_polygon(radius, *points)
|
606
626
|
|
607
|
-
ops
|
608
|
-
shapes = %w
|
609
|
-
|
627
|
+
ops = %w[fill stroke fill_and_stroke]
|
628
|
+
shapes = %w[
|
629
|
+
line_to curve_to rectangle rounded_rectangle line horizontal_line
|
630
|
+
horizontal_rule vertical_line curve circle_at circle ellipse_at ellipse
|
631
|
+
polygon rounded_polygon rounded_vertex
|
632
|
+
]
|
610
633
|
|
611
|
-
ops.product(shapes).each do |operation,shape|
|
612
|
-
class_eval
|
634
|
+
ops.product(shapes).each do |operation, shape|
|
635
|
+
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
636
|
+
def #{operation}_#{shape}(*args) # def fill_polygon(*args)
|
637
|
+
#{shape}(*args) # polygon(*args)
|
638
|
+
#{operation} # fill
|
639
|
+
end # end
|
640
|
+
METHOD
|
613
641
|
end
|
614
642
|
|
615
643
|
private
|
@@ -623,11 +651,11 @@ module Prawn
|
|
623
651
|
end
|
624
652
|
|
625
653
|
def write_line_width
|
626
|
-
add_content("#{current_line_width} w")
|
654
|
+
renderer.add_content("#{current_line_width} w")
|
627
655
|
end
|
628
656
|
|
629
657
|
def map_to_absolute(*point)
|
630
|
-
x,y = point.flatten
|
658
|
+
x, y = point.flatten
|
631
659
|
[@bounding_box.absolute_left + x, @bounding_box.absolute_bottom + y]
|
632
660
|
end
|
633
661
|
|
@@ -636,19 +664,18 @@ module Prawn
|
|
636
664
|
end
|
637
665
|
|
638
666
|
def degree_to_rad(angle)
|
639
|
-
|
667
|
+
angle * Math::PI / 180
|
640
668
|
end
|
641
669
|
|
642
|
-
# Returns the coordinates for a point on a line that is a given distance
|
643
|
-
# point defining the line segement
|
670
|
+
# Returns the coordinates for a point on a line that is a given distance
|
671
|
+
# away from the second point defining the line segement
|
644
672
|
def point_on_line(distance_from_end, *points)
|
645
|
-
x0,y0,x1,y1 = points.flatten
|
673
|
+
x0, y0, x1, y1 = points.flatten
|
646
674
|
length = Math.sqrt((x1 - x0)**2 + (y1 - y0)**2)
|
647
675
|
p = (length - distance_from_end) / length
|
648
|
-
xr = x0 + p*(x1 - x0)
|
649
|
-
yr = y0 + p*(y1 - y0)
|
676
|
+
xr = x0 + p * (x1 - x0)
|
677
|
+
yr = y0 + p * (y1 - y0)
|
650
678
|
[xr, yr]
|
651
679
|
end
|
652
|
-
|
653
680
|
end
|
654
681
|
end
|