prawn 1.1.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 +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
@@ -1,14 +1,15 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# internals.rb : Implements document internals for Prawn
|
4
4
|
#
|
5
5
|
# Copyright August 2008, Gregory Brown. All Rights Reserved.
|
6
6
|
#
|
7
7
|
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
8
|
|
9
|
+
require 'forwardable'
|
10
|
+
|
9
11
|
module Prawn
|
10
12
|
class Document
|
11
|
-
|
12
13
|
# This module exposes a few low-level PDF features for those who want
|
13
14
|
# to extend Prawn's core functionality. If you are not comfortable with
|
14
15
|
# low level PDF functionality as defined by Adobe's specification, chances
|
@@ -16,159 +17,51 @@ module Prawn
|
|
16
17
|
#
|
17
18
|
# @private
|
18
19
|
module Internals
|
19
|
-
|
20
|
-
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
|
25
|
-
|
20
|
+
extend Forwardable
|
21
|
+
|
22
|
+
# These methods are not officially part of Prawn's public API,
|
23
|
+
# but they are used in documentation and possibly in extensions.
|
24
|
+
# Perhaps they will become part of the extension API?
|
25
|
+
# Anyway, for now it's not clear what we should do w. them.
|
26
|
+
delegate %i[
|
27
|
+
graphic_state
|
28
|
+
on_page_create
|
29
|
+
] => :renderer
|
30
|
+
|
31
|
+
def save_graphics_state(state = nil, &block)
|
32
|
+
save_transformation_stack
|
33
|
+
renderer.save_graphics_state(state, &block)
|
26
34
|
end
|
27
35
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# tree, it is recommended to persist only identifiers, and them provide
|
32
|
-
# helper methods to look up the actual references in the ObjectStore
|
33
|
-
# if needed. If you take this approach, Prawn::Document::Snapshot
|
34
|
-
# will probably work with your extension
|
35
|
-
#
|
36
|
-
def ref!(data)
|
37
|
-
state.store.ref(data)
|
36
|
+
def restore_graphics_state
|
37
|
+
restore_transformation_stack
|
38
|
+
renderer.restore_graphics_state
|
38
39
|
end
|
39
40
|
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
41
|
+
# FIXME: This is a circular reference, because in theory Prawn should
|
42
|
+
# be passing instances of renderer to PDF::Core::Page, but it's
|
43
|
+
# passing Prawn::Document objects instead.
|
43
44
|
#
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
# A proper design would probably not require Prawn to directly instantiate
|
46
|
+
# PDF::Core::Page objects at all!
|
47
|
+
delegate [:compression_enabled?] => :renderer
|
47
48
|
|
48
|
-
#
|
49
|
-
|
50
|
-
# # Raw line drawing example:
|
51
|
-
# x1,y1,x2,y2 = 100,500,300,550
|
52
|
-
# pdf.add_content("%.3f %.3f m" % [ x1, y1 ]) # move
|
53
|
-
# pdf.add_content("%.3f %.3f l" % [ x2, y2 ]) # draw path
|
54
|
-
# pdf.add_content("S") # stroke
|
55
|
-
#
|
56
|
-
def add_content(str)
|
57
|
-
save_graphics_state if graphic_state.nil?
|
58
|
-
state.page.content << str << "\n"
|
59
|
-
end
|
49
|
+
# FIXME: More circular references in PDF::Core::Page.
|
50
|
+
delegate %i[ref ref! deref] => :renderer
|
60
51
|
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
|
65
|
-
def names
|
66
|
-
state.store.root.data[:Names] ||= ref!(:Type => :Names)
|
67
|
-
end
|
52
|
+
# FIXME: Another circular reference, because we mix in a module from
|
53
|
+
# PDF::Core to provide destinations, which in theory should not
|
54
|
+
# rely on a Prawn::Document object but is currently wired up that way.
|
55
|
+
delegate [:names] => :renderer
|
68
56
|
|
69
|
-
#
|
70
|
-
#
|
71
|
-
|
72
|
-
|
73
|
-
end
|
57
|
+
# FIXME: Circular reference because we mix PDF::Core::Text into
|
58
|
+
# Prawn::Document. PDF::Core::Text should either be split up or
|
59
|
+
# moved in its entirety back up into Prawn.
|
60
|
+
delegate [:add_content] => :renderer
|
74
61
|
|
75
|
-
|
76
|
-
|
77
|
-
def before_render(&block)
|
78
|
-
state.before_render_callbacks << block
|
62
|
+
def renderer
|
63
|
+
@renderer ||= PDF::Core::Renderer.new(state)
|
79
64
|
end
|
80
|
-
|
81
|
-
# Defines a block to be called just before a new page is started.
|
82
|
-
#
|
83
|
-
def on_page_create(&block)
|
84
|
-
if block_given?
|
85
|
-
state.on_page_create_callback = block
|
86
|
-
else
|
87
|
-
state.on_page_create_callback = nil
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
private
|
92
|
-
|
93
|
-
# adds a new, empty content stream to each page. Used in templating so
|
94
|
-
# that imported content streams can be left pristine
|
95
|
-
#
|
96
|
-
def fresh_content_streams(options={})
|
97
|
-
(1..page_count).each do |i|
|
98
|
-
go_to_page i
|
99
|
-
state.page.new_content_stream
|
100
|
-
apply_margin_options(options)
|
101
|
-
generate_margin_box
|
102
|
-
use_graphic_settings(options[:template])
|
103
|
-
forget_text_rendering_mode!
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def finalize_all_page_contents
|
108
|
-
(1..page_count).each do |i|
|
109
|
-
go_to_page i
|
110
|
-
repeaters.each { |r| r.run(i) }
|
111
|
-
while graphic_stack.present?
|
112
|
-
restore_graphics_state
|
113
|
-
end
|
114
|
-
state.page.finalize
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
# raise the PDF version of the file we're going to generate.
|
119
|
-
# A private method, designed for internal use when the user adds a feature
|
120
|
-
# to their document that requires a particular version.
|
121
|
-
#
|
122
|
-
def min_version(min)
|
123
|
-
state.version = min if min > state.version
|
124
|
-
end
|
125
|
-
|
126
|
-
# Write out the PDF Header, as per spec 3.4.1
|
127
|
-
#
|
128
|
-
def render_header(output)
|
129
|
-
state.before_render_actions(self)
|
130
|
-
|
131
|
-
# pdf version
|
132
|
-
output << "%PDF-#{state.version}\n"
|
133
|
-
|
134
|
-
# 4 binary chars, as recommended by the spec
|
135
|
-
output << "%\xFF\xFF\xFF\xFF\n"
|
136
|
-
end
|
137
|
-
|
138
|
-
# Write out the PDF Body, as per spec 3.4.2
|
139
|
-
#
|
140
|
-
def render_body(output)
|
141
|
-
state.render_body(output)
|
142
|
-
end
|
143
|
-
|
144
|
-
# Write out the PDF Cross Reference Table, as per spec 3.4.3
|
145
|
-
#
|
146
|
-
def render_xref(output)
|
147
|
-
@xref_offset = output.size
|
148
|
-
output << "xref\n"
|
149
|
-
output << "0 #{state.store.size + 1}\n"
|
150
|
-
output << "0000000000 65535 f \n"
|
151
|
-
state.store.each do |ref|
|
152
|
-
output.printf("%010d", ref.offset)
|
153
|
-
output << " 00000 n \n"
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
# Write out the PDF Trailer, as per spec 3.4.4
|
158
|
-
#
|
159
|
-
def render_trailer(output)
|
160
|
-
trailer_hash = {:Size => state.store.size + 1,
|
161
|
-
:Root => state.store.root,
|
162
|
-
:Info => state.store.info}
|
163
|
-
trailer_hash.merge!(state.trailer) if state.trailer
|
164
|
-
|
165
|
-
output << "trailer\n"
|
166
|
-
output << PDF::Core::PdfObject(trailer_hash) << "\n"
|
167
|
-
output << "startxref\n"
|
168
|
-
output << @xref_offset << "\n"
|
169
|
-
output << "%%EOF" << "\n"
|
170
|
-
end
|
171
|
-
|
172
65
|
end
|
173
66
|
end
|
174
67
|
end
|
data/lib/prawn/document/span.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# span.rb : Implements text columns
|
4
4
|
#
|
@@ -26,28 +26,34 @@ module Prawn
|
|
26
26
|
# text "Here's some centered text in a 350 point column. " * 100
|
27
27
|
# end
|
28
28
|
#
|
29
|
-
def span(width, options={})
|
29
|
+
def span(width, options = {})
|
30
30
|
Prawn.verify_options [:position], options
|
31
|
-
original_position =
|
31
|
+
original_position = y
|
32
32
|
|
33
33
|
# FIXME: Any way to move this upstream?
|
34
|
-
left_boundary =
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
34
|
+
left_boundary =
|
35
|
+
case options.fetch(:position, :left)
|
36
|
+
when :left
|
37
|
+
margin_box.absolute_left
|
38
|
+
when :center
|
39
|
+
margin_box.absolute_left + margin_box.width / 2.0 - width / 2.0
|
40
|
+
when :right
|
41
|
+
margin_box.absolute_right - width
|
42
|
+
when Numeric
|
43
|
+
margin_box.absolute_left + options[:position]
|
44
|
+
else
|
45
|
+
raise ArgumentError, 'Invalid option for :position'
|
46
|
+
end
|
46
47
|
|
47
48
|
# we need to bust out of whatever nested bounding boxes we're in.
|
48
49
|
canvas do
|
49
|
-
bounding_box(
|
50
|
-
|
50
|
+
bounding_box(
|
51
|
+
[
|
52
|
+
left_boundary,
|
53
|
+
margin_box.absolute_top
|
54
|
+
],
|
55
|
+
width: width
|
56
|
+
) do
|
51
57
|
self.y = original_position
|
52
58
|
yield
|
53
59
|
end
|