prawn 1.1.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.yardopts +1 -0
- data/GPLv2 +20 -21
- data/Gemfile +3 -9
- data/Rakefile +9 -40
- data/lib/prawn/document/bounding_box.rb +54 -40
- data/lib/prawn/document/column_box.rb +8 -10
- data/lib/prawn/document/internals.rb +39 -146
- data/lib/prawn/document/span.rb +23 -17
- data/lib/prawn/document.rb +217 -182
- data/lib/prawn/encoding.rb +69 -101
- data/lib/prawn/errors.rb +47 -43
- data/lib/prawn/font.rb +124 -104
- data/lib/prawn/font_metric_cache.rb +23 -21
- data/lib/prawn/fonts/afm.rb +292 -0
- data/lib/prawn/{font → fonts}/dfont.rb +5 -12
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/fonts/ttc.rb +36 -0
- data/lib/prawn/{font → fonts}/ttf.rb +140 -88
- data/lib/prawn/graphics/blend_mode.rb +65 -0
- data/lib/prawn/graphics/cap_style.rb +5 -5
- data/lib/prawn/graphics/color.rb +46 -44
- data/lib/prawn/graphics/dash.rb +27 -11
- data/lib/prawn/graphics/join_style.rb +11 -6
- data/lib/prawn/graphics/patterns.rb +220 -78
- data/lib/prawn/graphics/transformation.rb +20 -12
- data/lib/prawn/graphics/transparency.rb +20 -18
- data/lib/prawn/graphics.rb +153 -115
- data/lib/prawn/grid.rb +93 -50
- data/lib/prawn/image_handler.rb +4 -4
- data/lib/prawn/images/image.rb +3 -2
- data/lib/prawn/images/jpg.rb +31 -24
- data/lib/prawn/images/png.rb +101 -68
- data/lib/prawn/images.rb +64 -56
- data/lib/prawn/measurement_extensions.rb +10 -9
- data/lib/prawn/measurements.rb +20 -23
- data/lib/prawn/outline.rb +96 -75
- data/lib/prawn/repeater.rb +16 -16
- data/lib/prawn/security/arcfour.rb +2 -2
- data/lib/prawn/security.rb +100 -85
- data/lib/prawn/soft_mask.rb +37 -38
- data/lib/prawn/stamp.rb +28 -13
- data/lib/prawn/text/box.rb +24 -29
- data/lib/prawn/text/formatted/arranger.rb +108 -63
- data/lib/prawn/text/formatted/box.rb +187 -124
- data/lib/prawn/text/formatted/fragment.rb +24 -20
- data/lib/prawn/text/formatted/line_wrap.rb +133 -73
- data/lib/prawn/text/formatted/parser.rb +147 -127
- data/lib/prawn/text/formatted/wrap.rb +48 -35
- data/lib/prawn/text/formatted.rb +5 -5
- data/lib/prawn/text.rb +103 -68
- data/lib/prawn/transformation_stack.rb +44 -0
- data/lib/prawn/utilities.rb +10 -22
- data/lib/prawn/version.rb +5 -0
- data/lib/prawn/view.rb +101 -0
- data/lib/prawn.rb +39 -54
- data/manual/basic_concepts/adding_pages.rb +6 -7
- data/manual/basic_concepts/basic_concepts.rb +34 -25
- data/manual/basic_concepts/creation.rb +10 -11
- data/manual/basic_concepts/cursor.rb +4 -5
- data/manual/basic_concepts/measurement.rb +8 -9
- data/manual/basic_concepts/origin.rb +5 -6
- data/manual/basic_concepts/other_cursor_helpers.rb +11 -12
- data/manual/basic_concepts/view.rb +48 -0
- data/manual/bounding_box/bounding_box.rb +30 -28
- data/manual/bounding_box/bounds.rb +12 -13
- data/manual/bounding_box/canvas.rb +7 -8
- data/manual/bounding_box/creation.rb +6 -7
- data/manual/bounding_box/indentation.rb +14 -15
- data/manual/bounding_box/nesting.rb +25 -18
- data/manual/bounding_box/russian_boxes.rb +18 -18
- data/manual/bounding_box/stretchy.rb +12 -14
- data/manual/contents.rb +28 -22
- data/manual/cover.rb +33 -32
- data/manual/document_and_page_options/background.rb +15 -13
- data/manual/document_and_page_options/document_and_page_options.rb +24 -22
- data/manual/document_and_page_options/metadata.rb +20 -18
- data/manual/document_and_page_options/page_margins.rb +18 -20
- data/manual/document_and_page_options/page_size.rb +13 -13
- data/manual/document_and_page_options/print_scaling.rb +18 -15
- data/manual/example_helper.rb +5 -4
- data/manual/graphics/blend_mode.rb +52 -0
- data/manual/graphics/circle_and_ellipse.rb +4 -5
- data/manual/graphics/color.rb +7 -9
- data/manual/graphics/common_lines.rb +7 -8
- data/manual/graphics/fill_and_stroke.rb +5 -6
- data/manual/graphics/fill_rules.rb +12 -11
- data/manual/graphics/gradients.rb +27 -21
- data/manual/graphics/graphics.rb +46 -40
- data/manual/graphics/helper.rb +19 -9
- data/manual/graphics/line_width.rb +8 -7
- data/manual/graphics/lines_and_curves.rb +8 -9
- data/manual/graphics/polygon.rb +6 -8
- data/manual/graphics/rectangle.rb +4 -5
- data/manual/graphics/rotate.rb +6 -9
- data/manual/graphics/scale.rb +14 -13
- data/manual/graphics/soft_masks.rb +4 -6
- data/manual/graphics/stroke_cap.rb +7 -8
- data/manual/graphics/stroke_dash.rb +15 -16
- data/manual/graphics/stroke_join.rb +6 -7
- data/manual/graphics/translate.rb +10 -10
- data/manual/graphics/transparency.rb +7 -9
- data/manual/how_to_read_this_manual.rb +8 -9
- data/manual/images/absolute_position.rb +6 -7
- data/manual/images/fit.rb +7 -8
- data/manual/images/horizontal.rb +10 -11
- data/manual/images/images.rb +28 -27
- data/manual/images/plain_image.rb +5 -6
- data/manual/images/scale.rb +9 -10
- data/manual/images/vertical.rb +16 -14
- data/manual/images/width_and_height.rb +10 -11
- data/manual/layout/boxes.rb +10 -11
- data/manual/layout/content.rb +9 -10
- data/manual/layout/layout.rb +17 -18
- data/manual/layout/simple_grid.rb +6 -7
- data/manual/outline/add_subsection_to.rb +20 -21
- data/manual/outline/insert_section_after.rb +15 -16
- data/manual/outline/outline.rb +22 -21
- data/manual/outline/sections_and_pages.rb +17 -18
- data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
- data/manual/repeatable_content/page_numbering.rb +17 -16
- data/manual/repeatable_content/repeatable_content.rb +27 -23
- data/manual/repeatable_content/repeater.rb +15 -16
- data/manual/repeatable_content/stamp.rb +14 -15
- data/manual/security/encryption.rb +8 -11
- data/manual/security/permissions.rb +20 -15
- data/manual/security/security.rb +18 -18
- data/manual/table.rb +16 -0
- data/manual/text/alignment.rb +16 -17
- data/manual/text/color.rb +12 -12
- data/manual/text/column_box.rb +9 -11
- data/manual/text/fallback_fonts.rb +25 -21
- data/manual/text/font.rb +11 -12
- data/manual/text/font_size.rb +13 -14
- data/manual/text/font_style.rb +10 -8
- data/manual/text/formatted_callbacks.rb +33 -23
- data/manual/text/formatted_text.rb +36 -25
- data/manual/text/free_flowing_text.rb +22 -23
- data/manual/text/inline.rb +18 -19
- data/manual/text/kerning_and_character_spacing.rb +14 -15
- data/manual/text/leading.rb +7 -8
- data/manual/text/line_wrapping.rb +37 -18
- data/manual/text/paragraph_indentation.rb +15 -10
- data/manual/text/positioned_text.rb +16 -17
- data/manual/text/registering_families.rb +27 -24
- data/manual/text/rendering_and_color.rb +9 -10
- data/manual/text/right_to_left_text.rb +30 -19
- data/manual/text/rotation.rb +33 -24
- data/manual/text/single_usage.rb +8 -9
- data/manual/text/text.rb +56 -54
- data/manual/text/text_box_excess.rb +20 -17
- data/manual/text/text_box_extensions.rb +18 -15
- data/manual/text/text_box_overflow.rb +24 -17
- data/manual/text/utf8.rb +12 -13
- data/manual/text/win_ansi_charset.rb +28 -25
- data/prawn.gemspec +45 -50
- data/spec/extensions/encoding_helpers.rb +3 -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 +19 -25
- data.tar.gz.sig +0 -0
- metadata +113 -276
- metadata.gz.sig +0 -0
- data/data/encodings/win_ansi.txt +0 -29
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.color +0 -0
- data/data/images/16bit.png +0 -0
- data/data/images/arrow.png +0 -0
- data/data/images/arrow2.png +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.color +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/fractal.jpg +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/license.md +0 -8
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.color +0 -0
- data/data/images/page_white_text.png +0 -0
- data/data/images/pigs.jpg +0 -0
- data/data/images/prawn.png +0 -0
- data/data/images/ruport.png +0 -0
- data/data/images/ruport_data.dat +0 -0
- data/data/images/ruport_transparent.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/data/images/stef.jpg +0 -0
- data/data/images/tru256.bmp +0 -0
- data/data/images/web-links.dat +0 -1
- data/data/images/web-links.png +0 -0
- data/data/pdfs/complex_template.pdf +0 -0
- data/data/pdfs/contains_ttf_font.pdf +0 -0
- data/data/pdfs/encrypted.pdf +0 -0
- data/data/pdfs/form.pdf +1 -819
- data/data/pdfs/hexagon.pdf +0 -61
- data/data/pdfs/indirect_reference.pdf +0 -86
- data/data/pdfs/multipage_template.pdf +0 -127
- data/data/pdfs/nested_pages.pdf +0 -118
- data/data/pdfs/page_without_mediabox.pdf +0 -193
- data/data/pdfs/resources_as_indirect_object.pdf +0 -83
- data/data/pdfs/two_hexagons.pdf +0 -90
- data/data/pdfs/version_1_6.pdf +0 -61
- data/data/shift_jis_text.txt +0 -1
- data/lib/prawn/document/graphics_state.rb +0 -73
- data/lib/prawn/font/afm.rb +0 -247
- data/lib/prawn/table/cell/image.rb +0 -69
- data/lib/prawn/table/cell/in_table.rb +0 -33
- data/lib/prawn/table/cell/span_dummy.rb +0 -93
- data/lib/prawn/table/cell/subtable.rb +0 -66
- data/lib/prawn/table/cell/text.rb +0 -154
- data/lib/prawn/table/cell.rb +0 -772
- data/lib/prawn/table/cells.rb +0 -255
- data/lib/prawn/table/column_width_calculator.rb +0 -182
- data/lib/prawn/table.rb +0 -644
- 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/spec/acceptance/png.rb +0 -25
- data/spec/annotations_spec.rb +0 -74
- data/spec/bounding_box_spec.rb +0 -510
- data/spec/cell_spec.rb +0 -629
- data/spec/column_box_spec.rb +0 -65
- data/spec/destinations_spec.rb +0 -15
- data/spec/document_spec.rb +0 -730
- data/spec/extensions/mocha.rb +0 -46
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -449
- data/spec/formatted_text_arranger_spec.rb +0 -421
- data/spec/formatted_text_box_spec.rb +0 -639
- data/spec/formatted_text_fragment_spec.rb +0 -298
- data/spec/graphics_spec.rb +0 -669
- data/spec/grid_spec.rb +0 -96
- data/spec/image_handler_spec.rb +0 -54
- data/spec/images_spec.rb +0 -153
- data/spec/inline_formatted_text_parser_spec.rb +0 -564
- data/spec/jpg_spec.rb +0 -25
- data/spec/line_wrap_spec.rb +0 -344
- data/spec/measurement_units_spec.rb +0 -25
- data/spec/outline_spec.rb +0 -430
- data/spec/png_spec.rb +0 -237
- data/spec/reference_spec.rb +0 -25
- data/spec/repeater_spec.rb +0 -160
- data/spec/security_spec.rb +0 -158
- data/spec/soft_mask_spec.rb +0 -79
- data/spec/span_spec.rb +0 -44
- data/spec/stamp_spec.rb +0 -160
- data/spec/stroke_styles_spec.rb +0 -211
- data/spec/table/span_dummy_spec.rb +0 -17
- data/spec/table_spec.rb +0 -1527
- data/spec/text_at_spec.rb +0 -115
- data/spec/text_box_spec.rb +0 -1034
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -437
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -91
data/manual/text/inline.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Inline formatting gives you the option to format specific portions of a text.
|
4
4
|
# It uses HTML-esque syntax inside the text string. Supported tags are:
|
5
5
|
# <code>b</code> (bold), <code>i</code> (italic), <code>u</code> (underline),
|
@@ -10,32 +10,31 @@
|
|
10
10
|
# <code>size</code>, <code>name</code>, and <code>character_spacing</code>;
|
11
11
|
# <code>color</code> accepts <code>rgb</code> and <code>cmyk</code>;
|
12
12
|
# <code>link</code> accepts <code>href</code> for external links.
|
13
|
-
|
14
|
-
|
15
|
-
%w[.. example_helper]))
|
13
|
+
|
14
|
+
require_relative '../example_helper'
|
16
15
|
|
17
16
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
18
17
|
Prawn::ManualBuilder::Example.generate(filename) do
|
19
18
|
%w[b i u strikethrough sub sup].each do |tag|
|
20
|
-
text "Just your regular text <#{tag}>except this portion</#{tag}> "
|
21
|
-
|
22
|
-
|
19
|
+
text "Just your regular text <#{tag}>except this portion</#{tag}> " \
|
20
|
+
"is using the #{tag} tag",
|
21
|
+
inline_format: true
|
23
22
|
move_down 10
|
24
23
|
end
|
25
24
|
|
26
|
-
text "This <font size='18'>line</font> uses "
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
text "This <font size='18'>line</font> uses " \
|
26
|
+
"<font name='Courier'>all the font tag</font> attributes in " \
|
27
|
+
"<font character_spacing='2'>a single line</font>. ",
|
28
|
+
inline_format: true
|
30
29
|
move_down 10
|
31
30
|
|
32
|
-
text "Coloring in <color rgb='FF00FF'>both RGB</color> "
|
33
|
-
|
34
|
-
|
31
|
+
text "Coloring in <color rgb='FF00FF'>both RGB</color> " \
|
32
|
+
"<color c='100' m='0' y='0' k='0'>and CMYK</color>",
|
33
|
+
inline_format: true
|
35
34
|
move_down 10
|
36
35
|
|
37
|
-
text
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
text 'This an external link to the ' \
|
37
|
+
"<u><link href='https://github.com/prawnpdf/prawn/wiki'>Prawn wiki" \
|
38
|
+
'</link></u>',
|
39
|
+
inline_format: true
|
41
40
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Kerning is the process of adjusting the spacing between characters in a
|
4
4
|
# proportional font. It is usually done with specific letter pairs. We can
|
5
5
|
# switch it on and off if it is available with the current font. Just pass a
|
@@ -8,32 +8,31 @@
|
|
8
8
|
# Character Spacing is the space between characters. It can be increased or
|
9
9
|
# decreased and will have effect on the whole text. Just pass a number to the
|
10
10
|
# <code>:character_spacing</code> option from the text methods.
|
11
|
-
|
12
|
-
|
13
|
-
%w[.. example_helper]))
|
11
|
+
|
12
|
+
require_relative '../example_helper'
|
14
13
|
|
15
14
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
15
|
Prawn::ManualBuilder::Example.generate(filename) do
|
17
16
|
font_size(30) do
|
18
|
-
text_box
|
19
|
-
text_box
|
17
|
+
text_box 'With kerning:', kerning: true, at: [0, y - 40]
|
18
|
+
text_box 'Without kerning:', kerning: false, at: [0, y - 80]
|
20
19
|
|
21
|
-
text_box
|
22
|
-
text_box
|
20
|
+
text_box 'Tomato', kerning: true, at: [250, y - 40]
|
21
|
+
text_box 'Tomato', kerning: false, at: [250, y - 80]
|
23
22
|
|
24
|
-
text_box
|
25
|
-
text_box
|
23
|
+
text_box 'WAR', kerning: true, at: [400, y - 40]
|
24
|
+
text_box 'WAR', kerning: false, at: [400, y - 80]
|
26
25
|
|
27
|
-
text_box
|
28
|
-
text_box
|
26
|
+
text_box 'F.', kerning: true, at: [500, y - 40]
|
27
|
+
text_box 'F.', kerning: false, at: [500, y - 80]
|
29
28
|
end
|
30
29
|
|
31
30
|
move_down 80
|
32
31
|
|
33
|
-
string =
|
32
|
+
string = 'What have you done to the space between the characters?'
|
34
33
|
[-2, -1, 0, 0.5, 1, 2].each do |spacing|
|
35
34
|
move_down 20
|
36
35
|
text "#{string} (character_spacing: #{spacing})",
|
37
|
-
|
36
|
+
character_spacing: spacing
|
38
37
|
end
|
39
38
|
end
|
data/manual/text/leading.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Leading is the additional space between lines of text.
|
4
4
|
#
|
5
5
|
# The leading can be set using the <code>default_leading</code> method which
|
@@ -7,19 +7,18 @@
|
|
7
7
|
# text methods with the <code>:leading</code> option.
|
8
8
|
#
|
9
9
|
# The default leading is <code>0</code>.
|
10
|
-
|
11
|
-
|
12
|
-
%w[.. example_helper]))
|
10
|
+
|
11
|
+
require_require '../example_helper'
|
13
12
|
|
14
13
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
14
|
Prawn::ManualBuilder::Example.generate(filename) do
|
16
|
-
string =
|
17
|
-
text string, :
|
15
|
+
string = 'Hey, what did you do with the space between my lines? ' * 10
|
16
|
+
text string, leading: 0
|
18
17
|
|
19
18
|
move_down 20
|
20
19
|
default_leading 5
|
21
20
|
text string
|
22
21
|
|
23
22
|
move_down 20
|
24
|
-
text string, :
|
23
|
+
text string, leading: 10
|
25
24
|
end
|
@@ -1,41 +1,60 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Line wrapping happens on white space or hyphens. Soft hyphens can be used to
|
4
4
|
# indicate where words can be hyphenated. Non-breaking spaces can be used to
|
5
5
|
# display space without allowing for a break.
|
6
6
|
#
|
7
7
|
# For writing styles that do not make use of spaces, the zero width space serves
|
8
|
-
# to mark word boundaries. Zero width spaces are available only with
|
9
|
-
#
|
10
|
-
|
11
|
-
|
8
|
+
# to mark word boundaries. Zero width spaces are available only with external
|
9
|
+
# fonts.
|
10
|
+
|
11
|
+
require_relative '../example_helper'
|
12
12
|
|
13
13
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
14
14
|
Prawn::ManualBuilder::Example.generate(filename) do
|
15
|
-
text "Hard hyphens:\n"
|
16
|
-
|
17
|
-
|
15
|
+
text "Hard hyphens:\n" \
|
16
|
+
'Slip-sliding away, slip sliding awaaaay. You know the ' \
|
17
|
+
"nearer your destination the more you're slip-sliding away."
|
18
18
|
move_down 20
|
19
19
|
|
20
20
|
shy = Prawn::Text::SHY
|
21
|
-
text "Soft hyphens:\n"
|
22
|
-
|
23
|
-
|
21
|
+
text "Soft hyphens:\n" \
|
22
|
+
"Slip slid#{shy}ing away, slip slid#{shy}ing away. You know the " \
|
23
|
+
"nearer your destinat#{shy}ion the more you're slip slid#{shy}ing away."
|
24
24
|
move_down 20
|
25
25
|
|
26
26
|
nbsp = Prawn::Text::NBSP
|
27
|
-
text "Non-breaking spaces:\n"
|
28
|
-
|
29
|
-
|
27
|
+
text "Non-breaking spaces:\n" \
|
28
|
+
"Slip#{nbsp}sliding away, slip#{nbsp}sliding awaaaay. You know the " \
|
29
|
+
"nearer your destination the more you're slip#{nbsp}sliding away."
|
30
30
|
move_down 20
|
31
31
|
|
32
|
-
font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf", :
|
33
|
-
long_text = "No word boundaries:\n
|
32
|
+
font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf", size: 16) do
|
33
|
+
long_text = "No word boundaries:\n更可怕的是,"\
|
34
|
+
'同质化竞争对手可以按照URL中后面这个ID来遍历您的DB中的内容,'\
|
35
|
+
'写个小爬虫把你的页面上的关键信息顺次爬下来也不是什么难事,'\
|
36
|
+
'这样的话,你就非常被动了。更可怕的是,'\
|
37
|
+
'同质化竞争对手可以按照URL中后面这个ID来遍历您的DB中的内容,'\
|
38
|
+
'写个小爬虫把你的页面上的关键信息顺次爬下来也不是什么难事,'\
|
39
|
+
'这样的话,你就非常被动了。'
|
34
40
|
text long_text
|
35
41
|
move_down 20
|
36
42
|
|
37
43
|
zwsp = Prawn::Text::ZWSP
|
38
|
-
long_text = "Invisible word boundaries:\n更#{zwsp}可怕的#{zwsp}
|
44
|
+
long_text = "Invisible word boundaries:\n更#{zwsp}可怕的#{zwsp}是,"\
|
45
|
+
"#{zwsp}同质化#{zwsp}竞争#{zwsp}对#{zwsp}手#{zwsp}可以#{zwsp}按照#{zwsp}"\
|
46
|
+
"URL#{zwsp}中#{zwsp}后面#{zwsp}这个#{zwsp}ID#{zwsp}来#{zwsp}遍历#{zwsp}"\
|
47
|
+
"您的#{zwsp}DB#{zwsp}中的#{zwsp}内容,#{zwsp}写个#{zwsp}小爬虫#{zwsp}把"\
|
48
|
+
"#{zwsp}你的#{zwsp}页面#{zwsp}上的#{zwsp}关#{zwsp}键#{zwsp}信#{zwsp}息顺"\
|
49
|
+
"#{zwsp}次#{zwsp}爬#{zwsp}下来#{zwsp}也#{zwsp}不是#{zwsp}什么#{zwsp}"\
|
50
|
+
"难事,#{zwsp}这样的话,#{zwsp}你#{zwsp}就#{zwsp}非常#{zwsp}被动了。"\
|
51
|
+
"#{zwsp}更#{zwsp}可怕的#{zwsp}是,#{zwsp}同质化#{zwsp}竞争#{zwsp}对"\
|
52
|
+
"#{zwsp}手#{zwsp}可以#{zwsp}按照#{zwsp}URL#{zwsp}中#{zwsp}后面#{zwsp}"\
|
53
|
+
"这个#{zwsp}ID#{zwsp}来#{zwsp}遍历#{zwsp}您的#{zwsp}DB#{zwsp}中的#{zwsp}"\
|
54
|
+
"内容,#{zwsp}写个#{zwsp}小爬虫#{zwsp}把#{zwsp}你的#{zwsp}页面#{zwsp}"\
|
55
|
+
"上的#{zwsp}关#{zwsp}键#{zwsp}信#{zwsp}息顺#{zwsp}次#{zwsp}爬#{zwsp}下来"\
|
56
|
+
"#{zwsp}也#{zwsp}不是#{zwsp}什么#{zwsp}难事,#{zwsp}这样的话,#{zwsp}你"\
|
57
|
+
"#{zwsp}就#{zwsp}非常#{zwsp}被动了。"
|
39
58
|
text long_text
|
40
59
|
end
|
41
60
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Prawn strips all whitespace from the beginning and the end of strings so there
|
4
4
|
# are two ways to indent paragraphs:
|
5
5
|
#
|
@@ -9,18 +9,23 @@
|
|
9
9
|
# The other is to use the <code>:indent_paragraphs</code> option with the text
|
10
10
|
# methods. Just pass a number with the space to indent the first line in each
|
11
11
|
# paragraph.
|
12
|
-
|
13
|
-
|
14
|
-
%w[.. example_helper]))
|
12
|
+
|
13
|
+
require_relative '../example_helper'
|
15
14
|
|
16
15
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
16
|
Prawn::ManualBuilder::Example.generate(filename) do
|
18
17
|
# Using non-breaking spaces
|
19
|
-
text
|
20
|
-
|
18
|
+
text ' ' * 10 + "This paragraph won't be indented. " * 10 +
|
19
|
+
"\n#{Prawn::Text::NBSP * 10}" + 'This one will with NBSP. ' * 10
|
21
20
|
|
22
21
|
move_down 20
|
23
|
-
text "This paragraph will be indented.
|
24
|
-
|
25
|
-
|
22
|
+
text "#{'This paragraph will be indented. ' * 10}\n#{'This one will too. ' * 10}",
|
23
|
+
indent_paragraphs: 60
|
24
|
+
|
25
|
+
move_down 20
|
26
|
+
|
27
|
+
text 'FROM RIGHT TO LEFT:'
|
28
|
+
text "#{'This paragraph will be indented. ' * 10}\n#{'This one will too. ' * 10}",
|
29
|
+
indent_paragraphs: 60,
|
30
|
+
direction: :rtl
|
26
31
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Sometimes we want the text on a specific position on the page. The
|
4
4
|
# <code>text</code> method just won't help us.
|
5
5
|
#
|
@@ -15,24 +15,23 @@
|
|
15
15
|
# accordingly. Even if you don't provide a <code>:width</code> option the text
|
16
16
|
# will flow to a new line if it reaches the right border.
|
17
17
|
#
|
18
|
-
# Given that
|
19
|
-
|
20
|
-
|
21
|
-
%w[.. example_helper]))
|
18
|
+
# Given that, <code>text_box</code> is the better option available.
|
19
|
+
|
20
|
+
require_relative '../example_helper'
|
22
21
|
|
23
22
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
24
23
|
Prawn::ManualBuilder::Example.generate(filename) do
|
25
|
-
draw_text "This draw_text line is absolute positioned. However don't "
|
26
|
-
|
27
|
-
|
24
|
+
draw_text "This draw_text line is absolute positioned. However don't " \
|
25
|
+
'expect it to flow even if it hits the document border',
|
26
|
+
at: [200, 300]
|
28
27
|
|
29
|
-
text_box
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
text_box 'This is a text box, you can control where it will flow by ' \
|
29
|
+
'specifying the :height and :width options',
|
30
|
+
at: [100, 250],
|
31
|
+
height: 100,
|
32
|
+
width: 100
|
34
33
|
|
35
|
-
text_box
|
36
|
-
|
37
|
-
|
34
|
+
text_box 'Another text box with no :width option passed, so it will ' \
|
35
|
+
'flow to a new line whenever it reaches the right margin. ',
|
36
|
+
at: [200, 100]
|
38
37
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Registering font families will help you when you want to use a font over and
|
4
4
|
# over or if you would like to take advantage of the <code>:style</code> option
|
5
5
|
# of the text methods and the <code>b</code> and <code>i</code> tags when using
|
@@ -7,42 +7,45 @@
|
|
7
7
|
#
|
8
8
|
# To register a font family update the <code>font_families</code>
|
9
9
|
# hash with the font path for each style you want to use.
|
10
|
-
|
11
|
-
|
12
|
-
%w[.. example_helper]))
|
10
|
+
|
11
|
+
require_relative '../example_helper'
|
13
12
|
|
14
13
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
14
|
Prawn::ManualBuilder::Example.generate(filename) do
|
16
|
-
# Registering a single
|
17
|
-
font_families.update(
|
18
|
-
|
19
|
-
|
15
|
+
# Registering a single external font
|
16
|
+
font_families.update(
|
17
|
+
'DejaVu Sans' => {
|
18
|
+
normal: "#{Prawn::DATADIR}/fonts/DejaVuSans.ttf"
|
19
|
+
}
|
20
|
+
)
|
20
21
|
|
21
|
-
font(
|
22
|
-
text
|
22
|
+
font('DejaVu Sans') do
|
23
|
+
text 'Using the DejaVu Sans font providing only its name to the font method'
|
23
24
|
end
|
24
25
|
move_down 20
|
25
26
|
|
26
27
|
# Registering a DFONT package
|
27
28
|
font_path = "#{Prawn::DATADIR}/fonts/Panic+Sans.dfont"
|
28
|
-
font_families.update(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
font_families.update(
|
30
|
+
'Panic Sans' => {
|
31
|
+
normal: { file: font_path, font: 'PanicSans' },
|
32
|
+
italic: { file: font_path, font: 'PanicSans-Italic' },
|
33
|
+
bold: { file: font_path, font: 'PanicSans-Bold' },
|
34
|
+
bold_italic: { file: font_path, font: 'PanicSans-BoldItalic' }
|
35
|
+
}
|
36
|
+
)
|
37
|
+
|
38
|
+
font 'Panic Sans'
|
39
|
+
text 'Also using Panic Sans by providing only its name'
|
37
40
|
move_down 20
|
38
41
|
|
39
|
-
text
|
40
|
-
|
42
|
+
text 'Taking <b>advantage</b> of the <i>inline formatting</i>',
|
43
|
+
inline_format: true
|
41
44
|
move_down 20
|
42
45
|
|
43
|
-
[
|
46
|
+
%i[bold bold_italic italic normal].each do |style|
|
44
47
|
text "Using the #{style} style option.",
|
45
|
-
|
48
|
+
style: style
|
46
49
|
move_down 10
|
47
50
|
end
|
48
51
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# You have already seen how to set the text color using both inline formatting
|
4
4
|
# and the format text methods. There is another way by using the graphics
|
5
5
|
# methods <code>fill_color</code> and <code>stroke_color</code>.
|
@@ -11,27 +11,26 @@
|
|
11
11
|
# being filled (the default mode) or just stroked or both filled and stroked.
|
12
12
|
# This can be set using the <code>text_rendering_mode</code> method or the
|
13
13
|
# <code>:mode</code> option on the text methods.
|
14
|
-
|
15
|
-
|
16
|
-
%w[.. example_helper]))
|
14
|
+
|
15
|
+
require_relative '../example_helper'
|
17
16
|
|
18
17
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
19
18
|
Prawn::ManualBuilder::Example.generate(filename) do
|
20
|
-
fill_color
|
21
|
-
stroke_color
|
19
|
+
fill_color '00ff00'
|
20
|
+
stroke_color '0000ff'
|
22
21
|
|
23
22
|
font_size(40) do
|
24
23
|
# normal rendering mode: fill
|
25
|
-
text
|
24
|
+
text 'This text is filled with green.'
|
26
25
|
move_down 20
|
27
26
|
|
28
27
|
# inline rendering mode: stroke
|
29
|
-
text
|
28
|
+
text 'This text is stroked with blue', mode: :stroke
|
30
29
|
move_down 20
|
31
30
|
|
32
31
|
# block rendering mode: fill and stroke
|
33
32
|
text_rendering_mode(:fill_stroke) do
|
34
|
-
text
|
33
|
+
text 'This text is filled with green and stroked with blue'
|
35
34
|
end
|
36
35
|
end
|
37
36
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Prawn can be used with right-to-left text. The direction can be set
|
4
4
|
# document-wide, on particular text, or on a text-box. Setting the direction to
|
5
5
|
# <code>:rtl</code> automatically changes the default alignment to
|
@@ -9,35 +9,46 @@
|
|
9
9
|
# that two fragments going against the main direction cannot be placed next to
|
10
10
|
# each other without appearing in the wrong order.
|
11
11
|
#
|
12
|
-
|
13
|
-
|
12
|
+
# Writing bidirectional text that combines both left-to-right and right-to-left
|
13
|
+
# languages is easy using the <code>bidi</code> Ruby Gem and its
|
14
|
+
# <code>render_visual</code> function. See https://github.com/elad/ruby-bidi for
|
15
|
+
# instructions and an example using Prawn.
|
16
|
+
|
17
|
+
require_relative '../example_helper'
|
14
18
|
|
15
19
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
20
|
Prawn::ManualBuilder::Example.generate(filename) do
|
17
21
|
# set the direction document-wide
|
18
22
|
self.text_direction = :rtl
|
19
23
|
|
20
|
-
font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf", :
|
21
|
-
long_text =
|
24
|
+
font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf", size: 16) do
|
25
|
+
long_text = '写个小爬虫把你的页面上的关键信息顺次爬下来也不是什么难事写个'\
|
26
|
+
'小爬虫把你的页面上的关键信息顺次爬下来也不是什么难事写个小爬虫把你的页'\
|
27
|
+
'面上的关键信息顺次爬下来也不是什么难事写个小'
|
22
28
|
text long_text
|
23
29
|
move_down 20
|
24
30
|
|
25
|
-
text
|
31
|
+
text 'You can override the document direction.', direction: :ltr
|
26
32
|
move_down 20
|
27
33
|
|
28
|
-
formatted_text
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
34
|
+
formatted_text([
|
35
|
+
{ text: '更可怕的是,同质化竞争对手可以按照' },
|
36
|
+
{ text: 'URL', direction: :ltr },
|
37
|
+
{ text: '中后面这个' },
|
38
|
+
{ text: 'ID', direction: :ltr },
|
39
|
+
{ text: '来遍历您的' },
|
40
|
+
{ text: 'DB', direction: :ltr },
|
41
|
+
{ text: '中的内容,写个小爬虫把你的页面上的关键信息顺次爬下来也不是什么'\
|
42
|
+
'难事,这样的话,你就非常被动了。' }
|
43
|
+
])
|
35
44
|
move_down 20
|
36
45
|
|
37
|
-
formatted_text
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
46
|
+
formatted_text([
|
47
|
+
{ text: '更可怕的是,同质化竞争对手可以按照' },
|
48
|
+
{ text: 'this', direction: :ltr },
|
49
|
+
{ text: "won't", direction: :ltr, size: 24 },
|
50
|
+
{ text: 'work', direction: :ltr },
|
51
|
+
{ text: '中的内容,写个小爬虫把你的页面上的关键信息顺次爬下来也不是什么难事' }
|
52
|
+
])
|
42
53
|
end
|
43
54
|
end
|
data/manual/text/rotation.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Rotating text is best avoided on free flowing text, so this example
|
4
4
|
# will only use the <code>text_box</code> method as we can have much more
|
5
5
|
# control over its output.
|
@@ -7,37 +7,46 @@
|
|
7
7
|
# To rotate text all we need to do is use the <code>:rotate</code> option
|
8
8
|
# passing an angle in degrees and an optional <code>:rotate_around</code> to
|
9
9
|
# indicate the origin of the rotation (the default is <code>:upper_left</code>).
|
10
|
-
|
11
|
-
|
12
|
-
%w[.. example_helper]))
|
10
|
+
|
11
|
+
require_relative '../example_helper'
|
13
12
|
|
14
13
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
14
|
Prawn::ManualBuilder::Example.generate(filename) do
|
16
|
-
width
|
15
|
+
width = 100
|
17
16
|
height = 60
|
18
|
-
angle
|
19
|
-
x
|
20
|
-
y
|
17
|
+
angle = 30
|
18
|
+
x = 200
|
19
|
+
y = cursor - 30
|
21
20
|
|
22
21
|
stroke_rectangle [0, y], width, height
|
23
|
-
text_box(
|
24
|
-
|
22
|
+
text_box(
|
23
|
+
'This text was not rotated',
|
24
|
+
at: [0, y],
|
25
|
+
width: width,
|
26
|
+
height: height
|
27
|
+
)
|
25
28
|
|
26
29
|
stroke_rectangle [0, y - 100], width, height
|
27
|
-
text_box(
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
text_box(
|
31
|
+
'This text was rotated around the center',
|
32
|
+
at: [0, y - 100],
|
33
|
+
width: width,
|
34
|
+
height: height,
|
35
|
+
rotate: angle,
|
36
|
+
rotate_around: :center
|
37
|
+
)
|
33
38
|
|
34
|
-
|
39
|
+
%i[lower_left upper_left lower_right upper_right]
|
40
|
+
.each_with_index do |corner, index|
|
41
|
+
y -= 100 if index == 2
|
35
42
|
stroke_rectangle [x + (index % 2) * 200, y], width, height
|
36
|
-
text_box(
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
43
|
+
text_box(
|
44
|
+
"This text was rotated around the #{corner} corner.",
|
45
|
+
at: [x + (index % 2) * 200, y],
|
46
|
+
width: width,
|
47
|
+
height: height,
|
48
|
+
rotate: angle,
|
49
|
+
rotate_around: corner
|
50
|
+
)
|
42
51
|
end
|
43
52
|
end
|
data/manual/text/single_usage.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# The PDF format has some built-in font support. If you want to use other fonts
|
4
4
|
# in Prawn you need to embed the font file.
|
5
5
|
#
|
@@ -12,26 +12,25 @@
|
|
12
12
|
# times, providing the path each time it is used becomes cumbersome. The example
|
13
13
|
# on the next page shows a better way to deal with fonts which are used several
|
14
14
|
# times in a document.
|
15
|
-
|
16
|
-
|
17
|
-
%w[.. example_helper]))
|
15
|
+
|
16
|
+
require_relative '../example_helper'
|
18
17
|
|
19
18
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
20
19
|
Prawn::ManualBuilder::Example.generate(filename) do
|
21
20
|
# Using a TTF font file
|
22
21
|
font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf") do
|
23
|
-
text
|
22
|
+
text 'Written with the DejaVu Sans TTF font.'
|
24
23
|
end
|
25
24
|
move_down 20
|
26
25
|
|
27
|
-
text
|
26
|
+
text 'Written with the default font.'
|
28
27
|
move_down 20
|
29
28
|
|
30
29
|
# Using an DFONT font file
|
31
30
|
font("#{Prawn::DATADIR}/fonts/Panic+Sans.dfont") do
|
32
|
-
text
|
31
|
+
text 'Written with the Panic Sans DFONT font'
|
33
32
|
end
|
34
33
|
move_down 20
|
35
34
|
|
36
|
-
text
|
35
|
+
text 'Written with the default font once more.'
|
37
36
|
end
|