prawn 2.0.2 → 2.3.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.tar.gz.sig +0 -0
- data/GPLv2 +20 -21
- data/Gemfile +3 -9
- data/Rakefile +20 -23
- data/lib/prawn.rb +37 -49
- data/lib/prawn/document.rb +181 -133
- data/lib/prawn/document/bounding_box.rb +41 -29
- data/lib/prawn/document/column_box.rb +7 -7
- data/lib/prawn/document/internals.rb +18 -8
- data/lib/prawn/document/span.rb +21 -16
- data/lib/prawn/encoding.rb +69 -68
- data/lib/prawn/errors.rb +12 -7
- data/lib/prawn/font.rb +115 -69
- data/lib/prawn/font_metric_cache.rb +14 -8
- data/lib/prawn/{font → fonts}/afm.rb +102 -68
- data/lib/prawn/{font → fonts}/dfont.rb +5 -11
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/fonts/ttc.rb +36 -0
- data/lib/prawn/{font → fonts}/ttf.rb +87 -68
- data/lib/prawn/graphics.rb +120 -80
- data/lib/prawn/graphics/blend_mode.rb +65 -0
- data/lib/prawn/graphics/cap_style.rb +3 -3
- data/lib/prawn/graphics/color.rb +27 -25
- data/lib/prawn/graphics/dash.rb +23 -11
- data/lib/prawn/graphics/join_style.rb +9 -3
- data/lib/prawn/graphics/patterns.rb +197 -67
- data/lib/prawn/graphics/transformation.rb +17 -8
- data/lib/prawn/graphics/transparency.rb +17 -13
- data/lib/prawn/grid.rb +48 -47
- data/lib/prawn/image_handler.rb +5 -5
- data/lib/prawn/images.rb +39 -30
- data/lib/prawn/images/image.rb +2 -1
- data/lib/prawn/images/jpg.rb +28 -22
- data/lib/prawn/images/png.rb +107 -66
- data/lib/prawn/measurement_extensions.rb +10 -9
- data/lib/prawn/measurements.rb +19 -15
- data/lib/prawn/outline.rb +97 -77
- data/lib/prawn/repeater.rb +14 -10
- data/lib/prawn/security.rb +81 -61
- data/lib/prawn/security/arcfour.rb +2 -2
- data/lib/prawn/soft_mask.rb +26 -26
- data/lib/prawn/stamp.rb +20 -13
- data/lib/prawn/text.rb +68 -52
- data/lib/prawn/text/box.rb +11 -8
- data/lib/prawn/text/formatted.rb +5 -5
- data/lib/prawn/text/formatted/arranger.rb +78 -49
- data/lib/prawn/text/formatted/box.rb +134 -100
- data/lib/prawn/text/formatted/fragment.rb +11 -14
- data/lib/prawn/text/formatted/line_wrap.rb +121 -63
- data/lib/prawn/text/formatted/parser.rb +139 -117
- data/lib/prawn/text/formatted/wrap.rb +43 -31
- data/lib/prawn/transformation_stack.rb +44 -0
- data/lib/prawn/utilities.rb +7 -22
- data/lib/prawn/version.rb +2 -2
- data/lib/prawn/view.rb +17 -7
- data/manual/basic_concepts/adding_pages.rb +6 -7
- data/manual/basic_concepts/basic_concepts.rb +31 -22
- data/manual/basic_concepts/creation.rb +10 -11
- data/manual/basic_concepts/cursor.rb +4 -5
- data/manual/basic_concepts/measurement.rb +6 -7
- data/manual/basic_concepts/origin.rb +5 -6
- data/manual/basic_concepts/other_cursor_helpers.rb +11 -12
- data/manual/basic_concepts/view.rb +22 -16
- data/manual/bounding_box/bounding_box.rb +29 -24
- data/manual/bounding_box/bounds.rb +11 -12
- data/manual/bounding_box/canvas.rb +4 -5
- data/manual/bounding_box/creation.rb +6 -7
- data/manual/bounding_box/indentation.rb +14 -15
- data/manual/bounding_box/nesting.rb +24 -17
- data/manual/bounding_box/russian_boxes.rb +14 -13
- data/manual/bounding_box/stretchy.rb +12 -13
- data/manual/contents.rb +28 -22
- data/manual/cover.rb +33 -28
- data/manual/document_and_page_options/background.rb +11 -13
- data/manual/document_and_page_options/document_and_page_options.rb +25 -20
- data/manual/document_and_page_options/metadata.rb +18 -16
- data/manual/document_and_page_options/page_margins.rb +18 -20
- data/manual/document_and_page_options/page_size.rb +13 -12
- data/manual/document_and_page_options/print_scaling.rb +17 -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 +4 -5
- data/manual/graphics/fill_rules.rb +9 -10
- data/manual/graphics/gradients.rb +27 -21
- data/manual/graphics/graphics.rb +48 -39
- data/manual/graphics/helper.rb +12 -9
- data/manual/graphics/line_width.rb +8 -7
- data/manual/graphics/lines_and_curves.rb +7 -8
- data/manual/graphics/polygon.rb +6 -8
- data/manual/graphics/rectangle.rb +4 -5
- data/manual/graphics/rotate.rb +6 -7
- data/manual/graphics/scale.rb +14 -15
- data/manual/graphics/soft_masks.rb +4 -5
- data/manual/graphics/stroke_cap.rb +6 -7
- data/manual/graphics/stroke_dash.rb +11 -12
- data/manual/graphics/stroke_join.rb +5 -6
- data/manual/graphics/translate.rb +9 -10
- data/manual/graphics/transparency.rb +7 -8
- data/manual/how_to_read_this_manual.rb +6 -6
- data/manual/images/absolute_position.rb +6 -7
- data/manual/images/fit.rb +7 -8
- data/manual/images/horizontal.rb +9 -10
- data/manual/images/images.rb +28 -24
- data/manual/images/plain_image.rb +5 -6
- data/manual/images/scale.rb +9 -10
- data/manual/images/vertical.rb +13 -14
- data/manual/images/width_and_height.rb +10 -11
- data/manual/layout/boxes.rb +5 -6
- data/manual/layout/content.rb +7 -8
- data/manual/layout/layout.rb +18 -16
- 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 +21 -17
- data/manual/outline/sections_and_pages.rb +17 -18
- data/manual/repeatable_content/alternate_page_numbering.rb +21 -17
- data/manual/repeatable_content/page_numbering.rb +17 -16
- data/manual/repeatable_content/repeatable_content.rb +25 -19
- data/manual/repeatable_content/repeater.rb +14 -15
- data/manual/repeatable_content/stamp.rb +14 -15
- data/manual/security/encryption.rb +9 -10
- data/manual/security/permissions.rb +19 -14
- data/manual/security/security.rb +19 -16
- data/manual/table.rb +3 -3
- data/manual/text/alignment.rb +16 -17
- data/manual/text/color.rb +12 -11
- data/manual/text/column_box.rb +9 -10
- 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 +7 -8
- data/manual/text/formatted_callbacks.rb +25 -21
- data/manual/text/formatted_text.rb +33 -25
- data/manual/text/free_flowing_text.rb +20 -21
- 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 +13 -14
- data/manual/text/positioned_text.rb +15 -16
- data/manual/text/registering_families.rb +20 -21
- data/manual/text/rendering_and_color.rb +9 -10
- data/manual/text/right_to_left_text.rb +26 -19
- data/manual/text/rotation.rb +28 -23
- data/manual/text/single_usage.rb +8 -9
- data/manual/text/text.rb +57 -52
- 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 +18 -19
- data/manual/text/utf8.rb +11 -12
- data/manual/text/win_ansi_charset.rb +21 -19
- data/prawn.gemspec +45 -33
- data/spec/extensions/encoding_helpers.rb +3 -3
- data/spec/prawn/document/bounding_box_spec.rb +546 -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 +36 -0
- data/spec/prawn/document_spec.rb +802 -0
- data/spec/prawn/font_metric_cache_spec.rb +54 -0
- data/spec/prawn/font_spec.rb +542 -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 +837 -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 +224 -0
- data/spec/prawn/measurements_extensions_spec.rb +24 -0
- data/spec/prawn/outline_spec.rb +412 -0
- data/spec/prawn/repeater_spec.rb +165 -0
- data/spec/prawn/soft_mask_spec.rb +74 -0
- data/spec/prawn/stamp_spec.rb +172 -0
- data/spec/prawn/text/box_spec.rb +1112 -0
- data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
- data/spec/prawn/text/formatted/box_spec.rb +846 -0
- data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
- data/spec/prawn/text/formatted/line_wrap_spec.rb +494 -0
- data/spec/prawn/text/formatted/parser_spec.rb +697 -0
- data/spec/prawn/text_draw_text_spec.rb +149 -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 -23
- metadata +145 -185
- metadata.gz.sig +4 -0
- 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/pal_bk.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/spec/acceptance/png.rb +0 -24
- data/spec/annotations_spec.rb +0 -67
- data/spec/bounding_box_spec.rb +0 -501
- data/spec/column_box_spec.rb +0 -59
- data/spec/destinations_spec.rb +0 -13
- data/spec/document_spec.rb +0 -742
- data/spec/extensions/mocha.rb +0 -45
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -475
- data/spec/formatted_text_arranger_spec.rb +0 -423
- data/spec/formatted_text_box_spec.rb +0 -716
- data/spec/formatted_text_fragment_spec.rb +0 -299
- data/spec/graphics_spec.rb +0 -666
- data/spec/grid_spec.rb +0 -95
- data/spec/image_handler_spec.rb +0 -53
- data/spec/images_spec.rb +0 -167
- data/spec/inline_formatted_text_parser_spec.rb +0 -568
- data/spec/jpg_spec.rb +0 -23
- data/spec/line_wrap_spec.rb +0 -366
- data/spec/measurement_units_spec.rb +0 -22
- data/spec/outline_spec.rb +0 -409
- data/spec/png_spec.rb +0 -235
- data/spec/reference_spec.rb +0 -25
- data/spec/repeater_spec.rb +0 -154
- data/spec/security_spec.rb +0 -151
- data/spec/soft_mask_spec.rb +0 -78
- data/spec/span_spec.rb +0 -43
- data/spec/stamp_spec.rb +0 -179
- data/spec/stroke_styles_spec.rb +0 -208
- data/spec/text_at_spec.rb +0 -142
- data/spec/text_box_spec.rb +0 -1038
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -549
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -91
- data/spec/view_spec.rb +0 -42
@@ -1,83 +0,0 @@
|
|
1
|
-
%PDF-1.3
|
2
|
-
%����
|
3
|
-
1 0 obj
|
4
|
-
<< /Creator (Prawn)
|
5
|
-
/Producer (Prawn)
|
6
|
-
>>
|
7
|
-
endobj
|
8
|
-
2 0 obj
|
9
|
-
<< /Type /Pages
|
10
|
-
/Count 1
|
11
|
-
/Kids [5 0 R]
|
12
|
-
>>
|
13
|
-
endobj
|
14
|
-
3 0 obj
|
15
|
-
<< /Type /Catalog
|
16
|
-
/Pages 2 0 R
|
17
|
-
>>
|
18
|
-
endobj
|
19
|
-
4 0 obj
|
20
|
-
<< /Length 275
|
21
|
-
>>
|
22
|
-
stream
|
23
|
-
0.000 0.000 0.000 rg
|
24
|
-
0.000 0.000 0.000 RG
|
25
|
-
q
|
26
|
-
0.000 0.000 1.000 rg
|
27
|
-
|
28
|
-
BT
|
29
|
-
36 733.024 Td
|
30
|
-
/F1.0 32 Tf
|
31
|
-
[<412073616d706c65205044462074686174206861732074686520706167650a>] TJ
|
32
|
-
ET
|
33
|
-
|
34
|
-
|
35
|
-
BT
|
36
|
-
36 696.032 Td
|
37
|
-
/F1.0 32 Tf
|
38
|
-
[<7265736f757263657320617320616e20696e646972656374206f626a656374>] TJ
|
39
|
-
ET
|
40
|
-
|
41
|
-
Q
|
42
|
-
|
43
|
-
endstream
|
44
|
-
endobj
|
45
|
-
5 0 obj
|
46
|
-
<< /Resources 6 0 R
|
47
|
-
/Type /Page
|
48
|
-
/Contents 4 0 R
|
49
|
-
/MediaBox [0 0 612.0 792.0]
|
50
|
-
/Parent 2 0 R
|
51
|
-
>>
|
52
|
-
endobj
|
53
|
-
6 0 obj
|
54
|
-
<< /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
|
55
|
-
/Font << /F1.0 7 0 R
|
56
|
-
>>
|
57
|
-
>>
|
58
|
-
endobj
|
59
|
-
7 0 obj
|
60
|
-
<< /Subtype /Type1
|
61
|
-
/Type /Font
|
62
|
-
/Encoding /WinAnsiEncoding
|
63
|
-
/BaseFont /Helvetica
|
64
|
-
>>
|
65
|
-
endobj
|
66
|
-
xref
|
67
|
-
0 8
|
68
|
-
0000000000 65535 f
|
69
|
-
0000000015 00000 n
|
70
|
-
0000000071 00000 n
|
71
|
-
0000000128 00000 n
|
72
|
-
0000000177 00000 n
|
73
|
-
0000000503 00000 n
|
74
|
-
0000000611 00000 n
|
75
|
-
0000000702 00000 n
|
76
|
-
trailer
|
77
|
-
<< /Size 8
|
78
|
-
/Info 1 0 R
|
79
|
-
/Root 3 0 R
|
80
|
-
>>
|
81
|
-
startxref
|
82
|
-
799
|
83
|
-
%%EOF
|
data/data/pdfs/two_hexagons.pdf
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
%PDF-1.3
|
2
|
-
%����
|
3
|
-
1 0 obj
|
4
|
-
<< /Creator (Prawn)
|
5
|
-
/Producer (Prawn)
|
6
|
-
>>
|
7
|
-
endobj
|
8
|
-
2 0 obj
|
9
|
-
<< /Count 2
|
10
|
-
/Kids [5 0 R 7 0 R]
|
11
|
-
/Type /Pages
|
12
|
-
>>
|
13
|
-
endobj
|
14
|
-
3 0 obj
|
15
|
-
<< /Type /Catalog
|
16
|
-
/Pages 2 0 R
|
17
|
-
>>
|
18
|
-
endobj
|
19
|
-
4 0 obj
|
20
|
-
<< /Length 195
|
21
|
-
>>
|
22
|
-
stream
|
23
|
-
0.000 0.000 0.000 rg
|
24
|
-
0.000 0.000 0.000 RG
|
25
|
-
q
|
26
|
-
1.000 0.000 0.000 rg
|
27
|
-
136.000 286.000 m
|
28
|
-
236.000 336.000 l
|
29
|
-
336.000 286.000 l
|
30
|
-
336.000 186.000 l
|
31
|
-
236.000 136.000 l
|
32
|
-
136.000 186.000 l
|
33
|
-
136.000 286.000 l
|
34
|
-
f
|
35
|
-
Q
|
36
|
-
|
37
|
-
endstream
|
38
|
-
endobj
|
39
|
-
5 0 obj
|
40
|
-
<< /Contents 4 0 R
|
41
|
-
/Parent 2 0 R
|
42
|
-
/MediaBox [0 0 612.0 792.0]
|
43
|
-
/Type /Page
|
44
|
-
>>
|
45
|
-
endobj
|
46
|
-
6 0 obj
|
47
|
-
<< /Length 195
|
48
|
-
>>
|
49
|
-
stream
|
50
|
-
1.000 0.000 0.000 rg
|
51
|
-
0.000 0.000 0.000 RG
|
52
|
-
q
|
53
|
-
1.000 0.000 0.000 rg
|
54
|
-
136.000 286.000 m
|
55
|
-
236.000 336.000 l
|
56
|
-
336.000 286.000 l
|
57
|
-
336.000 186.000 l
|
58
|
-
236.000 136.000 l
|
59
|
-
136.000 186.000 l
|
60
|
-
136.000 286.000 l
|
61
|
-
f
|
62
|
-
Q
|
63
|
-
|
64
|
-
endstream
|
65
|
-
endobj
|
66
|
-
7 0 obj
|
67
|
-
<< /Contents 6 0 R
|
68
|
-
/Parent 2 0 R
|
69
|
-
/MediaBox [0 0 612.0 792.0]
|
70
|
-
/Type /Page
|
71
|
-
>>
|
72
|
-
endobj
|
73
|
-
xref
|
74
|
-
0 8
|
75
|
-
0000000000 65535 f
|
76
|
-
0000000015 00000 n
|
77
|
-
0000000071 00000 n
|
78
|
-
0000000134 00000 n
|
79
|
-
0000000183 00000 n
|
80
|
-
0000000429 00000 n
|
81
|
-
0000000520 00000 n
|
82
|
-
0000000766 00000 n
|
83
|
-
trailer
|
84
|
-
<< /Info 1 0 R
|
85
|
-
/Root 3 0 R
|
86
|
-
/Size 8
|
87
|
-
>>
|
88
|
-
startxref
|
89
|
-
857
|
90
|
-
%%EOF
|
data/data/pdfs/version_1_6.pdf
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
%PDF-1.6
|
2
|
-
%????
|
3
|
-
1 0 obj
|
4
|
-
<< /Creator (Prawn)
|
5
|
-
/Producer (Prawn)
|
6
|
-
>>
|
7
|
-
endobj
|
8
|
-
2 0 obj
|
9
|
-
<< /Kids [5 0 R]
|
10
|
-
/Type /Pages
|
11
|
-
/Count 1
|
12
|
-
>>
|
13
|
-
endobj
|
14
|
-
3 0 obj
|
15
|
-
<< /Type /Catalog
|
16
|
-
/Pages 2 0 R
|
17
|
-
>>
|
18
|
-
endobj
|
19
|
-
4 0 obj
|
20
|
-
<< /Length 195
|
21
|
-
>>
|
22
|
-
stream
|
23
|
-
0.000 0.000 0.000 rg
|
24
|
-
0.000 0.000 0.000 RG
|
25
|
-
q
|
26
|
-
1.000 0.000 0.000 rg
|
27
|
-
136.000 286.000 m
|
28
|
-
236.000 336.000 l
|
29
|
-
336.000 286.000 l
|
30
|
-
336.000 186.000 l
|
31
|
-
236.000 136.000 l
|
32
|
-
136.000 186.000 l
|
33
|
-
136.000 286.000 l
|
34
|
-
f
|
35
|
-
Q
|
36
|
-
|
37
|
-
endstream
|
38
|
-
endobj
|
39
|
-
5 0 obj
|
40
|
-
<< /Contents 4 0 R
|
41
|
-
/Type /Page
|
42
|
-
/MediaBox [0 0 612.0 792.0]
|
43
|
-
/Parent 2 0 R
|
44
|
-
>>
|
45
|
-
endobj
|
46
|
-
xref
|
47
|
-
0 6
|
48
|
-
0000000000 65535 f
|
49
|
-
0000000015 00000 n
|
50
|
-
0000000071 00000 n
|
51
|
-
0000000128 00000 n
|
52
|
-
0000000177 00000 n
|
53
|
-
0000000423 00000 n
|
54
|
-
trailer
|
55
|
-
<< /Info 1 0 R
|
56
|
-
/Size 6
|
57
|
-
/Root 3 0 R
|
58
|
-
>>
|
59
|
-
startxref
|
60
|
-
514
|
61
|
-
%%EOF
|
data/data/shift_jis_text.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
���C���y�[�W
|
data/spec/acceptance/png.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require_relative "../../lib/prawn"
|
4
|
-
|
5
|
-
images = [
|
6
|
-
["Type 0", "#{Prawn::BASEDIR}/data/images/web-links.png"],
|
7
|
-
["Type 2", "#{Prawn::BASEDIR}/data/images/ruport.png"],
|
8
|
-
["Type 3", "#{Prawn::BASEDIR}/data/images/indexed_color.png"],
|
9
|
-
["Type 4", "#{Prawn::BASEDIR}/data/images/page_white_text.png"],
|
10
|
-
["Type 6", "#{Prawn::BASEDIR}/data/images/dice.png"]
|
11
|
-
]
|
12
|
-
|
13
|
-
Prawn::Document.generate("png_types.pdf", :page_size => "A5") do
|
14
|
-
images.each do |header, file|
|
15
|
-
start_new_page unless header.include?("0")
|
16
|
-
|
17
|
-
fill_color "FF0000"
|
18
|
-
|
19
|
-
fill_rectangle bounds.top_left, bounds.width, bounds.height
|
20
|
-
text header
|
21
|
-
|
22
|
-
image file, :at => [50, 450]
|
23
|
-
end
|
24
|
-
end
|
data/spec/annotations_spec.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "When creating annotations" do
|
6
|
-
before(:each) { create_pdf }
|
7
|
-
|
8
|
-
it "should append annotation to current page" do
|
9
|
-
@pdf.start_new_page
|
10
|
-
@pdf.annotate(:Rect => [0, 0, 10, 10], :Subtype => :Text, :Contents => "Hello world!")
|
11
|
-
PDF::Reader.open(StringIO.new(@pdf.render)) do |pdf|
|
12
|
-
expect(pdf.page(1).attributes[:Annots]).to be_nil
|
13
|
-
expect(pdf.page(2).attributes[:Annots].size).to eq(1)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should force :Type to be :Annot" do
|
18
|
-
opts = @pdf.annotate(:Rect => [0, 0, 10, 10], :Subtype => :Text, :Contents => "Hello world!")
|
19
|
-
expect(opts[:Type]).to eq(:Annot)
|
20
|
-
opts = @pdf.annotate(:Type => :Bogus, :Rect => [0, 0, 10, 10], :Subtype => :Text, :Contents => "Hello world!")
|
21
|
-
expect(opts[:Type]).to eq(:Annot)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "When creating text annotations" do
|
26
|
-
before(:each) do
|
27
|
-
@rect = [0, 0, 10, 10]
|
28
|
-
@content = "Hello, world!"
|
29
|
-
create_pdf
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should build appropriate annotation" do
|
33
|
-
opts = @pdf.text_annotation(@rect, @content)
|
34
|
-
expect(opts[:Type]).to eq(:Annot)
|
35
|
-
expect(opts[:Subtype]).to eq(:Text)
|
36
|
-
expect(opts[:Rect]).to eq(@rect)
|
37
|
-
expect(opts[:Contents]).to eq(@content)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should merge extra options" do
|
41
|
-
opts = @pdf.text_annotation(@rect, @content, :Open => true, :Subtype => :Bogus)
|
42
|
-
expect(opts[:Subtype]).to eq(:Text)
|
43
|
-
expect(opts[:Open]).to eq(true)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "When creating link annotations" do
|
48
|
-
before(:each) do
|
49
|
-
@rect = [0, 0, 10, 10]
|
50
|
-
@dest = "home"
|
51
|
-
create_pdf
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should build appropriate annotation" do
|
55
|
-
opts = @pdf.link_annotation(@rect, :Dest => @dest)
|
56
|
-
expect(opts[:Type]).to eq(:Annot)
|
57
|
-
expect(opts[:Subtype]).to eq(:Link)
|
58
|
-
expect(opts[:Rect]).to eq(@rect)
|
59
|
-
expect(opts[:Dest]).to eq(@dest)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should merge extra options" do
|
63
|
-
opts = @pdf.link_annotation(@rect, :Dest => @dest, :Subtype => :Bogus)
|
64
|
-
expect(opts[:Subtype]).to eq(:Link)
|
65
|
-
expect(opts[:Dest]).to eq(@dest)
|
66
|
-
end
|
67
|
-
end
|
data/spec/bounding_box_spec.rb
DELETED
@@ -1,501 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "A bounding box" do
|
6
|
-
before(:each) do
|
7
|
-
@x = 100
|
8
|
-
@y = 125
|
9
|
-
@width = 50
|
10
|
-
@height = 75
|
11
|
-
@box = Prawn::Document::BoundingBox.new(nil,
|
12
|
-
nil,
|
13
|
-
[@x, @y],
|
14
|
-
:width => @width,
|
15
|
-
:height => @height)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should have an anchor at (x, y - height)" do
|
19
|
-
expect(@box.anchor).to eq([@x, @y - @height])
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should have a left boundary of 0" do
|
23
|
-
expect(@box.left).to eq(0)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should have a right boundary equal to the width" do
|
27
|
-
expect(@box.right).to eq(@width)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should have a top boundary of height" do
|
31
|
-
expect(@box.top).to eq(@height)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should have a bottom boundary of 0" do
|
35
|
-
expect(@box.bottom).to eq(0)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should have a top-left of [0,height]" do
|
39
|
-
expect(@box.top_left).to eq([0, @height])
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should have a top-right of [width,height]" do
|
43
|
-
expect(@box.top_right).to eq([@width, @height])
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should have a bottom-left of [0,0]" do
|
47
|
-
expect(@box.bottom_left).to eq([0, 0])
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should have a bottom-right of [width,0]" do
|
51
|
-
expect(@box.bottom_right).to eq([@width, 0])
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should have an absolute left boundary of x" do
|
55
|
-
expect(@box.absolute_left).to eq(@x)
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should have an absolute right boundary of x + width" do
|
59
|
-
expect(@box.absolute_right).to eq(@x + @width)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should have an absolute top boundary of y" do
|
63
|
-
expect(@box.absolute_top).to eq(@y)
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should have an absolute bottom boundary of y - height" do
|
67
|
-
expect(@box.absolute_bottom).to eq(@y - @height)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should have an absolute bottom-left of [x,y-height]" do
|
71
|
-
expect(@box.absolute_bottom_left).to eq([@x, @y - @height])
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should have an absolute bottom-right of [x+width,y-height]" do
|
75
|
-
expect(@box.absolute_bottom_right).to eq([@x + @width , @y - @height])
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should have an absolute top-left of [x,y]" do
|
79
|
-
expect(@box.absolute_top_left).to eq([@x, @y])
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should have an absolute top-right of [x+width,y]" do
|
83
|
-
expect(@box.absolute_top_right).to eq([@x + @width, @y])
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should require width to be set" do
|
87
|
-
expect do
|
88
|
-
Prawn::Document::BoundingBox.new(nil, nil, [100, 100])
|
89
|
-
end.to raise_error(ArgumentError)
|
90
|
-
end
|
91
|
-
|
92
|
-
it "should raise_error an ArgumentError if a block is not passed" do
|
93
|
-
pdf = Prawn::Document.new
|
94
|
-
expect do
|
95
|
-
pdf.bounding_box([0, 0], :width => 200)
|
96
|
-
end.to raise_error(ArgumentError)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "drawing bounding boxes" do
|
101
|
-
before(:each) { create_pdf }
|
102
|
-
|
103
|
-
it "should not stomp on the arguments to bounding_box" do
|
104
|
-
pdf = Prawn::Document.new
|
105
|
-
x = [100, 500]
|
106
|
-
pdf.bounding_box x, :width => 100 do
|
107
|
-
pdf.text "bork-bork-bork"
|
108
|
-
end
|
109
|
-
expect(x).to eq([100, 500])
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should restore Document#bounds to the correct margin box on exit" do
|
113
|
-
pdf = Prawn::Document.new(:margin => 200)
|
114
|
-
|
115
|
-
# add a multi-page bounding box
|
116
|
-
pdf.bounding_box([100, pdf.bounds.top], :width => 400) do
|
117
|
-
pdf.text "The rain in spain falls mainly in the plains.\n" * 30
|
118
|
-
end
|
119
|
-
|
120
|
-
pdf.start_new_page(:margin => 0)
|
121
|
-
|
122
|
-
x_min, y_min, x_max, y_max = pdf.page.dimensions
|
123
|
-
|
124
|
-
expect(pdf.bounds.absolute_top_left).to eq([x_min, y_max])
|
125
|
-
expect(pdf.bounds.absolute_bottom_right).to eq([x_max, y_min])
|
126
|
-
end
|
127
|
-
|
128
|
-
it "should restore the parent bounding box when calls are nested" do
|
129
|
-
@pdf.bounding_box [100, 500], :width => 300, :height => 300 do
|
130
|
-
expect(@pdf.bounds.absolute_top).to eq(500 + @pdf.margin_box.absolute_bottom)
|
131
|
-
expect(@pdf.bounds.absolute_left).to eq(100 + @pdf.margin_box.absolute_left)
|
132
|
-
|
133
|
-
parent_box = @pdf.bounds
|
134
|
-
|
135
|
-
@pdf.bounding_box [50, 200], :width => 100, :height => 100 do
|
136
|
-
expect(@pdf.bounds.absolute_top).to eq(200 + parent_box.absolute_bottom)
|
137
|
-
expect(@pdf.bounds.absolute_left).to eq(50 + parent_box.absolute_left)
|
138
|
-
end
|
139
|
-
|
140
|
-
expect(@pdf.bounds.absolute_top).to eq(500 + @pdf.margin_box.absolute_bottom)
|
141
|
-
expect(@pdf.bounds.absolute_left).to eq(100 + @pdf.margin_box.absolute_left)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
it "should calculate a height if none is specified" do
|
146
|
-
@pdf.bounding_box([100, 500], :width => 100) do
|
147
|
-
@pdf.text "The rain in Spain falls mainly on the plains."
|
148
|
-
end
|
149
|
-
|
150
|
-
expect(@pdf.y).to be_within(0.001).of(458.384)
|
151
|
-
end
|
152
|
-
|
153
|
-
it "should keep track of the max height the box was stretched to" do
|
154
|
-
box = @pdf.bounding_box(@pdf.bounds.top_left, :width => 100) do
|
155
|
-
@pdf.move_down 100
|
156
|
-
@pdf.move_up 15
|
157
|
-
end
|
158
|
-
|
159
|
-
expect(box.height).to eq(100)
|
160
|
-
end
|
161
|
-
|
162
|
-
it "should advance the y-position by bbox.height by default" do
|
163
|
-
orig_y = @pdf.y
|
164
|
-
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width, :height => 30 do
|
165
|
-
@pdf.text "hello"
|
166
|
-
end
|
167
|
-
expect(@pdf.y).to be_within(0.001).of(orig_y - 30)
|
168
|
-
end
|
169
|
-
|
170
|
-
it "should not advance y-position if passed :hold_position => true" do
|
171
|
-
orig_y = @pdf.y
|
172
|
-
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width, :hold_position => true do
|
173
|
-
@pdf.text "hello"
|
174
|
-
end
|
175
|
-
# y only advances by height of one line ("hello")
|
176
|
-
expect(@pdf.y).to be_within(0.001).of(orig_y - @pdf.height_of("hello"))
|
177
|
-
end
|
178
|
-
|
179
|
-
it "should not advance y-position of a stretchy bbox if it would stretch " \
|
180
|
-
"the bbox further" do
|
181
|
-
bottom = @pdf.y = @pdf.margin_box.absolute_bottom
|
182
|
-
@pdf.bounding_box [0, @pdf.margin_box.top], :width => @pdf.bounds.width do
|
183
|
-
@pdf.y = bottom
|
184
|
-
@pdf.text "hello" # starts a new page
|
185
|
-
end
|
186
|
-
expect(@pdf.page_count).to eq(2)
|
187
|
-
|
188
|
-
# Restoring the position (to the absolute bottom) would stretch the bbox to
|
189
|
-
# the bottom of the page, which we don't want. This should be equivalent to
|
190
|
-
# a bbox with :hold_position => true, where we only advance by the amount
|
191
|
-
# that was actually drawn.
|
192
|
-
expect(@pdf.y).to be_within(0.001).of(
|
193
|
-
@pdf.margin_box.absolute_top - @pdf.height_of("hello")
|
194
|
-
)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
describe "Indentation" do
|
199
|
-
before(:each) { create_pdf }
|
200
|
-
|
201
|
-
it "should temporarily shift the x coordinate and width" do
|
202
|
-
@pdf.bounding_box([100, 100], :width => 200) do
|
203
|
-
@pdf.indent(20) do
|
204
|
-
expect(@pdf.bounds.absolute_left).to eq(120)
|
205
|
-
expect(@pdf.bounds.width).to eq(180)
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
it "should restore the x coordinate and width after block exits" do
|
211
|
-
@pdf.bounding_box([100, 100], :width => 200) do
|
212
|
-
@pdf.indent(20) do
|
213
|
-
# no-op
|
214
|
-
end
|
215
|
-
expect(@pdf.bounds.absolute_left).to eq(100)
|
216
|
-
expect(@pdf.bounds.width).to eq(200)
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
it "should restore the x coordinate and width on error" do
|
221
|
-
@pdf.bounding_box([100, 100], :width => 200) do
|
222
|
-
begin
|
223
|
-
@pdf.indent(20) { fail }
|
224
|
-
rescue
|
225
|
-
expect(@pdf.bounds.absolute_left).to eq(100)
|
226
|
-
expect(@pdf.bounds.width).to eq(200)
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
it "should maintain left indentation across a page break" do
|
232
|
-
original_left = @pdf.bounds.absolute_left
|
233
|
-
|
234
|
-
@pdf.indent(20) do
|
235
|
-
expect(@pdf.bounds.absolute_left).to eq(original_left + 20)
|
236
|
-
@pdf.start_new_page
|
237
|
-
expect(@pdf.bounds.absolute_left).to eq(original_left + 20)
|
238
|
-
end
|
239
|
-
|
240
|
-
expect(@pdf.bounds.absolute_left).to eq(original_left)
|
241
|
-
end
|
242
|
-
|
243
|
-
it "should maintain right indentation across a page break" do
|
244
|
-
original_width = @pdf.bounds.width
|
245
|
-
|
246
|
-
@pdf.indent(0, 20) do
|
247
|
-
expect(@pdf.bounds.width).to eq(original_width - 20)
|
248
|
-
@pdf.start_new_page
|
249
|
-
expect(@pdf.bounds.width).to eq(original_width - 20)
|
250
|
-
end
|
251
|
-
|
252
|
-
expect(@pdf.bounds.width).to eq(original_width)
|
253
|
-
end
|
254
|
-
|
255
|
-
it "optionally allows adjustment of the right bound as well" do
|
256
|
-
@pdf.bounding_box([100, 100], :width => 200) do
|
257
|
-
@pdf.indent(20, 30) do
|
258
|
-
expect(@pdf.bounds.absolute_left).to eq(120)
|
259
|
-
expect(@pdf.bounds.width).to eq(150)
|
260
|
-
end
|
261
|
-
expect(@pdf.bounds.absolute_left).to eq(100)
|
262
|
-
expect(@pdf.bounds.width).to eq(200)
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
describe "in a ColumnBox" do
|
267
|
-
it "should subtract the given indentation from the available width" do
|
268
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :height => 200, :columns => 2, :spacer => 20) do
|
269
|
-
width = @pdf.bounds.width
|
270
|
-
@pdf.indent(20) do
|
271
|
-
expect(@pdf.bounds.width).to be_within(0.01).of(width - 20)
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
it "should subtract right padding from the available width" do
|
277
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :height => 200, :columns => 2, :spacer => 20) do
|
278
|
-
width = @pdf.bounds.width
|
279
|
-
@pdf.indent(20, 30) do
|
280
|
-
expect(@pdf.bounds.width).to be_within(0.01).of(width - 50)
|
281
|
-
end
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
it "should maintain the same left indentation across column breaks" do
|
286
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
287
|
-
3.times do |column|
|
288
|
-
x = @pdf.bounds.left_side
|
289
|
-
@pdf.indent(20) do
|
290
|
-
expect(@pdf.bounds.left_side).to eq(x + 20)
|
291
|
-
end
|
292
|
-
@pdf.bounds.move_past_bottom
|
293
|
-
end
|
294
|
-
end
|
295
|
-
end
|
296
|
-
|
297
|
-
it "should not change the right margin if only left indentation is requested" do
|
298
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
299
|
-
3.times do |column|
|
300
|
-
x = @pdf.bounds.right_side
|
301
|
-
@pdf.indent(20) do
|
302
|
-
expect(@pdf.bounds.right_side).to eq(x)
|
303
|
-
end
|
304
|
-
@pdf.bounds.move_past_bottom
|
305
|
-
end
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
it "should maintain the same right indentation across columns" do
|
310
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
311
|
-
3.times do |column|
|
312
|
-
x = @pdf.bounds.right_side
|
313
|
-
@pdf.indent(20, 10) do
|
314
|
-
expect(@pdf.bounds.right_side).to eq(x - 10)
|
315
|
-
end
|
316
|
-
@pdf.bounds.move_past_bottom
|
317
|
-
end
|
318
|
-
end
|
319
|
-
end
|
320
|
-
|
321
|
-
it "should keep the right indentation after nesting indents" do
|
322
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
323
|
-
3.times do |column|
|
324
|
-
# I am giving a right indent of 10...
|
325
|
-
@pdf.indent(20, 10) do
|
326
|
-
x = @pdf.bounds.right_side
|
327
|
-
# ...and no right indent here...
|
328
|
-
@pdf.indent(20) do
|
329
|
-
# right indent is inherited from the parent!
|
330
|
-
expect(@pdf.bounds.right_side).to eq(x)
|
331
|
-
end
|
332
|
-
end
|
333
|
-
@pdf.bounds.move_past_bottom
|
334
|
-
end
|
335
|
-
end
|
336
|
-
end
|
337
|
-
|
338
|
-
it "should revert the right indentation if negative indent is given in nested indent" do
|
339
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
340
|
-
3.times do |column|
|
341
|
-
x = @pdf.bounds.right_side
|
342
|
-
@pdf.indent(20, 10) do
|
343
|
-
# requesting a negative right-indent of equivalent size...
|
344
|
-
@pdf.indent(20, -10) do
|
345
|
-
# ...resets the right margin to that of the column!
|
346
|
-
expect(@pdf.bounds.right_side).to eq(x)
|
347
|
-
end
|
348
|
-
end
|
349
|
-
@pdf.bounds.move_past_bottom
|
350
|
-
end
|
351
|
-
end
|
352
|
-
end
|
353
|
-
|
354
|
-
it "should reduce the available column width by the sum of all nested indents" do
|
355
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
356
|
-
3.times do |column|
|
357
|
-
w = @pdf.bounds.width
|
358
|
-
@pdf.indent(20, 10) do
|
359
|
-
@pdf.indent(20, 10) do
|
360
|
-
expect(@pdf.bounds.width).to eq(w - 60)
|
361
|
-
end
|
362
|
-
end
|
363
|
-
@pdf.bounds.move_past_bottom
|
364
|
-
end
|
365
|
-
end
|
366
|
-
end
|
367
|
-
end
|
368
|
-
end
|
369
|
-
|
370
|
-
describe "A canvas" do
|
371
|
-
before(:each) { create_pdf }
|
372
|
-
|
373
|
-
it "should use whatever the last set y position is" do
|
374
|
-
@pdf.canvas do
|
375
|
-
@pdf.bounding_box([100, 500], :width => 200) { @pdf.move_down 50 }
|
376
|
-
end
|
377
|
-
expect(@pdf.y).to eq(450)
|
378
|
-
end
|
379
|
-
|
380
|
-
it "should restore the original ypos after execution", :issue => 523 do
|
381
|
-
doc = Prawn::Document.new(:skip_page_creation => true)
|
382
|
-
doc.start_new_page
|
383
|
-
|
384
|
-
original_ypos = doc.y
|
385
|
-
|
386
|
-
doc.canvas {}
|
387
|
-
|
388
|
-
expect(doc.y).to eq(original_ypos)
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
describe "Deep-copying" do
|
393
|
-
it "should create a new object that does not copy @document" do
|
394
|
-
Prawn::Document.new do |pdf|
|
395
|
-
orig = pdf.bounds
|
396
|
-
copy = orig.deep_copy
|
397
|
-
|
398
|
-
expect(copy).not_to eq(pdf.bounds)
|
399
|
-
expect(copy.document).to be_nil
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
|
-
it "should deep-copy parent bounds" do
|
404
|
-
Prawn::Document.new do |pdf|
|
405
|
-
outside = pdf.bounds
|
406
|
-
pdf.bounding_box [100, 100], :width => 100 do
|
407
|
-
copy = pdf.bounds.deep_copy
|
408
|
-
|
409
|
-
# the parent bounds should have the same parameters
|
410
|
-
expect(copy.parent.width).to eq(outside.width)
|
411
|
-
expect(copy.parent.height).to eq(outside.height)
|
412
|
-
|
413
|
-
# but should not be the same object
|
414
|
-
expect(copy.parent).not_to eq(outside)
|
415
|
-
end
|
416
|
-
end
|
417
|
-
end
|
418
|
-
end
|
419
|
-
|
420
|
-
describe "Prawn::Document#reference_bounds" do
|
421
|
-
before(:each) { create_pdf }
|
422
|
-
|
423
|
-
it "should return self for non-stretchy bounds" do
|
424
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
425
|
-
expect(@pdf.reference_bounds).to eq(@pdf.bounds)
|
426
|
-
end
|
427
|
-
end
|
428
|
-
|
429
|
-
it "should return the parent bounds if in a stretchy box" do
|
430
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
431
|
-
correct_bounds = @pdf.bounds
|
432
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
433
|
-
expect(@pdf.reference_bounds).to eq(correct_bounds)
|
434
|
-
end
|
435
|
-
end
|
436
|
-
end
|
437
|
-
|
438
|
-
it "should find the non-stretchy box through 2 levels" do
|
439
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
440
|
-
correct_bounds = @pdf.bounds
|
441
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
442
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
443
|
-
expect(@pdf.reference_bounds).to eq(correct_bounds)
|
444
|
-
end
|
445
|
-
end
|
446
|
-
end
|
447
|
-
end
|
448
|
-
|
449
|
-
it "should return the margin box if there's no explicit bbox" do
|
450
|
-
expect(@pdf.reference_bounds).to eq(@pdf.margin_box)
|
451
|
-
|
452
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
453
|
-
expect(@pdf.reference_bounds).to eq(@pdf.margin_box)
|
454
|
-
end
|
455
|
-
end
|
456
|
-
|
457
|
-
it "should return the canvas box if we're in a canvas" do
|
458
|
-
@pdf.canvas do
|
459
|
-
canvas_box = @pdf.bounds
|
460
|
-
|
461
|
-
expect(@pdf.reference_bounds).to eq(canvas_box)
|
462
|
-
|
463
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
464
|
-
expect(@pdf.reference_bounds).to eq(canvas_box)
|
465
|
-
end
|
466
|
-
end
|
467
|
-
end
|
468
|
-
end
|
469
|
-
|
470
|
-
describe "BoundingBox#move_past_bottom" do
|
471
|
-
before(:each) { create_pdf }
|
472
|
-
|
473
|
-
it "should ordinarily start a new page" do
|
474
|
-
@pdf.bounds.move_past_bottom
|
475
|
-
@pdf.text "Foo"
|
476
|
-
|
477
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
478
|
-
expect(pages.size).to eq(2)
|
479
|
-
expect(pages[0][:strings]).to eq([])
|
480
|
-
expect(pages[1][:strings]).to eq(["Foo"])
|
481
|
-
end
|
482
|
-
|
483
|
-
it "should move to the top of the next page if it exists already" do
|
484
|
-
# save away the y-position at the top of a page
|
485
|
-
top_y = @pdf.y
|
486
|
-
|
487
|
-
# create a blank page but go to the page before it
|
488
|
-
@pdf.start_new_page
|
489
|
-
@pdf.go_to_page 1
|
490
|
-
@pdf.text "Foo"
|
491
|
-
|
492
|
-
@pdf.bounds.move_past_bottom
|
493
|
-
expect(@pdf.y).to be_within(0.001).of(top_y)
|
494
|
-
@pdf.text "Bar"
|
495
|
-
|
496
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
497
|
-
expect(pages.size).to eq(2)
|
498
|
-
expect(pages[0][:strings]).to eq(["Foo"])
|
499
|
-
expect(pages[1][:strings]).to eq(["Bar"])
|
500
|
-
end
|
501
|
-
end
|