prawn 0.13.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.yardopts +10 -0
- data/GPLv2 +20 -21
- data/Gemfile +3 -16
- data/Rakefile +17 -39
- data/lib/prawn/document/bounding_box.rb +85 -42
- data/lib/prawn/document/column_box.rb +21 -11
- data/lib/prawn/document/internals.rb +40 -147
- data/lib/prawn/document/span.rb +25 -17
- data/lib/prawn/document.rb +286 -245
- data/lib/prawn/encoding.rb +68 -101
- data/lib/prawn/errors.rb +47 -43
- data/lib/prawn/font.rb +204 -155
- data/lib/prawn/font_metric_cache.rb +25 -21
- data/lib/prawn/fonts/afm.rb +292 -0
- data/lib/prawn/{font → fonts}/dfont.rb +7 -13
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/fonts/ttc.rb +36 -0
- data/lib/prawn/{font → fonts}/ttf.rb +142 -80
- data/lib/prawn/graphics/blend_mode.rb +65 -0
- data/lib/prawn/graphics/cap_style.rb +6 -5
- data/lib/prawn/graphics/color.rb +47 -44
- data/lib/prawn/graphics/dash.rb +30 -13
- data/lib/prawn/graphics/join_style.rb +13 -6
- data/lib/prawn/graphics/patterns.rb +221 -90
- data/lib/prawn/graphics/transformation.rb +21 -12
- data/lib/prawn/graphics/transparency.rb +21 -17
- data/lib/prawn/graphics.rb +155 -128
- data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
- data/lib/prawn/image_handler.rb +16 -2
- data/lib/prawn/images/image.rb +4 -2
- data/lib/prawn/images/jpg.rb +39 -30
- data/lib/prawn/images/png.rb +132 -169
- data/lib/prawn/images.rb +70 -62
- data/lib/prawn/measurement_extensions.rb +15 -10
- data/lib/prawn/measurements.rb +22 -23
- data/lib/prawn/outline.rb +301 -13
- data/lib/prawn/repeater.rb +19 -17
- data/lib/prawn/security/arcfour.rb +54 -0
- data/lib/prawn/security.rb +108 -86
- data/lib/prawn/soft_mask.rb +40 -41
- data/lib/prawn/stamp.rb +29 -12
- data/lib/prawn/text/box.rb +27 -29
- data/lib/prawn/text/formatted/arranger.rb +110 -67
- data/lib/prawn/text/formatted/box.rb +233 -165
- data/lib/prawn/text/formatted/fragment.rb +27 -27
- data/lib/prawn/text/formatted/line_wrap.rb +137 -97
- data/lib/prawn/text/formatted/parser.rb +149 -127
- data/lib/prawn/text/formatted/wrap.rb +57 -37
- data/lib/prawn/text/formatted.rb +6 -4
- data/lib/prawn/text.rb +105 -73
- data/lib/prawn/transformation_stack.rb +44 -0
- data/lib/prawn/utilities.rb +11 -21
- data/lib/prawn/version.rb +5 -0
- data/lib/prawn/view.rb +101 -0
- data/lib/prawn.rb +42 -68
- data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
- data/manual/basic_concepts/adding_pages.rb +9 -10
- data/manual/basic_concepts/basic_concepts.rb +33 -24
- data/manual/basic_concepts/creation.rb +10 -11
- data/manual/basic_concepts/cursor.rb +9 -10
- data/manual/basic_concepts/measurement.rb +10 -11
- data/manual/basic_concepts/origin.rb +8 -9
- data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
- data/manual/basic_concepts/view.rb +48 -0
- data/manual/bounding_box/bounding_box.rb +31 -29
- data/manual/bounding_box/bounds.rb +17 -18
- data/manual/bounding_box/canvas.rb +8 -9
- data/manual/bounding_box/creation.rb +8 -9
- data/manual/bounding_box/indentation.rb +22 -23
- data/manual/bounding_box/nesting.rb +32 -25
- data/manual/bounding_box/russian_boxes.rb +19 -19
- data/manual/bounding_box/stretchy.rb +18 -20
- data/manual/contents.rb +35 -0
- data/manual/cover.rb +43 -0
- data/manual/document_and_page_options/background.rb +16 -14
- data/manual/document_and_page_options/document_and_page_options.rb +26 -23
- data/manual/document_and_page_options/metadata.rb +21 -19
- data/manual/document_and_page_options/page_margins.rb +20 -22
- data/manual/document_and_page_options/page_size.rb +15 -15
- data/manual/document_and_page_options/print_scaling.rb +23 -0
- data/manual/example_helper.rb +5 -408
- data/manual/graphics/blend_mode.rb +52 -0
- data/manual/graphics/circle_and_ellipse.rb +8 -9
- data/manual/graphics/color.rb +11 -13
- data/manual/graphics/common_lines.rb +13 -12
- data/manual/graphics/fill_and_stroke.rb +10 -11
- data/manual/graphics/fill_rules.rb +13 -12
- data/manual/graphics/gradients.rb +28 -22
- data/manual/graphics/graphics.rb +52 -46
- data/manual/graphics/helper.rb +20 -10
- data/manual/graphics/line_width.rb +13 -12
- data/manual/graphics/lines_and_curves.rb +13 -14
- data/manual/graphics/polygon.rb +10 -12
- data/manual/graphics/rectangle.rb +7 -8
- data/manual/graphics/rotate.rb +9 -12
- data/manual/graphics/scale.rb +19 -18
- data/manual/graphics/soft_masks.rb +5 -7
- data/manual/graphics/stroke_cap.rb +10 -11
- data/manual/graphics/stroke_dash.rb +16 -17
- data/manual/graphics/stroke_join.rb +10 -11
- data/manual/graphics/translate.rb +13 -13
- data/manual/graphics/transparency.rb +11 -13
- data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
- data/manual/images/absolute_position.rb +9 -10
- data/manual/images/fit.rb +9 -10
- data/manual/images/horizontal.rb +13 -14
- data/manual/images/images.rb +31 -30
- data/manual/images/plain_image.rb +6 -7
- data/manual/images/scale.rb +12 -13
- data/manual/images/vertical.rb +19 -17
- data/manual/images/width_and_height.rb +13 -14
- data/manual/layout/boxes.rb +14 -15
- data/manual/layout/content.rb +12 -13
- data/manual/layout/layout.rb +19 -20
- data/manual/layout/simple_grid.rb +8 -9
- data/manual/outline/add_subsection_to.rb +26 -27
- data/manual/outline/insert_section_after.rb +19 -20
- data/manual/outline/outline.rb +23 -22
- data/manual/outline/sections_and_pages.rb +24 -25
- data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
- data/manual/repeatable_content/page_numbering.rb +20 -19
- data/manual/repeatable_content/repeatable_content.rb +26 -22
- data/manual/repeatable_content/repeater.rb +18 -19
- data/manual/repeatable_content/stamp.rb +18 -19
- data/manual/security/encryption.rb +8 -11
- data/manual/security/permissions.rb +20 -15
- data/manual/security/security.rb +20 -20
- data/manual/table.rb +16 -0
- data/manual/text/alignment.rb +17 -18
- data/manual/text/color.rb +13 -13
- data/manual/text/column_box.rb +10 -12
- data/manual/text/fallback_fonts.rb +29 -25
- data/manual/text/font.rb +17 -18
- data/manual/text/font_size.rb +21 -22
- data/manual/text/font_style.rb +12 -10
- data/manual/text/formatted_callbacks.rb +36 -26
- data/manual/text/formatted_text.rb +41 -34
- data/manual/text/free_flowing_text.rb +28 -29
- data/manual/text/inline.rb +23 -26
- data/manual/text/kerning_and_character_spacing.rb +20 -21
- data/manual/text/leading.rb +10 -11
- data/manual/text/line_wrapping.rb +40 -21
- data/manual/text/paragraph_indentation.rb +17 -12
- data/manual/text/positioned_text.rb +19 -20
- data/manual/text/registering_families.rb +33 -30
- data/manual/text/rendering_and_color.rb +11 -12
- data/manual/text/right_to_left_text.rb +31 -20
- data/manual/text/rotation.rb +36 -27
- data/manual/text/single_usage.rb +13 -14
- data/manual/text/text.rb +62 -62
- data/manual/text/text_box_excess.rb +22 -19
- data/manual/text/text_box_extensions.rb +21 -18
- data/manual/text/text_box_overflow.rb +28 -21
- data/manual/text/utf8.rb +16 -17
- data/manual/text/win_ansi_charset.rb +29 -26
- data/prawn.gemspec +45 -43
- data/spec/extensions/encoding_helpers.rb +4 -3
- data/spec/prawn/document/bounding_box_spec.rb +550 -0
- data/spec/prawn/document/column_box_spec.rb +75 -0
- data/spec/prawn/document/security_spec.rb +176 -0
- data/spec/prawn/document_annotations_spec.rb +76 -0
- data/spec/prawn/document_destinations_spec.rb +15 -0
- data/spec/prawn/document_grid_spec.rb +99 -0
- data/spec/prawn/document_reference_spec.rb +27 -0
- data/spec/prawn/document_span_spec.rb +44 -0
- data/spec/prawn/document_spec.rb +805 -0
- data/spec/prawn/font_metric_cache_spec.rb +54 -0
- data/spec/prawn/font_spec.rb +544 -0
- data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
- data/spec/prawn/graphics/transparency_spec.rb +81 -0
- data/spec/prawn/graphics_spec.rb +872 -0
- data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
- data/spec/prawn/image_handler_spec.rb +53 -0
- data/spec/prawn/images/jpg_spec.rb +20 -0
- data/spec/prawn/images/png_spec.rb +283 -0
- data/spec/prawn/images_spec.rb +229 -0
- data/spec/prawn/measurements_extensions_spec.rb +24 -0
- data/spec/prawn/outline_spec.rb +512 -0
- data/spec/prawn/repeater_spec.rb +166 -0
- data/spec/prawn/soft_mask_spec.rb +74 -0
- data/spec/prawn/stamp_spec.rb +173 -0
- data/spec/prawn/text/box_spec.rb +1110 -0
- data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
- data/spec/prawn/text/formatted/box_spec.rb +849 -0
- data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
- data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
- data/spec/prawn/text/formatted/parser_spec.rb +697 -0
- data/spec/prawn/text_draw_text_spec.rb +150 -0
- data/spec/prawn/text_rendering_mode_spec.rb +48 -0
- data/spec/prawn/text_spacing_spec.rb +95 -0
- data/spec/prawn/text_spec.rb +603 -0
- data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
- data/spec/prawn/transformation_stack_spec.rb +66 -0
- data/spec/prawn/view_spec.rb +63 -0
- data/spec/prawn_manual_spec.rb +35 -0
- data/spec/spec_helper.rb +22 -21
- data.tar.gz.sig +0 -0
- metadata +168 -307
- metadata.gz.sig +0 -0
- data/README.md +0 -109
- data/data/encodings/win_ansi.txt +0 -29
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/16bit.png +0 -0
- data/data/images/arrow.png +0 -0
- data/data/images/arrow2.png +0 -0
- data/data/images/barcode_issue.png +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/page_white_text.png +0 -0
- data/data/images/pigs.jpg +0 -0
- data/data/images/prawn.png +0 -0
- data/data/images/ruport.png +0 -0
- data/data/images/ruport_data.dat +0 -0
- data/data/images/ruport_transparent.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/data/images/stef.jpg +0 -0
- data/data/images/tru256.bmp +0 -0
- data/data/images/web-links.dat +0 -1
- data/data/images/web-links.png +0 -0
- data/data/pdfs/complex_template.pdf +0 -0
- data/data/pdfs/contains_ttf_font.pdf +0 -0
- data/data/pdfs/encrypted.pdf +0 -0
- data/data/pdfs/form.pdf +1 -819
- data/data/pdfs/hexagon.pdf +0 -61
- data/data/pdfs/indirect_reference.pdf +0 -86
- data/data/pdfs/multipage_template.pdf +0 -127
- data/data/pdfs/nested_pages.pdf +0 -118
- data/data/pdfs/page_without_mediabox.pdf +0 -193
- data/data/pdfs/resources_as_indirect_object.pdf +0 -83
- data/data/pdfs/two_hexagons.pdf +0 -90
- data/data/pdfs/version_1_6.pdf +0 -61
- data/data/shift_jis_text.txt +0 -1
- data/lib/pdf/core/annotations.rb +0 -60
- data/lib/pdf/core/byte_string.rb +0 -9
- data/lib/pdf/core/destinations.rb +0 -90
- data/lib/pdf/core/document_state.rb +0 -78
- data/lib/pdf/core/filter_list.rb +0 -51
- data/lib/pdf/core/filters.rb +0 -36
- data/lib/pdf/core/graphics_state.rb +0 -68
- data/lib/pdf/core/literal_string.rb +0 -16
- data/lib/pdf/core/name_tree.rb +0 -177
- data/lib/pdf/core/object_store.rb +0 -320
- data/lib/pdf/core/outline.rb +0 -315
- data/lib/pdf/core/page.rb +0 -212
- data/lib/pdf/core/page_geometry.rb +0 -126
- data/lib/pdf/core/pdf_object.rb +0 -124
- data/lib/pdf/core/reference.rb +0 -103
- data/lib/pdf/core/stream.rb +0 -98
- data/lib/pdf/core/text.rb +0 -275
- data/lib/pdf/core.rb +0 -35
- data/lib/prawn/compatibility.rb +0 -91
- data/lib/prawn/document/graphics_state.rb +0 -73
- data/lib/prawn/document/snapshot.rb +0 -89
- data/lib/prawn/font/afm.rb +0 -203
- data/lib/prawn/layout.rb +0 -20
- data/lib/prawn/table/cell/image.rb +0 -70
- data/lib/prawn/table/cell/in_table.rb +0 -27
- data/lib/prawn/table/cell/span_dummy.rb +0 -92
- data/lib/prawn/table/cell/subtable.rb +0 -65
- data/lib/prawn/table/cell/text.rb +0 -153
- data/lib/prawn/table/cell.rb +0 -770
- data/lib/prawn/table/cells.rb +0 -295
- data/lib/prawn/table.rb +0 -643
- data/manual/example_file.rb +0 -116
- data/manual/example_package.rb +0 -53
- data/manual/example_section.rb +0 -46
- data/manual/manual/cover.rb +0 -35
- data/manual/manual/foreword.rb +0 -85
- data/manual/manual/manual.rb +0 -35
- data/manual/syntax_highlight.rb +0 -52
- data/manual/table/basic_block.rb +0 -53
- data/manual/table/before_rendering_page.rb +0 -26
- data/manual/table/cell_border_lines.rb +0 -24
- data/manual/table/cell_borders_and_bg.rb +0 -31
- data/manual/table/cell_dimensions.rb +0 -30
- data/manual/table/cell_text.rb +0 -38
- data/manual/table/column_widths.rb +0 -30
- data/manual/table/content_and_subtables.rb +0 -39
- data/manual/table/creation.rb +0 -27
- data/manual/table/filtering.rb +0 -36
- data/manual/table/flow_and_header.rb +0 -17
- data/manual/table/image_cells.rb +0 -33
- data/manual/table/position.rb +0 -29
- data/manual/table/row_colors.rb +0 -20
- data/manual/table/span.rb +0 -30
- data/manual/table/style.rb +0 -22
- data/manual/table/table.rb +0 -52
- data/manual/table/width.rb +0 -27
- data/manual/templates/full_template.rb +0 -25
- data/manual/templates/page_template.rb +0 -48
- data/manual/templates/templates.rb +0 -27
- data/manual/text/group.rb +0 -29
- data/spec/acceptance/png.rb +0 -23
- data/spec/annotations_spec.rb +0 -74
- data/spec/bounding_box_spec.rb +0 -493
- data/spec/cell_spec.rb +0 -628
- data/spec/column_box_spec.rb +0 -33
- data/spec/destinations_spec.rb +0 -15
- data/spec/document_spec.rb +0 -761
- data/spec/extensions/mocha.rb +0 -44
- data/spec/filters_spec.rb +0 -34
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -464
- data/spec/formatted_text_arranger_spec.rb +0 -421
- data/spec/formatted_text_box_spec.rb +0 -650
- data/spec/formatted_text_fragment_spec.rb +0 -298
- data/spec/graphics_spec.rb +0 -651
- data/spec/grid_spec.rb +0 -85
- data/spec/image_handler_spec.rb +0 -42
- data/spec/images_spec.rb +0 -157
- data/spec/inline_formatted_text_parser_spec.rb +0 -564
- data/spec/jpg_spec.rb +0 -25
- data/spec/line_wrap_spec.rb +0 -333
- data/spec/measurement_units_spec.rb +0 -23
- data/spec/name_tree_spec.rb +0 -112
- data/spec/object_store_spec.rb +0 -170
- data/spec/outline_spec.rb +0 -448
- data/spec/pdf_object_spec.rb +0 -172
- data/spec/png_spec.rb +0 -240
- data/spec/reference_spec.rb +0 -82
- data/spec/repeater_spec.rb +0 -158
- data/spec/security_spec.rb +0 -158
- data/spec/snapshot_spec.rb +0 -186
- data/spec/soft_mask_spec.rb +0 -117
- data/spec/span_spec.rb +0 -44
- data/spec/stamp_spec.rb +0 -158
- data/spec/stream_spec.rb +0 -58
- data/spec/stroke_styles_spec.rb +0 -211
- data/spec/table/span_dummy_spec.rb +0 -17
- data/spec/table_spec.rb +0 -1355
- data/spec/template_spec.rb +0 -351
- data/spec/text_at_spec.rb +0 -130
- data/spec/text_box_spec.rb +0 -1030
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -425
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -89
@@ -1,45 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "#text_rendering_mode" do
|
6
|
-
it "should draw the text rendering mode to the document" do
|
7
|
-
create_pdf
|
8
|
-
@pdf.text_rendering_mode(:stroke) do
|
9
|
-
@pdf.text("hello world")
|
10
|
-
end
|
11
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
12
|
-
contents.text_rendering_mode.first.should == 1
|
13
|
-
end
|
14
|
-
it "should not draw the text rendering mode to the document" +
|
15
|
-
" when the new mode matches the old" do
|
16
|
-
create_pdf
|
17
|
-
@pdf.text_rendering_mode(:fill) do
|
18
|
-
@pdf.text("hello world")
|
19
|
-
end
|
20
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
21
|
-
contents.text_rendering_mode.should be_empty
|
22
|
-
end
|
23
|
-
it "should restore character spacing to 0" do
|
24
|
-
create_pdf
|
25
|
-
@pdf.text_rendering_mode(:stroke) do
|
26
|
-
@pdf.text("hello world")
|
27
|
-
end
|
28
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
29
|
-
contents.text_rendering_mode.should == [1,0]
|
30
|
-
end
|
31
|
-
it "should function as an accessor when no parameter given" do
|
32
|
-
create_pdf
|
33
|
-
@pdf.text_rendering_mode(:fill_stroke) do
|
34
|
-
@pdf.text("hello world")
|
35
|
-
@pdf.text_rendering_mode.should == :fill_stroke
|
36
|
-
end
|
37
|
-
@pdf.text_rendering_mode.should == :fill
|
38
|
-
end
|
39
|
-
it "should raise_error an exception when passed an invalid mode" do
|
40
|
-
create_pdf
|
41
|
-
lambda { @pdf.text_rendering_mode(-1) }.should raise_error(ArgumentError)
|
42
|
-
lambda { @pdf.text_rendering_mode(8) }.should raise_error(ArgumentError)
|
43
|
-
lambda { @pdf.text_rendering_mode(:flil) }.should raise_error(ArgumentError)
|
44
|
-
end
|
45
|
-
end
|
data/spec/text_spacing_spec.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "#character_spacing" do
|
6
|
-
it "should draw the character spacing to the document" do
|
7
|
-
create_pdf
|
8
|
-
@pdf.character_spacing(10.555555) do
|
9
|
-
@pdf.text("hello world")
|
10
|
-
end
|
11
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
12
|
-
contents.character_spacing.first.should == 10.556
|
13
|
-
end
|
14
|
-
it "should not draw the character spacing to the document" +
|
15
|
-
" when the new character spacing matches the old" do
|
16
|
-
create_pdf
|
17
|
-
@pdf.character_spacing(0) do
|
18
|
-
@pdf.text("hello world")
|
19
|
-
end
|
20
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
21
|
-
contents.character_spacing.should be_empty
|
22
|
-
end
|
23
|
-
it "should restore character spacing to 0" do
|
24
|
-
create_pdf
|
25
|
-
@pdf.character_spacing(10.555555) do
|
26
|
-
@pdf.text("hello world")
|
27
|
-
end
|
28
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
29
|
-
contents.character_spacing.last.should == 0
|
30
|
-
end
|
31
|
-
it "should function as an accessor when no parameter given" do
|
32
|
-
create_pdf
|
33
|
-
@pdf.character_spacing(10.555555) do
|
34
|
-
@pdf.text("hello world")
|
35
|
-
@pdf.character_spacing.should == 10.555555
|
36
|
-
end
|
37
|
-
@pdf.character_spacing.should == 0
|
38
|
-
end
|
39
|
-
|
40
|
-
# ensure that we properly internationalize by using the number of characters
|
41
|
-
# in a string, not the number of bytes, to insert character spaces
|
42
|
-
#
|
43
|
-
it "should calculate character spacing widths by characters, not bytes" do
|
44
|
-
create_pdf
|
45
|
-
@pdf.font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf")
|
46
|
-
|
47
|
-
str = "こんにちは世界"
|
48
|
-
@pdf.character_spacing(0) do
|
49
|
-
@raw_width = @pdf.width_of(str)
|
50
|
-
end
|
51
|
-
|
52
|
-
@pdf.character_spacing(10) do
|
53
|
-
# the new width should include seven 10-pt character spaces.
|
54
|
-
@pdf.width_of(str).should be_within(0.001).of(@raw_width + (10 * 7))
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#word_spacing" do
|
60
|
-
it "should draw the word spacing to the document" do
|
61
|
-
create_pdf
|
62
|
-
@pdf.word_spacing(10.555555) do
|
63
|
-
@pdf.text("hello world")
|
64
|
-
end
|
65
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
66
|
-
contents.word_spacing.first.should == 10.556
|
67
|
-
end
|
68
|
-
it "should draw the word spacing to the document" +
|
69
|
-
" when the new word spacing matches the old" do
|
70
|
-
create_pdf
|
71
|
-
@pdf.word_spacing(0) do
|
72
|
-
@pdf.text("hello world")
|
73
|
-
end
|
74
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
75
|
-
contents.word_spacing.should be_empty
|
76
|
-
end
|
77
|
-
it "should restore word spacing to 0" do
|
78
|
-
create_pdf
|
79
|
-
@pdf.word_spacing(10.555555) do
|
80
|
-
@pdf.text("hello world")
|
81
|
-
end
|
82
|
-
contents = PDF::Inspector::Text.analyze(@pdf.render)
|
83
|
-
contents.word_spacing.last.should == 0
|
84
|
-
end
|
85
|
-
it "should function as an accessor when no parameter given" do
|
86
|
-
create_pdf
|
87
|
-
@pdf.word_spacing(10.555555) do
|
88
|
-
@pdf.text("hello world")
|
89
|
-
@pdf.word_spacing.should == 10.555555
|
90
|
-
end
|
91
|
-
@pdf.word_spacing.should == 0
|
92
|
-
end
|
93
|
-
end
|
data/spec/text_spec.rb
DELETED
@@ -1,425 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "Prawn::Text::NBSP" do
|
6
|
-
it "should be defined" do
|
7
|
-
Prawn::Text::NBSP.should == " "
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "#height_of" do
|
12
|
-
before(:each) { create_pdf }
|
13
|
-
|
14
|
-
it "should return the height that would be required to print a" +
|
15
|
-
"particular string of text" do
|
16
|
-
original_y = @pdf.y
|
17
|
-
@pdf.text("Foo")
|
18
|
-
new_y = @pdf.y
|
19
|
-
@pdf.height_of("Foo").should be_within(0.0001).of(original_y - new_y)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should omit the gap below the last descender if :final_gap => false " +
|
23
|
-
"is given" do
|
24
|
-
original_y = @pdf.y
|
25
|
-
@pdf.text("Foo", :final_gap => false)
|
26
|
-
new_y = @pdf.y
|
27
|
-
@pdf.height_of("Foo", :final_gap => false).should be_within(0.0001).of(original_y - new_y)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should raise_error CannotFit if a too-small width is given" do
|
31
|
-
lambda do
|
32
|
-
@pdf.height_of("text", :width => 1)
|
33
|
-
end.should raise_error(Prawn::Errors::CannotFit)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should raise_error NotImplementedError if :indent_paragraphs option is provided" do
|
37
|
-
lambda {
|
38
|
-
@pdf.height_of("hai", :width => 300,
|
39
|
-
:indent_paragraphs => 60)
|
40
|
-
}.should raise_error(NotImplementedError)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should_not raise_error Prawn::Errors::UnknownOption if :final_gap option is provided" do
|
44
|
-
@pdf.height_of("hai", :width => 300, :final_gap => true)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#text" do
|
49
|
-
before(:each) { create_pdf }
|
50
|
-
|
51
|
-
it "should not fail when @output is nil when PDF::Core::Text::LineWrap#finalize_line is called" do
|
52
|
-
# need a document with margins for these particulars to produce the
|
53
|
-
# condition that was throwing the error
|
54
|
-
pdf = Prawn::Document.new
|
55
|
-
pdf.text "transparency " * 150, :size => 18
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should allow drawing empty strings to the page" do
|
59
|
-
@pdf.text " "
|
60
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
61
|
-
# If anything is rendered to the page, it should be whitespace.
|
62
|
-
text.strings.each { |str| str.should =~ /\A\s*\z/ }
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should ignore call when string is nil" do
|
66
|
-
@pdf.text(nil).should be_false
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should correctly render empty paragraphs" do
|
70
|
-
@pdf.text "text\n\ntext"
|
71
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
72
|
-
@pdf.page_count.should == 1
|
73
|
-
text.strings.reject{ |s| s.empty? }.should == ["text", "text"]
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should correctly render empty paragraphs with :indent_paragraphs" do
|
77
|
-
@pdf.text "text\n\ntext", :indent_paragraphs => 5
|
78
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
79
|
-
@pdf.page_count.should == 1
|
80
|
-
text.strings.reject{ |s| s.empty? }.should == ["text", "text"]
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should correctly render strings ending with empty paragraphs and " +
|
84
|
-
":inline_format and :indent_paragraphs" do
|
85
|
-
@pdf.text "text\n\n", :inline_format => true, :indent_paragraphs => 5
|
86
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
87
|
-
@pdf.page_count.should == 1
|
88
|
-
text.strings.should == ["text"]
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should default to use kerning information" do
|
92
|
-
@pdf.text "hello world"
|
93
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
94
|
-
text.kerned[0].should be_true
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should be able to disable kerning with an option" do
|
98
|
-
@pdf.text "hello world", :kerning => false
|
99
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
100
|
-
text.kerned[0].should be_false
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should be able to disable kerning document-wide" do
|
104
|
-
@pdf.default_kerning(false)
|
105
|
-
@pdf.default_kerning = false
|
106
|
-
@pdf.text "hello world"
|
107
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
108
|
-
text.kerned[0].should be_false
|
109
|
-
end
|
110
|
-
|
111
|
-
it "option should be able to override document-wide kerning disabling" do
|
112
|
-
@pdf.default_kerning = false
|
113
|
-
@pdf.text "hello world", :kerning => true
|
114
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
115
|
-
text.kerned[0].should be_true
|
116
|
-
end
|
117
|
-
|
118
|
-
it "should raise_error ArgumentError if :at option included" do
|
119
|
-
lambda { @pdf.text("hai", :at => [0, 0]) }.should raise_error(ArgumentError)
|
120
|
-
end
|
121
|
-
|
122
|
-
it "should advance down the document based on font_height" do
|
123
|
-
position = @pdf.y
|
124
|
-
@pdf.text "Foo"
|
125
|
-
|
126
|
-
@pdf.y.should be_within(0.0001).of(position - @pdf.font.height)
|
127
|
-
|
128
|
-
position = @pdf.y
|
129
|
-
@pdf.text "Foo\nBar\nBaz"
|
130
|
-
@pdf.y.should be_within(0.0001).of(position - 3*@pdf.font.height)
|
131
|
-
end
|
132
|
-
|
133
|
-
it "should advance down the document based on font_height" +
|
134
|
-
" with size option" do
|
135
|
-
position = @pdf.y
|
136
|
-
@pdf.text "Foo", :size => 15
|
137
|
-
|
138
|
-
@pdf.font_size = 15
|
139
|
-
@pdf.y.should be_within(0.0001).of(position - @pdf.font.height)
|
140
|
-
|
141
|
-
position = @pdf.y
|
142
|
-
@pdf.text "Foo\nBar\nBaz"
|
143
|
-
@pdf.y.should be_within(0.0001).of(position - 3 * @pdf.font.height)
|
144
|
-
end
|
145
|
-
|
146
|
-
it "should advance down the document based on font_height" +
|
147
|
-
" with leading option" do
|
148
|
-
position = @pdf.y
|
149
|
-
leading = 2
|
150
|
-
@pdf.text "Foo", :leading => leading
|
151
|
-
|
152
|
-
@pdf.y.should be_within(0.0001).of(position - @pdf.font.height - leading)
|
153
|
-
|
154
|
-
position = @pdf.y
|
155
|
-
@pdf.text "Foo\nBar\nBaz"
|
156
|
-
@pdf.y.should be_within(0.0001).of(position - 3*@pdf.font.height)
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should advance only to the bottom of the final descender "+
|
160
|
-
"if final_gap is false" do
|
161
|
-
position = @pdf.y
|
162
|
-
@pdf.text "Foo", :final_gap => false
|
163
|
-
|
164
|
-
@pdf.y.should be_within(0.0001).of(position - @pdf.font.ascender - @pdf.font.descender)
|
165
|
-
|
166
|
-
position = @pdf.y
|
167
|
-
@pdf.text "Foo\nBar\nBaz", :final_gap => false
|
168
|
-
@pdf.y.should be_within(0.0001).of(position - 2*@pdf.font.height - @pdf.font.ascender - @pdf.font.descender)
|
169
|
-
end
|
170
|
-
|
171
|
-
it "should be able to print text starting at the last line of a page" do
|
172
|
-
@pdf.move_cursor_to(@pdf.font.height)
|
173
|
-
@pdf.text("hello world")
|
174
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
175
|
-
pages.size.should == 1
|
176
|
-
end
|
177
|
-
|
178
|
-
it "should default to 12 point helvetica" do
|
179
|
-
@pdf.text "Blah"
|
180
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
181
|
-
text.font_settings[0][:name].should == :Helvetica
|
182
|
-
text.font_settings[0][:size].should == 12
|
183
|
-
text.strings.first.should == "Blah"
|
184
|
-
end
|
185
|
-
|
186
|
-
it "should allow setting font size" do
|
187
|
-
@pdf.text "Blah", :size => 16
|
188
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
189
|
-
text.font_settings[0][:size].should == 16
|
190
|
-
end
|
191
|
-
|
192
|
-
it "should allow setting a default font size" do
|
193
|
-
@pdf.font_size = 16
|
194
|
-
@pdf.text "Blah"
|
195
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
196
|
-
text.font_settings[0][:size].should == 16
|
197
|
-
end
|
198
|
-
|
199
|
-
it "should allow overriding default font for a single instance" do
|
200
|
-
@pdf.font_size = 16
|
201
|
-
|
202
|
-
@pdf.text "Blah", :size => 11
|
203
|
-
@pdf.text "Blaz"
|
204
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
205
|
-
text.font_settings[0][:size].should == 11
|
206
|
-
text.font_settings[1][:size].should == 16
|
207
|
-
end
|
208
|
-
|
209
|
-
it "should allow setting a font size transaction with a block" do
|
210
|
-
@pdf.font_size 16 do
|
211
|
-
@pdf.text 'Blah'
|
212
|
-
end
|
213
|
-
|
214
|
-
@pdf.text 'blah'
|
215
|
-
|
216
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
217
|
-
text.font_settings[0][:size].should == 16
|
218
|
-
text.font_settings[1][:size].should == 12
|
219
|
-
end
|
220
|
-
|
221
|
-
it "should allow manual setting the font size " +
|
222
|
-
"when in a font size block" do
|
223
|
-
@pdf.font_size(16) do
|
224
|
-
@pdf.text 'Foo'
|
225
|
-
@pdf.text 'Blah', :size => 11
|
226
|
-
@pdf.text 'Blaz'
|
227
|
-
end
|
228
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
229
|
-
text.font_settings[0][:size].should == 16
|
230
|
-
text.font_settings[1][:size].should == 11
|
231
|
-
text.font_settings[2][:size].should == 16
|
232
|
-
end
|
233
|
-
|
234
|
-
it "should allow registering of built-in font_settings on the fly" do
|
235
|
-
@pdf.font "Times-Roman"
|
236
|
-
@pdf.text "Blah"
|
237
|
-
@pdf.font "Courier"
|
238
|
-
@pdf.text "Blaz"
|
239
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
240
|
-
text.font_settings[0][:name].should == :"Times-Roman"
|
241
|
-
text.font_settings[1][:name].should == :Courier
|
242
|
-
end
|
243
|
-
|
244
|
-
it "should utilise the same default font across multiple pages" do
|
245
|
-
@pdf.text "Blah"
|
246
|
-
@pdf.start_new_page
|
247
|
-
@pdf.text "Blaz"
|
248
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
249
|
-
|
250
|
-
text.font_settings.size.should == 2
|
251
|
-
text.font_settings[0][:name].should == :Helvetica
|
252
|
-
text.font_settings[1][:name].should == :Helvetica
|
253
|
-
end
|
254
|
-
|
255
|
-
it "should raise_error an exception when an unknown font is used" do
|
256
|
-
lambda { @pdf.font "Pao bu" }.should raise_error(Prawn::Errors::UnknownFont)
|
257
|
-
end
|
258
|
-
|
259
|
-
it "should_not raise_error an exception when providing Pathname instance as font" do
|
260
|
-
@pdf.font Pathname.new("#{Prawn::DATADIR}/fonts/comicsans.ttf")
|
261
|
-
end
|
262
|
-
|
263
|
-
it "should correctly render a utf-8 string when using a built-in font" do
|
264
|
-
str = "©" # copyright symbol
|
265
|
-
@pdf.text str
|
266
|
-
|
267
|
-
# grab the text from the rendered PDF and ensure it matches
|
268
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
269
|
-
text.strings.first.should == str
|
270
|
-
end
|
271
|
-
|
272
|
-
it "should correctly render a utf-8 string when using a TTF font" do
|
273
|
-
str = "©" # copyright symbol
|
274
|
-
@pdf.font "#{Prawn::DATADIR}/fonts/DejaVuSans.ttf"
|
275
|
-
@pdf.text str
|
276
|
-
|
277
|
-
# grab the text from the rendered PDF and ensure it matches
|
278
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
279
|
-
text.strings.first.should == str
|
280
|
-
end
|
281
|
-
|
282
|
-
it "subsets mixed low-ASCII and non-ASCII characters when they can be " +
|
283
|
-
"subsetted together" do
|
284
|
-
str = "It’s super effective!"
|
285
|
-
@pdf.font "#{Prawn::DATADIR}/fonts/DejaVuSans.ttf"
|
286
|
-
@pdf.text str
|
287
|
-
|
288
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
289
|
-
text.strings.first.should == str
|
290
|
-
end
|
291
|
-
|
292
|
-
it "should correctly render a string with higher bit characters across" +
|
293
|
-
" a page break when using a built-in font" do
|
294
|
-
str = "©"
|
295
|
-
@pdf.move_cursor_to(@pdf.font.height)
|
296
|
-
@pdf.text(str + "\n" + str)
|
297
|
-
|
298
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
299
|
-
pages.size.should == 2
|
300
|
-
pages[0][:strings].should == [str]
|
301
|
-
pages[1][:strings].should == [str]
|
302
|
-
end
|
303
|
-
|
304
|
-
it "should correctly render a string with higher bit characters across" +
|
305
|
-
" a page break when using a built-in font and :indent_paragraphs option" do
|
306
|
-
str = "©"
|
307
|
-
@pdf.move_cursor_to(@pdf.font.height)
|
308
|
-
@pdf.text(str + "\n" + str, :indent_paragraphs => 20)
|
309
|
-
|
310
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
311
|
-
pages.size.should == 2
|
312
|
-
pages[0][:strings].should == [str]
|
313
|
-
pages[1][:strings].should == [str]
|
314
|
-
end
|
315
|
-
|
316
|
-
if "spec".respond_to?(:encode!)
|
317
|
-
# Handle non utf-8 string encodings in a sane way on M17N aware VMs
|
318
|
-
it "should raise_error an exception when a utf-8 incompatible string is rendered" do
|
319
|
-
str = "Blah \xDD"
|
320
|
-
str.force_encoding("ASCII-8BIT")
|
321
|
-
lambda { @pdf.text str }.should raise_error(
|
322
|
-
Prawn::Errors::IncompatibleStringEncoding)
|
323
|
-
end
|
324
|
-
it "should_not raise_error an exception when a shift-jis string is rendered" do
|
325
|
-
datafile = "#{Prawn::DATADIR}/shift_jis_text.txt"
|
326
|
-
sjis_str = File.open(datafile, "r:shift_jis") { |f| f.gets }
|
327
|
-
@pdf.font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf")
|
328
|
-
|
329
|
-
# Expect that the call to text will not raise an encoding error
|
330
|
-
@pdf.text(sjis_str)
|
331
|
-
end
|
332
|
-
else
|
333
|
-
# Handle non utf-8 string encodings in a sane way on non-M17N aware VMs
|
334
|
-
it "should raise_error an exception when a corrupt utf-8 string is rendered" do
|
335
|
-
str = "Blah \xDD"
|
336
|
-
lambda { @pdf.text str }.should raise_error(
|
337
|
-
Prawn::Errors::IncompatibleStringEncoding)
|
338
|
-
end
|
339
|
-
it "should raise_error an exception when a shift-jis string is rendered" do
|
340
|
-
sjis_str = File.read("#{Prawn::DATADIR}/shift_jis_text.txt")
|
341
|
-
lambda { @pdf.text sjis_str }.should raise_error(
|
342
|
-
Prawn::Errors::IncompatibleStringEncoding)
|
343
|
-
end
|
344
|
-
end
|
345
|
-
|
346
|
-
it "should call move_past_bottom when printing more text than can fit" +
|
347
|
-
" between the current document.y and bounds.bottom" do
|
348
|
-
@pdf.y = @pdf.font.height
|
349
|
-
@pdf.text "Hello"
|
350
|
-
@pdf.text "World"
|
351
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
352
|
-
pages.size.should == 2
|
353
|
-
pages[0][:strings].should == ["Hello"]
|
354
|
-
pages[1][:strings].should == ["World"]
|
355
|
-
end
|
356
|
-
|
357
|
-
describe "with :indent_paragraphs option" do
|
358
|
-
it "should indent the paragraphs" do
|
359
|
-
hello = "hello " * 50
|
360
|
-
hello2 = "hello " * 50
|
361
|
-
@pdf.text(hello + "\n" + hello2, :indent_paragraphs => 60)
|
362
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
363
|
-
text.strings[0].should == ("hello " * 19).strip
|
364
|
-
text.strings[1].should == ("hello " * 21).strip
|
365
|
-
text.strings[3].should == ("hello " * 19).strip
|
366
|
-
text.strings[4].should == ("hello " * 21).strip
|
367
|
-
end
|
368
|
-
describe "when wrap to new page, and first line of new page" +
|
369
|
-
" is not the start of a new paragraph, that line should" +
|
370
|
-
" not be indented" do
|
371
|
-
it "should indent the paragraphs" do
|
372
|
-
hello = "hello " * 50
|
373
|
-
hello2 = "hello " * 50
|
374
|
-
@pdf.move_cursor_to(@pdf.font.height)
|
375
|
-
@pdf.text(hello + "\n" + hello2, :indent_paragraphs => 60)
|
376
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
377
|
-
text.strings[0].should == ("hello " * 19).strip
|
378
|
-
text.strings[1].should == ("hello " * 21).strip
|
379
|
-
text.strings[3].should == ("hello " * 19).strip
|
380
|
-
text.strings[4].should == ("hello " * 21).strip
|
381
|
-
end
|
382
|
-
end
|
383
|
-
describe "when wrap to new page, and first line of new page" +
|
384
|
-
" is the start of a new paragraph, that line should" +
|
385
|
-
" be indented" do
|
386
|
-
it "should indent the paragraphs" do
|
387
|
-
hello = "hello " * 50
|
388
|
-
hello2 = "hello " * 50
|
389
|
-
@pdf.move_cursor_to(@pdf.font.height * 3)
|
390
|
-
@pdf.text(hello + "\n" + hello2, :indent_paragraphs => 60)
|
391
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
392
|
-
text.strings[0].should == ("hello " * 19).strip
|
393
|
-
text.strings[1].should == ("hello " * 21).strip
|
394
|
-
text.strings[3].should == ("hello " * 19).strip
|
395
|
-
text.strings[4].should == ("hello " * 21).strip
|
396
|
-
end
|
397
|
-
end
|
398
|
-
end
|
399
|
-
|
400
|
-
describe "kerning" do
|
401
|
-
it "should respect text kerning setting (document default)" do
|
402
|
-
create_pdf
|
403
|
-
@pdf.font.expects(:compute_width_of).with do |str, options|
|
404
|
-
str == "VAT" && options[:kerning] == true
|
405
|
-
end.at_least_once.returns(10)
|
406
|
-
@pdf.text "VAT"
|
407
|
-
end
|
408
|
-
|
409
|
-
it "should respect text kerning setting (kerning=true)" do
|
410
|
-
create_pdf
|
411
|
-
@pdf.font.expects(:compute_width_of).with do |str, options|
|
412
|
-
str == "VAT" && options[:kerning] == true
|
413
|
-
end.at_least_once.returns(10)
|
414
|
-
@pdf.text "VAT", :kerning => true
|
415
|
-
end
|
416
|
-
|
417
|
-
it "should respect text kerning setting (kerning=false)" do
|
418
|
-
create_pdf
|
419
|
-
@pdf.font.expects(:compute_width_of).with do |str, options|
|
420
|
-
str == "VAT" && options[:kerning] == false
|
421
|
-
end.at_least_once.returns(10)
|
422
|
-
@pdf.text "VAT", :kerning => false
|
423
|
-
end
|
424
|
-
end
|
425
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "#formatted_text" do
|
6
|
-
it "should draw text" do
|
7
|
-
create_pdf
|
8
|
-
string = "hello world"
|
9
|
-
format_array = [:text => string]
|
10
|
-
@pdf.formatted_text(format_array)
|
11
|
-
# grab the text from the rendered PDF and ensure it matches
|
12
|
-
text = PDF::Inspector::Text.analyze(@pdf.render)
|
13
|
-
text.strings.first.should == string
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#text with inline styling" do
|
18
|
-
before(:each) { create_pdf }
|
19
|
-
|
20
|
-
it "should automatically move to a new page if the tallest fragment" +
|
21
|
-
" on the next line won't fit in the available space" do
|
22
|
-
create_pdf
|
23
|
-
@pdf.move_cursor_to(@pdf.font.height)
|
24
|
-
formatted = "this contains <font size='24'>sized</font> text"
|
25
|
-
@pdf.text(formatted, :inline_format => true)
|
26
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
27
|
-
pages.size.should == 2
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should embed links as literal strings" do
|
31
|
-
@pdf.text "<link href='http://wiki.github.com/sandal/prawn/'>wiki</link>",
|
32
|
-
:inline_format => true
|
33
|
-
@pdf.render.should =~ %r{/URI\s+\(http://wiki\.github\.com}
|
34
|
-
end
|
35
|
-
end
|
data/spec/transparency_spec.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
module TransparencyHelper
|
4
|
-
def make_transparent(opacity, stroke_opacity=opacity)
|
5
|
-
@pdf.transparent(opacity, stroke_opacity) do
|
6
|
-
yield if block_given?
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "Document with transparency" do
|
12
|
-
include TransparencyHelper
|
13
|
-
|
14
|
-
it "the PDF version should be at least 1.4" do
|
15
|
-
create_pdf
|
16
|
-
make_transparent(0.5)
|
17
|
-
str = @pdf.render
|
18
|
-
str[0,8].should == "%PDF-1.4"
|
19
|
-
end
|
20
|
-
|
21
|
-
it "a new extended graphics state should be created for "+
|
22
|
-
"each unique transparency setting" do
|
23
|
-
create_pdf
|
24
|
-
make_transparent(0.5, 0.2) do
|
25
|
-
make_transparent(0.5, 0.75)
|
26
|
-
end
|
27
|
-
extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
|
28
|
-
extgstates.length.should == 2
|
29
|
-
end
|
30
|
-
|
31
|
-
it "a new extended graphics state should not be created for "+
|
32
|
-
"each duplicate transparency setting" do
|
33
|
-
create_pdf
|
34
|
-
make_transparent(0.5, 0.75) do
|
35
|
-
make_transparent(0.5, 0.75)
|
36
|
-
end
|
37
|
-
extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
|
38
|
-
extgstates.length.should == 1
|
39
|
-
end
|
40
|
-
|
41
|
-
it "setting the transparency with only one parameter sets the transparency"+
|
42
|
-
" for both the fill and the stroke" do
|
43
|
-
create_pdf
|
44
|
-
make_transparent(0.5)
|
45
|
-
extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
|
46
|
-
extgstate[:opacity].should == 0.5
|
47
|
-
extgstate[:stroke_opacity].should == 0.5
|
48
|
-
end
|
49
|
-
|
50
|
-
it "setting the transparency with a numerical parameter and "+
|
51
|
-
"a :stroke should set the fill transparency to the numerical parameter "+
|
52
|
-
"and the stroke transparency to the option" do
|
53
|
-
create_pdf
|
54
|
-
make_transparent(0.5, 0.2)
|
55
|
-
extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
|
56
|
-
extgstate[:opacity].should == 0.5
|
57
|
-
extgstate[:stroke_opacity].should == 0.2
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should enforce the valid range of 0.0 to 1.0" do
|
61
|
-
create_pdf
|
62
|
-
make_transparent(-0.5, -0.2)
|
63
|
-
extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
|
64
|
-
extgstate[:opacity].should == 0.0
|
65
|
-
extgstate[:stroke_opacity].should == 0.0
|
66
|
-
|
67
|
-
create_pdf
|
68
|
-
make_transparent(2.0, 3.0)
|
69
|
-
extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
|
70
|
-
extgstate[:opacity].should == 1.0
|
71
|
-
extgstate[:stroke_opacity].should == 1.0
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "with more than one page" do
|
75
|
-
include TransparencyHelper
|
76
|
-
|
77
|
-
it "the extended graphic state resource should be added to both pages" do
|
78
|
-
create_pdf
|
79
|
-
make_transparent(0.5, 0.2)
|
80
|
-
@pdf.start_new_page
|
81
|
-
make_transparent(0.5, 0.2)
|
82
|
-
extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
|
83
|
-
extgstate = extgstates[0]
|
84
|
-
extgstates.length.should == 2
|
85
|
-
extgstate[:opacity].should == 0.5
|
86
|
-
extgstate[:stroke_opacity].should == 0.2
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|