prawn 2.1.0 → 2.2.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 +2 -0
- data.tar.gz.sig +0 -0
- data/Gemfile +1 -9
- data/Rakefile +12 -22
- data/lib/prawn.rb +29 -48
- data/lib/prawn/document.rb +148 -123
- data/lib/prawn/document/bounding_box.rb +33 -26
- data/lib/prawn/document/column_box.rb +5 -7
- data/lib/prawn/document/internals.rb +6 -6
- data/lib/prawn/document/span.rb +20 -17
- data/lib/prawn/encoding.rb +65 -67
- data/lib/prawn/errors.rb +10 -7
- data/lib/prawn/font.rb +78 -62
- data/lib/prawn/font/afm.rb +93 -66
- data/lib/prawn/font/dfont.rb +2 -10
- data/lib/prawn/font/ttc.rb +34 -0
- data/lib/prawn/font/ttf.rb +73 -65
- data/lib/prawn/font_metric_cache.rb +9 -8
- data/lib/prawn/graphics.rb +110 -70
- data/lib/prawn/graphics/blend_mode.rb +7 -8
- data/lib/prawn/graphics/cap_style.rb +2 -4
- data/lib/prawn/graphics/color.rb +23 -26
- data/lib/prawn/graphics/dash.rb +22 -12
- data/lib/prawn/graphics/join_style.rb +8 -4
- data/lib/prawn/graphics/patterns.rb +185 -96
- data/lib/prawn/graphics/transformation.rb +11 -9
- data/lib/prawn/graphics/transparency.rb +15 -13
- data/lib/prawn/grid.rb +20 -20
- data/lib/prawn/image_handler.rb +4 -6
- data/lib/prawn/images.rb +22 -15
- data/lib/prawn/images/image.rb +0 -1
- data/lib/prawn/images/jpg.rb +26 -22
- data/lib/prawn/images/png.rb +60 -57
- data/lib/prawn/measurement_extensions.rb +8 -9
- data/lib/prawn/measurements.rb +14 -15
- data/lib/prawn/outline.rb +96 -78
- data/lib/prawn/repeater.rb +12 -10
- data/lib/prawn/security.rb +66 -48
- data/lib/prawn/security/arcfour.rb +1 -3
- data/lib/prawn/soft_mask.rb +23 -25
- data/lib/prawn/stamp.rb +16 -12
- data/lib/prawn/text.rb +59 -45
- data/lib/prawn/text/box.rb +9 -8
- data/lib/prawn/text/formatted.rb +4 -6
- data/lib/prawn/text/formatted/arranger.rb +51 -30
- data/lib/prawn/text/formatted/box.rb +112 -88
- data/lib/prawn/text/formatted/fragment.rb +10 -15
- data/lib/prawn/text/formatted/line_wrap.rb +118 -61
- data/lib/prawn/text/formatted/parser.rb +134 -110
- data/lib/prawn/text/formatted/wrap.rb +42 -32
- data/lib/prawn/transformation_stack.rb +3 -4
- data/lib/prawn/utilities.rb +6 -21
- data/lib/prawn/version.rb +1 -3
- data/lib/prawn/view.rb +4 -2
- data/manual/basic_concepts/adding_pages.rb +4 -7
- data/manual/basic_concepts/basic_concepts.rb +29 -22
- data/manual/basic_concepts/creation.rb +8 -11
- data/manual/basic_concepts/cursor.rb +2 -5
- data/manual/basic_concepts/measurement.rb +3 -6
- data/manual/basic_concepts/origin.rb +3 -6
- data/manual/basic_concepts/other_cursor_helpers.rb +9 -12
- data/manual/basic_concepts/view.rb +20 -16
- data/manual/bounding_box/bounding_box.rb +27 -24
- data/manual/bounding_box/bounds.rb +9 -12
- data/manual/bounding_box/canvas.rb +2 -5
- data/manual/bounding_box/creation.rb +4 -7
- data/manual/bounding_box/indentation.rb +12 -15
- data/manual/bounding_box/nesting.rb +22 -17
- data/manual/bounding_box/russian_boxes.rb +8 -9
- data/manual/bounding_box/stretchy.rb +10 -13
- data/manual/contents.rb +26 -22
- data/manual/cover.rb +22 -20
- data/manual/document_and_page_options/background.rb +9 -13
- data/manual/document_and_page_options/document_and_page_options.rb +23 -20
- data/manual/document_and_page_options/metadata.rb +16 -16
- data/manual/document_and_page_options/page_margins.rb +16 -20
- data/manual/document_and_page_options/page_size.rb +11 -12
- data/manual/document_and_page_options/print_scaling.rb +15 -15
- data/manual/example_helper.rb +2 -4
- data/manual/graphics/blend_mode.rb +10 -9
- data/manual/graphics/circle_and_ellipse.rb +2 -5
- data/manual/graphics/color.rb +5 -9
- data/manual/graphics/common_lines.rb +5 -8
- data/manual/graphics/fill_and_stroke.rb +2 -5
- data/manual/graphics/fill_rules.rb +7 -10
- data/manual/graphics/gradients.rb +25 -21
- data/manual/graphics/graphics.rb +49 -43
- data/manual/graphics/helper.rb +10 -9
- data/manual/graphics/line_width.rb +5 -7
- data/manual/graphics/lines_and_curves.rb +5 -8
- data/manual/graphics/polygon.rb +4 -8
- data/manual/graphics/rectangle.rb +2 -5
- data/manual/graphics/rotate.rb +4 -7
- data/manual/graphics/scale.rb +12 -15
- data/manual/graphics/soft_masks.rb +1 -4
- data/manual/graphics/stroke_cap.rb +3 -6
- data/manual/graphics/stroke_dash.rb +9 -12
- data/manual/graphics/stroke_join.rb +2 -5
- data/manual/graphics/translate.rb +7 -10
- data/manual/graphics/transparency.rb +5 -8
- data/manual/how_to_read_this_manual.rb +4 -6
- data/manual/images/absolute_position.rb +4 -7
- data/manual/images/fit.rb +5 -8
- data/manual/images/horizontal.rb +6 -9
- data/manual/images/images.rb +25 -23
- data/manual/images/plain_image.rb +3 -6
- data/manual/images/scale.rb +7 -10
- data/manual/images/vertical.rb +10 -13
- data/manual/images/width_and_height.rb +8 -11
- data/manual/layout/boxes.rb +3 -6
- data/manual/layout/content.rb +5 -8
- data/manual/layout/layout.rb +16 -16
- data/manual/layout/simple_grid.rb +4 -7
- data/manual/outline/add_subsection_to.rb +18 -21
- data/manual/outline/insert_section_after.rb +13 -16
- data/manual/outline/outline.rb +19 -17
- data/manual/outline/sections_and_pages.rb +15 -18
- data/manual/repeatable_content/alternate_page_numbering.rb +19 -17
- data/manual/repeatable_content/page_numbering.rb +15 -16
- data/manual/repeatable_content/repeatable_content.rb +23 -19
- data/manual/repeatable_content/repeater.rb +12 -15
- data/manual/repeatable_content/stamp.rb +12 -15
- data/manual/security/encryption.rb +7 -10
- data/manual/security/permissions.rb +17 -14
- data/manual/security/security.rb +17 -16
- data/manual/table.rb +2 -4
- data/manual/text/alignment.rb +14 -17
- data/manual/text/color.rb +10 -11
- data/manual/text/column_box.rb +5 -8
- data/manual/text/fallback_fonts.rb +23 -21
- data/manual/text/font.rb +9 -12
- data/manual/text/font_size.rb +11 -14
- data/manual/text/font_style.rb +4 -7
- data/manual/text/formatted_callbacks.rb +23 -21
- data/manual/text/formatted_text.rb +31 -25
- data/manual/text/free_flowing_text.rb +18 -21
- data/manual/text/inline.rb +16 -19
- data/manual/text/kerning_and_character_spacing.rb +12 -15
- data/manual/text/leading.rb +5 -8
- data/manual/text/line_wrapping.rb +33 -17
- data/manual/text/paragraph_indentation.rb +11 -14
- data/manual/text/positioned_text.rb +13 -16
- data/manual/text/registering_families.rb +16 -19
- data/manual/text/rendering_and_color.rb +7 -10
- data/manual/text/right_to_left_text.rb +24 -19
- data/manual/text/rotation.rb +26 -23
- data/manual/text/single_usage.rb +6 -9
- data/manual/text/text.rb +56 -52
- data/manual/text/text_box_excess.rb +18 -17
- data/manual/text/text_box_extensions.rb +16 -15
- data/manual/text/text_box_overflow.rb +15 -18
- data/manual/text/utf8.rb +9 -12
- data/manual/text/win_ansi_charset.rb +18 -19
- data/prawn.gemspec +37 -27
- data/spec/extensions/encoding_helpers.rb +0 -2
- data/spec/manual_spec.rb +33 -0
- data/spec/prawn/document/bounding_box_spec.rb +546 -0
- data/spec/prawn/document/column_box_spec.rb +73 -0
- data/spec/prawn/document/security_spec.rb +173 -0
- data/spec/prawn/document_annotations_spec.rb +74 -0
- data/spec/prawn/document_destinations_spec.rb +13 -0
- data/spec/prawn/document_grid_spec.rb +96 -0
- data/spec/prawn/document_reference_spec.rb +25 -0
- data/spec/prawn/document_span_spec.rb +34 -0
- data/spec/prawn/document_spec.rb +751 -0
- data/spec/prawn/font_metric_cache_spec.rb +52 -0
- data/spec/prawn/font_spec.rb +513 -0
- data/spec/prawn/graphics/blend_mode_spec.rb +61 -0
- data/spec/prawn/graphics/transparency_spec.rb +79 -0
- data/spec/prawn/graphics_spec.rb +817 -0
- data/spec/prawn/graphics_stroke_styles_spec.rb +227 -0
- data/spec/{image_handler_spec.rb → prawn/image_handler_spec.rb} +13 -15
- data/spec/prawn/images/jpg_spec.rb +18 -0
- data/spec/prawn/images/png_spec.rb +281 -0
- data/spec/prawn/images_spec.rb +170 -0
- data/spec/prawn/measurements_extensions_spec.rb +22 -0
- data/spec/prawn/outline_spec.rb +408 -0
- data/spec/prawn/repeater_spec.rb +163 -0
- data/spec/prawn/soft_mask_spec.rb +72 -0
- data/spec/prawn/stamp_spec.rb +168 -0
- data/spec/prawn/text/box_spec.rb +1113 -0
- data/spec/prawn/text/formatted/arranger_spec.rb +464 -0
- data/spec/prawn/text/formatted/box_spec.rb +825 -0
- data/spec/prawn/text/formatted/fragment_spec.rb +341 -0
- data/spec/prawn/text/formatted/line_wrap_spec.rb +491 -0
- data/spec/prawn/text/formatted/parser_spec.rb +667 -0
- data/spec/prawn/text_draw_text_spec.rb +147 -0
- data/spec/prawn/text_rendering_mode_spec.rb +42 -0
- data/spec/prawn/text_spacing_spec.rb +93 -0
- data/spec/prawn/text_spec.rb +601 -0
- data/spec/prawn/text_with_inline_formatting_spec.rb +33 -0
- data/spec/{transformation_stack_spec.rb → prawn/transformation_stack_spec.rb} +21 -20
- data/spec/prawn/view_spec.rb +45 -0
- data/spec/spec_helper.rb +16 -16
- metadata +96 -151
- metadata.gz.sig +1 -0
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.color +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/blend_modes_bottom_layer.jpg +0 -0
- data/data/images/blend_modes_top_layer.jpg +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.color +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/fractal.jpg +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/indexed_transparency.png +0 -0
- data/data/images/indexed_transparency_alpha.dat +0 -0
- data/data/images/indexed_transparency_color.dat +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/license.md +0 -8
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.color +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/spec/acceptance/png_spec.rb +0 -35
- data/spec/annotations_spec.rb +0 -67
- data/spec/blend_mode_spec.rb +0 -71
- data/spec/bounding_box_spec.rb +0 -501
- data/spec/column_box_spec.rb +0 -59
- data/spec/destinations_spec.rb +0 -13
- data/spec/document_spec.rb +0 -738
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -475
- data/spec/formatted_text_arranger_spec.rb +0 -452
- data/spec/formatted_text_box_spec.rb +0 -716
- data/spec/formatted_text_fragment_spec.rb +0 -299
- data/spec/graphics_spec.rb +0 -705
- data/spec/grid_spec.rb +0 -95
- data/spec/images_spec.rb +0 -167
- data/spec/inline_formatted_text_parser_spec.rb +0 -568
- data/spec/jpg_spec.rb +0 -23
- data/spec/line_wrap_spec.rb +0 -366
- data/spec/measurement_units_spec.rb +0 -22
- data/spec/outline_spec.rb +0 -409
- data/spec/png_spec.rb +0 -257
- data/spec/reference_spec.rb +0 -25
- data/spec/repeater_spec.rb +0 -154
- data/spec/security_spec.rb +0 -151
- data/spec/soft_mask_spec.rb +0 -78
- data/spec/span_spec.rb +0 -43
- data/spec/stamp_spec.rb +0 -179
- data/spec/stroke_styles_spec.rb +0 -208
- data/spec/text_at_spec.rb +0 -142
- data/spec/text_box_spec.rb +0 -1042
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -543
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -91
- data/spec/view_spec.rb +0 -42
@@ -1,20 +1,24 @@
|
|
1
|
-
#
|
1
|
+
# The recommended way to extend Prawn's functionality is to include the
|
2
|
+
# <code>Prawn::View</code> mixin in your own class, which will make all
|
3
|
+
# <code>Prawn::Document</code> methods available to your custom objects.
|
2
4
|
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
5
|
+
# This approach is preferred over inheriting from
|
6
|
+
# <code>Prawn::Document</code>, as your state will be kept completely separate
|
7
|
+
# from <code>Prawn::Document</code>'s, thus avoiding accidental method
|
8
|
+
# collisions.
|
6
9
|
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
+
# Note that <code>Prawn::View</code> lazily instantiates a
|
11
|
+
# <code>Prawn::Document</code> with default initialization settings, such as
|
12
|
+
# page size, layout, margins, etc.
|
10
13
|
#
|
11
|
-
#
|
12
|
-
# you
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
14
|
+
# By defining your own <code>document</code> method, as shown in the example,
|
15
|
+
# you will be able to override those settings and initialize a
|
16
|
+
# <code>Prawn::Document</code> to your heart's content. This method will be
|
17
|
+
# called repeatedly by <code>Prawn::View</code>, so be sure to memoize the
|
18
|
+
# object by assigning it to an instance variable via the <code>||=</code>
|
19
|
+
# operator.
|
16
20
|
|
17
|
-
require_relative
|
21
|
+
require_relative '../example_helper'
|
18
22
|
|
19
23
|
class Greeter
|
20
24
|
include Prawn::View
|
@@ -28,15 +32,15 @@ class Greeter
|
|
28
32
|
end
|
29
33
|
|
30
34
|
def say_goodbye
|
31
|
-
font(
|
35
|
+
font('Courier') do
|
32
36
|
text "Goodbye, #{@name}!"
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
37
|
-
greeter = Greeter.new(
|
41
|
+
greeter = Greeter.new('Gregory')
|
38
42
|
|
39
43
|
greeter.say_hello
|
40
44
|
greeter.say_goodbye
|
41
45
|
|
42
|
-
greeter.save_as(
|
46
|
+
greeter.save_as('greetings.pdf')
|
@@ -1,36 +1,39 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# Examples for bounding boxes.
|
4
|
-
#
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
%w[.. example_helper]))
|
7
2
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
3
|
+
require_relative '../example_helper'
|
4
|
+
|
5
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
6
|
+
Prawn::ManualBuilder::Example.generate(filename, page_size: 'FOLIO') do
|
7
|
+
package 'bounding_box' do |p|
|
8
|
+
p.section 'Basics' do |s|
|
9
|
+
s.example 'creation'
|
10
|
+
s.example 'bounds'
|
13
11
|
end
|
14
12
|
|
15
|
-
p.section
|
16
|
-
s.example
|
17
|
-
s.example
|
18
|
-
s.example
|
19
|
-
s.example
|
20
|
-
s.example
|
13
|
+
p.section 'Advanced' do |s|
|
14
|
+
s.example 'stretchy'
|
15
|
+
s.example 'nesting'
|
16
|
+
s.example 'indentation'
|
17
|
+
s.example 'canvas'
|
18
|
+
s.example 'russian_boxes'
|
21
19
|
end
|
22
20
|
|
23
21
|
p.intro do
|
24
|
-
prose
|
22
|
+
prose <<-END
|
23
|
+
Bounding boxes are the basic containers for structuring the content
|
24
|
+
flow. Even being low level building blocks sometimes their simplicity is
|
25
|
+
very welcome.
|
25
26
|
|
26
|
-
|
27
|
+
The examples show:
|
28
|
+
END
|
27
29
|
|
28
|
-
list(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
list(
|
31
|
+
'How to create bounding boxes with specific dimensions',
|
32
|
+
'How to inspect the current bounding box for its coordinates',
|
33
|
+
'Stretchy bounding boxes',
|
34
|
+
'Nested bounding boxes',
|
35
|
+
'Indent blocks'
|
36
|
+
)
|
34
37
|
end
|
35
38
|
end
|
36
39
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# The <code>bounds</code> method returns the current bounding box. This is
|
4
2
|
# useful because the <code>Prawn::BoundingBox</code> exposes some nice boundary
|
5
3
|
# helpers.
|
@@ -16,9 +14,8 @@
|
|
16
14
|
#
|
17
15
|
# The following snippet shows the boundaries for the margin box side by side
|
18
16
|
# with the boundaries for a custom bounding box.
|
19
|
-
|
20
|
-
|
21
|
-
%w[.. example_helper]))
|
17
|
+
|
18
|
+
require_relative '../example_helper'
|
22
19
|
|
23
20
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
24
21
|
Prawn::ManualBuilder::Example.generate(filename) do
|
@@ -30,18 +27,18 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
30
27
|
|
31
28
|
move_down 10
|
32
29
|
|
33
|
-
text "absolute top: #{
|
34
|
-
text "absolute bottom: #{
|
35
|
-
text "absolute left: #{
|
36
|
-
text "absolute right: #{
|
30
|
+
text "absolute top: #{format '%.2f', bounds.absolute_top}"
|
31
|
+
text "absolute bottom: #{format '%.2f', bounds.absolute_bottom}"
|
32
|
+
text "absolute left: #{format '%.2f', bounds.absolute_left}"
|
33
|
+
text "absolute right: #{format '%.2f', bounds.absolute_right}"
|
37
34
|
end
|
38
35
|
|
39
|
-
text
|
36
|
+
text 'Margin box bounds:'
|
40
37
|
move_down 5
|
41
38
|
print_coordinates
|
42
39
|
|
43
|
-
bounding_box([250, cursor + 140], :
|
44
|
-
text
|
40
|
+
bounding_box([250, cursor + 140], width: 200, height: 150) do
|
41
|
+
text 'This bounding box bounds:'
|
45
42
|
move_down 5
|
46
43
|
print_coordinates
|
47
44
|
transparent(0.5) { stroke_bounds }
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# The origin example already mentions that a new document already comes with
|
4
2
|
# a margin box whose bottom left corner is used as the origin for calculating
|
5
3
|
# coordinates.
|
@@ -9,9 +7,8 @@
|
|
9
7
|
# box mapped to the absolute coordinates and evaluating the code inside it.
|
10
8
|
#
|
11
9
|
# The following snippet draws a circle on each of the four absolute corners.
|
12
|
-
|
13
|
-
|
14
|
-
%w[.. example_helper]))
|
10
|
+
|
11
|
+
require_relative '../example_helper'
|
15
12
|
|
16
13
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
14
|
Prawn::ManualBuilder::Example.generate(filename) do
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# If you've read the basic concepts examples you probably know that the origin
|
4
2
|
# of a page is on the bottom left corner and that the content flows from top to
|
5
3
|
# bottom.
|
@@ -9,14 +7,13 @@
|
|
9
7
|
# A bounding box can be created with the <code>bounding_box</code> method. Just
|
10
8
|
# provide the top left corner, a required <code>:width</code> option and an
|
11
9
|
# optional <code>:height</code>.
|
12
|
-
|
13
|
-
|
14
|
-
%w[.. example_helper]))
|
10
|
+
|
11
|
+
require_relative '../example_helper'
|
15
12
|
|
16
13
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
14
|
Prawn::ManualBuilder::Example.generate(filename) do
|
18
|
-
bounding_box([200, cursor - 100], :
|
19
|
-
text
|
15
|
+
bounding_box([200, cursor - 100], width: 200, height: 100) do
|
16
|
+
text 'Just your regular bounding box'
|
20
17
|
|
21
18
|
transparent(0.5) { stroke_bounds }
|
22
19
|
end
|
@@ -1,43 +1,40 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# Sometimes you just need to indent a portion of the contents of a bounding box,
|
4
2
|
# and using a nested bounding box is pure overkill. The <code>indent</code>
|
5
3
|
# method is what you might need.
|
6
4
|
#
|
7
5
|
# Just provide a number for it to indent all content generated inside the
|
8
6
|
# block.
|
9
|
-
|
10
|
-
|
11
|
-
%w[.. example_helper]))
|
7
|
+
|
8
|
+
require_relative '../example_helper'
|
12
9
|
|
13
10
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
14
11
|
Prawn::ManualBuilder::Example.generate(filename) do
|
15
|
-
text
|
12
|
+
text 'No indentation on the margin box.'
|
16
13
|
indent(20) do
|
17
|
-
text
|
14
|
+
text 'Some indentation inside an indent block.'
|
18
15
|
end
|
19
16
|
move_down 20
|
20
17
|
|
21
|
-
bounding_box([50, cursor], :
|
18
|
+
bounding_box([50, cursor], width: 400, height: cursor) do
|
22
19
|
transparent(0.5) { stroke_bounds }
|
23
20
|
|
24
21
|
move_down 10
|
25
|
-
text
|
22
|
+
text 'No indentation inside this bounding box.'
|
26
23
|
indent(40) do
|
27
|
-
text
|
24
|
+
text 'Inside an indent block. And so is this horizontal line:'
|
28
25
|
|
29
26
|
stroke_horizontal_rule
|
30
27
|
end
|
31
28
|
move_down 10
|
32
|
-
text
|
29
|
+
text 'No indentation'
|
33
30
|
|
34
31
|
move_down 20
|
35
32
|
indent(60) do
|
36
|
-
text
|
33
|
+
text 'Another indent block.'
|
37
34
|
|
38
|
-
bounding_box([0, cursor], :
|
39
|
-
text
|
40
|
-
|
35
|
+
bounding_box([0, cursor], width: 200) do
|
36
|
+
text 'Note that this bounding box coordinates are relative to the ' \
|
37
|
+
'indent block'
|
41
38
|
|
42
39
|
transparent(0.5) { stroke_bounds }
|
43
40
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# Normally when we provide the top left corner of a bounding box we
|
4
2
|
# express the coordinates relative to the margin box. This is not the
|
5
3
|
# case when we have nested bounding boxes. Once nested the inner bounding box
|
@@ -8,9 +6,8 @@
|
|
8
6
|
# This example shows some nested bounding boxes with fixed and stretchy heights.
|
9
7
|
# Note how the <code>cursor</code> method returns coordinates relative to
|
10
8
|
# the current bounding box.
|
11
|
-
|
12
|
-
|
13
|
-
%w[.. example_helper]))
|
9
|
+
|
10
|
+
require_relative '../example_helper'
|
14
11
|
|
15
12
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
13
|
Prawn::ManualBuilder::Example.generate(filename) do
|
@@ -20,26 +17,34 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
20
17
|
end
|
21
18
|
|
22
19
|
gap = 20
|
23
|
-
bounding_box([50, cursor], :
|
24
|
-
box_content(
|
20
|
+
bounding_box([50, cursor], width: 400, height: 200) do
|
21
|
+
box_content('Fixed height')
|
25
22
|
|
26
|
-
bounding_box([gap, cursor - gap], :
|
27
|
-
text
|
23
|
+
bounding_box([gap, cursor - gap], width: 300) do
|
24
|
+
text 'Stretchy height'
|
28
25
|
|
29
|
-
bounding_box([gap, bounds.top - gap], :
|
30
|
-
text
|
31
|
-
transparent(0.5)
|
26
|
+
bounding_box([gap, bounds.top - gap], width: 100) do
|
27
|
+
text 'Stretchy height'
|
28
|
+
transparent(0.5) do
|
29
|
+
dash(1)
|
30
|
+
stroke_bounds
|
31
|
+
undash
|
32
|
+
end
|
32
33
|
end
|
33
34
|
|
34
|
-
bounding_box([gap * 7, bounds.top - gap], :
|
35
|
-
box_content(
|
35
|
+
bounding_box([gap * 7, bounds.top - gap], width: 100, height: 50) do
|
36
|
+
box_content('Fixed height')
|
36
37
|
end
|
37
38
|
|
38
|
-
transparent(0.5)
|
39
|
+
transparent(0.5) do
|
40
|
+
dash(1)
|
41
|
+
stroke_bounds
|
42
|
+
undash
|
43
|
+
end
|
39
44
|
end
|
40
45
|
|
41
|
-
bounding_box([gap, cursor - gap], :
|
42
|
-
box_content(
|
46
|
+
bounding_box([gap, cursor - gap], width: 300, height: 50) do
|
47
|
+
box_content('Fixed height')
|
43
48
|
end
|
44
49
|
end
|
45
50
|
end
|
@@ -1,11 +1,8 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# This example is mostly just for fun, and shows how nested bounding boxes
|
4
2
|
# can simplify calculations. See the "Bounding Box" section of the manual
|
5
3
|
# for more basic uses.
|
6
|
-
|
7
|
-
|
8
|
-
%w[.. example_helper]))
|
4
|
+
|
5
|
+
require_relative '../example_helper'
|
9
6
|
|
10
7
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
8
|
Prawn::ManualBuilder::Example.generate(filename) do
|
@@ -22,10 +19,12 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
22
19
|
def recurse_bounding_box(max_depth = 4, depth = 1)
|
23
20
|
width = (bounds.width - 15) / 2
|
24
21
|
height = (bounds.height - 15) / 2
|
25
|
-
left_top_corners = combine(
|
26
|
-
|
22
|
+
left_top_corners = combine(
|
23
|
+
[5, bounds.right - width - 5],
|
24
|
+
[bounds.top - 5, height + 5]
|
25
|
+
)
|
27
26
|
left_top_corners.each do |lt|
|
28
|
-
bounding_box(lt, :
|
27
|
+
bounding_box(lt, width: width, height: height) do
|
29
28
|
stroke_bounds
|
30
29
|
recurse_bounding_box(max_depth, depth + 1) if depth < max_depth
|
31
30
|
end
|
@@ -33,7 +32,7 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
33
32
|
end
|
34
33
|
|
35
34
|
# Set up a bbox from the dashed line to the bottom of the page
|
36
|
-
bounding_box([0, cursor], :
|
35
|
+
bounding_box([0, cursor], width: bounds.width, height: cursor) do
|
37
36
|
recurse_bounding_box
|
38
37
|
end
|
39
38
|
end
|
@@ -1,29 +1,26 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# Bounding Boxes accept an optional <code>:height</code> parameter. Unless it
|
4
2
|
# is provided the bounding box will be stretchy. It will expand the height to
|
5
3
|
# fit all content generated inside it.
|
6
|
-
|
7
|
-
|
8
|
-
%w[.. example_helper]))
|
4
|
+
|
5
|
+
require_relative '../example_helper'
|
9
6
|
|
10
7
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
8
|
Prawn::ManualBuilder::Example.generate(filename) do
|
12
9
|
y_position = cursor
|
13
|
-
bounding_box([0, y_position], :
|
14
|
-
text
|
15
|
-
|
10
|
+
bounding_box([0, y_position], width: 200, height: 100) do
|
11
|
+
text 'This bounding box has a height of 100. If this text gets too large ' \
|
12
|
+
'it will flow to the next page.'
|
16
13
|
|
17
14
|
transparent(0.5) { stroke_bounds }
|
18
15
|
end
|
19
16
|
|
20
|
-
bounding_box([300, y_position], :
|
21
|
-
text
|
22
|
-
|
17
|
+
bounding_box([300, y_position], width: 200) do
|
18
|
+
text 'This bounding box has variable height. No matter how much text is ' \
|
19
|
+
'written here, the height will expand to fit.'
|
23
20
|
|
24
|
-
text
|
21
|
+
text ' _' * 100
|
25
22
|
|
26
|
-
text
|
23
|
+
text ' *' * 100
|
27
24
|
|
28
25
|
transparent(0.5) { stroke_bounds }
|
29
26
|
end
|
data/manual/contents.rb
CHANGED
@@ -1,29 +1,33 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
1
|
# Generates the Prawn by example manual.
|
4
2
|
|
5
|
-
require_relative
|
3
|
+
require_relative 'example_helper'
|
6
4
|
|
7
|
-
|
5
|
+
def prawn_manual_document
|
6
|
+
old_default_external_encoding = Encoding.default_external
|
7
|
+
Encoding.default_external = Encoding::UTF_8
|
8
8
|
|
9
|
-
Prawn::ManualBuilder::Example.
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
Prawn::ManualBuilder::Example.new(
|
10
|
+
skip_page_creation: true,
|
11
|
+
page_size: 'FOLIO'
|
12
|
+
) do
|
13
|
+
load_page '', 'cover'
|
14
|
+
load_page '', 'how_to_read_this_manual'
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
# Core chapters
|
17
|
+
load_package 'basic_concepts'
|
18
|
+
load_package 'graphics'
|
19
|
+
load_package 'text'
|
20
|
+
load_package 'bounding_box'
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
# Remaining chapters
|
23
|
+
load_package 'layout'
|
24
|
+
load_page '', 'table'
|
25
|
+
load_package 'images'
|
26
|
+
load_package 'document_and_page_options'
|
27
|
+
load_package 'outline'
|
28
|
+
load_package 'repeatable_content'
|
29
|
+
load_package 'security'
|
30
|
+
end
|
31
|
+
ensure
|
32
|
+
Encoding.default_external = old_default_external_encoding
|
29
33
|
end
|