prawn 0.15.0 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +2 -2
- data/LICENSE +1 -1
- data/README.md +96 -0
- data/Rakefile +27 -30
- 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.alpha +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/page_white_text.alpha +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/data/pdfs/nested_pages.pdf +13 -13
- data/lib/prawn.rb +21 -85
- data/lib/prawn/compatibility.rb +51 -0
- data/lib/prawn/core.rb +85 -0
- data/lib/prawn/core/annotations.rb +61 -0
- data/lib/prawn/core/byte_string.rb +9 -0
- data/lib/prawn/core/destinations.rb +90 -0
- data/lib/prawn/core/document_state.rb +78 -0
- data/lib/prawn/core/literal_string.rb +16 -0
- data/lib/prawn/core/name_tree.rb +177 -0
- data/lib/prawn/core/object_store.rb +264 -0
- data/lib/prawn/core/page.rb +215 -0
- data/lib/prawn/core/pdf_object.rb +108 -0
- data/lib/prawn/core/reference.rb +115 -0
- data/lib/prawn/core/text.rb +268 -0
- data/lib/prawn/core/text/formatted/arranger.rb +294 -0
- data/lib/prawn/core/text/formatted/line_wrap.rb +273 -0
- data/lib/prawn/core/text/formatted/wrap.rb +153 -0
- data/lib/prawn/document.rb +122 -155
- data/lib/prawn/document/bounding_box.rb +7 -36
- data/lib/prawn/document/column_box.rb +10 -38
- data/lib/prawn/document/graphics_state.rb +74 -11
- data/lib/prawn/document/internals.rb +23 -24
- data/lib/prawn/document/page_geometry.rb +136 -0
- data/lib/prawn/document/snapshot.rb +6 -7
- data/lib/prawn/document/span.rb +10 -12
- data/lib/prawn/encoding.rb +10 -9
- data/lib/prawn/errors.rb +30 -15
- data/lib/prawn/font.rb +104 -136
- data/lib/prawn/font/afm.rb +44 -46
- data/lib/prawn/font/dfont.rb +3 -4
- data/lib/prawn/font/ttf.rb +50 -31
- data/lib/prawn/graphics.rb +57 -302
- data/lib/prawn/graphics/cap_style.rb +3 -4
- data/lib/prawn/graphics/color.rb +5 -13
- data/lib/prawn/graphics/dash.rb +31 -53
- data/lib/prawn/graphics/gradient.rb +84 -0
- data/lib/prawn/graphics/join_style.rb +7 -9
- data/lib/prawn/graphics/transformation.rb +9 -10
- data/lib/prawn/graphics/transparency.rb +1 -3
- data/lib/prawn/images.rb +59 -69
- data/lib/prawn/images/image.rb +22 -6
- data/lib/prawn/images/jpg.rb +14 -20
- data/lib/prawn/images/png.rb +118 -61
- data/lib/prawn/layout.rb +15 -10
- data/lib/prawn/layout/grid.rb +54 -66
- data/lib/prawn/measurement_extensions.rb +6 -10
- data/lib/prawn/measurements.rb +21 -27
- data/lib/prawn/outline.rb +308 -6
- data/lib/prawn/repeater.rb +8 -10
- data/lib/prawn/security.rb +33 -55
- data/lib/prawn/security/arcfour.rb +0 -1
- data/lib/prawn/stamp.rb +3 -5
- data/lib/prawn/table.rb +60 -188
- data/lib/prawn/table/cell.rb +44 -272
- data/lib/prawn/table/cell/image.rb +3 -2
- data/lib/prawn/table/cell/in_table.rb +2 -4
- data/lib/prawn/table/cell/subtable.rb +2 -2
- data/lib/prawn/table/cell/text.rb +18 -41
- data/lib/prawn/table/cells.rb +48 -142
- data/lib/prawn/text.rb +25 -32
- data/lib/prawn/text/box.rb +6 -12
- data/lib/prawn/text/formatted.rb +4 -5
- data/lib/prawn/text/formatted/box.rb +59 -96
- data/lib/prawn/text/formatted/fragment.rb +23 -34
- data/lib/prawn/text/formatted/parser.rb +5 -15
- data/prawn.gemspec +13 -24
- data/spec/annotations_spec.rb +32 -16
- data/spec/bounding_box_spec.rb +17 -119
- data/spec/cell_spec.rb +42 -112
- data/spec/destinations_spec.rb +5 -5
- data/spec/document_spec.rb +111 -155
- data/spec/extensions/mocha.rb +0 -1
- data/spec/font_spec.rb +99 -149
- data/spec/formatted_text_arranger_spec.rb +43 -43
- data/spec/formatted_text_box_spec.rb +44 -43
- data/spec/formatted_text_fragment_spec.rb +8 -8
- data/spec/graphics_spec.rb +68 -151
- data/spec/grid_spec.rb +15 -26
- data/spec/images_spec.rb +30 -51
- data/spec/inline_formatted_text_parser_spec.rb +20 -69
- 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/name_tree_spec.rb +112 -0
- data/spec/object_store_spec.rb +106 -17
- data/spec/outline_spec.rb +63 -103
- data/spec/pdf_object_spec.rb +170 -0
- data/spec/png_spec.rb +25 -25
- data/spec/reference_spec.rb +65 -8
- data/spec/repeater_spec.rb +10 -10
- data/spec/security_spec.rb +12 -44
- data/spec/snapshot_spec.rb +7 -7
- data/spec/span_spec.rb +15 -10
- data/spec/spec_helper.rb +8 -32
- data/spec/stamp_spec.rb +30 -29
- data/spec/stroke_styles_spec.rb +18 -36
- data/spec/table_spec.rb +111 -706
- data/spec/template_spec.rb +297 -0
- data/spec/text_at_spec.rb +33 -19
- data/spec/text_box_spec.rb +64 -100
- data/spec/text_rendering_mode_spec.rb +5 -5
- data/spec/text_spacing_spec.rb +4 -4
- data/spec/text_spec.rb +64 -84
- data/spec/transparency_spec.rb +5 -5
- metadata +290 -463
- checksums.yaml +0 -7
- data/.yardopts +0 -10
- data/Gemfile +0 -11
- data/data/images/16bit.color +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.color +0 -0
- data/lib/prawn/font_metric_cache.rb +0 -47
- data/lib/prawn/graphics/patterns.rb +0 -138
- data/lib/prawn/image_handler.rb +0 -36
- data/lib/prawn/soft_mask.rb +0 -96
- data/lib/prawn/table/cell/span_dummy.rb +0 -93
- data/lib/prawn/table/column_width_calculator.rb +0 -61
- data/lib/prawn/text/formatted/arranger.rb +0 -290
- data/lib/prawn/text/formatted/line_wrap.rb +0 -266
- data/lib/prawn/text/formatted/wrap.rb +0 -150
- data/lib/prawn/utilities.rb +0 -46
- data/manual/basic_concepts/adding_pages.rb +0 -27
- data/manual/basic_concepts/basic_concepts.rb +0 -34
- data/manual/basic_concepts/creation.rb +0 -39
- data/manual/basic_concepts/cursor.rb +0 -33
- data/manual/basic_concepts/measurement.rb +0 -25
- data/manual/basic_concepts/origin.rb +0 -38
- data/manual/basic_concepts/other_cursor_helpers.rb +0 -40
- data/manual/bounding_box/bounding_box.rb +0 -39
- data/manual/bounding_box/bounds.rb +0 -49
- data/manual/bounding_box/canvas.rb +0 -24
- data/manual/bounding_box/creation.rb +0 -23
- data/manual/bounding_box/indentation.rb +0 -46
- data/manual/bounding_box/nesting.rb +0 -45
- data/manual/bounding_box/russian_boxes.rb +0 -40
- data/manual/bounding_box/stretchy.rb +0 -31
- data/manual/document_and_page_options/background.rb +0 -27
- data/manual/document_and_page_options/document_and_page_options.rb +0 -32
- data/manual/document_and_page_options/metadata.rb +0 -23
- data/manual/document_and_page_options/page_margins.rb +0 -38
- data/manual/document_and_page_options/page_size.rb +0 -34
- data/manual/document_and_page_options/print_scaling.rb +0 -20
- data/manual/example_file.rb +0 -111
- data/manual/example_helper.rb +0 -411
- data/manual/example_package.rb +0 -53
- data/manual/example_section.rb +0 -46
- data/manual/graphics/circle_and_ellipse.rb +0 -22
- data/manual/graphics/color.rb +0 -24
- data/manual/graphics/common_lines.rb +0 -30
- data/manual/graphics/fill_and_stroke.rb +0 -42
- data/manual/graphics/fill_rules.rb +0 -37
- data/manual/graphics/gradients.rb +0 -37
- data/manual/graphics/graphics.rb +0 -58
- data/manual/graphics/helper.rb +0 -24
- data/manual/graphics/line_width.rb +0 -35
- data/manual/graphics/lines_and_curves.rb +0 -41
- data/manual/graphics/polygon.rb +0 -29
- data/manual/graphics/rectangle.rb +0 -21
- data/manual/graphics/rotate.rb +0 -28
- data/manual/graphics/scale.rb +0 -41
- data/manual/graphics/soft_masks.rb +0 -46
- data/manual/graphics/stroke_cap.rb +0 -31
- data/manual/graphics/stroke_dash.rb +0 -48
- data/manual/graphics/stroke_join.rb +0 -30
- data/manual/graphics/translate.rb +0 -29
- data/manual/graphics/transparency.rb +0 -35
- data/manual/images/absolute_position.rb +0 -23
- data/manual/images/fit.rb +0 -21
- data/manual/images/horizontal.rb +0 -25
- data/manual/images/images.rb +0 -40
- data/manual/images/plain_image.rb +0 -18
- data/manual/images/scale.rb +0 -22
- data/manual/images/vertical.rb +0 -28
- data/manual/images/width_and_height.rb +0 -25
- data/manual/layout/boxes.rb +0 -27
- data/manual/layout/content.rb +0 -25
- data/manual/layout/layout.rb +0 -28
- data/manual/layout/simple_grid.rb +0 -23
- data/manual/manual/cover.rb +0 -36
- data/manual/manual/foreword.rb +0 -85
- data/manual/manual/how_to_read_this_manual.rb +0 -41
- data/manual/manual/manual.rb +0 -34
- data/manual/outline/add_subsection_to.rb +0 -61
- data/manual/outline/insert_section_after.rb +0 -47
- data/manual/outline/outline.rb +0 -32
- data/manual/outline/sections_and_pages.rb +0 -67
- data/manual/repeatable_content/page_numbering.rb +0 -54
- data/manual/repeatable_content/repeatable_content.rb +0 -31
- data/manual/repeatable_content/repeater.rb +0 -55
- data/manual/repeatable_content/stamp.rb +0 -41
- data/manual/security/encryption.rb +0 -31
- data/manual/security/permissions.rb +0 -38
- data/manual/security/security.rb +0 -28
- 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/text/alignment.rb +0 -44
- data/manual/text/color.rb +0 -24
- data/manual/text/column_box.rb +0 -32
- data/manual/text/fallback_fonts.rb +0 -37
- data/manual/text/font.rb +0 -41
- data/manual/text/font_size.rb +0 -45
- data/manual/text/font_style.rb +0 -23
- data/manual/text/formatted_callbacks.rb +0 -60
- data/manual/text/formatted_text.rb +0 -54
- data/manual/text/free_flowing_text.rb +0 -51
- data/manual/text/group.rb +0 -31
- data/manual/text/inline.rb +0 -43
- data/manual/text/kerning_and_character_spacing.rb +0 -39
- data/manual/text/leading.rb +0 -25
- data/manual/text/line_wrapping.rb +0 -41
- data/manual/text/paragraph_indentation.rb +0 -26
- data/manual/text/positioned_text.rb +0 -38
- data/manual/text/registering_families.rb +0 -48
- data/manual/text/rendering_and_color.rb +0 -37
- data/manual/text/right_to_left_text.rb +0 -43
- data/manual/text/rotation.rb +0 -43
- data/manual/text/single_usage.rb +0 -37
- data/manual/text/text.rb +0 -75
- data/manual/text/text_box_excess.rb +0 -32
- data/manual/text/text_box_extensions.rb +0 -45
- data/manual/text/text_box_overflow.rb +0 -44
- data/manual/text/utf8.rb +0 -28
- data/manual/text/win_ansi_charset.rb +0 -59
- data/spec/acceptance/png.rb +0 -23
- data/spec/column_box_spec.rb +0 -65
- data/spec/extensions/encoding_helpers.rb +0 -9
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/image_handler_spec.rb +0 -54
- data/spec/soft_mask_spec.rb +0 -117
- data/spec/table/span_dummy_spec.rb +0 -17
@@ -1,49 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# The <code>bounds</code> method returns the current bounding box. This is
|
4
|
-
# useful because the <code>Prawn::BoundinBox</code> exposes some nice boundary
|
5
|
-
# helpers.
|
6
|
-
#
|
7
|
-
# <code>top</code>, <code>bottom</code>, <code>left</code> and
|
8
|
-
# <code>right</code> methods return the bounding box boundaries relative to its
|
9
|
-
# translated origin. <code>top_left</code>, <code>top_right</code>,
|
10
|
-
# <code>bottom_left</code> and <code>bottom_right</code> return those boundaries
|
11
|
-
# pairs inside arrays.
|
12
|
-
#
|
13
|
-
# All these methods have an "absolute" version like <code>absolute_right</code>.
|
14
|
-
# The absolute version returns the same boundary relative to the page absolute
|
15
|
-
# coordinates.
|
16
|
-
#
|
17
|
-
# The following snippet shows the boundaries for the margin box side by side
|
18
|
-
# with the boundaries for a custom bounding box.
|
19
|
-
#
|
20
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
21
|
-
%w[.. example_helper]))
|
22
|
-
|
23
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
24
|
-
Prawn::Example.generate(filename) do
|
25
|
-
def print_coordinates
|
26
|
-
text "top: #{bounds.top}"
|
27
|
-
text "bottom: #{bounds.bottom}"
|
28
|
-
text "left: #{bounds.left}"
|
29
|
-
text "right: #{bounds.right}"
|
30
|
-
|
31
|
-
move_down 10
|
32
|
-
|
33
|
-
text "absolute top: #{sprintf "%.2f", bounds.absolute_top}"
|
34
|
-
text "absolute bottom: #{sprintf "%.2f", bounds.absolute_bottom}"
|
35
|
-
text "absolute left: #{sprintf "%.2f", bounds.absolute_left}"
|
36
|
-
text "absolute right: #{sprintf "%.2f", bounds.absolute_right}"
|
37
|
-
end
|
38
|
-
|
39
|
-
text "Margin box bounds:"
|
40
|
-
move_down 5
|
41
|
-
print_coordinates
|
42
|
-
|
43
|
-
bounding_box([250, cursor + 140], :width => 200, :height => 150) do
|
44
|
-
text "This bounding box bounds:"
|
45
|
-
move_down 5
|
46
|
-
print_coordinates
|
47
|
-
transparent(0.5) { stroke_bounds }
|
48
|
-
end
|
49
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# The origin example already mentions that a new document already comes with
|
4
|
-
# a margin box whose bottom left corner is used as the origin for calculating
|
5
|
-
# coordinates.
|
6
|
-
#
|
7
|
-
# What has not been told is that there is one helper for "bypassing" the margin
|
8
|
-
# box: <code>canvas</code>. This method is a shortcut for creating a bounding
|
9
|
-
# box mapped to the absolute coordinates and evaluating the code inside it.
|
10
|
-
#
|
11
|
-
# The following snippet draws a circle on each of the four absolute corners.
|
12
|
-
#
|
13
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
14
|
-
%w[.. example_helper]))
|
15
|
-
|
16
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
|
-
Prawn::Example.generate(filename) do
|
18
|
-
canvas do
|
19
|
-
fill_circle [bounds.left, bounds.top], 30
|
20
|
-
fill_circle [bounds.right, bounds.top], 30
|
21
|
-
fill_circle [bounds.right, bounds.bottom], 30
|
22
|
-
fill_circle [0, 0], 30
|
23
|
-
end
|
24
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# If you've read the basic concepts examples you probably know that the origin
|
4
|
-
# of a page is on the bottom left corner and that the content flows from top to
|
5
|
-
# bottom.
|
6
|
-
#
|
7
|
-
# You also know that a Bounding Box is a structure for helping the content flow.
|
8
|
-
#
|
9
|
-
# A bounding box can be created with the <code>bounding_box</code> method. Just
|
10
|
-
# provide the top left corner, a required <code>:width</code> option and an
|
11
|
-
# optional <code>:height</code>.
|
12
|
-
#
|
13
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
14
|
-
%w[.. example_helper]))
|
15
|
-
|
16
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
|
-
Prawn::Example.generate(filename) do
|
18
|
-
bounding_box([200, cursor - 100], :width => 200, :height => 100) do
|
19
|
-
text "Just your regular bounding box"
|
20
|
-
|
21
|
-
transparent(0.5) { stroke_bounds }
|
22
|
-
end
|
23
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Sometimes you just need to indent a portion of the contents of a bounding box,
|
4
|
-
# and using a nested bounding box is pure overkill. The <code>indent</code>
|
5
|
-
# method is what you might need.
|
6
|
-
#
|
7
|
-
# Just provide a number for it to indent all content generated inside the
|
8
|
-
# block.
|
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
|
-
text "No indentation on the margin box."
|
16
|
-
indent(20) do
|
17
|
-
text "Some indentation inside an indent block."
|
18
|
-
end
|
19
|
-
move_down 20
|
20
|
-
|
21
|
-
bounding_box([50, cursor], :width => 400, :height => cursor) do
|
22
|
-
transparent(0.5) { stroke_bounds }
|
23
|
-
|
24
|
-
move_down 10
|
25
|
-
text "No indentation inside this bounding box."
|
26
|
-
indent(40) do
|
27
|
-
text "Inside an indent block. And so is this horizontal line:"
|
28
|
-
|
29
|
-
stroke_horizontal_rule
|
30
|
-
end
|
31
|
-
move_down 10
|
32
|
-
text "No indentation"
|
33
|
-
|
34
|
-
move_down 20
|
35
|
-
indent(60) do
|
36
|
-
text "Another indent block."
|
37
|
-
|
38
|
-
bounding_box([0, cursor], :width => 200) do
|
39
|
-
text "Note that this bounding box coordinates are relative to the " +
|
40
|
-
"indent block"
|
41
|
-
|
42
|
-
transparent(0.5) { stroke_bounds }
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Normally when we provide the top left corner of a bounding box we
|
4
|
-
# express the coordinates relative to the margin box. This is not the
|
5
|
-
# case when we have nested bounding boxes. Once nested the inner bounding box
|
6
|
-
# coordinates are relative to the outter bounding box.
|
7
|
-
#
|
8
|
-
# This example shows some nested bounding boxes with fixed and stretchy heights.
|
9
|
-
# Note how the <code>cursor</code> method returns coordinates relative to
|
10
|
-
# the current bounding box.
|
11
|
-
#
|
12
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
13
|
-
%w[.. example_helper]))
|
14
|
-
|
15
|
-
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
|
-
Prawn::Example.generate(filename) do
|
17
|
-
def box_content(string)
|
18
|
-
text string
|
19
|
-
transparent(0.5) { stroke_bounds }
|
20
|
-
end
|
21
|
-
|
22
|
-
gap = 20
|
23
|
-
bounding_box([50, cursor], :width => 400, :height => 200) do
|
24
|
-
box_content("Fixed height")
|
25
|
-
|
26
|
-
bounding_box([gap, cursor - gap], :width => 300) do
|
27
|
-
text "Stretchy height"
|
28
|
-
|
29
|
-
bounding_box([gap, bounds.top - gap], :width => 100) do
|
30
|
-
text "Stretchy height"
|
31
|
-
transparent(0.5) { dash(1); stroke_bounds; undash }
|
32
|
-
end
|
33
|
-
|
34
|
-
bounding_box([gap * 7, bounds.top - gap], :width => 100, :height => 50) do
|
35
|
-
box_content("Fixed height")
|
36
|
-
end
|
37
|
-
|
38
|
-
transparent(0.5) { dash(1); stroke_bounds; undash }
|
39
|
-
end
|
40
|
-
|
41
|
-
bounding_box([gap, cursor - gap], :width => 300, :height => 50) do
|
42
|
-
box_content("Fixed height")
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# This example is mostly just for fun, and shows how nested bounding boxes
|
4
|
-
# can simplify calculations. See the "Bounding Box" section of the manual
|
5
|
-
# for more basic uses.
|
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
|
-
def combine(a1, a2)
|
13
|
-
output = []
|
14
|
-
a1.each do |i1|
|
15
|
-
a2.each do |i2|
|
16
|
-
output += [[i1,i2]]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
output
|
20
|
-
end
|
21
|
-
|
22
|
-
def recurse_bounding_box(max_depth=4, depth=1)
|
23
|
-
width = (bounds.width-15)/2
|
24
|
-
height = (bounds.height-15)/2
|
25
|
-
left_top_corners = combine([5, bounds.right-width-5],
|
26
|
-
[bounds.top-5, height+5])
|
27
|
-
left_top_corners.each do |lt|
|
28
|
-
bounding_box(lt, :width => width, :height => height) do
|
29
|
-
stroke_bounds
|
30
|
-
recurse_bounding_box(max_depth, depth+1) if depth < max_depth
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Set up a bbox from the dashed line to the bottom of the page
|
36
|
-
bounding_box([0, cursor], :width => bounds.width, :height => cursor) do
|
37
|
-
recurse_bounding_box
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Bounding Boxes accept an optional <code>:height</code> parameter. Unless it
|
4
|
-
# is provided the bounding box will be stretchy. It will expand the height to
|
5
|
-
# fit all content generated inside it.
|
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
|
-
y_position = cursor
|
13
|
-
bounding_box([0, y_position], :width => 200, :height => 100) do
|
14
|
-
text "This bounding box has a height of 100. If this text gets too large " +
|
15
|
-
"it will flow to the next page."
|
16
|
-
|
17
|
-
transparent(0.5) { stroke_bounds }
|
18
|
-
end
|
19
|
-
|
20
|
-
bounding_box([300, y_position], :width => 200) do
|
21
|
-
text "This bounding box has variable height. No matter how much text is " +
|
22
|
-
"written here, the height will expand to fit."
|
23
|
-
|
24
|
-
text " _" * 100
|
25
|
-
|
26
|
-
text " *" * 100
|
27
|
-
|
28
|
-
transparent(0.5) { stroke_bounds }
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Pass an image path to the <code>:background</code> option and it will be used
|
4
|
-
# as the background for all pages.
|
5
|
-
# This option can only be used on document creation.
|
6
|
-
#
|
7
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
8
|
-
%w[.. example_helper]))
|
9
|
-
|
10
|
-
img = "#{Prawn::DATADIR}/images/letterhead.jpg"
|
11
|
-
|
12
|
-
Prawn::Document.generate("background.pdf",
|
13
|
-
:background => img,
|
14
|
-
:margin => 100
|
15
|
-
) do
|
16
|
-
text "My report caption", :size => 18, :align => :right
|
17
|
-
|
18
|
-
move_down font.height * 2
|
19
|
-
|
20
|
-
text "Here is my text explaning this report. " * 20,
|
21
|
-
:size => 12, :align => :left, :leading => 2
|
22
|
-
|
23
|
-
move_down font.height
|
24
|
-
|
25
|
-
text "I'm using a soft background. " * 40,
|
26
|
-
:size => 12, :align => :left, :leading => 2
|
27
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Examples for stamps and repeaters.
|
4
|
-
#
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
%w[.. example_helper]))
|
7
|
-
|
8
|
-
Prawn::Example.generate("document_and_page_options.pdf",
|
9
|
-
:page_size => "FOLIO") do
|
10
|
-
|
11
|
-
package "document_and_page_options" do |p|
|
12
|
-
|
13
|
-
p.example "page_size", :eval_source => false, :full_source => true
|
14
|
-
p.example "page_margins", :eval_source => false, :full_source => true
|
15
|
-
p.example "background", :eval_source => false, :full_source => true
|
16
|
-
p.example "metadata", :eval_source => false, :full_source => true
|
17
|
-
p.example "print_scaling",:eval_source => false, :full_source => true
|
18
|
-
|
19
|
-
p.intro do
|
20
|
-
prose("So far we've already seen how to create new documents and start new pages. This chapter expands on the previous examples by showing other options avialable. Some of the options are only available when creating new documents.
|
21
|
-
|
22
|
-
The examples show:")
|
23
|
-
|
24
|
-
list( "How to configure page size",
|
25
|
-
"How to configure page margins",
|
26
|
-
"How to use a background image",
|
27
|
-
"How to add metadata to the generated PDF"
|
28
|
-
)
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# To set the document metadata just pass a hash to the <code>:info</code>
|
4
|
-
# option when creating new documents.
|
5
|
-
# The keys in the example below are arbitrary, so you may add whatever keys you want
|
6
|
-
#
|
7
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
8
|
-
%w[.. example_helper]))
|
9
|
-
|
10
|
-
Prawn::Document.generate("metadata.pdf",
|
11
|
-
:info => {
|
12
|
-
:Title => "My title",
|
13
|
-
:Author => "John Doe",
|
14
|
-
:Subject => "My Subject",
|
15
|
-
:Keywords => "test metadata ruby pdf dry",
|
16
|
-
:Creator => "ACME Soft App",
|
17
|
-
:Producer => "Prawn",
|
18
|
-
:CreationDate => Time.now
|
19
|
-
}) do
|
20
|
-
|
21
|
-
text "This is a test of setting metadata properties via the info option."
|
22
|
-
text "While the keys are arbitrary, the above example sets common attributes."
|
23
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# The default margin for pages is 0.5 inch but you can change that with the
|
4
|
-
# <code>:margin</code> option or if you'd like to have different margins you
|
5
|
-
# can use the <code>:left_margin</code>, <code>:right_margin</code>,
|
6
|
-
# <code>:top_margin</code>, <code>:bottom_margin</code> options.
|
7
|
-
#
|
8
|
-
# These options are available both for starting new pages and creating new
|
9
|
-
# documents.
|
10
|
-
#
|
11
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
12
|
-
%w[.. example_helper]))
|
13
|
-
|
14
|
-
Prawn::Document.generate("page_margins.pdf",
|
15
|
-
:margin => 100
|
16
|
-
) do
|
17
|
-
text "100 pts margins."
|
18
|
-
stroke_bounds
|
19
|
-
|
20
|
-
start_new_page(:left_margin => 300)
|
21
|
-
text "300 pts margin on the left."
|
22
|
-
stroke_bounds
|
23
|
-
|
24
|
-
start_new_page(:top_margin => 300)
|
25
|
-
text "300 pts margin both on the top and on the left. Notice that whenever " +
|
26
|
-
"you set an option for a new page it will remain the default for the " +
|
27
|
-
"following pages."
|
28
|
-
stroke_bounds
|
29
|
-
|
30
|
-
start_new_page(:margin => 50)
|
31
|
-
text "50 pts margins. Using the margin option will reset previous specific " +
|
32
|
-
"calls to left, right, top and bottom margins."
|
33
|
-
stroke_bounds
|
34
|
-
|
35
|
-
start_new_page(:margin => [50, 100, 150, 200])
|
36
|
-
text "There is also the shorthand CSS like syntax used here."
|
37
|
-
stroke_bounds
|
38
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Prawn comes with support for most of the common page sizes so you'll only need
|
4
|
-
# to provide specific values if your intended format is not supported. To see a
|
5
|
-
# list with all supported sizes take a look at PDF::Core::PageGeometry
|
6
|
-
#
|
7
|
-
# # To define the size use <code>:page_size</code> when creating new documents
|
8
|
-
# and <code>:size</code> when starting new pages. The default page size for new
|
9
|
-
# documents is LETTER (612.00 x 792.00).
|
10
|
-
#
|
11
|
-
# You may also define the orientation of the page to be either portrait
|
12
|
-
# (default) or landscape. Use <code>:page_layout</code> when creating new
|
13
|
-
# documents and <code>:layout</code> when starting new pages.
|
14
|
-
#
|
15
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
16
|
-
%w[.. example_helper]))
|
17
|
-
|
18
|
-
Prawn::Document.generate("page_size.pdf",
|
19
|
-
:page_size => "EXECUTIVE",
|
20
|
-
:page_layout => :landscape
|
21
|
-
) do
|
22
|
-
text "EXECUTIVE landscape page."
|
23
|
-
|
24
|
-
custom_size = [275, 326]
|
25
|
-
|
26
|
-
["A4", "TABLOID", "B7", custom_size ].each do |size|
|
27
|
-
|
28
|
-
start_new_page(:size => size, :layout => :portrait)
|
29
|
-
text "#{size} portrait page."
|
30
|
-
|
31
|
-
start_new_page(:size => size, :layout => :landscape)
|
32
|
-
text "#{size} landscape page."
|
33
|
-
end
|
34
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document.
|
4
|
-
# Valid values are <code>None</code>, which indicates that the print dialog should reflect no page scaling,
|
5
|
-
# and <code>AppDefault</code>, which indicates that applications should use the current print scaling.
|
6
|
-
# If this entry has an unrecognized value, applications should use the current print scaling.
|
7
|
-
# Default value: <code>AppDefault</code>.
|
8
|
-
#
|
9
|
-
# Note: If the print dialog is suppressed and its parameters are provided directly by the application, the value of this entry should still be used.
|
10
|
-
#
|
11
|
-
|
12
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
13
|
-
%w[.. example_helper]))
|
14
|
-
|
15
|
-
Prawn::Document.generate("print_scaling.pdf",
|
16
|
-
:page_layout => :landscape,
|
17
|
-
:print_scaling => :none
|
18
|
-
) do
|
19
|
-
text "When you print this document, the scale to fit in print preview should be disabled by default."
|
20
|
-
end
|