prawn 0.13.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.yardopts +10 -0
- data/GPLv2 +20 -21
- data/Gemfile +3 -16
- data/Rakefile +17 -39
- data/lib/prawn/document/bounding_box.rb +85 -42
- data/lib/prawn/document/column_box.rb +21 -11
- data/lib/prawn/document/internals.rb +40 -147
- data/lib/prawn/document/span.rb +25 -17
- data/lib/prawn/document.rb +286 -245
- data/lib/prawn/encoding.rb +68 -101
- data/lib/prawn/errors.rb +47 -43
- data/lib/prawn/font.rb +204 -155
- data/lib/prawn/font_metric_cache.rb +25 -21
- data/lib/prawn/fonts/afm.rb +292 -0
- data/lib/prawn/{font → fonts}/dfont.rb +7 -13
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/fonts/ttc.rb +36 -0
- data/lib/prawn/{font → fonts}/ttf.rb +142 -80
- data/lib/prawn/graphics/blend_mode.rb +65 -0
- data/lib/prawn/graphics/cap_style.rb +6 -5
- data/lib/prawn/graphics/color.rb +47 -44
- data/lib/prawn/graphics/dash.rb +30 -13
- data/lib/prawn/graphics/join_style.rb +13 -6
- data/lib/prawn/graphics/patterns.rb +221 -90
- data/lib/prawn/graphics/transformation.rb +21 -12
- data/lib/prawn/graphics/transparency.rb +21 -17
- data/lib/prawn/graphics.rb +155 -128
- data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
- data/lib/prawn/image_handler.rb +16 -2
- data/lib/prawn/images/image.rb +4 -2
- data/lib/prawn/images/jpg.rb +39 -30
- data/lib/prawn/images/png.rb +132 -169
- data/lib/prawn/images.rb +70 -62
- data/lib/prawn/measurement_extensions.rb +15 -10
- data/lib/prawn/measurements.rb +22 -23
- data/lib/prawn/outline.rb +301 -13
- data/lib/prawn/repeater.rb +19 -17
- data/lib/prawn/security/arcfour.rb +54 -0
- data/lib/prawn/security.rb +108 -86
- data/lib/prawn/soft_mask.rb +40 -41
- data/lib/prawn/stamp.rb +29 -12
- data/lib/prawn/text/box.rb +27 -29
- data/lib/prawn/text/formatted/arranger.rb +110 -67
- data/lib/prawn/text/formatted/box.rb +233 -165
- data/lib/prawn/text/formatted/fragment.rb +27 -27
- data/lib/prawn/text/formatted/line_wrap.rb +137 -97
- data/lib/prawn/text/formatted/parser.rb +149 -127
- data/lib/prawn/text/formatted/wrap.rb +57 -37
- data/lib/prawn/text/formatted.rb +6 -4
- data/lib/prawn/text.rb +105 -73
- data/lib/prawn/transformation_stack.rb +44 -0
- data/lib/prawn/utilities.rb +11 -21
- data/lib/prawn/version.rb +5 -0
- data/lib/prawn/view.rb +101 -0
- data/lib/prawn.rb +42 -68
- data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
- data/manual/basic_concepts/adding_pages.rb +9 -10
- data/manual/basic_concepts/basic_concepts.rb +33 -24
- data/manual/basic_concepts/creation.rb +10 -11
- data/manual/basic_concepts/cursor.rb +9 -10
- data/manual/basic_concepts/measurement.rb +10 -11
- data/manual/basic_concepts/origin.rb +8 -9
- data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
- data/manual/basic_concepts/view.rb +48 -0
- data/manual/bounding_box/bounding_box.rb +31 -29
- data/manual/bounding_box/bounds.rb +17 -18
- data/manual/bounding_box/canvas.rb +8 -9
- data/manual/bounding_box/creation.rb +8 -9
- data/manual/bounding_box/indentation.rb +22 -23
- data/manual/bounding_box/nesting.rb +32 -25
- data/manual/bounding_box/russian_boxes.rb +19 -19
- data/manual/bounding_box/stretchy.rb +18 -20
- data/manual/contents.rb +35 -0
- data/manual/cover.rb +43 -0
- data/manual/document_and_page_options/background.rb +16 -14
- data/manual/document_and_page_options/document_and_page_options.rb +26 -23
- data/manual/document_and_page_options/metadata.rb +21 -19
- data/manual/document_and_page_options/page_margins.rb +20 -22
- data/manual/document_and_page_options/page_size.rb +15 -15
- data/manual/document_and_page_options/print_scaling.rb +23 -0
- data/manual/example_helper.rb +5 -408
- data/manual/graphics/blend_mode.rb +52 -0
- data/manual/graphics/circle_and_ellipse.rb +8 -9
- data/manual/graphics/color.rb +11 -13
- data/manual/graphics/common_lines.rb +13 -12
- data/manual/graphics/fill_and_stroke.rb +10 -11
- data/manual/graphics/fill_rules.rb +13 -12
- data/manual/graphics/gradients.rb +28 -22
- data/manual/graphics/graphics.rb +52 -46
- data/manual/graphics/helper.rb +20 -10
- data/manual/graphics/line_width.rb +13 -12
- data/manual/graphics/lines_and_curves.rb +13 -14
- data/manual/graphics/polygon.rb +10 -12
- data/manual/graphics/rectangle.rb +7 -8
- data/manual/graphics/rotate.rb +9 -12
- data/manual/graphics/scale.rb +19 -18
- data/manual/graphics/soft_masks.rb +5 -7
- data/manual/graphics/stroke_cap.rb +10 -11
- data/manual/graphics/stroke_dash.rb +16 -17
- data/manual/graphics/stroke_join.rb +10 -11
- data/manual/graphics/translate.rb +13 -13
- data/manual/graphics/transparency.rb +11 -13
- data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
- data/manual/images/absolute_position.rb +9 -10
- data/manual/images/fit.rb +9 -10
- data/manual/images/horizontal.rb +13 -14
- data/manual/images/images.rb +31 -30
- data/manual/images/plain_image.rb +6 -7
- data/manual/images/scale.rb +12 -13
- data/manual/images/vertical.rb +19 -17
- data/manual/images/width_and_height.rb +13 -14
- data/manual/layout/boxes.rb +14 -15
- data/manual/layout/content.rb +12 -13
- data/manual/layout/layout.rb +19 -20
- data/manual/layout/simple_grid.rb +8 -9
- data/manual/outline/add_subsection_to.rb +26 -27
- data/manual/outline/insert_section_after.rb +19 -20
- data/manual/outline/outline.rb +23 -22
- data/manual/outline/sections_and_pages.rb +24 -25
- data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
- data/manual/repeatable_content/page_numbering.rb +20 -19
- data/manual/repeatable_content/repeatable_content.rb +26 -22
- data/manual/repeatable_content/repeater.rb +18 -19
- data/manual/repeatable_content/stamp.rb +18 -19
- data/manual/security/encryption.rb +8 -11
- data/manual/security/permissions.rb +20 -15
- data/manual/security/security.rb +20 -20
- data/manual/table.rb +16 -0
- data/manual/text/alignment.rb +17 -18
- data/manual/text/color.rb +13 -13
- data/manual/text/column_box.rb +10 -12
- data/manual/text/fallback_fonts.rb +29 -25
- data/manual/text/font.rb +17 -18
- data/manual/text/font_size.rb +21 -22
- data/manual/text/font_style.rb +12 -10
- data/manual/text/formatted_callbacks.rb +36 -26
- data/manual/text/formatted_text.rb +41 -34
- data/manual/text/free_flowing_text.rb +28 -29
- data/manual/text/inline.rb +23 -26
- data/manual/text/kerning_and_character_spacing.rb +20 -21
- data/manual/text/leading.rb +10 -11
- data/manual/text/line_wrapping.rb +40 -21
- data/manual/text/paragraph_indentation.rb +17 -12
- data/manual/text/positioned_text.rb +19 -20
- data/manual/text/registering_families.rb +33 -30
- data/manual/text/rendering_and_color.rb +11 -12
- data/manual/text/right_to_left_text.rb +31 -20
- data/manual/text/rotation.rb +36 -27
- data/manual/text/single_usage.rb +13 -14
- data/manual/text/text.rb +62 -62
- data/manual/text/text_box_excess.rb +22 -19
- data/manual/text/text_box_extensions.rb +21 -18
- data/manual/text/text_box_overflow.rb +28 -21
- data/manual/text/utf8.rb +16 -17
- data/manual/text/win_ansi_charset.rb +29 -26
- data/prawn.gemspec +45 -43
- data/spec/extensions/encoding_helpers.rb +4 -3
- data/spec/prawn/document/bounding_box_spec.rb +550 -0
- data/spec/prawn/document/column_box_spec.rb +75 -0
- data/spec/prawn/document/security_spec.rb +176 -0
- data/spec/prawn/document_annotations_spec.rb +76 -0
- data/spec/prawn/document_destinations_spec.rb +15 -0
- data/spec/prawn/document_grid_spec.rb +99 -0
- data/spec/prawn/document_reference_spec.rb +27 -0
- data/spec/prawn/document_span_spec.rb +44 -0
- data/spec/prawn/document_spec.rb +805 -0
- data/spec/prawn/font_metric_cache_spec.rb +54 -0
- data/spec/prawn/font_spec.rb +544 -0
- data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
- data/spec/prawn/graphics/transparency_spec.rb +81 -0
- data/spec/prawn/graphics_spec.rb +872 -0
- data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
- data/spec/prawn/image_handler_spec.rb +53 -0
- data/spec/prawn/images/jpg_spec.rb +20 -0
- data/spec/prawn/images/png_spec.rb +283 -0
- data/spec/prawn/images_spec.rb +229 -0
- data/spec/prawn/measurements_extensions_spec.rb +24 -0
- data/spec/prawn/outline_spec.rb +512 -0
- data/spec/prawn/repeater_spec.rb +166 -0
- data/spec/prawn/soft_mask_spec.rb +74 -0
- data/spec/prawn/stamp_spec.rb +173 -0
- data/spec/prawn/text/box_spec.rb +1110 -0
- data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
- data/spec/prawn/text/formatted/box_spec.rb +849 -0
- data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
- data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
- data/spec/prawn/text/formatted/parser_spec.rb +697 -0
- data/spec/prawn/text_draw_text_spec.rb +150 -0
- data/spec/prawn/text_rendering_mode_spec.rb +48 -0
- data/spec/prawn/text_spacing_spec.rb +95 -0
- data/spec/prawn/text_spec.rb +603 -0
- data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
- data/spec/prawn/transformation_stack_spec.rb +66 -0
- data/spec/prawn/view_spec.rb +63 -0
- data/spec/prawn_manual_spec.rb +35 -0
- data/spec/spec_helper.rb +22 -21
- data.tar.gz.sig +0 -0
- metadata +168 -307
- metadata.gz.sig +0 -0
- data/README.md +0 -109
- data/data/encodings/win_ansi.txt +0 -29
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/16bit.png +0 -0
- data/data/images/arrow.png +0 -0
- data/data/images/arrow2.png +0 -0
- data/data/images/barcode_issue.png +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/page_white_text.png +0 -0
- data/data/images/pigs.jpg +0 -0
- data/data/images/prawn.png +0 -0
- data/data/images/ruport.png +0 -0
- data/data/images/ruport_data.dat +0 -0
- data/data/images/ruport_transparent.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/data/images/stef.jpg +0 -0
- data/data/images/tru256.bmp +0 -0
- data/data/images/web-links.dat +0 -1
- data/data/images/web-links.png +0 -0
- data/data/pdfs/complex_template.pdf +0 -0
- data/data/pdfs/contains_ttf_font.pdf +0 -0
- data/data/pdfs/encrypted.pdf +0 -0
- data/data/pdfs/form.pdf +1 -819
- data/data/pdfs/hexagon.pdf +0 -61
- data/data/pdfs/indirect_reference.pdf +0 -86
- data/data/pdfs/multipage_template.pdf +0 -127
- data/data/pdfs/nested_pages.pdf +0 -118
- data/data/pdfs/page_without_mediabox.pdf +0 -193
- data/data/pdfs/resources_as_indirect_object.pdf +0 -83
- data/data/pdfs/two_hexagons.pdf +0 -90
- data/data/pdfs/version_1_6.pdf +0 -61
- data/data/shift_jis_text.txt +0 -1
- data/lib/pdf/core/annotations.rb +0 -60
- data/lib/pdf/core/byte_string.rb +0 -9
- data/lib/pdf/core/destinations.rb +0 -90
- data/lib/pdf/core/document_state.rb +0 -78
- data/lib/pdf/core/filter_list.rb +0 -51
- data/lib/pdf/core/filters.rb +0 -36
- data/lib/pdf/core/graphics_state.rb +0 -68
- data/lib/pdf/core/literal_string.rb +0 -16
- data/lib/pdf/core/name_tree.rb +0 -177
- data/lib/pdf/core/object_store.rb +0 -320
- data/lib/pdf/core/outline.rb +0 -315
- data/lib/pdf/core/page.rb +0 -212
- data/lib/pdf/core/page_geometry.rb +0 -126
- data/lib/pdf/core/pdf_object.rb +0 -124
- data/lib/pdf/core/reference.rb +0 -103
- data/lib/pdf/core/stream.rb +0 -98
- data/lib/pdf/core/text.rb +0 -275
- data/lib/pdf/core.rb +0 -35
- data/lib/prawn/compatibility.rb +0 -91
- data/lib/prawn/document/graphics_state.rb +0 -73
- data/lib/prawn/document/snapshot.rb +0 -89
- data/lib/prawn/font/afm.rb +0 -203
- data/lib/prawn/layout.rb +0 -20
- data/lib/prawn/table/cell/image.rb +0 -70
- data/lib/prawn/table/cell/in_table.rb +0 -27
- data/lib/prawn/table/cell/span_dummy.rb +0 -92
- data/lib/prawn/table/cell/subtable.rb +0 -65
- data/lib/prawn/table/cell/text.rb +0 -153
- data/lib/prawn/table/cell.rb +0 -770
- data/lib/prawn/table/cells.rb +0 -295
- data/lib/prawn/table.rb +0 -643
- data/manual/example_file.rb +0 -116
- data/manual/example_package.rb +0 -53
- data/manual/example_section.rb +0 -46
- data/manual/manual/cover.rb +0 -35
- data/manual/manual/foreword.rb +0 -85
- data/manual/manual/manual.rb +0 -35
- data/manual/syntax_highlight.rb +0 -52
- data/manual/table/basic_block.rb +0 -53
- data/manual/table/before_rendering_page.rb +0 -26
- data/manual/table/cell_border_lines.rb +0 -24
- data/manual/table/cell_borders_and_bg.rb +0 -31
- data/manual/table/cell_dimensions.rb +0 -30
- data/manual/table/cell_text.rb +0 -38
- data/manual/table/column_widths.rb +0 -30
- data/manual/table/content_and_subtables.rb +0 -39
- data/manual/table/creation.rb +0 -27
- data/manual/table/filtering.rb +0 -36
- data/manual/table/flow_and_header.rb +0 -17
- data/manual/table/image_cells.rb +0 -33
- data/manual/table/position.rb +0 -29
- data/manual/table/row_colors.rb +0 -20
- data/manual/table/span.rb +0 -30
- data/manual/table/style.rb +0 -22
- data/manual/table/table.rb +0 -52
- data/manual/table/width.rb +0 -27
- data/manual/templates/full_template.rb +0 -25
- data/manual/templates/page_template.rb +0 -48
- data/manual/templates/templates.rb +0 -27
- data/manual/text/group.rb +0 -29
- data/spec/acceptance/png.rb +0 -23
- data/spec/annotations_spec.rb +0 -74
- data/spec/bounding_box_spec.rb +0 -493
- data/spec/cell_spec.rb +0 -628
- data/spec/column_box_spec.rb +0 -33
- data/spec/destinations_spec.rb +0 -15
- data/spec/document_spec.rb +0 -761
- data/spec/extensions/mocha.rb +0 -44
- data/spec/filters_spec.rb +0 -34
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -464
- data/spec/formatted_text_arranger_spec.rb +0 -421
- data/spec/formatted_text_box_spec.rb +0 -650
- data/spec/formatted_text_fragment_spec.rb +0 -298
- data/spec/graphics_spec.rb +0 -651
- data/spec/grid_spec.rb +0 -85
- data/spec/image_handler_spec.rb +0 -42
- data/spec/images_spec.rb +0 -157
- data/spec/inline_formatted_text_parser_spec.rb +0 -564
- data/spec/jpg_spec.rb +0 -25
- data/spec/line_wrap_spec.rb +0 -333
- data/spec/measurement_units_spec.rb +0 -23
- data/spec/name_tree_spec.rb +0 -112
- data/spec/object_store_spec.rb +0 -170
- data/spec/outline_spec.rb +0 -448
- data/spec/pdf_object_spec.rb +0 -172
- data/spec/png_spec.rb +0 -240
- data/spec/reference_spec.rb +0 -82
- data/spec/repeater_spec.rb +0 -158
- data/spec/security_spec.rb +0 -158
- data/spec/snapshot_spec.rb +0 -186
- data/spec/soft_mask_spec.rb +0 -117
- data/spec/span_spec.rb +0 -44
- data/spec/stamp_spec.rb +0 -158
- data/spec/stream_spec.rb +0 -58
- data/spec/stroke_styles_spec.rb +0 -211
- data/spec/table/span_dummy_spec.rb +0 -17
- data/spec/table_spec.rb +0 -1355
- data/spec/template_spec.rb +0 -351
- data/spec/text_at_spec.rb +0 -130
- data/spec/text_box_spec.rb +0 -1030
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -425
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -89
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# We have already seen how to define an outline tree sequentially.
|
4
4
|
#
|
5
5
|
# If you'd like to add nodes to the middle of an outline tree the
|
@@ -16,46 +16,45 @@
|
|
16
16
|
#
|
17
17
|
# If the parent title provided is the title of a page. The page will be
|
18
18
|
# converted into a section to receive the subsection created.
|
19
|
-
|
20
|
-
|
21
|
-
%w[.. example_helper]))
|
19
|
+
|
20
|
+
require_relative '../example_helper'
|
22
21
|
|
23
22
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
24
|
-
Prawn::Example.generate(filename) do
|
23
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
25
24
|
# First we create 10 pages and some default outline
|
26
25
|
(1..10).each do |index|
|
27
26
|
text "Page #{index}"
|
28
27
|
start_new_page
|
29
28
|
end
|
30
|
-
|
29
|
+
|
31
30
|
outline.define do
|
32
|
-
section(
|
33
|
-
page :
|
34
|
-
page :
|
31
|
+
section('Section 1', destination: 1) do
|
32
|
+
page title: 'Page 2', destination: 2
|
33
|
+
page title: 'Page 3', destination: 3
|
35
34
|
end
|
36
35
|
end
|
37
|
-
|
36
|
+
|
38
37
|
# Now we will start adding nodes to the previous outline
|
39
|
-
outline.add_subsection_to(
|
40
|
-
outline.section(
|
41
|
-
outline.page :
|
42
|
-
outline.page :
|
38
|
+
outline.add_subsection_to('Section 1', :first) do
|
39
|
+
outline.section('Added later - first position') do
|
40
|
+
outline.page title: 'Page 4', destination: 4
|
41
|
+
outline.page title: 'Page 5', destination: 5
|
43
42
|
end
|
44
43
|
end
|
45
|
-
|
46
|
-
outline.add_subsection_to(
|
47
|
-
outline.page :
|
48
|
-
:
|
44
|
+
|
45
|
+
outline.add_subsection_to('Section 1') do
|
46
|
+
outline.page title: 'Added later - last position',
|
47
|
+
destination: 6
|
49
48
|
end
|
50
|
-
|
51
|
-
outline.add_subsection_to(
|
52
|
-
outline.page :
|
53
|
-
:
|
49
|
+
|
50
|
+
outline.add_subsection_to('Added later - first position') do
|
51
|
+
outline.page title: 'Another page added later',
|
52
|
+
destination: 7
|
54
53
|
end
|
55
|
-
|
54
|
+
|
56
55
|
# The title provided is for a page which will be converted into a section
|
57
|
-
outline.add_subsection_to(
|
58
|
-
outline.page :
|
59
|
-
:
|
56
|
+
outline.add_subsection_to('Page 3') do
|
57
|
+
outline.page title: 'Last page added',
|
58
|
+
destination: 8
|
60
59
|
end
|
61
60
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Another way to insert nodes into an existing outline is the
|
4
4
|
# <code>insert_section_after</code> method.
|
5
5
|
#
|
@@ -8,40 +8,39 @@
|
|
8
8
|
#
|
9
9
|
# As is the case with <code>add_subsection_to</code> the section added
|
10
10
|
# doesn't need to be a section, it may be just a page.
|
11
|
-
|
12
|
-
|
13
|
-
%w[.. example_helper]))
|
11
|
+
|
12
|
+
require_relative '../example_helper'
|
14
13
|
|
15
14
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
|
-
Prawn::Example.generate(filename) do
|
15
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
17
16
|
# First we create 10 pages and some default outline
|
18
17
|
(1..10).each do |index|
|
19
18
|
text "Page #{index}"
|
20
19
|
start_new_page
|
21
20
|
end
|
22
|
-
|
21
|
+
|
23
22
|
outline.define do
|
24
|
-
section(
|
25
|
-
page :
|
26
|
-
page :
|
23
|
+
section('Section 1', destination: 1) do
|
24
|
+
page title: 'Page 2', destination: 2
|
25
|
+
page title: 'Page 3', destination: 3
|
27
26
|
end
|
28
27
|
end
|
29
|
-
|
28
|
+
|
30
29
|
# Now we will start adding nodes to the previous outline
|
31
|
-
outline.insert_section_after(
|
32
|
-
outline.section(
|
33
|
-
outline.page :
|
30
|
+
outline.insert_section_after('Page 2') do
|
31
|
+
outline.section('Section after Page 2') do
|
32
|
+
outline.page title: 'Page 4', destination: 4
|
34
33
|
end
|
35
34
|
end
|
36
35
|
|
37
|
-
outline.insert_section_after(
|
38
|
-
outline.section(
|
39
|
-
outline.page :
|
36
|
+
outline.insert_section_after('Section 1') do
|
37
|
+
outline.section('Section after Section 1') do
|
38
|
+
outline.page title: 'Page 5', destination: 5
|
40
39
|
end
|
41
40
|
end
|
42
|
-
|
41
|
+
|
43
42
|
# Adding just a page
|
44
|
-
outline.insert_section_after(
|
45
|
-
outline.page :
|
43
|
+
outline.insert_section_after('Page 3') do
|
44
|
+
outline.page title: 'Page after Page 3', destination: 6
|
46
45
|
end
|
47
46
|
end
|
data/manual/outline/outline.rb
CHANGED
@@ -1,32 +1,33 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Examples for defining the document outline.
|
4
|
-
#
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
%w[.. example_helper]))
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
p.section
|
13
|
-
s.example
|
5
|
+
require_relative '../example_helper'
|
6
|
+
|
7
|
+
Prawn::ManualBuilder::Example.generate('outline.pdf', page_size: 'FOLIO') do
|
8
|
+
package 'outline' do |p|
|
9
|
+
p.section 'Basics' do |s|
|
10
|
+
s.example 'sections_and_pages', eval_source: false
|
14
11
|
end
|
15
|
-
|
16
|
-
p.section
|
17
|
-
s.example
|
18
|
-
s.example
|
12
|
+
|
13
|
+
p.section 'Adding nodes later' do |s|
|
14
|
+
s.example 'add_subsection_to', eval_source: false
|
15
|
+
s.example 'insert_section_after', eval_source: false
|
19
16
|
end
|
20
|
-
|
17
|
+
|
21
18
|
p.intro do
|
22
|
-
prose
|
19
|
+
prose <<-TEXT
|
20
|
+
The outline of a PDF document is the table of contents tab you see to
|
21
|
+
the right or left of your PDF viewer.
|
23
22
|
|
24
|
-
|
23
|
+
The examples include:
|
24
|
+
TEXT
|
25
25
|
|
26
|
-
list(
|
27
|
-
|
28
|
-
|
26
|
+
list(
|
27
|
+
'How to define sections and pages',
|
28
|
+
'How to insert sections and/or pages to a previously defined outline '\
|
29
|
+
'structure'
|
30
|
+
)
|
29
31
|
end
|
30
|
-
|
31
32
|
end
|
32
33
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# The document outline tree is the set of links used to navigate through the
|
4
4
|
# various document sections and pages.
|
5
5
|
#
|
@@ -23,45 +23,44 @@
|
|
23
23
|
# <code>section</code> and <code>page</code> may also be used without the
|
24
24
|
# <code>define</code> method but they will need to instantiate the
|
25
25
|
# <code>outline</code> object every time.
|
26
|
-
|
27
|
-
|
28
|
-
%w[.. example_helper]))
|
26
|
+
|
27
|
+
require_relative '../example_helper'
|
29
28
|
|
30
29
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
31
|
-
Prawn::Example.generate(filename) do
|
30
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
32
31
|
# First we create 10 pages just to have something to link to
|
33
32
|
(1..10).each do |index|
|
34
33
|
text "Page #{index}"
|
35
34
|
start_new_page
|
36
35
|
end
|
37
|
-
|
36
|
+
|
38
37
|
outline.define do
|
39
|
-
section(
|
40
|
-
page :
|
41
|
-
page :
|
38
|
+
section('Section 1', destination: 1) do
|
39
|
+
page title: 'Page 2', destination: 2
|
40
|
+
page title: 'Page 3', destination: 3
|
42
41
|
end
|
43
|
-
|
44
|
-
section(
|
45
|
-
page :
|
46
|
-
|
47
|
-
section(
|
48
|
-
page :
|
42
|
+
|
43
|
+
section('Section 2', destination: 4) do
|
44
|
+
page title: 'Page 5', destination: 5
|
45
|
+
|
46
|
+
section('Subsection 2.1', destination: 6, closed: true) do
|
47
|
+
page title: 'Page 7', destination: 7
|
49
48
|
end
|
50
49
|
end
|
51
50
|
end
|
52
|
-
|
51
|
+
|
53
52
|
# Outside of the define block
|
54
|
-
outline.section(
|
55
|
-
outline.page :
|
53
|
+
outline.section('Section 3', destination: 8) do
|
54
|
+
outline.page title: 'Page 9', destination: 9
|
56
55
|
end
|
57
|
-
|
58
|
-
outline.page :
|
59
|
-
|
56
|
+
|
57
|
+
outline.page title: 'Page 10', destination: 10
|
58
|
+
|
60
59
|
# Section and Pages without links. While a section without a link may be
|
61
60
|
# useful to group some pages, a page without a link is useless
|
62
|
-
outline.update do
|
63
|
-
section(
|
64
|
-
page :
|
61
|
+
outline.update do # update is an alias to define
|
62
|
+
section('Section without link') do
|
63
|
+
page title: 'Page without link'
|
65
64
|
end
|
66
65
|
end
|
67
66
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Below is the code to generate page numbers that alternate being rendered
|
4
|
+
# on the right and left side of the page. The first page will have a "1" in
|
5
|
+
# the bottom right corner. The second page will have a "2" in the bottom
|
6
|
+
# left corner of the page. The third a "3" in the bottom right, etc.
|
7
|
+
|
8
|
+
require_relative '../example_helper'
|
9
|
+
|
10
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
12
|
+
text 'This is the first page!'
|
13
|
+
|
14
|
+
10.times do
|
15
|
+
start_new_page
|
16
|
+
text 'Here comes yet another page.'
|
17
|
+
end
|
18
|
+
|
19
|
+
string = '<page>'
|
20
|
+
odd_options = {
|
21
|
+
at: [bounds.right - 150, 0],
|
22
|
+
width: 150,
|
23
|
+
align: :right,
|
24
|
+
page_filter: :odd,
|
25
|
+
start_count_at: 1
|
26
|
+
}
|
27
|
+
even_options = {
|
28
|
+
at: [0, bounds.left],
|
29
|
+
width: 150,
|
30
|
+
align: :left,
|
31
|
+
page_filter: :even,
|
32
|
+
start_count_at: 2
|
33
|
+
}
|
34
|
+
number_pages string, odd_options
|
35
|
+
number_pages string, even_options
|
36
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# The <code>number_pages</code> method is a simple way to number the pages of
|
4
4
|
# your document. It should be called towards the end of the document since
|
5
5
|
# pages created after the call won't be numbered.
|
@@ -20,35 +20,36 @@
|
|
20
20
|
# <code>color</code> which accepts the same values as <code>fill_color</code>
|
21
21
|
#
|
22
22
|
# As well as any option accepted by <code>text_box</code>
|
23
|
-
|
24
|
-
|
25
|
-
%w[.. example_helper]))
|
23
|
+
|
24
|
+
require_relative '../example_helper'
|
26
25
|
|
27
26
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
28
|
-
Prawn::Example.generate(filename) do
|
29
|
-
text
|
30
|
-
|
27
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
28
|
+
text 'This is the first page!'
|
29
|
+
|
31
30
|
10.times do
|
32
31
|
start_new_page
|
33
|
-
text
|
32
|
+
text 'Here comes yet another page.'
|
34
33
|
end
|
35
34
|
|
36
|
-
string =
|
35
|
+
string = 'page <page> of <total>'
|
37
36
|
# Green page numbers 1 to 7
|
38
|
-
options = {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
options = {
|
38
|
+
at: [bounds.right - 150, 0],
|
39
|
+
width: 150,
|
40
|
+
align: :right,
|
41
|
+
page_filter: (1..7),
|
42
|
+
start_count_at: 1,
|
43
|
+
color: '007700'
|
44
|
+
}
|
44
45
|
number_pages string, options
|
45
46
|
|
46
47
|
# Gray page numbers from 8 on up
|
47
|
-
options[:page_filter]
|
48
|
+
options[:page_filter] = ->(pg) { pg > 7 }
|
48
49
|
options[:start_count_at] = 8
|
49
|
-
options[:color]
|
50
|
+
options[:color] = '333333'
|
50
51
|
number_pages string, options
|
51
|
-
|
52
|
+
|
52
53
|
start_new_page
|
53
54
|
text "See. This page isn't numbered and doesn't count towards the total."
|
54
55
|
end
|
@@ -1,31 +1,35 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Examples for stamps and repeaters.
|
4
|
-
#
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
%w[.. example_helper]))
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
p.example
|
14
|
-
p.example
|
15
|
-
|
5
|
+
require_relative '../example_helper'
|
6
|
+
|
7
|
+
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
8
|
+
Prawn::ManualBuilder::Example.generate(filename, page_size: 'FOLIO') do
|
9
|
+
package 'repeatable_content' do |p|
|
10
|
+
p.example 'repeater', eval_source: false
|
11
|
+
p.example 'stamp'
|
12
|
+
p.example 'page_numbering', eval_source: false
|
13
|
+
p.example 'alternate_page_numbering', eval_source: false
|
14
|
+
|
16
15
|
p.intro do
|
17
|
-
prose
|
16
|
+
prose <<-TEXT
|
17
|
+
Prawn offers two ways to handle repeatable content blocks. Repeater is
|
18
|
+
useful for content that gets repeated at well defined intervals while
|
19
|
+
Stamp is more appropriate if you need better control of when to repeat
|
20
|
+
it.
|
18
21
|
|
19
|
-
|
22
|
+
There is also one very specific helper for numbering pages.
|
20
23
|
|
21
|
-
|
24
|
+
The examples show:
|
25
|
+
TEXT
|
22
26
|
|
23
|
-
list(
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
list(
|
28
|
+
'How to repeat content on several pages with a single invocation',
|
29
|
+
'How to create a new Stamp',
|
30
|
+
'How to "stamp" the content block on the page',
|
31
|
+
'How to number the document pages with one simple call'
|
32
|
+
)
|
28
33
|
end
|
29
|
-
|
30
34
|
end
|
31
35
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# The <code>repeat</code> method is quite versatile when it comes to define
|
4
4
|
# the intervals at which the content block should repeat.
|
5
5
|
#
|
@@ -14,42 +14,41 @@
|
|
14
14
|
#
|
15
15
|
# It is also important to say that no matter where you define the repeater it
|
16
16
|
# will be applied to all matching pages.
|
17
|
-
|
18
|
-
|
19
|
-
%w[.. example_helper]))
|
17
|
+
|
18
|
+
require_relative '../example_helper'
|
20
19
|
|
21
20
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
22
|
-
Prawn::Example.generate(filename) do
|
21
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
23
22
|
repeat(:all) do
|
24
|
-
draw_text
|
23
|
+
draw_text 'All pages', at: bounds.top_left
|
25
24
|
end
|
26
25
|
|
27
26
|
repeat(:odd) do
|
28
|
-
draw_text
|
27
|
+
draw_text 'Only odd pages', at: [0, 0]
|
29
28
|
end
|
30
29
|
|
31
30
|
repeat(:even) do
|
32
|
-
draw_text
|
31
|
+
draw_text 'Only even pages', at: [0, 0]
|
33
32
|
end
|
34
33
|
|
35
|
-
repeat([1,3,7]) do
|
36
|
-
draw_text
|
34
|
+
repeat([1, 3, 7]) do
|
35
|
+
draw_text 'Only on pages 1, 3 and 7', at: [100, 0]
|
37
36
|
end
|
38
37
|
|
39
38
|
repeat(2..4) do
|
40
|
-
draw_text
|
39
|
+
draw_text 'From the 2nd to the 4th page', at: [300, 0]
|
41
40
|
end
|
42
41
|
|
43
|
-
repeat(
|
44
|
-
draw_text
|
42
|
+
repeat(->(pg) { (pg % 3).zero? }) do
|
43
|
+
draw_text 'Every third page', at: [250, 20]
|
45
44
|
end
|
46
|
-
|
47
|
-
repeat(:all, :
|
48
|
-
draw_text page_number, :
|
45
|
+
|
46
|
+
repeat(:all, dynamic: true) do
|
47
|
+
draw_text page_number, at: [500, 0]
|
49
48
|
end
|
50
49
|
|
51
|
-
10.times do
|
50
|
+
10.times do
|
52
51
|
start_new_page
|
53
|
-
draw_text
|
52
|
+
draw_text 'A wonderful page', at: [400, 400]
|
54
53
|
end
|
55
54
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Stamps should be used when you have content that will be included multiple
|
4
4
|
# times in a document. Its advantages over creating the content anew each time
|
5
5
|
# are:
|
@@ -15,27 +15,26 @@
|
|
15
15
|
# There are two methods to render the stamp on a page <code>stamp</code> and
|
16
16
|
# <code>stamp_at</code>. The first will render the stamp as is while the
|
17
17
|
# second accepts a point to serve as an offset to the stamp content.
|
18
|
-
|
19
|
-
|
20
|
-
%w[.. example_helper]))
|
18
|
+
|
19
|
+
require_relative '../example_helper'
|
21
20
|
|
22
21
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
23
|
-
Prawn::Example.generate(filename) do
|
24
|
-
create_stamp(
|
25
|
-
rotate(30, :
|
26
|
-
stroke_color
|
22
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
23
|
+
create_stamp('approved') do
|
24
|
+
rotate(30, origin: [-5, -5]) do
|
25
|
+
stroke_color 'FF3333'
|
27
26
|
stroke_ellipse [0, 0], 29, 15
|
28
|
-
stroke_color
|
29
|
-
|
30
|
-
fill_color
|
31
|
-
font(
|
32
|
-
draw_text
|
27
|
+
stroke_color '000000'
|
28
|
+
|
29
|
+
fill_color '993333'
|
30
|
+
font('Times-Roman') do
|
31
|
+
draw_text 'Approved', at: [-23, -3]
|
33
32
|
end
|
34
|
-
fill_color
|
33
|
+
fill_color '000000'
|
35
34
|
end
|
36
35
|
end
|
37
|
-
|
38
|
-
stamp
|
39
|
-
|
40
|
-
stamp_at
|
36
|
+
|
37
|
+
stamp 'approved'
|
38
|
+
|
39
|
+
stamp_at 'approved', [200, 200]
|
41
40
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# The <code>encrypt_document</code> method, as you might have already guessed,
|
4
4
|
# is used to encrypt the PDF document.
|
5
5
|
#
|
@@ -12,20 +12,17 @@
|
|
12
12
|
# documentation (you can find it here:
|
13
13
|
# https://github.com/prawnpdf/prawn/blob/master/lib/prawn/security.rb ) before
|
14
14
|
# using this for anything super serious.
|
15
|
-
#
|
16
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
17
|
-
%w[.. example_helper]))
|
18
15
|
|
16
|
+
require_relative '../example_helper'
|
19
17
|
|
20
18
|
# Bare encryption. No password needed.
|
21
|
-
Prawn::Example.generate(
|
22
|
-
text
|
19
|
+
Prawn::ManualBuilder::Example.generate('bare_encryption.pdf') do
|
20
|
+
text 'See, no password was asked but the document is still encrypted.'
|
23
21
|
encrypt_document
|
24
22
|
end
|
25
23
|
|
26
|
-
|
27
24
|
# Simple password. All permissions granted.
|
28
|
-
Prawn::Example.generate(
|
29
|
-
text
|
30
|
-
encrypt_document(:
|
25
|
+
Prawn::ManualBuilder::Example.generate('simple_password.pdf') do
|
26
|
+
text 'You was asked for a password.'
|
27
|
+
encrypt_document(user_password: 'foo', owner_password: 'bar')
|
31
28
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Some permissions may be set for the regular user with the following options:
|
4
4
|
# <code>:print_document</code>, <code>:modify_contents</code>,
|
5
5
|
# <code>:copy_contents</code>, <code>:modify_annotations</code>. All this
|
@@ -14,25 +14,30 @@
|
|
14
14
|
# documentation (you can find it here:
|
15
15
|
# https://github.com/prawnpdf/prawn/blob/master/lib/prawn/security.rb ) before
|
16
16
|
# using this for anything super serious.
|
17
|
-
#
|
18
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
19
|
-
%w[.. example_helper]))
|
20
17
|
|
18
|
+
require_relative '../example_helper'
|
21
19
|
|
22
20
|
# User cannot print the document.
|
23
|
-
Prawn::Example.generate(
|
21
|
+
Prawn::ManualBuilder::Example.generate('cannot_print.pdf') do
|
24
22
|
text "If you used the user password you won't be able to print the doc."
|
25
|
-
encrypt_document(
|
26
|
-
|
23
|
+
encrypt_document(
|
24
|
+
user_password: 'foo',
|
25
|
+
owner_password: 'bar',
|
26
|
+
permissions: { print_document: false }
|
27
|
+
)
|
27
28
|
end
|
28
29
|
|
29
|
-
|
30
30
|
# All permissions revoked and owner password set to random
|
31
|
-
Prawn::Example.generate(
|
31
|
+
Prawn::ManualBuilder::Example.generate('no_permissions.pdf') do
|
32
32
|
text "You may only view this and won't be able to use the owner password."
|
33
|
-
encrypt_document(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
encrypt_document(
|
34
|
+
user_password: 'foo',
|
35
|
+
owner_password: :random,
|
36
|
+
permissions: {
|
37
|
+
print_document: false,
|
38
|
+
modify_contents: false,
|
39
|
+
copy_contents: false,
|
40
|
+
modify_annotations: false
|
41
|
+
}
|
42
|
+
)
|
38
43
|
end
|