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
data/spec/graphics_spec.rb
DELETED
@@ -1,669 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "When drawing a line" do
|
6
|
-
|
7
|
-
before(:each) { create_pdf }
|
8
|
-
|
9
|
-
it "should draw a line from (100,600) to (100,500)" do
|
10
|
-
@pdf.line([100,600],[100,500])
|
11
|
-
|
12
|
-
line_drawing = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
13
|
-
|
14
|
-
line_drawing.points.should == [[100,600],[100,500]]
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should draw two lines at (100,600) to (100,500) " +
|
18
|
-
"and (75,100) to (50,125)" do
|
19
|
-
@pdf.line(100,600,100,500)
|
20
|
-
@pdf.line(75,100,50,125)
|
21
|
-
|
22
|
-
line_drawing = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
23
|
-
|
24
|
-
line_drawing.points.should ==
|
25
|
-
[[100.0, 600.0], [100.0, 500.0], [75.0, 100.0], [50.0, 125.0]]
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should properly set line width via line_width=" do
|
29
|
-
@pdf.line_width = 10
|
30
|
-
line = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
31
|
-
line.widths.first.should == 10
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should properly set line width via line_width(width)" do
|
35
|
-
@pdf.line_width(10)
|
36
|
-
line = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
37
|
-
line.widths.first.should == 10
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should carry the current line width settings over to new pages" do
|
41
|
-
@pdf.line_width(10)
|
42
|
-
@pdf.start_new_page
|
43
|
-
line = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
44
|
-
line.widths.length.should == 2
|
45
|
-
line.widths[1].should == 10
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "(Horizontally)" do
|
49
|
-
it "should draw from [x1,pdf.y],[x2,pdf.y]" do
|
50
|
-
@pdf.horizontal_line(100,150)
|
51
|
-
@line = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
52
|
-
@line.points.should == [[100.0 + @pdf.bounds.absolute_left, @pdf.y],
|
53
|
-
[150.0 + @pdf.bounds.absolute_left, @pdf.y]]
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should draw a line from (200, 250) to (300, 250)" do
|
57
|
-
@pdf.horizontal_line(200,300,:at => 250)
|
58
|
-
line_drawing = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
59
|
-
line_drawing.points.should == [[200,250],[300,250]]
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "(Vertically)" do
|
64
|
-
it "should draw a line from (350, 300) to (350, 400)" do
|
65
|
-
@pdf.vertical_line(300,400,:at => 350)
|
66
|
-
line_drawing = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
67
|
-
line_drawing.points.should == [[350,300],[350,400]]
|
68
|
-
end
|
69
|
-
it "should require a y coordinate" do
|
70
|
-
lambda { @pdf.vertical_line(400,500) }.
|
71
|
-
should raise_error(ArgumentError)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
describe "When drawing a polygon" do
|
78
|
-
|
79
|
-
before(:each) { create_pdf }
|
80
|
-
|
81
|
-
it "should draw each line passed to polygon()" do
|
82
|
-
@pdf.polygon([100,500],[100,400],[200,400])
|
83
|
-
|
84
|
-
line_drawing = PDF::Inspector::Graphics::Line.analyze(@pdf.render)
|
85
|
-
line_drawing.points.should == [[100,500],[100,400],[200,400],[100,500]]
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "When drawing a rectangle" do
|
91
|
-
|
92
|
-
before(:each) { create_pdf }
|
93
|
-
|
94
|
-
it "should use a point, width, and height for coords" do
|
95
|
-
@pdf.rectangle [200,200], 50, 100
|
96
|
-
|
97
|
-
rectangles = PDF::Inspector::Graphics::Rectangle.
|
98
|
-
analyze(@pdf.render).rectangles
|
99
|
-
# PDF uses bottom left corner
|
100
|
-
rectangles[0][:point].should == [200,100]
|
101
|
-
rectangles[0][:width].should == 50
|
102
|
-
rectangles[0][:height].should == 100
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
describe "When drawing a curve" do
|
109
|
-
|
110
|
-
before(:each) { create_pdf }
|
111
|
-
|
112
|
-
it "should draw a bezier curve from 50,50 to 100,100" do
|
113
|
-
@pdf.move_to [50,50]
|
114
|
-
@pdf.curve_to [100,100],:bounds => [[20,90], [90,70]]
|
115
|
-
curve = PDF::Inspector::Graphics::Curve.analyze(@pdf.render)
|
116
|
-
curve.coords.should == [50.0, 50.0, 20.0, 90.0, 90.0, 70.0, 100.0, 100.0]
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should draw a bezier curve from 100,100 to 50,50" do
|
120
|
-
@pdf.curve [100,100], [50,50], :bounds => [[20,90], [90,75]]
|
121
|
-
curve = PDF::Inspector::Graphics::Curve.analyze(@pdf.render)
|
122
|
-
curve.coords.should == [100.0, 100.0, 20.0, 90.0, 90.0, 75.0, 50.0, 50.0]
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
end
|
127
|
-
|
128
|
-
describe "When drawing a rounded rectangle" do
|
129
|
-
before(:each) do
|
130
|
-
create_pdf
|
131
|
-
@pdf.rounded_rectangle([50, 550], 50, 100, 10)
|
132
|
-
curve = PDF::Inspector::Graphics::Curve.analyze(@pdf.render)
|
133
|
-
curve_points = []
|
134
|
-
curve.coords.each_slice(2) {|p| curve_points << p}
|
135
|
-
@original_point = curve_points.shift
|
136
|
-
curves = []
|
137
|
-
curve_points.each_slice(3) {|c| curves << c}
|
138
|
-
line_points = PDF::Inspector::Graphics::Line.analyze(@pdf.render).points
|
139
|
-
line_points.shift
|
140
|
-
@all_coords = []
|
141
|
-
line_points.zip(curves).flatten.each_slice(2) {|p| @all_coords << p }
|
142
|
-
@all_coords.unshift @original_point
|
143
|
-
end
|
144
|
-
|
145
|
-
it "should draw a rectangle by connecting lines with rounded bezier curves" do
|
146
|
-
@all_coords.should == [[60.0, 550.0],[90.0, 550.0], [95.523, 550.0], [100.0, 545.523], [100.0, 540.0],
|
147
|
-
[100.0, 460.0], [100.0, 454.477], [95.523, 450.0], [90.0, 450.0],
|
148
|
-
[60.0, 450.0], [54.477, 450.0], [50.0, 454.477], [50.0, 460.0],
|
149
|
-
[50.0, 540.0], [50.0, 545.523], [54.477, 550.0], [60.0, 550.0]]
|
150
|
-
end
|
151
|
-
|
152
|
-
it "should start and end with the same point" do
|
153
|
-
@original_point.should == @all_coords.last
|
154
|
-
end
|
155
|
-
|
156
|
-
|
157
|
-
end
|
158
|
-
|
159
|
-
describe "When drawing an ellipse" do
|
160
|
-
before(:each) do
|
161
|
-
create_pdf
|
162
|
-
@pdf.ellipse [100,100], 25, 50
|
163
|
-
@curve = PDF::Inspector::Graphics::Curve.analyze(@pdf.render)
|
164
|
-
end
|
165
|
-
|
166
|
-
it "should use a Bézier approximation" do
|
167
|
-
@curve.coords.should ==
|
168
|
-
[125.0, 100.0,
|
169
|
-
|
170
|
-
125.0, 127.614,
|
171
|
-
113.807, 150,
|
172
|
-
100.0, 150.0,
|
173
|
-
|
174
|
-
86.193, 150.0,
|
175
|
-
75.0, 127.614,
|
176
|
-
75.0, 100.0,
|
177
|
-
|
178
|
-
75.0, 72.386,
|
179
|
-
86.193, 50.0,
|
180
|
-
100.0, 50.0,
|
181
|
-
|
182
|
-
113.807, 50.0,
|
183
|
-
125.0, 72.386,
|
184
|
-
125.0, 100.0,
|
185
|
-
|
186
|
-
100.0, 100.0]
|
187
|
-
end
|
188
|
-
|
189
|
-
it "should move the pointer to the center of the ellipse after drawing" do
|
190
|
-
@curve.coords[-2..-1].should == [100,100]
|
191
|
-
end
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
describe "When drawing a circle" do
|
196
|
-
before(:each) do
|
197
|
-
create_pdf
|
198
|
-
@pdf.circle [100,100], 25
|
199
|
-
@pdf.ellipse [100,100], 25, 25
|
200
|
-
@curve = PDF::Inspector::Graphics::Curve.analyze(@pdf.render)
|
201
|
-
end
|
202
|
-
|
203
|
-
it "should stroke the same path as the equivalent ellipse" do
|
204
|
-
middle = @curve.coords.length / 2
|
205
|
-
@curve.coords[0...middle].should == @curve.coords[middle..-1]
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
describe "When filling" do
|
210
|
-
before(:each) { create_pdf }
|
211
|
-
|
212
|
-
it "should default to the f operator (nonzero winding number rule)" do
|
213
|
-
@pdf.expects(:add_content).with("f")
|
214
|
-
@pdf.fill
|
215
|
-
end
|
216
|
-
|
217
|
-
it "should use f* for :fill_rule => :even_odd" do
|
218
|
-
@pdf.expects(:add_content).with("f*")
|
219
|
-
@pdf.fill(:fill_rule => :even_odd)
|
220
|
-
end
|
221
|
-
|
222
|
-
it "should use b by default for fill_and_stroke (nonzero winding number)" do
|
223
|
-
@pdf.expects(:add_content).with("b")
|
224
|
-
@pdf.fill_and_stroke
|
225
|
-
end
|
226
|
-
|
227
|
-
it "should use b* for fill_and_stroke(:fill_rule => :even_odd)" do
|
228
|
-
@pdf.expects(:add_content).with("b*")
|
229
|
-
@pdf.fill_and_stroke(:fill_rule => :even_odd)
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
describe "When setting colors" do
|
234
|
-
|
235
|
-
before(:each) { create_pdf }
|
236
|
-
|
237
|
-
it "should set stroke colors" do
|
238
|
-
@pdf.stroke_color "ffcccc"
|
239
|
-
colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
|
240
|
-
# 100% red, 80% green, 80% blue
|
241
|
-
colors.stroke_color.should == [1.0, 0.8, 0.8]
|
242
|
-
end
|
243
|
-
|
244
|
-
it "should set fill colors" do
|
245
|
-
@pdf.fill_color "ccff00"
|
246
|
-
colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
|
247
|
-
# 80% red, 100% green, 0% blue
|
248
|
-
colors.fill_color.should == [0.8,1.0,0]
|
249
|
-
end
|
250
|
-
|
251
|
-
it "should reset the colors on each new page if they have been defined" do
|
252
|
-
@pdf.fill_color "ccff00"
|
253
|
-
#colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
|
254
|
-
|
255
|
-
# colors.fill_color_count.should == 2
|
256
|
-
# colors.stroke_color_count.should == 1
|
257
|
-
@pdf.start_new_page
|
258
|
-
@pdf.stroke_color "ff00cc"
|
259
|
-
|
260
|
-
#colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
|
261
|
-
# colors.fill_color_count.should == 3
|
262
|
-
|
263
|
-
@pdf.start_new_page
|
264
|
-
colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
|
265
|
-
colors.fill_color_count.should == 3
|
266
|
-
colors.stroke_color_count.should == 2
|
267
|
-
|
268
|
-
colors.fill_color.should == [0.8,1.0,0.0]
|
269
|
-
colors.stroke_color.should == [1.0,0.0,0.8]
|
270
|
-
end
|
271
|
-
|
272
|
-
it "should set the color space when setting colors on new pages to please fussy readers" do
|
273
|
-
@pdf.stroke_color "000000"
|
274
|
-
@pdf.stroke { @pdf.rectangle([10, 10], 10, 10) }
|
275
|
-
@pdf.start_new_page
|
276
|
-
@pdf.stroke_color "000000"
|
277
|
-
@pdf.stroke { @pdf.rectangle([10, 10], 10, 10) }
|
278
|
-
colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
|
279
|
-
colors.stroke_color_space_count[:DeviceRGB].should == 2
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
describe "Patterns" do
|
284
|
-
before(:each) { create_pdf }
|
285
|
-
|
286
|
-
describe 'linear gradients' do
|
287
|
-
it "should create a /Pattern resource" do
|
288
|
-
@pdf.fill_gradient [0, @pdf.bounds.height],
|
289
|
-
[@pdf.bounds.width, @pdf.bounds.height], 'FF0000', '0000FF'
|
290
|
-
|
291
|
-
grad = PDF::Inspector::Graphics::Pattern.analyze(@pdf.render)
|
292
|
-
pattern = grad.patterns.values.first
|
293
|
-
|
294
|
-
pattern.should_not be_nil
|
295
|
-
pattern[:Shading][:ShadingType].should == 2
|
296
|
-
pattern[:Shading][:Coords].should == [0, 0, @pdf.bounds.width, 0]
|
297
|
-
pattern[:Shading][:Function][:C0].zip([1, 0, 0]).all?{ |x1, x2|
|
298
|
-
(x1-x2).abs < 0.01
|
299
|
-
}.should be_true
|
300
|
-
pattern[:Shading][:Function][:C1].zip([0, 0, 1]).all?{ |x1, x2|
|
301
|
-
(x1-x2).abs < 0.01
|
302
|
-
}.should be_true
|
303
|
-
end
|
304
|
-
|
305
|
-
it "fill_gradient should set fill color to the pattern" do
|
306
|
-
@pdf.fill_gradient [0, @pdf.bounds.height],
|
307
|
-
[@pdf.bounds.width, @pdf.bounds.height], 'FF0000', '0000FF'
|
308
|
-
|
309
|
-
str = @pdf.render
|
310
|
-
str.should =~ %r{/Pattern\s+cs\s*/SP-?\d+\s+scn}
|
311
|
-
end
|
312
|
-
|
313
|
-
it "stroke_gradient should set stroke color to the pattern" do
|
314
|
-
@pdf.stroke_gradient [0, @pdf.bounds.height],
|
315
|
-
[@pdf.bounds.width, @pdf.bounds.height], 'FF0000', '0000FF'
|
316
|
-
|
317
|
-
str = @pdf.render
|
318
|
-
str.should =~ %r{/Pattern\s+CS\s*/SP-?\d+\s+SCN}
|
319
|
-
end
|
320
|
-
end
|
321
|
-
|
322
|
-
describe 'radial gradients' do
|
323
|
-
it "should create a /Pattern resource" do
|
324
|
-
@pdf.fill_gradient [0, @pdf.bounds.height], 10,
|
325
|
-
[@pdf.bounds.width, @pdf.bounds.height], 20, 'FF0000', '0000FF'
|
326
|
-
|
327
|
-
grad = PDF::Inspector::Graphics::Pattern.analyze(@pdf.render)
|
328
|
-
pattern = grad.patterns.values.first
|
329
|
-
|
330
|
-
pattern.should_not be_nil
|
331
|
-
pattern[:Shading][:ShadingType].should == 3
|
332
|
-
pattern[:Shading][:Coords].should == [0, 0, 10, @pdf.bounds.width, 0, 20]
|
333
|
-
pattern[:Shading][:Function][:C0].zip([1, 0, 0]).all?{ |x1, x2|
|
334
|
-
(x1-x2).abs < 0.01
|
335
|
-
}.should be_true
|
336
|
-
pattern[:Shading][:Function][:C1].zip([0, 0, 1]).all?{ |x1, x2|
|
337
|
-
(x1-x2).abs < 0.01
|
338
|
-
}.should be_true
|
339
|
-
end
|
340
|
-
|
341
|
-
it "fill_gradient should set fill color to the pattern" do
|
342
|
-
@pdf.fill_gradient [0, @pdf.bounds.height], 10,
|
343
|
-
[@pdf.bounds.width, @pdf.bounds.height], 20, 'FF0000', '0000FF'
|
344
|
-
|
345
|
-
str = @pdf.render
|
346
|
-
str.should =~ %r{/Pattern\s+cs\s*/SP-?\d+\s+scn}
|
347
|
-
end
|
348
|
-
|
349
|
-
it "stroke_gradient should set stroke color to the pattern" do
|
350
|
-
@pdf.stroke_gradient [0, @pdf.bounds.height], 10,
|
351
|
-
[@pdf.bounds.width, @pdf.bounds.height], 20, 'FF0000', '0000FF'
|
352
|
-
|
353
|
-
str = @pdf.render
|
354
|
-
str.should =~ %r{/Pattern\s+CS\s*/SP-?\d+\s+SCN}
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
describe "When using painting shortcuts" do
|
360
|
-
before(:each) { create_pdf }
|
361
|
-
|
362
|
-
it "should convert stroke_some_method(args) into some_method(args); stroke" do
|
363
|
-
@pdf.expects(:line_to).with([100,100])
|
364
|
-
@pdf.expects(:stroke)
|
365
|
-
|
366
|
-
@pdf.stroke_line_to [100,100]
|
367
|
-
end
|
368
|
-
|
369
|
-
it "should convert fill_some_method(args) into some_method(args); fill" do
|
370
|
-
@pdf.expects(:line_to).with([100,100])
|
371
|
-
@pdf.expects(:fill)
|
372
|
-
|
373
|
-
@pdf.fill_line_to [100,100]
|
374
|
-
end
|
375
|
-
|
376
|
-
it "should not break method_missing" do
|
377
|
-
lambda { @pdf.i_have_a_pretty_girlfriend_named_jia }.
|
378
|
-
should raise_error(NoMethodError)
|
379
|
-
end
|
380
|
-
end
|
381
|
-
|
382
|
-
describe "When using graphics states" do
|
383
|
-
before(:each) { create_pdf }
|
384
|
-
|
385
|
-
it "should add the right content on save_graphics_state" do
|
386
|
-
@pdf.expects(:add_content).with('q')
|
387
|
-
|
388
|
-
@pdf.save_graphics_state
|
389
|
-
end
|
390
|
-
|
391
|
-
it "should add the right content on restore_graphics_state" do
|
392
|
-
@pdf.expects(:add_content).with('Q')
|
393
|
-
|
394
|
-
@pdf.restore_graphics_state
|
395
|
-
end
|
396
|
-
|
397
|
-
it "should save and restore when save_graphics_state is used with a block" do
|
398
|
-
state = sequence "state"
|
399
|
-
@pdf.expects(:add_content).with('q').in_sequence(state)
|
400
|
-
@pdf.expects(:foo).in_sequence(state)
|
401
|
-
@pdf.expects(:add_content).with('Q').in_sequence(state)
|
402
|
-
|
403
|
-
@pdf.save_graphics_state do
|
404
|
-
@pdf.foo
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
it "should add the previous color space when restoring to a graphic state with different color space" do
|
409
|
-
@pdf.stroke_color '000000'
|
410
|
-
@pdf.save_graphics_state
|
411
|
-
@pdf.stroke_color 0, 0, 0, 0
|
412
|
-
@pdf.restore_graphics_state
|
413
|
-
@pdf.stroke_color 0, 0, 100, 0
|
414
|
-
@pdf.graphic_state.color_space.should == {:stroke=>:DeviceCMYK}
|
415
|
-
colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
|
416
|
-
colors.color_space.should == :DeviceCMYK
|
417
|
-
colors.stroke_color_space_count[:DeviceCMYK].should == 2
|
418
|
-
end
|
419
|
-
|
420
|
-
it "should use the correct dash setting after restoring and starting new page" do
|
421
|
-
@pdf.dash 5
|
422
|
-
@pdf.save_graphics_state
|
423
|
-
@pdf.dash 10
|
424
|
-
@pdf.graphic_state.dash[:dash].should == 10
|
425
|
-
@pdf.restore_graphics_state
|
426
|
-
@pdf.start_new_page
|
427
|
-
@pdf.graphic_state.dash[:dash].should == 5
|
428
|
-
end
|
429
|
-
|
430
|
-
it "the current graphic state should keep track of previous unchanged settings" do
|
431
|
-
@pdf.stroke_color '000000'
|
432
|
-
@pdf.save_graphics_state
|
433
|
-
@pdf.dash 5
|
434
|
-
@pdf.save_graphics_state
|
435
|
-
@pdf.cap_style :round
|
436
|
-
@pdf.save_graphics_state
|
437
|
-
@pdf.fill_color 0, 0, 100, 0
|
438
|
-
@pdf.save_graphics_state
|
439
|
-
|
440
|
-
@pdf.graphic_state.stroke_color.should == "000000"
|
441
|
-
@pdf.graphic_state.join_style.should == :miter
|
442
|
-
@pdf.graphic_state.fill_color.should == [0, 0, 100, 0]
|
443
|
-
@pdf.graphic_state.cap_style.should == :round
|
444
|
-
@pdf.graphic_state.color_space.should == {:fill=>:DeviceCMYK, :stroke=>:DeviceRGB}
|
445
|
-
@pdf.graphic_state.dash.should == {:space=>5, :phase=>0, :dash=>5}
|
446
|
-
@pdf.graphic_state.line_width.should == 1
|
447
|
-
end
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
it "should not add extra graphic space closings when rendering multiple times" do
|
452
|
-
@pdf.render
|
453
|
-
state = PDF::Inspector::Graphics::State.analyze(@pdf.render)
|
454
|
-
state.save_graphics_state_count.should == 1
|
455
|
-
state.restore_graphics_state_count.should == 1
|
456
|
-
end
|
457
|
-
|
458
|
-
it "should add extra graphic state enclosings when content is added on multiple renderings" do
|
459
|
-
@pdf.render
|
460
|
-
@pdf.text "Adding a bit more content"
|
461
|
-
state = PDF::Inspector::Graphics::State.analyze(@pdf.render)
|
462
|
-
state.save_graphics_state_count.should == 2
|
463
|
-
state.restore_graphics_state_count.should == 2
|
464
|
-
end
|
465
|
-
|
466
|
-
it "adds extra graphic state enclosings when new settings are applied on multiple renderings" do
|
467
|
-
@pdf.render
|
468
|
-
@pdf.stroke_color 0, 0, 0, 0
|
469
|
-
state = PDF::Inspector::Graphics::State.analyze(@pdf.render)
|
470
|
-
state.save_graphics_state_count.should == 2
|
471
|
-
state.restore_graphics_state_count.should == 2
|
472
|
-
end
|
473
|
-
|
474
|
-
|
475
|
-
it "should raise_error error if closing an empty graphic stack" do
|
476
|
-
lambda {
|
477
|
-
@pdf.render
|
478
|
-
@pdf.restore_graphics_state
|
479
|
-
}.should raise_error(PDF::Core::Errors::EmptyGraphicStateStack)
|
480
|
-
end
|
481
|
-
|
482
|
-
it "should copy mutable attributes when passing a previous_state to the initializer" do
|
483
|
-
new_state = PDF::Core::GraphicState.new(@pdf.graphic_state)
|
484
|
-
|
485
|
-
[:color_space, :dash, :fill_color, :stroke_color].each do |attr|
|
486
|
-
new_state.send(attr).should == @pdf.graphic_state.send(attr)
|
487
|
-
new_state.send(attr).should_not equal(@pdf.graphic_state.send(attr))
|
488
|
-
end
|
489
|
-
end
|
490
|
-
|
491
|
-
it "should copy mutable attributes when duping" do
|
492
|
-
new_state = @pdf.graphic_state.dup
|
493
|
-
|
494
|
-
[:color_space, :dash, :fill_color, :stroke_color].each do |attr|
|
495
|
-
new_state.send(attr).should == @pdf.graphic_state.send(attr)
|
496
|
-
new_state.send(attr).should_not equal(@pdf.graphic_state.send(attr))
|
497
|
-
end
|
498
|
-
end
|
499
|
-
end
|
500
|
-
|
501
|
-
describe "When using transformation matrix" do
|
502
|
-
before(:each) { create_pdf }
|
503
|
-
|
504
|
-
# Note: The (approximate) number of significant decimal digits of precision in fractional
|
505
|
-
# part is 5 (PDF Reference, Third Edition, p. 706)
|
506
|
-
|
507
|
-
it "should send the right content on transformation_matrix" do
|
508
|
-
@pdf.expects(:add_content).with('1.00000 0.00000 0.12346 -1.00000 5.50000 20.00000 cm')
|
509
|
-
@pdf.transformation_matrix 1, 0, 0.123456789, -1.0, 5.5, 20
|
510
|
-
end
|
511
|
-
|
512
|
-
it "should use fixed digits with very small number" do
|
513
|
-
values = Array.new(6, 0.000000000001)
|
514
|
-
string = Array.new(6, "0.00000").join " "
|
515
|
-
@pdf.expects(:add_content).with("#{string} cm")
|
516
|
-
@pdf.transformation_matrix *values
|
517
|
-
end
|
518
|
-
|
519
|
-
it "should be received by the inspector" do
|
520
|
-
@pdf.transformation_matrix 1, 0, 0, -1, 5.5, 20
|
521
|
-
matrices = PDF::Inspector::Graphics::Matrix.analyze(@pdf.render)
|
522
|
-
matrices.matrices.should == [[1, 0, 0, -1, 5.5, 20]]
|
523
|
-
end
|
524
|
-
|
525
|
-
it "should save the graphics state inside the given block" do
|
526
|
-
values = Array.new(6, 0.000000000001)
|
527
|
-
string = Array.new(6, "0.00000").join " "
|
528
|
-
process = sequence "process"
|
529
|
-
|
530
|
-
@pdf.expects(:save_graphics_state).with().in_sequence(process)
|
531
|
-
@pdf.expects(:add_content).with("#{string} cm").in_sequence(process)
|
532
|
-
@pdf.expects(:do_something).with().in_sequence(process)
|
533
|
-
@pdf.expects(:restore_graphics_state).with().in_sequence(process)
|
534
|
-
@pdf.transformation_matrix(*values) do
|
535
|
-
@pdf.do_something
|
536
|
-
end
|
537
|
-
end
|
538
|
-
|
539
|
-
end
|
540
|
-
|
541
|
-
describe "When using transformations shortcuts" do
|
542
|
-
before(:each) do
|
543
|
-
create_pdf
|
544
|
-
@x, @y = 12, 54.32
|
545
|
-
@angle = 12.32
|
546
|
-
@cos = Math.cos(@angle * Math::PI / 180)
|
547
|
-
@sin = Math.sin(@angle * Math::PI / 180)
|
548
|
-
@factor = 0.12
|
549
|
-
end
|
550
|
-
|
551
|
-
describe "#rotate" do
|
552
|
-
it "should rotate" do
|
553
|
-
@pdf.expects(:transformation_matrix).with(@cos, @sin, -@sin, @cos, 0, 0)
|
554
|
-
@pdf.rotate(@angle)
|
555
|
-
end
|
556
|
-
end
|
557
|
-
|
558
|
-
describe "#rotate with :origin option" do
|
559
|
-
it "should rotate around the origin" do
|
560
|
-
x_prime = @x * @cos - @y * @sin
|
561
|
-
y_prime = @x * @sin + @y * @cos
|
562
|
-
|
563
|
-
@pdf.rotate(@angle, :origin => [@x, @y]) { @pdf.text('hello world') }
|
564
|
-
|
565
|
-
matrices = PDF::Inspector::Graphics::Matrix.analyze(@pdf.render)
|
566
|
-
matrices.matrices[0].should == [1, 0, 0, 1,
|
567
|
-
reduce_precision(@x - x_prime),
|
568
|
-
reduce_precision(@y - y_prime)]
|
569
|
-
matrices.matrices[1].should == [reduce_precision(@cos),
|
570
|
-
reduce_precision(@sin),
|
571
|
-
reduce_precision(-@sin),
|
572
|
-
reduce_precision(@cos), 0, 0]
|
573
|
-
end
|
574
|
-
|
575
|
-
it "should rotate around the origin in a document with a margin" do
|
576
|
-
@pdf = Prawn::Document.new
|
577
|
-
|
578
|
-
@pdf.rotate(@angle, :origin => [@x, @y]) { @pdf.text('hello world') }
|
579
|
-
|
580
|
-
x = @x + @pdf.bounds.absolute_left
|
581
|
-
y = @y + @pdf.bounds.absolute_bottom
|
582
|
-
x_prime = x * @cos - y * @sin
|
583
|
-
y_prime = x * @sin + y * @cos
|
584
|
-
|
585
|
-
matrices = PDF::Inspector::Graphics::Matrix.analyze(@pdf.render)
|
586
|
-
matrices.matrices[0].should == [1, 0, 0, 1,
|
587
|
-
reduce_precision(x - x_prime),
|
588
|
-
reduce_precision(y - y_prime)]
|
589
|
-
matrices.matrices[1].should == [reduce_precision(@cos),
|
590
|
-
reduce_precision(@sin),
|
591
|
-
reduce_precision(-@sin),
|
592
|
-
reduce_precision(@cos), 0, 0]
|
593
|
-
end
|
594
|
-
|
595
|
-
it "should raise_error BlockRequired if no block is given" do
|
596
|
-
lambda {
|
597
|
-
@pdf.rotate(@angle, :origin => [@x, @y])
|
598
|
-
}.should raise_error(Prawn::Errors::BlockRequired)
|
599
|
-
end
|
600
|
-
|
601
|
-
def reduce_precision(float)
|
602
|
-
("%.5f" % float).to_f
|
603
|
-
end
|
604
|
-
end
|
605
|
-
|
606
|
-
describe "#translate" do
|
607
|
-
it "should translate" do
|
608
|
-
x, y = 12, 54.32
|
609
|
-
@pdf.expects(:transformation_matrix).with(1, 0, 0, 1, x, y)
|
610
|
-
@pdf.translate(x, y)
|
611
|
-
end
|
612
|
-
end
|
613
|
-
|
614
|
-
describe "#scale" do
|
615
|
-
it "should scale" do
|
616
|
-
@pdf.expects(:transformation_matrix).with(@factor, 0, 0, @factor, 0, 0)
|
617
|
-
@pdf.scale(@factor)
|
618
|
-
end
|
619
|
-
end
|
620
|
-
|
621
|
-
describe "#scale with :origin option" do
|
622
|
-
it "should scale from the origin" do
|
623
|
-
x_prime = @factor * @x
|
624
|
-
y_prime = @factor * @y
|
625
|
-
|
626
|
-
@pdf.scale(@factor, :origin => [@x, @y]) { @pdf.text('hello world') }
|
627
|
-
|
628
|
-
matrices = PDF::Inspector::Graphics::Matrix.analyze(@pdf.render)
|
629
|
-
matrices.matrices[0].should == [1, 0, 0, 1,
|
630
|
-
reduce_precision(@x - x_prime),
|
631
|
-
reduce_precision(@y - y_prime)]
|
632
|
-
matrices.matrices[1].should == [@factor, 0, 0, @factor, 0, 0]
|
633
|
-
end
|
634
|
-
|
635
|
-
it "should scale from the origin in a document with a margin" do
|
636
|
-
@pdf = Prawn::Document.new
|
637
|
-
x = @x + @pdf.bounds.absolute_left
|
638
|
-
y = @y + @pdf.bounds.absolute_bottom
|
639
|
-
x_prime = @factor * x
|
640
|
-
y_prime = @factor * y
|
641
|
-
|
642
|
-
@pdf.scale(@factor, :origin => [@x, @y]) { @pdf.text('hello world') }
|
643
|
-
|
644
|
-
matrices = PDF::Inspector::Graphics::Matrix.analyze(@pdf.render)
|
645
|
-
matrices.matrices[0].should == [1, 0, 0, 1,
|
646
|
-
reduce_precision(x - x_prime),
|
647
|
-
reduce_precision(y - y_prime)]
|
648
|
-
matrices.matrices[1].should == [@factor, 0, 0, @factor, 0, 0]
|
649
|
-
end
|
650
|
-
|
651
|
-
it "should raise_error BlockRequired if no block is given" do
|
652
|
-
lambda {
|
653
|
-
@pdf.scale(@factor, :origin => [@x, @y])
|
654
|
-
}.should raise_error(Prawn::Errors::BlockRequired)
|
655
|
-
end
|
656
|
-
|
657
|
-
def reduce_precision(float)
|
658
|
-
("%.5f" % float).to_f
|
659
|
-
end
|
660
|
-
end
|
661
|
-
|
662
|
-
# describe "skew" do
|
663
|
-
# it "should skew" do
|
664
|
-
# a, b = 30, 50.2
|
665
|
-
# @pdf.expects(:transformation_matrix).with(1, Math.tan(a * Math::PI / 180), Math.tan(b * Math::PI / 180), 1, 0, 0)
|
666
|
-
# @pdf.skew(a, b)
|
667
|
-
# end
|
668
|
-
# end
|
669
|
-
end
|