prawn 0.11.1 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.yardopts +10 -0
- data/COPYING +2 -2
- data/GPLv2 +340 -0
- data/GPLv3 +674 -0
- data/Gemfile +11 -0
- data/LICENSE +1 -1
- data/Rakefile +29 -38
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.color +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.color +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.color +0 -0
- data/data/pdfs/nested_pages.pdf +13 -13
- data/lib/prawn/document/bounding_box.rb +87 -12
- data/lib/prawn/document/column_box.rb +57 -28
- data/lib/prawn/document/graphics_state.rb +11 -74
- data/lib/prawn/document/internals.rb +25 -23
- data/lib/prawn/document/snapshot.rb +11 -8
- data/lib/prawn/document/span.rb +12 -10
- data/lib/prawn/document.rb +250 -194
- data/lib/prawn/encoding.rb +9 -10
- data/lib/prawn/errors.rb +18 -29
- data/lib/prawn/font/afm.rb +52 -41
- data/lib/prawn/font/dfont.rb +4 -3
- data/lib/prawn/font/ttf.rb +44 -48
- data/lib/prawn/font.rb +138 -88
- data/lib/prawn/font_metric_cache.rb +47 -0
- data/lib/prawn/graphics/cap_style.rb +4 -3
- data/lib/prawn/graphics/color.rb +13 -5
- data/lib/prawn/graphics/dash.rb +53 -31
- data/lib/prawn/graphics/join_style.rb +9 -7
- data/lib/prawn/graphics/patterns.rb +138 -0
- data/lib/prawn/graphics/transformation.rb +10 -9
- data/lib/prawn/graphics/transparency.rb +3 -1
- data/lib/prawn/graphics.rb +316 -61
- data/lib/prawn/image_handler.rb +36 -0
- data/lib/prawn/images/image.rb +49 -0
- data/lib/prawn/images/jpg.rb +21 -15
- data/lib/prawn/images/png.rb +62 -119
- data/lib/prawn/images.rb +89 -108
- data/lib/prawn/layout/grid.rb +66 -54
- data/lib/prawn/layout.rb +10 -15
- data/lib/prawn/measurement_extensions.rb +10 -6
- data/lib/prawn/measurements.rb +27 -21
- data/lib/prawn/outline.rb +6 -308
- data/lib/prawn/repeater.rb +11 -9
- data/lib/prawn/security/arcfour.rb +1 -0
- data/lib/prawn/security.rb +55 -33
- data/lib/prawn/soft_mask.rb +96 -0
- data/lib/prawn/stamp.rb +5 -3
- data/lib/prawn/table/cell/image.rb +69 -0
- data/lib/prawn/table/cell/in_table.rb +4 -2
- data/lib/prawn/table/cell/span_dummy.rb +93 -0
- data/lib/prawn/table/cell/subtable.rb +2 -2
- data/lib/prawn/table/cell/text.rb +44 -26
- data/lib/prawn/table/cell.rb +302 -50
- data/lib/prawn/table/cells.rb +147 -49
- data/lib/prawn/table/column_width_calculator.rb +61 -0
- data/lib/prawn/table.rb +297 -118
- data/lib/prawn/text/box.rb +21 -5
- data/lib/prawn/text/formatted/arranger.rb +290 -0
- data/lib/prawn/text/formatted/box.rb +103 -59
- data/lib/prawn/text/formatted/fragment.rb +34 -23
- data/lib/prawn/text/formatted/line_wrap.rb +266 -0
- data/lib/prawn/text/formatted/parser.rb +15 -5
- data/lib/prawn/text/formatted/wrap.rb +150 -0
- data/lib/prawn/text/formatted.rb +5 -4
- data/lib/prawn/text.rb +38 -24
- data/lib/prawn/utilities.rb +46 -0
- data/lib/prawn.rb +85 -20
- data/manual/basic_concepts/adding_pages.rb +27 -0
- data/manual/basic_concepts/basic_concepts.rb +34 -0
- data/manual/basic_concepts/creation.rb +39 -0
- data/manual/basic_concepts/cursor.rb +33 -0
- data/manual/basic_concepts/measurement.rb +25 -0
- data/manual/basic_concepts/origin.rb +38 -0
- data/manual/basic_concepts/other_cursor_helpers.rb +40 -0
- data/manual/bounding_box/bounding_box.rb +39 -0
- data/manual/bounding_box/bounds.rb +49 -0
- data/manual/bounding_box/canvas.rb +24 -0
- data/manual/bounding_box/creation.rb +23 -0
- data/manual/bounding_box/indentation.rb +46 -0
- data/manual/bounding_box/nesting.rb +45 -0
- data/manual/bounding_box/russian_boxes.rb +40 -0
- data/manual/bounding_box/stretchy.rb +31 -0
- data/manual/document_and_page_options/background.rb +27 -0
- data/manual/document_and_page_options/document_and_page_options.rb +32 -0
- data/manual/document_and_page_options/metadata.rb +23 -0
- data/manual/document_and_page_options/page_margins.rb +38 -0
- data/manual/document_and_page_options/page_size.rb +34 -0
- data/manual/document_and_page_options/print_scaling.rb +20 -0
- data/manual/example_file.rb +111 -0
- data/manual/example_helper.rb +411 -0
- data/manual/example_package.rb +53 -0
- data/manual/example_section.rb +46 -0
- data/manual/graphics/circle_and_ellipse.rb +22 -0
- data/manual/graphics/color.rb +24 -0
- data/manual/graphics/common_lines.rb +30 -0
- data/manual/graphics/fill_and_stroke.rb +42 -0
- data/manual/graphics/fill_rules.rb +37 -0
- data/manual/graphics/gradients.rb +37 -0
- data/manual/graphics/graphics.rb +58 -0
- data/manual/graphics/helper.rb +24 -0
- data/manual/graphics/line_width.rb +35 -0
- data/manual/graphics/lines_and_curves.rb +41 -0
- data/manual/graphics/polygon.rb +29 -0
- data/manual/graphics/rectangle.rb +21 -0
- data/manual/graphics/rotate.rb +28 -0
- data/manual/graphics/scale.rb +41 -0
- data/manual/graphics/soft_masks.rb +46 -0
- data/manual/graphics/stroke_cap.rb +31 -0
- data/manual/graphics/stroke_dash.rb +48 -0
- data/manual/graphics/stroke_join.rb +30 -0
- data/manual/graphics/translate.rb +29 -0
- data/manual/graphics/transparency.rb +35 -0
- data/manual/images/absolute_position.rb +23 -0
- data/manual/images/fit.rb +21 -0
- data/manual/images/horizontal.rb +25 -0
- data/manual/images/images.rb +40 -0
- data/manual/images/plain_image.rb +18 -0
- data/manual/images/scale.rb +22 -0
- data/manual/images/vertical.rb +28 -0
- data/manual/images/width_and_height.rb +25 -0
- data/manual/layout/boxes.rb +27 -0
- data/manual/layout/content.rb +25 -0
- data/manual/layout/layout.rb +28 -0
- data/manual/layout/simple_grid.rb +23 -0
- data/manual/manual/cover.rb +36 -0
- data/manual/manual/foreword.rb +85 -0
- data/manual/manual/how_to_read_this_manual.rb +41 -0
- data/manual/manual/manual.rb +34 -0
- data/manual/outline/add_subsection_to.rb +61 -0
- data/manual/outline/insert_section_after.rb +47 -0
- data/manual/outline/outline.rb +32 -0
- data/manual/outline/sections_and_pages.rb +67 -0
- data/manual/repeatable_content/page_numbering.rb +54 -0
- data/manual/repeatable_content/repeatable_content.rb +31 -0
- data/manual/repeatable_content/repeater.rb +55 -0
- data/manual/repeatable_content/stamp.rb +41 -0
- data/manual/security/encryption.rb +31 -0
- data/manual/security/permissions.rb +38 -0
- data/manual/security/security.rb +28 -0
- data/manual/syntax_highlight.rb +52 -0
- data/manual/table/basic_block.rb +53 -0
- data/manual/table/before_rendering_page.rb +26 -0
- data/manual/table/cell_border_lines.rb +24 -0
- data/manual/table/cell_borders_and_bg.rb +31 -0
- data/manual/table/cell_dimensions.rb +30 -0
- data/manual/table/cell_text.rb +38 -0
- data/manual/table/column_widths.rb +30 -0
- data/manual/table/content_and_subtables.rb +39 -0
- data/manual/table/creation.rb +27 -0
- data/manual/table/filtering.rb +36 -0
- data/manual/table/flow_and_header.rb +17 -0
- data/manual/table/image_cells.rb +33 -0
- data/manual/table/position.rb +29 -0
- data/manual/table/row_colors.rb +20 -0
- data/manual/table/span.rb +30 -0
- data/manual/table/style.rb +22 -0
- data/manual/table/table.rb +52 -0
- data/manual/table/width.rb +27 -0
- data/manual/text/alignment.rb +44 -0
- data/manual/text/color.rb +24 -0
- data/manual/text/column_box.rb +32 -0
- data/manual/text/fallback_fonts.rb +37 -0
- data/manual/text/font.rb +41 -0
- data/manual/text/font_size.rb +45 -0
- data/manual/text/font_style.rb +23 -0
- data/manual/text/formatted_callbacks.rb +60 -0
- data/manual/text/formatted_text.rb +54 -0
- data/manual/text/free_flowing_text.rb +51 -0
- data/manual/text/group.rb +31 -0
- data/manual/text/inline.rb +43 -0
- data/manual/text/kerning_and_character_spacing.rb +39 -0
- data/manual/text/leading.rb +25 -0
- data/manual/text/line_wrapping.rb +41 -0
- data/manual/text/paragraph_indentation.rb +26 -0
- data/manual/text/positioned_text.rb +38 -0
- data/manual/text/registering_families.rb +48 -0
- data/manual/text/rendering_and_color.rb +37 -0
- data/manual/text/right_to_left_text.rb +43 -0
- data/manual/text/rotation.rb +43 -0
- data/manual/text/single_usage.rb +37 -0
- data/manual/text/text.rb +75 -0
- data/manual/text/text_box_excess.rb +32 -0
- data/manual/text/text_box_extensions.rb +45 -0
- data/manual/text/text_box_overflow.rb +44 -0
- data/manual/text/utf8.rb +28 -0
- data/{examples/m17n → manual/text}/win_ansi_charset.rb +14 -10
- data/prawn.gemspec +27 -17
- data/spec/acceptance/png.rb +23 -0
- data/spec/annotations_spec.rb +16 -32
- data/spec/bounding_box_spec.rb +284 -2
- data/spec/cell_spec.rb +169 -38
- data/spec/column_box_spec.rb +65 -0
- data/spec/data/curves.pdf +66 -0
- data/spec/destinations_spec.rb +5 -5
- data/spec/document_spec.rb +212 -113
- data/spec/extensions/encoding_helpers.rb +9 -0
- data/spec/extensions/mocha.rb +2 -3
- data/spec/font_metric_cache_spec.rb +52 -0
- data/spec/font_spec.rb +205 -95
- data/spec/formatted_text_arranger_spec.rb +43 -43
- data/spec/formatted_text_box_spec.rb +63 -24
- data/spec/formatted_text_fragment_spec.rb +8 -8
- data/spec/graphics_spec.rb +175 -68
- data/spec/grid_spec.rb +26 -15
- data/spec/image_handler_spec.rb +54 -0
- data/spec/images_spec.rb +58 -30
- data/spec/inline_formatted_text_parser_spec.rb +73 -19
- data/spec/jpg_spec.rb +4 -4
- data/spec/line_wrap_spec.rb +28 -28
- data/spec/measurement_units_spec.rb +6 -6
- data/spec/object_store_spec.rb +17 -106
- data/spec/outline_spec.rb +103 -63
- data/spec/png_spec.rb +25 -25
- data/spec/reference_spec.rb +8 -65
- data/spec/repeater_spec.rb +25 -11
- data/spec/security_spec.rb +44 -12
- data/spec/snapshot_spec.rb +38 -6
- data/spec/soft_mask_spec.rb +117 -0
- data/spec/span_spec.rb +10 -15
- data/spec/spec_helper.rb +32 -8
- data/spec/stamp_spec.rb +29 -30
- data/spec/stroke_styles_spec.rb +36 -18
- data/spec/table/span_dummy_spec.rb +17 -0
- data/spec/table_spec.rb +850 -104
- data/spec/text_at_spec.rb +19 -33
- data/spec/text_box_spec.rb +117 -64
- data/spec/text_rendering_mode_spec.rb +5 -5
- data/spec/text_spacing_spec.rb +20 -2
- data/spec/text_spec.rb +111 -59
- data/spec/transparency_spec.rb +5 -5
- metadata +477 -328
- data/HACKING +0 -50
- data/README +0 -141
- data/data/fonts/Action Man.dfont +0 -0
- data/data/fonts/Activa.ttf +0 -0
- data/data/fonts/Chalkboard.ttf +0 -0
- data/data/fonts/DejaVuSans.ttf +0 -0
- data/data/fonts/Dustismo_Roman.ttf +0 -0
- data/data/fonts/comicsans.ttf +0 -0
- data/data/fonts/gkai00mp.ttf +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/rails.dat +0 -0
- data/data/images/rails.png +0 -0
- data/examples/bounding_box/bounding_boxes.rb +0 -44
- data/examples/bounding_box/indentation.rb +0 -35
- data/examples/bounding_box/russian_boxes.rb +0 -37
- data/examples/bounding_box/stretched_nesting.rb +0 -68
- data/examples/example_helper.rb +0 -8
- data/examples/general/background.rb +0 -24
- data/examples/general/canvas.rb +0 -16
- data/examples/general/context_sensitive_headers.rb +0 -38
- data/examples/general/float.rb +0 -12
- data/examples/general/margin.rb +0 -37
- data/examples/general/measurement_units.rb +0 -52
- data/examples/general/metadata-info.rb +0 -17
- data/examples/general/multi_page_layout.rb +0 -19
- data/examples/general/outlines.rb +0 -67
- data/examples/general/page_geometry.rb +0 -32
- data/examples/general/page_numbering.rb +0 -40
- data/examples/general/page_templates.rb +0 -20
- data/examples/general/repeaters.rb +0 -48
- data/examples/general/stamp.rb +0 -42
- data/examples/general/templates.rb +0 -14
- data/examples/graphics/basic_images.rb +0 -24
- data/examples/graphics/cmyk.rb +0 -13
- data/examples/graphics/curves.rb +0 -12
- data/examples/graphics/gradient.rb +0 -23
- data/examples/graphics/hexagon.rb +0 -14
- data/examples/graphics/image_fit.rb +0 -16
- data/examples/graphics/image_flow.rb +0 -38
- data/examples/graphics/image_position.rb +0 -18
- data/examples/graphics/line.rb +0 -33
- data/examples/graphics/png_types.rb +0 -23
- data/examples/graphics/polygons.rb +0 -17
- data/examples/graphics/remote_images.rb +0 -13
- data/examples/graphics/rounded_polygons.rb +0 -20
- data/examples/graphics/rounded_rectangle.rb +0 -21
- data/examples/graphics/ruport_style_helpers.rb +0 -20
- data/examples/graphics/stroke_bounds.rb +0 -21
- data/examples/graphics/stroke_cap_and_join.rb +0 -46
- data/examples/graphics/stroke_dash.rb +0 -43
- data/examples/graphics/transformations.rb +0 -53
- data/examples/graphics/transparency.rb +0 -27
- data/examples/grid/bounding_boxes.rb +0 -22
- data/examples/grid/column_gutter_grid.rb +0 -21
- data/examples/grid/multi_boxes.rb +0 -52
- data/examples/grid/show_grid.rb +0 -14
- data/examples/grid/simple_grid.rb +0 -21
- data/examples/m17n/chinese_text_wrapping.rb +0 -18
- data/examples/m17n/euro.rb +0 -16
- data/examples/m17n/full_win_ansi_character_list.rb +0 -20
- data/examples/m17n/sjis.rb +0 -29
- data/examples/m17n/utf8.rb +0 -14
- data/examples/security/hello_foo.rb +0 -9
- data/examples/table/bill.rb +0 -54
- data/examples/table/borders.rb +0 -25
- data/examples/table/cell.rb +0 -13
- data/examples/table/checkerboard.rb +0 -23
- data/examples/table/header.rb +0 -15
- data/examples/table/inline_format_table.rb +0 -13
- data/examples/table/multi_page_table.rb +0 -10
- data/examples/table/simple_table.rb +0 -25
- data/examples/table/subtable.rb +0 -13
- data/examples/table/widths.rb +0 -21
- data/examples/text/alignment.rb +0 -19
- data/examples/text/character_spacing.rb +0 -13
- data/examples/text/dfont.rb +0 -49
- data/examples/text/family_based_styling.rb +0 -25
- data/examples/text/font_calculations.rb +0 -92
- data/examples/text/font_size.rb +0 -34
- data/examples/text/hyphenation.rb +0 -45
- data/examples/text/indent_paragraphs.rb +0 -24
- data/examples/text/inline_format.rb +0 -104
- data/examples/text/kerning.rb +0 -31
- data/examples/text/rendering_mode.rb +0 -21
- data/examples/text/rotated.rb +0 -99
- data/examples/text/shaped_text_box.rb +0 -32
- data/examples/text/simple_text.rb +0 -18
- data/examples/text/simple_text_ttf.rb +0 -18
- data/examples/text/span.rb +0 -30
- data/examples/text/text_box.rb +0 -90
- data/examples/text/text_box_returning_excess.rb +0 -52
- data/examples/text/text_flow.rb +0 -68
- data/lib/prawn/compatibility.rb +0 -51
- data/lib/prawn/core/annotations.rb +0 -61
- data/lib/prawn/core/byte_string.rb +0 -9
- data/lib/prawn/core/destinations.rb +0 -90
- data/lib/prawn/core/document_state.rb +0 -78
- data/lib/prawn/core/literal_string.rb +0 -16
- data/lib/prawn/core/name_tree.rb +0 -165
- data/lib/prawn/core/object_store.rb +0 -264
- data/lib/prawn/core/page.rb +0 -213
- data/lib/prawn/core/pdf_object.rb +0 -108
- data/lib/prawn/core/reference.rb +0 -112
- data/lib/prawn/core/text/formatted/arranger.rb +0 -293
- data/lib/prawn/core/text/formatted/line_wrap.rb +0 -272
- data/lib/prawn/core/text/formatted/wrap.rb +0 -149
- data/lib/prawn/core/text.rb +0 -268
- data/lib/prawn/core.rb +0 -85
- data/lib/prawn/document/page_geometry.rb +0 -136
- data/lib/prawn/graphics/gradient.rb +0 -84
- data/spec/name_tree_spec.rb +0 -112
- data/spec/pdf_object_spec.rb +0 -170
- data/spec/template_spec.rb +0 -291
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# The <code>table()</code> method accepts a <code>:position</code> argument to
|
4
|
+
# determine horizontal position of the table within its bounding box. It can be
|
5
|
+
# <code>:left</code> (the default), <code>:center</code>, <code>:right</code>,
|
6
|
+
# or a number specifying a distance in PDF points from the left side.
|
7
|
+
#
|
8
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
9
|
+
%w[.. example_helper]))
|
10
|
+
|
11
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
12
|
+
Prawn::Example.generate(filename) do
|
13
|
+
data = [["The quick brown fox jumped over the lazy dogs."]] * 2
|
14
|
+
|
15
|
+
text "Left:"
|
16
|
+
table data, :position => :left
|
17
|
+
move_down 10
|
18
|
+
|
19
|
+
text "Center:"
|
20
|
+
table data, :position => :center
|
21
|
+
move_down 10
|
22
|
+
|
23
|
+
text "Right:"
|
24
|
+
table data, :position => :right
|
25
|
+
move_down 10
|
26
|
+
|
27
|
+
text "100pt:"
|
28
|
+
table data, :position => 100
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# One of the most common table styling techniques is to stripe the rows with
|
4
|
+
# alternating colors.
|
5
|
+
#
|
6
|
+
# There is one helper just for that. Just provide the <code>:row_colors</code>
|
7
|
+
# option an array with color values.
|
8
|
+
#
|
9
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
10
|
+
%w[.. example_helper]))
|
11
|
+
|
12
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
13
|
+
Prawn::Example.generate(filename) do
|
14
|
+
data = [["This row should have one color"],
|
15
|
+
["And this row should have another"]]
|
16
|
+
|
17
|
+
data += [["..."]] * 10
|
18
|
+
|
19
|
+
table(data, :row_colors => ["F0F0F0", "FFFFCC"])
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Table cells can span multiple columns, rows, or both. When building a cell,
|
4
|
+
# use the hash argument constructor with a <code>:colspan</code> and/or
|
5
|
+
# <code>:rowspan</code> argument. Row or column spanning must be specified when
|
6
|
+
# building the data array; you can't set the span in the table's initialization
|
7
|
+
# block. This is because cells are laid out in the grid before that block is
|
8
|
+
# called, so that references to row and column numbers make sense.
|
9
|
+
#
|
10
|
+
# Cells are laid out in the order given, skipping any positions spanned by
|
11
|
+
# previously instantiated cells. Therefore, a cell with <code>rowspan: 2</code>
|
12
|
+
# will be missing at least one cell in the row below it. See the code and table
|
13
|
+
# below for an example.
|
14
|
+
#
|
15
|
+
# It is illegal to overlap cells via spanning. A
|
16
|
+
# <code>Prawn::Errors::InvalidTableSpan</code> error will be raised if spans
|
17
|
+
# would cause cells to overlap.
|
18
|
+
#
|
19
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
20
|
+
%w[.. example_helper]))
|
21
|
+
|
22
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
23
|
+
Prawn::Example.generate(filename) do
|
24
|
+
table([
|
25
|
+
["A", {:content => "2x1", :colspan => 2}, "B"],
|
26
|
+
[{:content => "1x2", :rowspan => 2}, "C", "D", "E"],
|
27
|
+
[{:content => "2x2", :colspan => 2, :rowspan => 2}, "F"],
|
28
|
+
["G", "H"]
|
29
|
+
])
|
30
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# We've seen how to apply styles to a selection of cells by setting the
|
4
|
+
# individual properties. Another option is to use the <code>style</code> method
|
5
|
+
#
|
6
|
+
# <code>style</code> lets us define multiple properties at once with a hash. It
|
7
|
+
# also accepts a block that will be called for each cell and can be used for
|
8
|
+
# some complex styling.
|
9
|
+
#
|
10
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
11
|
+
%w[.. example_helper]))
|
12
|
+
|
13
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
14
|
+
Prawn::Example.generate(filename) do
|
15
|
+
table([[""] * 8] * 8) do
|
16
|
+
cells.style(:width => 24, :height => 24)
|
17
|
+
|
18
|
+
cells.style do |c|
|
19
|
+
c.background_color = ((c.row + c.column) % 2).zero? ? '000000' : 'ffffff'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Examples for tables.
|
4
|
+
#
|
5
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
+
%w[.. example_helper]))
|
7
|
+
|
8
|
+
Prawn::Example.generate("table.pdf", :page_size => "FOLIO") do
|
9
|
+
|
10
|
+
package "table" do |p|
|
11
|
+
|
12
|
+
p.section "Basics" do |s|
|
13
|
+
s.example "creation"
|
14
|
+
s.example "content_and_subtables"
|
15
|
+
s.example "flow_and_header"
|
16
|
+
s.example "position"
|
17
|
+
end
|
18
|
+
|
19
|
+
p.section "Styling" do |s|
|
20
|
+
s.example "column_widths"
|
21
|
+
s.example "width"
|
22
|
+
s.example "row_colors"
|
23
|
+
s.example "cell_dimensions"
|
24
|
+
s.example "cell_borders_and_bg"
|
25
|
+
s.example "cell_border_lines"
|
26
|
+
s.example "cell_text"
|
27
|
+
s.example "image_cells"
|
28
|
+
s.example "span"
|
29
|
+
s.example "before_rendering_page"
|
30
|
+
end
|
31
|
+
|
32
|
+
p.section "Initializer Block" do |s|
|
33
|
+
s.example "basic_block"
|
34
|
+
s.example "filtering"
|
35
|
+
s.example "style"
|
36
|
+
end
|
37
|
+
|
38
|
+
p.intro do
|
39
|
+
prose("Prawn comes with table support out of the box. Tables can be styled in whatever way you see fit. The whole table, rows, columns and cells can be styled independently from each other.
|
40
|
+
|
41
|
+
The examples show:")
|
42
|
+
|
43
|
+
list( "How to create tables",
|
44
|
+
"What content can be placed on tables",
|
45
|
+
"Subtables (or tables within tables)",
|
46
|
+
"How to style the whole table",
|
47
|
+
"How to use initializer blocks to style only specific portions of the table"
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# The default table width depends on the content provided. It will expand up
|
4
|
+
# to the current bounding box width to fit the content. If you want the table to
|
5
|
+
# have a fixed width no matter the content you may use the <code>:width</code>
|
6
|
+
# option to manually set the width.
|
7
|
+
#
|
8
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
9
|
+
%w[.. example_helper]))
|
10
|
+
|
11
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
12
|
+
Prawn::Example.generate(filename) do
|
13
|
+
text "Normal width:"
|
14
|
+
table [%w[A B C]]
|
15
|
+
move_down 20
|
16
|
+
|
17
|
+
text "Fixed width:"
|
18
|
+
table([%w[A B C]], :width => 300)
|
19
|
+
move_down 20
|
20
|
+
|
21
|
+
text "Normal width:"
|
22
|
+
table([["A", "Blah " * 20, "C"]])
|
23
|
+
move_down 20
|
24
|
+
|
25
|
+
text "Fixed width:"
|
26
|
+
table([["A", "Blah " * 20, "C"]], :width => 300)
|
27
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Horizontal text alignment can be achieved by supplying the <code>:align</code>
|
4
|
+
# option to the text methods. Available options are <code>:left</code>
|
5
|
+
# (default), <code>:right</code>, <code>:center</code>, and
|
6
|
+
# <code>:justify</code>.
|
7
|
+
#
|
8
|
+
# Vertical text alignment can be achieved using the <code>:valign</code> option
|
9
|
+
# with the text methods. Available options are <code>:top</code> (default),
|
10
|
+
# <code>:center</code>, and <code>:bottom</code>.
|
11
|
+
#
|
12
|
+
# Both forms of alignment will be evaluated in the context of the current
|
13
|
+
# bounding_box.
|
14
|
+
#
|
15
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
16
|
+
%w[.. example_helper]))
|
17
|
+
|
18
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
19
|
+
Prawn::Example.generate(filename) do
|
20
|
+
text "This text should be left aligned"
|
21
|
+
text "This text should be centered", :align => :center
|
22
|
+
text "This text should be right aligned", :align => :right
|
23
|
+
|
24
|
+
bounding_box([0, 220], :width => 250, :height => 220) do
|
25
|
+
text "This text is flowing from the left. " * 4
|
26
|
+
|
27
|
+
move_down 15
|
28
|
+
text "This text is flowing from the center. " * 3, :align => :center
|
29
|
+
|
30
|
+
move_down 15
|
31
|
+
text "This text is flowing from the right. " * 4, :align => :right
|
32
|
+
|
33
|
+
move_down 15
|
34
|
+
text "This text is justified. " * 6, :align => :justify
|
35
|
+
transparent(0.5) { stroke_bounds }
|
36
|
+
end
|
37
|
+
|
38
|
+
bounding_box([300, 220], :width => 250, :height => 220) do
|
39
|
+
text "This text should be vertically top aligned"
|
40
|
+
text "This text should be vertically centered", :valign => :center
|
41
|
+
text "This text should be vertically bottom aligned", :valign => :bottom
|
42
|
+
transparent(0.5) { stroke_bounds }
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# The <code>:color</code> attribute can give a block of text a default color,
|
4
|
+
# in RGB hex format or 4-value CMYK.
|
5
|
+
#
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
7
|
+
%w[.. example_helper]))
|
8
|
+
|
9
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
10
|
+
Prawn::Example.generate(filename) do
|
11
|
+
text "Default color is black"
|
12
|
+
move_down 25
|
13
|
+
|
14
|
+
text "Changed to red", :color => "FF0000"
|
15
|
+
move_down 25
|
16
|
+
|
17
|
+
text "CMYK color", :color => [22, 55, 79, 30]
|
18
|
+
move_down 25
|
19
|
+
|
20
|
+
text "Also works with <color rgb='ff0000'>inline</color> formatting",
|
21
|
+
:color => "0000FF",
|
22
|
+
:inline_format => true
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# The <code>column_box</code> method allows you to define columns that flow
|
4
|
+
# their contents from one section to the next. You can have a number of columns
|
5
|
+
# on the page, and only when the last column overflows will a new page be
|
6
|
+
# created.
|
7
|
+
#
|
8
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
9
|
+
%w[.. example_helper]))
|
10
|
+
|
11
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
12
|
+
Prawn::Example.generate(filename) do
|
13
|
+
text "The Prince", :align => :center, :size => 18
|
14
|
+
text "Niccolò Machiavelli", :align => :center, :size => 14
|
15
|
+
move_down 12
|
16
|
+
|
17
|
+
column_box([0, cursor], :columns => 2, :width => bounds.width) do
|
18
|
+
text((<<-END.gsub(/\s+/, ' ') + "\n\n") * 3)
|
19
|
+
All the States and Governments by which men are or ever have been ruled,
|
20
|
+
have been and are either Republics or Princedoms. Princedoms are either
|
21
|
+
hereditary, in which the sovereignty is derived through an ancient line
|
22
|
+
of ancestors, or they are new. New Princedoms are either wholly new, as
|
23
|
+
that of Milan to Francesco Sforza; or they are like limbs joined on to
|
24
|
+
the hereditary possessions of the Prince who acquires them, as the
|
25
|
+
Kingdom of Naples to the dominions of the King of Spain. The States thus
|
26
|
+
acquired have either been used to live under a Prince or have been free;
|
27
|
+
and he who acquires them does so either by his own arms or by the arms of
|
28
|
+
others, and either by good fortune or by merit.
|
29
|
+
END
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Prawn enables the declaration of fallback fonts for those glyphs that may not
|
4
|
+
# be present in the desired font. Use the <code>:fallback_fonts</code> option
|
5
|
+
# with any of the text or text box methods, or set fallback_fonts document-wide.
|
6
|
+
#
|
7
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
8
|
+
%w[.. example_helper]))
|
9
|
+
|
10
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
|
+
Prawn::Example.generate(filename) do
|
12
|
+
file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
|
13
|
+
font_families["Kai"] = {
|
14
|
+
:normal => { :file => file, :font => "Kai" }
|
15
|
+
}
|
16
|
+
|
17
|
+
file = "#{Prawn::DATADIR}/fonts/Action Man.dfont"
|
18
|
+
font_families["Action Man"] = {
|
19
|
+
:normal => { :file => file, :font => "ActionMan" },
|
20
|
+
}
|
21
|
+
|
22
|
+
font("Action Man") do
|
23
|
+
text("When fallback fonts are included, each glyph will be rendered " +
|
24
|
+
"using the first font that includes the glyph, starting with the " +
|
25
|
+
"current font and then moving through the fallback fonts from left " +
|
26
|
+
"to right." +
|
27
|
+
"\n\n" +
|
28
|
+
"hello ƒ 你好\n再见 ƒ goodbye",
|
29
|
+
:fallback_fonts => ["Times-Roman", "Kai"])
|
30
|
+
end
|
31
|
+
move_down 20
|
32
|
+
|
33
|
+
formatted_text([ { :text => "Fallback fonts can even override" },
|
34
|
+
{ :text => "fragment fonts (你好)", :font => "Times-Roman" },
|
35
|
+
],
|
36
|
+
:fallback_fonts => ["Times-Roman", "Kai"])
|
37
|
+
end
|
data/manual/text/font.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# The <code>font</code> method can be used in three different ways.
|
4
|
+
#
|
5
|
+
# If we don't pass it any arguments it will return the current font being used
|
6
|
+
# to render text.
|
7
|
+
#
|
8
|
+
# If we just pass it a font name it will use that font for rendering text
|
9
|
+
# through the rest of the document.
|
10
|
+
#
|
11
|
+
# It can also be used by passing a font name and a block. In this case the
|
12
|
+
# specified font will only be used to render text inside the block.
|
13
|
+
#
|
14
|
+
# The default font is Helvetica.
|
15
|
+
#
|
16
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
17
|
+
%w[.. example_helper]))
|
18
|
+
|
19
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
20
|
+
Prawn::Example.generate(filename) do
|
21
|
+
text "Let's see which font we are using: #{font.inspect}"
|
22
|
+
|
23
|
+
move_down 20
|
24
|
+
font "Times-Roman"
|
25
|
+
text "Written in Times."
|
26
|
+
|
27
|
+
move_down 20
|
28
|
+
font("Courier") do
|
29
|
+
text "Written in Courier because we are inside the block."
|
30
|
+
end
|
31
|
+
|
32
|
+
move_down 20
|
33
|
+
text "Written in Times again as we left the previous block."
|
34
|
+
|
35
|
+
move_down 20
|
36
|
+
text "Let's see which font we are using again: #{font.inspect}"
|
37
|
+
|
38
|
+
move_down 20
|
39
|
+
font "Helvetica"
|
40
|
+
text "Back to normal."
|
41
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# The <code>font_size</code> method works just like the <code>font</code>
|
4
|
+
# method.
|
5
|
+
#
|
6
|
+
# In fact we can even use <code>font</code> with the <code>:size</code> option
|
7
|
+
# to declare which size we want.
|
8
|
+
#
|
9
|
+
# Another way to change the font size is by supplying the <code>:size</code>
|
10
|
+
# option to the text methods.
|
11
|
+
#
|
12
|
+
# The default font size is <code>12</code>.
|
13
|
+
#
|
14
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
15
|
+
%w[.. example_helper]))
|
16
|
+
|
17
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
18
|
+
Prawn::Example.generate(filename) do
|
19
|
+
text "Let's see which is the current font_size: #{font_size.inspect}"
|
20
|
+
|
21
|
+
move_down 10
|
22
|
+
font_size 16
|
23
|
+
text "Yeah, something bigger!"
|
24
|
+
|
25
|
+
move_down 10
|
26
|
+
font_size(25) { text "Even bigger!" }
|
27
|
+
|
28
|
+
move_down 10
|
29
|
+
text "Back to 16 again."
|
30
|
+
|
31
|
+
move_down 10
|
32
|
+
text "Single line on 20 using the :size option.", :size => 20
|
33
|
+
|
34
|
+
move_down 10
|
35
|
+
text "Back to 16 once more."
|
36
|
+
|
37
|
+
move_down 10
|
38
|
+
font("Courier", :size => 10) do
|
39
|
+
text "Yeah, using Courier 10 courtesy of the font method."
|
40
|
+
end
|
41
|
+
|
42
|
+
move_down 10
|
43
|
+
font("Helvetica", :size => 12)
|
44
|
+
text "Back to normal"
|
45
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Most font families come with some styles other than normal. Most common are
|
4
|
+
# <code>bold</code>, <code>italic</code> and <code>bold_italic</code>.
|
5
|
+
#
|
6
|
+
# The style can be set the using the <code>:style</code> option, with either the
|
7
|
+
# <code>font</code> method which will set the font and style for rest of the
|
8
|
+
# document, or with the inline text methods.
|
9
|
+
#
|
10
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
11
|
+
%w[.. example_helper]))
|
12
|
+
|
13
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
14
|
+
Prawn::Example.generate(filename) do
|
15
|
+
["Courier", "Helvetica", "Times-Roman"].each do |example_font|
|
16
|
+
move_down 20
|
17
|
+
|
18
|
+
[:bold, :bold_italic, :italic, :normal].each do |style|
|
19
|
+
font example_font, :style => style
|
20
|
+
text "I'm writing in #{example_font} (#{style})"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# The <code>:callback</code> option is also available for the formatted text
|
4
|
+
# methods.
|
5
|
+
#
|
6
|
+
# This option accepts an object (or array of objects) on which two methods
|
7
|
+
# will be called if defined: <code>render_behind</code> and
|
8
|
+
# <code>render_in_front</code>. They are called before and after rendering the
|
9
|
+
# text fragment and are passed the fragment as an argument.
|
10
|
+
#
|
11
|
+
# This example defines two new callback classes and provide callback objects
|
12
|
+
# for the formatted_text
|
13
|
+
#
|
14
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
15
|
+
%w[.. example_helper]))
|
16
|
+
|
17
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
18
|
+
Prawn::Example.generate(filename) do
|
19
|
+
class HighlightCallback
|
20
|
+
def initialize(options)
|
21
|
+
@color = options[:color]
|
22
|
+
@document = options[:document]
|
23
|
+
end
|
24
|
+
|
25
|
+
def render_behind(fragment)
|
26
|
+
original_color = @document.fill_color
|
27
|
+
@document.fill_color = @color
|
28
|
+
@document.fill_rectangle(fragment.top_left, fragment.width,
|
29
|
+
fragment.height)
|
30
|
+
@document.fill_color = original_color
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class ConnectedBorderCallback
|
35
|
+
def initialize(options)
|
36
|
+
@radius = options[:radius]
|
37
|
+
@document = options[:document]
|
38
|
+
end
|
39
|
+
|
40
|
+
def render_in_front(fragment)
|
41
|
+
@document.stroke_polygon(fragment.top_left, fragment.top_right,
|
42
|
+
fragment.bottom_right, fragment.bottom_left)
|
43
|
+
|
44
|
+
@document.fill_circle(fragment.top_left, @radius)
|
45
|
+
@document.fill_circle(fragment.top_right, @radius)
|
46
|
+
@document.fill_circle(fragment.bottom_right, @radius)
|
47
|
+
@document.fill_circle(fragment.bottom_left, @radius)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
highlight = HighlightCallback.new(:color => 'ffff00', :document => self)
|
52
|
+
border = ConnectedBorderCallback.new(:radius => 2.5, :document => self)
|
53
|
+
|
54
|
+
formatted_text [ { :text => "hello", :callback => highlight },
|
55
|
+
{ :text => " " },
|
56
|
+
{ :text => "world", :callback => border },
|
57
|
+
{ :text => " " },
|
58
|
+
{ :text => "hello world", :callback => [highlight, border] }
|
59
|
+
], :size => 20
|
60
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# There are two other text methods available: <code>formatted_text</code> and
|
4
|
+
# <code>formatted_text_box</code>.
|
5
|
+
#
|
6
|
+
# These are useful when the provided text has numerous portions that need to be
|
7
|
+
# formatted differently. As you might imply from their names the first should
|
8
|
+
# be used for free flowing text just like the <code>text</code> method and the
|
9
|
+
# last should be used for positioned text just like <code>text_box</code>.
|
10
|
+
#
|
11
|
+
# The main difference between these methods and the <code>text</code> and
|
12
|
+
# <code>text_box</code> methods is how the text is provided. The
|
13
|
+
# <code>formatted_text</code> and <code>formatted_text_box</code> methods accept
|
14
|
+
# an array of hashes. Each hash must provide a <code>:text</code> option which
|
15
|
+
# is the text string and may provide the following options: <code>:styles</code>
|
16
|
+
# (an array of symbols), <code>:size</code> (the font size),
|
17
|
+
# <code>:character_spacing</code> (additional space between the characters),
|
18
|
+
# <code>:font</code> (the name of a registered font), <code>:color</code> (the
|
19
|
+
# same input accepted by <code>fill_color</code> and <code>stroke_color</code>),
|
20
|
+
# <code>:link</code> (an URL to create a link), <code>:anchor</code> (a
|
21
|
+
# destination inside the document), and <code>:local</code> (a link to a local
|
22
|
+
# file).
|
23
|
+
#
|
24
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
25
|
+
%w[.. example_helper]))
|
26
|
+
|
27
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
28
|
+
Prawn::Example.generate(filename) do
|
29
|
+
formatted_text [ { :text => "Some bold. ", :styles => [:bold] },
|
30
|
+
{ :text => "Some italic. ", :styles => [:italic] },
|
31
|
+
{ :text => "Bold italic. ", :styles => [:bold, :italic] },
|
32
|
+
{ :text => "Bigger Text. ", :size => 20 },
|
33
|
+
{ :text => "More spacing. ", :character_spacing => 3 },
|
34
|
+
{ :text => "Different Font. ", :font => "Courier" },
|
35
|
+
{ :text => "Some coloring. ", :color => "FF00FF" },
|
36
|
+
{ :text => "Link to the wiki. ",
|
37
|
+
:color => "0000FF",
|
38
|
+
:link => "https://github.com/prawnpdf/prawn/wiki" },
|
39
|
+
{ :text => "Link to the Text Reference. " ,
|
40
|
+
:color => "0000FF",
|
41
|
+
:anchor => "Text Reference" },
|
42
|
+
{ :text => "Link to a local file. ",
|
43
|
+
:color => "0000FF",
|
44
|
+
:local => "./local_file.txt" }
|
45
|
+
]
|
46
|
+
|
47
|
+
formatted_text_box [ { :text => "Just your regular" },
|
48
|
+
{ :text => " text_box ", :font => "Courier" },
|
49
|
+
{ :text => "with some additional formatting options " +
|
50
|
+
"added to the mix.",
|
51
|
+
:color => [50, 100, 0, 0],
|
52
|
+
:styles => [:italic] }
|
53
|
+
], :at => [100, 100], :width => 200, :height => 100
|
54
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Text rendering can be as simple or as complex as you want.
|
4
|
+
#
|
5
|
+
# This example covers the most basic method: <code>text</code>. It is meant for
|
6
|
+
# free flowing text. The provided string will flow according to the current
|
7
|
+
# bounding box width and height. It will also flow onto the next page if the
|
8
|
+
# bottom of the bounding box is reached.
|
9
|
+
#
|
10
|
+
# The text will start being rendered on the current cursor position. When it
|
11
|
+
# finishes rendering, the cursor is left directly below the text.
|
12
|
+
#
|
13
|
+
# This example also shows text flowing across pages following the margin box and
|
14
|
+
# other bounding boxes.
|
15
|
+
#
|
16
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
17
|
+
%w[.. example_helper]))
|
18
|
+
|
19
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
20
|
+
Prawn::Example.generate(filename) do
|
21
|
+
move_cursor_to 50
|
22
|
+
text "This text will flow to the next page. " * 20
|
23
|
+
|
24
|
+
y_position = cursor - 50
|
25
|
+
bounding_box([0, y_position], :width => 200, :height => 150) do
|
26
|
+
transparent(0.5) { stroke_bounds }
|
27
|
+
text "This text will flow along this bounding box we created for it. " * 5
|
28
|
+
end
|
29
|
+
|
30
|
+
bounding_box([300, y_position], :width => 200, :height => 150) do
|
31
|
+
transparent(0.5) { stroke_bounds } # This will stroke on one page
|
32
|
+
|
33
|
+
text "Now look what happens when the free flowing text reaches the end " +
|
34
|
+
"of a bounding box that is narrower than the margin box." +
|
35
|
+
" . " * 200 +
|
36
|
+
"It continues on the next page as if the previous bounding box " +
|
37
|
+
"was cloned. If we want it to have the same border as the one on " +
|
38
|
+
"the previous page we will need to stroke the boundaries again."
|
39
|
+
|
40
|
+
transparent(0.5) { stroke_bounds } # And this will stroke on the next
|
41
|
+
end
|
42
|
+
|
43
|
+
move_cursor_to 200
|
44
|
+
span(350, :position => :center) do
|
45
|
+
text "Span is a different kind of bounding box as it lets the text " +
|
46
|
+
"flow gracefully onto the next page. It doesn't matter if the text " +
|
47
|
+
"started on the middle of the previous page, when it flows to the " +
|
48
|
+
"next page it will start at the beginning." + " _ " * 500 +
|
49
|
+
"I told you it would start on the beginning of this page."
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# <strong>NOTE: This feature is currently not working correctly</strong>
|
4
|
+
#
|
5
|
+
# Sometimes free flowing text might look ugly, specially when a paragraph is
|
6
|
+
# split between two pages. Using a positioned text box just to overcome this
|
7
|
+
# nuisance is not the right choice.
|
8
|
+
#
|
9
|
+
# You probably want to use the <code>group</code> method instead. It will try
|
10
|
+
# to render the block within the current page. If the content would fall to a
|
11
|
+
# new page it just renders everything on the following page. If the block cannot
|
12
|
+
# be executed on a single blank page a <code>CannotGroup</code> exception will
|
13
|
+
# be raised.
|
14
|
+
#
|
15
|
+
# So if you can split your text blocks in paragraphs you can have every
|
16
|
+
# paragraph contained on a single page.
|
17
|
+
#
|
18
|
+
require File.expand_path(File.join(File.dirname(__FILE__),
|
19
|
+
%w[.. example_helper]))
|
20
|
+
|
21
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
22
|
+
Prawn::Example.generate(filename) do
|
23
|
+
move_cursor_to 80
|
24
|
+
text "Let's move to the end of the page so that you can see group in action."
|
25
|
+
|
26
|
+
group do
|
27
|
+
text "This block of text was too big to be rendered on the bottom of the " +
|
28
|
+
" previous page. So it was rendered entirely on this new page. " +
|
29
|
+
" _ " * 200
|
30
|
+
end
|
31
|
+
end
|