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
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
|
-
Prawn::Example.generate(filename) do
|
16
|
-
width
|
14
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
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
|
-
|
25
|
-
|
22
|
+
text_box(
|
23
|
+
'This text was not rotated',
|
24
|
+
at: [0, y],
|
25
|
+
width: width,
|
26
|
+
height: height
|
27
|
+
)
|
28
|
+
|
26
29
|
stroke_rectangle [0, y - 100], width, height
|
27
|
-
text_box(
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
+
)
|
38
|
+
|
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
|
-
Prawn::Example.generate(filename) do
|
19
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
21
20
|
# Using a TTF font file
|
22
|
-
font("#{Prawn::DATADIR}/fonts/
|
23
|
-
text
|
21
|
+
font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf") do
|
22
|
+
text 'Written with the DejaVu Sans TTF font.'
|
24
23
|
end
|
25
24
|
move_down 20
|
26
|
-
|
27
|
-
text
|
25
|
+
|
26
|
+
text 'Written with the default font.'
|
28
27
|
move_down 20
|
29
|
-
|
28
|
+
|
30
29
|
# Using an DFONT font file
|
31
|
-
font("#{Prawn::DATADIR}/fonts/
|
32
|
-
text
|
30
|
+
font("#{Prawn::DATADIR}/fonts/Panic+Sans.dfont") do
|
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
|
data/manual/text/text.rb
CHANGED
@@ -1,75 +1,75 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Examples for text rendering.
|
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
|
14
|
-
s.example
|
15
|
-
s.example
|
16
|
-
s.example
|
17
|
-
s.example
|
18
|
-
s.example "column_box"
|
5
|
+
require '../example_helper'
|
6
|
+
|
7
|
+
Prawn::ManualBuilder::Example.generate('text.pdf', page_size: 'FOLIO') do
|
8
|
+
package 'text' do |p|
|
9
|
+
p.section 'Basics' do |s|
|
10
|
+
s.example 'free_flowing_text'
|
11
|
+
s.example 'positioned_text'
|
12
|
+
s.example 'text_box_overflow'
|
13
|
+
s.example 'text_box_excess'
|
14
|
+
s.example 'column_box'
|
19
15
|
end
|
20
|
-
|
21
|
-
p.section
|
22
|
-
s.example
|
23
|
-
s.example
|
24
|
-
s.example
|
25
|
-
s.example
|
26
|
-
s.example
|
27
|
-
s.example
|
28
|
-
s.example
|
29
|
-
s.example
|
30
|
-
s.example
|
16
|
+
|
17
|
+
p.section 'Styling' do |s|
|
18
|
+
s.example 'font'
|
19
|
+
s.example 'font_size'
|
20
|
+
s.example 'font_style'
|
21
|
+
s.example 'color'
|
22
|
+
s.example 'alignment'
|
23
|
+
s.example 'leading'
|
24
|
+
s.example 'kerning_and_character_spacing'
|
25
|
+
s.example 'paragraph_indentation'
|
26
|
+
s.example 'rotation'
|
31
27
|
end
|
32
|
-
|
33
|
-
p.section
|
34
|
-
s.example
|
35
|
-
s.example
|
36
|
-
s.example
|
37
|
-
s.example
|
38
|
-
s.example
|
28
|
+
|
29
|
+
p.section 'Advanced Styling' do |s|
|
30
|
+
s.example 'inline'
|
31
|
+
s.example 'formatted_text'
|
32
|
+
s.example 'formatted_callbacks'
|
33
|
+
s.example 'rendering_and_color'
|
34
|
+
s.example 'text_box_extensions'
|
39
35
|
end
|
40
|
-
|
41
|
-
p.section
|
42
|
-
s.example
|
43
|
-
s.example
|
36
|
+
|
37
|
+
p.section 'External Fonts' do |s|
|
38
|
+
s.example 'single_usage'
|
39
|
+
s.example 'registering_families'
|
44
40
|
end
|
45
|
-
|
46
|
-
p.section
|
47
|
-
s.example
|
48
|
-
s.example
|
49
|
-
s.example
|
50
|
-
s.example
|
51
|
-
s.example
|
41
|
+
|
42
|
+
p.section 'Multilingualization' do |s|
|
43
|
+
s.example 'utf8'
|
44
|
+
s.example 'line_wrapping'
|
45
|
+
s.example 'right_to_left_text'
|
46
|
+
s.example 'fallback_fonts'
|
47
|
+
s.example 'win_ansi_charset'
|
52
48
|
end
|
53
|
-
|
49
|
+
|
54
50
|
p.intro do
|
55
|
-
prose
|
51
|
+
prose <<-TEXT
|
52
|
+
This is probably the feature people will use the most. There is no
|
53
|
+
shortage of options when it comes to text. You'll be hard pressed to
|
54
|
+
find a use case that is not covered by one of the text methods and
|
55
|
+
configurable options.
|
56
56
|
|
57
|
-
|
57
|
+
The examples show:
|
58
|
+
TEXT
|
58
59
|
|
59
|
-
list(
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
60
|
+
list(
|
61
|
+
'Text that flows from page to page automatically starting new pages when necessary',
|
62
|
+
'How to use text boxes and place them on specific positions',
|
63
|
+
'What to do when a text box is too small to fit its content',
|
64
|
+
'Flowing text in columns',
|
65
|
+
'How to change the text style configuring font, size, alignment and many other settings',
|
66
|
+
'How to style specific portions of a text with inline styling and formatted text',
|
67
|
+
'How to define formatted callbacks to reuse common styling definitions',
|
68
|
+
'How to use the different rendering modes available for the text methods',
|
69
|
+
'How to create your custom text box extensions',
|
70
|
+
'How to use external fonts on your pdfs',
|
71
|
+
'What happens when rendering text in different languages'
|
72
|
+
)
|
72
73
|
end
|
73
|
-
|
74
74
|
end
|
75
75
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Whenever the <code>text_box</code> method truncates text, this truncated bit
|
4
4
|
# is not lost, it is the method return value and we can take advantage of that.
|
5
5
|
#
|
@@ -8,25 +8,28 @@
|
|
8
8
|
# This example renders as much of the text as will fit in a larger font inside
|
9
9
|
# one text_box and then proceeds to render the remaining text in the default
|
10
10
|
# size in a second text_box.
|
11
|
-
|
12
|
-
require
|
13
|
-
%w[.. example_helper]))
|
11
|
+
|
12
|
+
require '../example_helper'
|
14
13
|
|
15
14
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
16
|
-
Prawn::Example.generate(filename) do
|
17
|
-
string =
|
18
|
-
|
19
|
-
|
15
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
16
|
+
string = 'This is the beginning of the text. It will be cut somewhere and ' \
|
17
|
+
'the rest of the text will procede to be rendered this time by ' \
|
18
|
+
'calling another method.' + ' . ' * 50
|
20
19
|
|
21
20
|
y_position = cursor - 20
|
22
|
-
excess_text = text_box
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
excess_text = text_box(
|
22
|
+
string,
|
23
|
+
width: 300,
|
24
|
+
height: 50,
|
25
|
+
overflow: :truncate,
|
26
|
+
at: [100, y_position],
|
27
|
+
size: 18
|
28
|
+
)
|
29
|
+
|
30
|
+
text_box(
|
31
|
+
excess_text,
|
32
|
+
width: 300,
|
33
|
+
at: [100, y_position - 100]
|
34
|
+
)
|
32
35
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# We've already seen one way of using text boxes with the <code>text_box</code>
|
4
4
|
# method. Turns out this method is just a convenience for using the
|
5
5
|
# <code>Prawn::Text::Box</code> class as it creates a new object and call
|
@@ -9,12 +9,11 @@
|
|
9
9
|
# effect when we use the <code>text_box</code> method. To add an extension all
|
10
10
|
# we need to do is append the <code>Prawn::Text::Box.extensions</code> array
|
11
11
|
# with a module.
|
12
|
-
|
13
|
-
require
|
14
|
-
%w[.. example_helper]))
|
12
|
+
|
13
|
+
require '../example_helper'
|
15
14
|
|
16
15
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
17
|
-
Prawn::Example.generate(filename) do
|
16
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
18
17
|
module TriangleBox
|
19
18
|
def available_width
|
20
19
|
height + 25
|
@@ -22,22 +21,26 @@ Prawn::Example.generate(filename) do
|
|
22
21
|
end
|
23
22
|
|
24
23
|
y_position = cursor - 10
|
25
|
-
width
|
26
|
-
height
|
27
|
-
|
24
|
+
width = 100
|
25
|
+
height = 100
|
26
|
+
|
28
27
|
Prawn::Text::Box.extensions << TriangleBox
|
29
28
|
stroke_rectangle([0, y_position], width, height)
|
30
|
-
text_box(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
text_box(
|
30
|
+
'A' * 100,
|
31
|
+
at: [0, y_position],
|
32
|
+
width: width,
|
33
|
+
height: height
|
34
|
+
)
|
35
|
+
|
35
36
|
Prawn::Text::Formatted::Box.extensions << TriangleBox
|
36
37
|
stroke_rectangle([200, y_position], width, height)
|
37
|
-
formatted_text_box(
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
formatted_text_box(
|
39
|
+
[{ text: 'A' * 100, color: '009900' }],
|
40
|
+
at: [200, y_position],
|
41
|
+
width: width,
|
42
|
+
height: height
|
43
|
+
)
|
41
44
|
|
42
45
|
# Here we clear the extensions array
|
43
46
|
Prawn::Text::Box.extensions.clear
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# The <code>text_box</code> method accepts both <code>:width</code> and
|
4
4
|
# <code>:height</code> options. So what happens if the text doesn't fit the box?
|
5
5
|
#
|
@@ -9,36 +9,43 @@
|
|
9
9
|
# (the text font size will be shrunk to fit).
|
10
10
|
#
|
11
11
|
# If <code>:shrink_to_fit</code> mode is used with the
|
12
|
-
# <code>:min_font_size</code> option set
|
12
|
+
# <code>:min_font_size</code> option set, the font size will not be reduced to
|
13
13
|
# less than the value provided even if it means truncating some text.
|
14
14
|
#
|
15
|
-
|
16
|
-
|
15
|
+
# If the <code>:disable_wrap_by_char</code> is set to <code>true</code>
|
16
|
+
# then any text wrapping done while using the <code>:shrink_to_fit</code>
|
17
|
+
# mode will not break up the middle of words.
|
18
|
+
|
19
|
+
require_relative '../example_helper'
|
17
20
|
|
18
21
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
19
|
-
Prawn::Example.generate(filename) do
|
20
|
-
string =
|
21
|
-
|
22
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
23
|
+
string = 'This is the sample text used for the text boxes. See how it ' \
|
24
|
+
'behave with the various overflow options used.'
|
22
25
|
|
23
26
|
text string
|
24
|
-
|
27
|
+
|
25
28
|
y_position = cursor - 20
|
26
|
-
[
|
27
|
-
text_box string,
|
28
|
-
|
29
|
-
|
29
|
+
%i[truncate expand shrink_to_fit].each_with_index do |mode, i|
|
30
|
+
text_box string,
|
31
|
+
at: [i * 150, y_position],
|
32
|
+
width: 100,
|
33
|
+
height: 50,
|
34
|
+
overflow: mode
|
30
35
|
end
|
31
|
-
|
32
|
-
string =
|
33
|
-
|
34
|
-
|
36
|
+
|
37
|
+
string = 'If the box is too small for the text, :shrink_to_fit ' \
|
38
|
+
'can render the text in a really small font size.'
|
39
|
+
|
35
40
|
move_down 120
|
36
41
|
text string
|
37
42
|
y_position = cursor - 20
|
38
43
|
[nil, 8, 10, 12].each_with_index do |value, index|
|
39
|
-
text_box string,
|
40
|
-
|
41
|
-
|
42
|
-
|
44
|
+
text_box string,
|
45
|
+
at: [index * 150, y_position],
|
46
|
+
width: 50,
|
47
|
+
height: 50,
|
48
|
+
overflow: :shrink_to_fit,
|
49
|
+
min_font_size: value
|
43
50
|
end
|
44
51
|
end
|
data/manual/text/utf8.rb
CHANGED
@@ -1,28 +1,27 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Multilingualization isn't much of a problem on Prawn as its default encoding
|
4
4
|
# is UTF-8. The only thing you need to worry about is if the font support the
|
5
5
|
# glyphs of your language.
|
6
|
-
|
7
|
-
|
8
|
-
%w[.. example_helper]))
|
6
|
+
|
7
|
+
require_relative '../example_helper'
|
9
8
|
|
10
9
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
|
-
Prawn::Example.generate(filename) do
|
12
|
-
text
|
13
|
-
text
|
10
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
11
|
+
text 'Take this example, a simple Euro sign:'
|
12
|
+
text '€', size: 32
|
14
13
|
move_down 20
|
15
|
-
|
16
|
-
text
|
17
|
-
|
14
|
+
|
15
|
+
text 'This works, because € is one of the few ' \
|
16
|
+
'non-ASCII glyphs supported in PDF built-in fonts.'
|
17
|
+
|
18
18
|
move_down 20
|
19
|
-
|
20
|
-
text
|
21
|
-
text "Let's try them with another font."
|
19
|
+
|
20
|
+
text 'For full internationalized text support, we need to use external fonts:'
|
22
21
|
move_down 20
|
23
|
-
|
22
|
+
|
24
23
|
font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf") do
|
25
|
-
text
|
26
|
-
text
|
24
|
+
text 'ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει.'
|
25
|
+
text 'There you go.'
|
27
26
|
end
|
28
27
|
end
|
@@ -1,56 +1,59 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# Prints a list of all of the glyphs that can be rendered by Adobe's built
|
4
4
|
# in fonts, along with their character widths and WinAnsi codes. Be sure
|
5
5
|
# to pass these glyphs as UTF-8, and Prawn will transcode them for you.
|
6
|
-
|
7
|
-
|
8
|
-
%w[.. example_helper]))
|
6
|
+
|
7
|
+
require_relative '../example_helper'
|
9
8
|
|
10
9
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
11
|
-
Prawn::Example.generate(filename) do
|
12
|
-
|
10
|
+
Prawn::ManualBuilder::Example.generate(filename) do
|
11
|
+
font_size = 9.5
|
13
12
|
|
14
13
|
x = 0
|
15
14
|
y = bounds.top
|
16
15
|
|
17
|
-
fields = [
|
18
|
-
|
16
|
+
fields = [
|
17
|
+
[20, :right], [8, :left], [12, :center], [30, :right], [8, :left],
|
18
|
+
[0, :left]
|
19
|
+
]
|
19
20
|
|
20
|
-
font
|
21
|
+
font 'Helvetica', size: font_size
|
21
22
|
|
22
|
-
move_down 30
|
23
|
-
text "(See next page for WinAnsi table)", :align => :center
|
24
23
|
start_new_page
|
25
24
|
|
26
25
|
Prawn::Encoding::WinAnsi::CHARACTERS.each_with_index do |name, index|
|
27
|
-
next if name ==
|
28
|
-
|
26
|
+
next if name == '.notdef'
|
27
|
+
|
28
|
+
y -= font_size
|
29
29
|
|
30
|
-
if y <
|
31
|
-
y = bounds.top -
|
30
|
+
if y < font_size
|
31
|
+
y = bounds.top - font_size
|
32
32
|
x += 170
|
33
33
|
end
|
34
34
|
|
35
|
-
code =
|
36
|
-
char = index.chr
|
35
|
+
code = format('%<index>d.', index: index)
|
36
|
+
char = index.chr.force_encoding(::Encoding::Windows_1252)
|
37
37
|
|
38
|
-
width = 1000 * width_of(char, :
|
39
|
-
size
|
38
|
+
width = 1000 * width_of(char, size: font_size) / font_size
|
39
|
+
size = format('%<width>d', width: width)
|
40
40
|
|
41
41
|
data = [code, nil, char, size, nil, name]
|
42
|
-
dx
|
42
|
+
dx = x
|
43
43
|
fields.zip(data).each do |(total_width, align), field|
|
44
44
|
if field
|
45
|
-
width = width_of(field, :
|
45
|
+
width = width_of(field, size: font_size)
|
46
46
|
|
47
47
|
case align
|
48
|
-
when :left
|
49
|
-
when :right
|
50
|
-
when :center then offset = (total_width - width)/2
|
48
|
+
when :left then offset = 0
|
49
|
+
when :right then offset = total_width - width
|
50
|
+
when :center then offset = (total_width - width) / 2
|
51
51
|
end
|
52
52
|
|
53
|
-
text_box(
|
53
|
+
text_box(
|
54
|
+
field.dup.force_encoding('windows-1252').encode('UTF-8'),
|
55
|
+
at: [dx + offset, y]
|
56
|
+
)
|
54
57
|
end
|
55
58
|
|
56
59
|
dx += total_width
|