prawn 0.13.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.yardopts +10 -0
- data/GPLv2 +20 -21
- data/Gemfile +3 -16
- data/Rakefile +17 -39
- data/lib/prawn/document/bounding_box.rb +85 -42
- data/lib/prawn/document/column_box.rb +21 -11
- data/lib/prawn/document/internals.rb +40 -147
- data/lib/prawn/document/span.rb +25 -17
- data/lib/prawn/document.rb +286 -245
- data/lib/prawn/encoding.rb +68 -101
- data/lib/prawn/errors.rb +47 -43
- data/lib/prawn/font.rb +204 -155
- data/lib/prawn/font_metric_cache.rb +25 -21
- data/lib/prawn/fonts/afm.rb +292 -0
- data/lib/prawn/{font → fonts}/dfont.rb +7 -13
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/fonts/ttc.rb +36 -0
- data/lib/prawn/{font → fonts}/ttf.rb +142 -80
- data/lib/prawn/graphics/blend_mode.rb +65 -0
- data/lib/prawn/graphics/cap_style.rb +6 -5
- data/lib/prawn/graphics/color.rb +47 -44
- data/lib/prawn/graphics/dash.rb +30 -13
- data/lib/prawn/graphics/join_style.rb +13 -6
- data/lib/prawn/graphics/patterns.rb +221 -90
- data/lib/prawn/graphics/transformation.rb +21 -12
- data/lib/prawn/graphics/transparency.rb +21 -17
- data/lib/prawn/graphics.rb +155 -128
- data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
- data/lib/prawn/image_handler.rb +16 -2
- data/lib/prawn/images/image.rb +4 -2
- data/lib/prawn/images/jpg.rb +39 -30
- data/lib/prawn/images/png.rb +132 -169
- data/lib/prawn/images.rb +70 -62
- data/lib/prawn/measurement_extensions.rb +15 -10
- data/lib/prawn/measurements.rb +22 -23
- data/lib/prawn/outline.rb +301 -13
- data/lib/prawn/repeater.rb +19 -17
- data/lib/prawn/security/arcfour.rb +54 -0
- data/lib/prawn/security.rb +108 -86
- data/lib/prawn/soft_mask.rb +40 -41
- data/lib/prawn/stamp.rb +29 -12
- data/lib/prawn/text/box.rb +27 -29
- data/lib/prawn/text/formatted/arranger.rb +110 -67
- data/lib/prawn/text/formatted/box.rb +233 -165
- data/lib/prawn/text/formatted/fragment.rb +27 -27
- data/lib/prawn/text/formatted/line_wrap.rb +137 -97
- data/lib/prawn/text/formatted/parser.rb +149 -127
- data/lib/prawn/text/formatted/wrap.rb +57 -37
- data/lib/prawn/text/formatted.rb +6 -4
- data/lib/prawn/text.rb +105 -73
- data/lib/prawn/transformation_stack.rb +44 -0
- data/lib/prawn/utilities.rb +11 -21
- data/lib/prawn/version.rb +5 -0
- data/lib/prawn/view.rb +101 -0
- data/lib/prawn.rb +42 -68
- data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
- data/manual/basic_concepts/adding_pages.rb +9 -10
- data/manual/basic_concepts/basic_concepts.rb +33 -24
- data/manual/basic_concepts/creation.rb +10 -11
- data/manual/basic_concepts/cursor.rb +9 -10
- data/manual/basic_concepts/measurement.rb +10 -11
- data/manual/basic_concepts/origin.rb +8 -9
- data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
- data/manual/basic_concepts/view.rb +48 -0
- data/manual/bounding_box/bounding_box.rb +31 -29
- data/manual/bounding_box/bounds.rb +17 -18
- data/manual/bounding_box/canvas.rb +8 -9
- data/manual/bounding_box/creation.rb +8 -9
- data/manual/bounding_box/indentation.rb +22 -23
- data/manual/bounding_box/nesting.rb +32 -25
- data/manual/bounding_box/russian_boxes.rb +19 -19
- data/manual/bounding_box/stretchy.rb +18 -20
- data/manual/contents.rb +35 -0
- data/manual/cover.rb +43 -0
- data/manual/document_and_page_options/background.rb +16 -14
- data/manual/document_and_page_options/document_and_page_options.rb +26 -23
- data/manual/document_and_page_options/metadata.rb +21 -19
- data/manual/document_and_page_options/page_margins.rb +20 -22
- data/manual/document_and_page_options/page_size.rb +15 -15
- data/manual/document_and_page_options/print_scaling.rb +23 -0
- data/manual/example_helper.rb +5 -408
- data/manual/graphics/blend_mode.rb +52 -0
- data/manual/graphics/circle_and_ellipse.rb +8 -9
- data/manual/graphics/color.rb +11 -13
- data/manual/graphics/common_lines.rb +13 -12
- data/manual/graphics/fill_and_stroke.rb +10 -11
- data/manual/graphics/fill_rules.rb +13 -12
- data/manual/graphics/gradients.rb +28 -22
- data/manual/graphics/graphics.rb +52 -46
- data/manual/graphics/helper.rb +20 -10
- data/manual/graphics/line_width.rb +13 -12
- data/manual/graphics/lines_and_curves.rb +13 -14
- data/manual/graphics/polygon.rb +10 -12
- data/manual/graphics/rectangle.rb +7 -8
- data/manual/graphics/rotate.rb +9 -12
- data/manual/graphics/scale.rb +19 -18
- data/manual/graphics/soft_masks.rb +5 -7
- data/manual/graphics/stroke_cap.rb +10 -11
- data/manual/graphics/stroke_dash.rb +16 -17
- data/manual/graphics/stroke_join.rb +10 -11
- data/manual/graphics/translate.rb +13 -13
- data/manual/graphics/transparency.rb +11 -13
- data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
- data/manual/images/absolute_position.rb +9 -10
- data/manual/images/fit.rb +9 -10
- data/manual/images/horizontal.rb +13 -14
- data/manual/images/images.rb +31 -30
- data/manual/images/plain_image.rb +6 -7
- data/manual/images/scale.rb +12 -13
- data/manual/images/vertical.rb +19 -17
- data/manual/images/width_and_height.rb +13 -14
- data/manual/layout/boxes.rb +14 -15
- data/manual/layout/content.rb +12 -13
- data/manual/layout/layout.rb +19 -20
- data/manual/layout/simple_grid.rb +8 -9
- data/manual/outline/add_subsection_to.rb +26 -27
- data/manual/outline/insert_section_after.rb +19 -20
- data/manual/outline/outline.rb +23 -22
- data/manual/outline/sections_and_pages.rb +24 -25
- data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
- data/manual/repeatable_content/page_numbering.rb +20 -19
- data/manual/repeatable_content/repeatable_content.rb +26 -22
- data/manual/repeatable_content/repeater.rb +18 -19
- data/manual/repeatable_content/stamp.rb +18 -19
- data/manual/security/encryption.rb +8 -11
- data/manual/security/permissions.rb +20 -15
- data/manual/security/security.rb +20 -20
- data/manual/table.rb +16 -0
- data/manual/text/alignment.rb +17 -18
- data/manual/text/color.rb +13 -13
- data/manual/text/column_box.rb +10 -12
- data/manual/text/fallback_fonts.rb +29 -25
- data/manual/text/font.rb +17 -18
- data/manual/text/font_size.rb +21 -22
- data/manual/text/font_style.rb +12 -10
- data/manual/text/formatted_callbacks.rb +36 -26
- data/manual/text/formatted_text.rb +41 -34
- data/manual/text/free_flowing_text.rb +28 -29
- data/manual/text/inline.rb +23 -26
- data/manual/text/kerning_and_character_spacing.rb +20 -21
- data/manual/text/leading.rb +10 -11
- data/manual/text/line_wrapping.rb +40 -21
- data/manual/text/paragraph_indentation.rb +17 -12
- data/manual/text/positioned_text.rb +19 -20
- data/manual/text/registering_families.rb +33 -30
- data/manual/text/rendering_and_color.rb +11 -12
- data/manual/text/right_to_left_text.rb +31 -20
- data/manual/text/rotation.rb +36 -27
- data/manual/text/single_usage.rb +13 -14
- data/manual/text/text.rb +62 -62
- data/manual/text/text_box_excess.rb +22 -19
- data/manual/text/text_box_extensions.rb +21 -18
- data/manual/text/text_box_overflow.rb +28 -21
- data/manual/text/utf8.rb +16 -17
- data/manual/text/win_ansi_charset.rb +29 -26
- data/prawn.gemspec +45 -43
- data/spec/extensions/encoding_helpers.rb +4 -3
- data/spec/prawn/document/bounding_box_spec.rb +550 -0
- data/spec/prawn/document/column_box_spec.rb +75 -0
- data/spec/prawn/document/security_spec.rb +176 -0
- data/spec/prawn/document_annotations_spec.rb +76 -0
- data/spec/prawn/document_destinations_spec.rb +15 -0
- data/spec/prawn/document_grid_spec.rb +99 -0
- data/spec/prawn/document_reference_spec.rb +27 -0
- data/spec/prawn/document_span_spec.rb +44 -0
- data/spec/prawn/document_spec.rb +805 -0
- data/spec/prawn/font_metric_cache_spec.rb +54 -0
- data/spec/prawn/font_spec.rb +544 -0
- data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
- data/spec/prawn/graphics/transparency_spec.rb +81 -0
- data/spec/prawn/graphics_spec.rb +872 -0
- data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
- data/spec/prawn/image_handler_spec.rb +53 -0
- data/spec/prawn/images/jpg_spec.rb +20 -0
- data/spec/prawn/images/png_spec.rb +283 -0
- data/spec/prawn/images_spec.rb +229 -0
- data/spec/prawn/measurements_extensions_spec.rb +24 -0
- data/spec/prawn/outline_spec.rb +512 -0
- data/spec/prawn/repeater_spec.rb +166 -0
- data/spec/prawn/soft_mask_spec.rb +74 -0
- data/spec/prawn/stamp_spec.rb +173 -0
- data/spec/prawn/text/box_spec.rb +1110 -0
- data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
- data/spec/prawn/text/formatted/box_spec.rb +849 -0
- data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
- data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
- data/spec/prawn/text/formatted/parser_spec.rb +697 -0
- data/spec/prawn/text_draw_text_spec.rb +150 -0
- data/spec/prawn/text_rendering_mode_spec.rb +48 -0
- data/spec/prawn/text_spacing_spec.rb +95 -0
- data/spec/prawn/text_spec.rb +603 -0
- data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
- data/spec/prawn/transformation_stack_spec.rb +66 -0
- data/spec/prawn/view_spec.rb +63 -0
- data/spec/prawn_manual_spec.rb +35 -0
- data/spec/spec_helper.rb +22 -21
- data.tar.gz.sig +0 -0
- metadata +168 -307
- metadata.gz.sig +0 -0
- data/README.md +0 -109
- data/data/encodings/win_ansi.txt +0 -29
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/16bit.png +0 -0
- data/data/images/arrow.png +0 -0
- data/data/images/arrow2.png +0 -0
- data/data/images/barcode_issue.png +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/page_white_text.png +0 -0
- data/data/images/pigs.jpg +0 -0
- data/data/images/prawn.png +0 -0
- data/data/images/ruport.png +0 -0
- data/data/images/ruport_data.dat +0 -0
- data/data/images/ruport_transparent.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/data/images/stef.jpg +0 -0
- data/data/images/tru256.bmp +0 -0
- data/data/images/web-links.dat +0 -1
- data/data/images/web-links.png +0 -0
- data/data/pdfs/complex_template.pdf +0 -0
- data/data/pdfs/contains_ttf_font.pdf +0 -0
- data/data/pdfs/encrypted.pdf +0 -0
- data/data/pdfs/form.pdf +1 -819
- data/data/pdfs/hexagon.pdf +0 -61
- data/data/pdfs/indirect_reference.pdf +0 -86
- data/data/pdfs/multipage_template.pdf +0 -127
- data/data/pdfs/nested_pages.pdf +0 -118
- data/data/pdfs/page_without_mediabox.pdf +0 -193
- data/data/pdfs/resources_as_indirect_object.pdf +0 -83
- data/data/pdfs/two_hexagons.pdf +0 -90
- data/data/pdfs/version_1_6.pdf +0 -61
- data/data/shift_jis_text.txt +0 -1
- data/lib/pdf/core/annotations.rb +0 -60
- data/lib/pdf/core/byte_string.rb +0 -9
- data/lib/pdf/core/destinations.rb +0 -90
- data/lib/pdf/core/document_state.rb +0 -78
- data/lib/pdf/core/filter_list.rb +0 -51
- data/lib/pdf/core/filters.rb +0 -36
- data/lib/pdf/core/graphics_state.rb +0 -68
- data/lib/pdf/core/literal_string.rb +0 -16
- data/lib/pdf/core/name_tree.rb +0 -177
- data/lib/pdf/core/object_store.rb +0 -320
- data/lib/pdf/core/outline.rb +0 -315
- data/lib/pdf/core/page.rb +0 -212
- data/lib/pdf/core/page_geometry.rb +0 -126
- data/lib/pdf/core/pdf_object.rb +0 -124
- data/lib/pdf/core/reference.rb +0 -103
- data/lib/pdf/core/stream.rb +0 -98
- data/lib/pdf/core/text.rb +0 -275
- data/lib/pdf/core.rb +0 -35
- data/lib/prawn/compatibility.rb +0 -91
- data/lib/prawn/document/graphics_state.rb +0 -73
- data/lib/prawn/document/snapshot.rb +0 -89
- data/lib/prawn/font/afm.rb +0 -203
- data/lib/prawn/layout.rb +0 -20
- data/lib/prawn/table/cell/image.rb +0 -70
- data/lib/prawn/table/cell/in_table.rb +0 -27
- data/lib/prawn/table/cell/span_dummy.rb +0 -92
- data/lib/prawn/table/cell/subtable.rb +0 -65
- data/lib/prawn/table/cell/text.rb +0 -153
- data/lib/prawn/table/cell.rb +0 -770
- data/lib/prawn/table/cells.rb +0 -295
- data/lib/prawn/table.rb +0 -643
- data/manual/example_file.rb +0 -116
- data/manual/example_package.rb +0 -53
- data/manual/example_section.rb +0 -46
- data/manual/manual/cover.rb +0 -35
- data/manual/manual/foreword.rb +0 -85
- data/manual/manual/manual.rb +0 -35
- data/manual/syntax_highlight.rb +0 -52
- data/manual/table/basic_block.rb +0 -53
- data/manual/table/before_rendering_page.rb +0 -26
- data/manual/table/cell_border_lines.rb +0 -24
- data/manual/table/cell_borders_and_bg.rb +0 -31
- data/manual/table/cell_dimensions.rb +0 -30
- data/manual/table/cell_text.rb +0 -38
- data/manual/table/column_widths.rb +0 -30
- data/manual/table/content_and_subtables.rb +0 -39
- data/manual/table/creation.rb +0 -27
- data/manual/table/filtering.rb +0 -36
- data/manual/table/flow_and_header.rb +0 -17
- data/manual/table/image_cells.rb +0 -33
- data/manual/table/position.rb +0 -29
- data/manual/table/row_colors.rb +0 -20
- data/manual/table/span.rb +0 -30
- data/manual/table/style.rb +0 -22
- data/manual/table/table.rb +0 -52
- data/manual/table/width.rb +0 -27
- data/manual/templates/full_template.rb +0 -25
- data/manual/templates/page_template.rb +0 -48
- data/manual/templates/templates.rb +0 -27
- data/manual/text/group.rb +0 -29
- data/spec/acceptance/png.rb +0 -23
- data/spec/annotations_spec.rb +0 -74
- data/spec/bounding_box_spec.rb +0 -493
- data/spec/cell_spec.rb +0 -628
- data/spec/column_box_spec.rb +0 -33
- data/spec/destinations_spec.rb +0 -15
- data/spec/document_spec.rb +0 -761
- data/spec/extensions/mocha.rb +0 -44
- data/spec/filters_spec.rb +0 -34
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -464
- data/spec/formatted_text_arranger_spec.rb +0 -421
- data/spec/formatted_text_box_spec.rb +0 -650
- data/spec/formatted_text_fragment_spec.rb +0 -298
- data/spec/graphics_spec.rb +0 -651
- data/spec/grid_spec.rb +0 -85
- data/spec/image_handler_spec.rb +0 -42
- data/spec/images_spec.rb +0 -157
- data/spec/inline_formatted_text_parser_spec.rb +0 -564
- data/spec/jpg_spec.rb +0 -25
- data/spec/line_wrap_spec.rb +0 -333
- data/spec/measurement_units_spec.rb +0 -23
- data/spec/name_tree_spec.rb +0 -112
- data/spec/object_store_spec.rb +0 -170
- data/spec/outline_spec.rb +0 -448
- data/spec/pdf_object_spec.rb +0 -172
- data/spec/png_spec.rb +0 -240
- data/spec/reference_spec.rb +0 -82
- data/spec/repeater_spec.rb +0 -158
- data/spec/security_spec.rb +0 -158
- data/spec/snapshot_spec.rb +0 -186
- data/spec/soft_mask_spec.rb +0 -117
- data/spec/span_spec.rb +0 -44
- data/spec/stamp_spec.rb +0 -158
- data/spec/stream_spec.rb +0 -58
- data/spec/stroke_styles_spec.rb +0 -211
- data/spec/table/span_dummy_spec.rb +0 -17
- data/spec/table_spec.rb +0 -1355
- data/spec/template_spec.rb +0 -351
- data/spec/text_at_spec.rb +0 -130
- data/spec/text_box_spec.rb +0 -1030
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -425
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -89
data/spec/snapshot_spec.rb
DELETED
@@ -1,186 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "Prawn::Document#transaction" do
|
6
|
-
|
7
|
-
it "should properly commit if no error is raised" do
|
8
|
-
pdf = Prawn::Document.new do
|
9
|
-
transaction do
|
10
|
-
text "This is shown"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
text = PDF::Inspector::Text.analyze(pdf.render)
|
14
|
-
text.strings.should == ["This is shown"]
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should not display text if transaction is rolled back" do
|
18
|
-
pdf = Prawn::Document.new do
|
19
|
-
transaction do
|
20
|
-
text "This is not shown"
|
21
|
-
rollback
|
22
|
-
end
|
23
|
-
end
|
24
|
-
text = PDF::Inspector::Text.analyze(pdf.render)
|
25
|
-
text.strings.should == []
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should return true/false value indicating success of the transaction" do
|
29
|
-
Prawn::Document.new do
|
30
|
-
success = transaction { }
|
31
|
-
success.should == true
|
32
|
-
|
33
|
-
success = transaction { rollback }
|
34
|
-
success.should == false
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should support nested transactions" do
|
39
|
-
pdf = Prawn::Document.new do
|
40
|
-
transaction do
|
41
|
-
text "This is shown"
|
42
|
-
transaction do
|
43
|
-
text "and this is not"
|
44
|
-
rollback
|
45
|
-
end
|
46
|
-
text "and this is"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
text = PDF::Inspector::Text.analyze(pdf.render)
|
50
|
-
text.strings.should == ["This is shown", "and this is"]
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should allow rollback of multiple pages" do
|
54
|
-
pdf = Prawn::Document.new do
|
55
|
-
transaction do
|
56
|
-
5.times { start_new_page }
|
57
|
-
text "way out there and will never be shown"
|
58
|
-
rollback
|
59
|
-
end
|
60
|
-
text "This is the real text, only one page"
|
61
|
-
end
|
62
|
-
|
63
|
-
pages = PDF::Inspector::Page.analyze(pdf.render).pages
|
64
|
-
pages.size.should == 1
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should not propagate a RollbackTransaction outside its bounds" do
|
68
|
-
def add_lines(pdf)
|
69
|
-
100.times { |i| pdf.text "Line #{i}" }
|
70
|
-
end
|
71
|
-
|
72
|
-
Prawn::Document.new do |pdf|
|
73
|
-
lambda do
|
74
|
-
begin
|
75
|
-
pdf.group { add_lines(pdf) }
|
76
|
-
rescue Prawn::Errors::CannotGroup
|
77
|
-
add_lines(pdf)
|
78
|
-
end
|
79
|
-
end.should_not raise_error#(Prawn::Document::Snapshot::RollbackTransaction)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Because the Pages object, when restored, points to the snapshotted pages
|
84
|
-
# by identifier, we have to restore the snapshot into the same page objects,
|
85
|
-
# or else old pages will appear in the post-rollback document.
|
86
|
-
it "should restore the pages into the same objects" do
|
87
|
-
Prawn::Document.new do
|
88
|
-
old_page_object_id = state.page.dictionary.identifier
|
89
|
-
old_page_content_id = state.page.content.identifier
|
90
|
-
|
91
|
-
transaction do
|
92
|
-
start_new_page
|
93
|
-
rollback
|
94
|
-
end
|
95
|
-
|
96
|
-
state.page.dictionary.identifier.should == old_page_object_id
|
97
|
-
state.page.content.identifier.should == old_page_content_id
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
it "page object should refer to the page_content object after restore" do
|
103
|
-
|
104
|
-
Prawn::Document.new do
|
105
|
-
transaction do
|
106
|
-
start_new_page
|
107
|
-
rollback
|
108
|
-
end
|
109
|
-
|
110
|
-
# should be the exact same object, not a clone
|
111
|
-
state.page.dictionary.data[:Contents].should == state.page.content
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
115
|
-
|
116
|
-
it "should restore bounds on rollback" do
|
117
|
-
Prawn::Document.new(:page_layout => :landscape) do
|
118
|
-
size = [bounds.width, bounds.height]
|
119
|
-
transaction do
|
120
|
-
start_new_page :layout => :portrait
|
121
|
-
rollback
|
122
|
-
end
|
123
|
-
[bounds.width, bounds.height].should == size
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should set new bounding box on start_new_page with different layout" do
|
128
|
-
Prawn::Document.new(:page_layout => :landscape) do
|
129
|
-
size = [bounds.width, bounds.height]
|
130
|
-
transaction do
|
131
|
-
start_new_page
|
132
|
-
rollback
|
133
|
-
end
|
134
|
-
|
135
|
-
start_new_page :layout => :portrait
|
136
|
-
[bounds.width, bounds.height].should == size.reverse
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should work with dests" do
|
141
|
-
Prawn::Document.new do |pdf|
|
142
|
-
pdf.add_dest("dest", pdf.dest_fit_horizontally(pdf.cursor, pdf.page))
|
143
|
-
pdf.text("Hello world")
|
144
|
-
lambda { pdf.transaction{} }.should_not raise_error
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
describe "with a stamp dictionary present" do
|
149
|
-
|
150
|
-
it "should properly commit if no error is raised" do
|
151
|
-
pdf = Prawn::Document.new do
|
152
|
-
create_stamp("test_stamp") { draw_text "This is shown", :at => [0,0] }
|
153
|
-
transaction do
|
154
|
-
stamp("test_stamp")
|
155
|
-
end
|
156
|
-
end
|
157
|
-
pdf.render.should =~ /\/Stamp1 Do/
|
158
|
-
end
|
159
|
-
|
160
|
-
it "should properly rollback when #rollback is called" do
|
161
|
-
pdf = Prawn::Document.new do
|
162
|
-
create_stamp("test_stamp") { draw_text "This is not shown", :at => [0,0] }
|
163
|
-
|
164
|
-
transaction do
|
165
|
-
stamp("test_stamp")
|
166
|
-
rollback
|
167
|
-
end
|
168
|
-
end
|
169
|
-
pdf.render.should_not =~ /\/Stamp1 Do/
|
170
|
-
end
|
171
|
-
|
172
|
-
end
|
173
|
-
|
174
|
-
it "should restore page_number on rollback" do
|
175
|
-
Prawn::Document.new do
|
176
|
-
transaction do
|
177
|
-
5.times { start_new_page }
|
178
|
-
rollback
|
179
|
-
end
|
180
|
-
|
181
|
-
page_number.should == 1
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
end
|
186
|
-
|
data/spec/soft_mask_spec.rb
DELETED
@@ -1,117 +0,0 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
module SoftMaskHelper
|
4
|
-
def make_soft_mask
|
5
|
-
@pdf.save_graphics_state do
|
6
|
-
@pdf.soft_mask do
|
7
|
-
if block_given?
|
8
|
-
yield
|
9
|
-
else
|
10
|
-
@pdf.fill_color '808080'
|
11
|
-
@pdf.fill_rectangle [100, 100], 200, 200
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
@pdf.fill_color '000000'
|
16
|
-
@pdf.fill_rectangle [0, 0], 200, 200
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "Document with soft masks" do
|
22
|
-
|
23
|
-
include SoftMaskHelper
|
24
|
-
|
25
|
-
it "should have PDF version at least 1.4" do
|
26
|
-
create_pdf
|
27
|
-
make_soft_mask
|
28
|
-
str = @pdf.render
|
29
|
-
str[0,8].should == "%PDF-1.4"
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should create a new extended graphics state for each unique soft mask" do
|
33
|
-
create_pdf
|
34
|
-
|
35
|
-
make_soft_mask do
|
36
|
-
@pdf.fill_color '808080'
|
37
|
-
@pdf.fill_rectangle [100, 100], 200, 200
|
38
|
-
end
|
39
|
-
|
40
|
-
make_soft_mask do
|
41
|
-
@pdf.fill_color '808080'
|
42
|
-
@pdf.fill_rectangle [10, 10], 200, 200
|
43
|
-
end
|
44
|
-
|
45
|
-
extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
|
46
|
-
extgstates.length.should == 2
|
47
|
-
end
|
48
|
-
|
49
|
-
it "a new extended graphics state should contain soft mask with drawing instructions" do
|
50
|
-
create_pdf
|
51
|
-
|
52
|
-
make_soft_mask do
|
53
|
-
@pdf.fill_color '808080'
|
54
|
-
@pdf.fill_rectangle [100, 100], 200, 200
|
55
|
-
end
|
56
|
-
|
57
|
-
extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates.first
|
58
|
-
extgstate[:soft_mask][:G].data.should == "q\n/DeviceRGB cs\n0.000 0.000 0.000 scn\n/DeviceRGB CS\n0.000 0.000 0.000 SCN\n1 w\n0 J\n0 j\n[ ] 0 d\n/DeviceRGB cs\n0.502 0.502 0.502 scn\n100.000 -100.000 200.000 200.000 re\nf\nQ\n"
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should not create duplicate extended graphics states" do
|
62
|
-
create_pdf
|
63
|
-
|
64
|
-
make_soft_mask do
|
65
|
-
@pdf.fill_color '808080'
|
66
|
-
@pdf.fill_rectangle [100, 100], 200, 200
|
67
|
-
end
|
68
|
-
|
69
|
-
make_soft_mask do
|
70
|
-
@pdf.fill_color '808080'
|
71
|
-
@pdf.fill_rectangle [100, 100], 200, 200
|
72
|
-
end
|
73
|
-
|
74
|
-
extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
|
75
|
-
extgstates.length.should == 1
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should not have objects that are not used for extended graphic state" do
|
79
|
-
@pdf = Prawn::Document.new(:margin => 0, :optimize_objects => true)
|
80
|
-
|
81
|
-
make_soft_mask do
|
82
|
-
@pdf.fill_color '808080'
|
83
|
-
@pdf.fill_rectangle [100, 100], 200, 200
|
84
|
-
end
|
85
|
-
|
86
|
-
make_soft_mask do
|
87
|
-
@pdf.fill_color '808080'
|
88
|
-
@pdf.fill_rectangle [100, 100], 200, 200
|
89
|
-
end
|
90
|
-
|
91
|
-
reader = PDF::Reader.new(StringIO.open(@pdf.render))
|
92
|
-
|
93
|
-
groups = reader.objects.select { |obj|
|
94
|
-
o = obj[1]
|
95
|
-
o.is_a?(Hash) && o[:Type] == :Group
|
96
|
-
}
|
97
|
-
groups.length.should == 1
|
98
|
-
|
99
|
-
forms = reader.objects.select { |obj|
|
100
|
-
o = obj[1]
|
101
|
-
o.is_a?(PDF::Reader::Stream) && o.hash[:Type] == :XObject && o.hash[:Subtype] == :Form
|
102
|
-
}
|
103
|
-
forms.length.should == 1
|
104
|
-
|
105
|
-
masks = reader.objects.select { |obj|
|
106
|
-
o = obj[1]
|
107
|
-
o.is_a?(Hash) && o[:Type] == :Mask
|
108
|
-
}
|
109
|
-
masks.length.should == 1
|
110
|
-
|
111
|
-
ext_g_states = reader.objects.select { |obj|
|
112
|
-
o = obj[1]
|
113
|
-
o.is_a?(Hash) && o[:Type] == :ExtGState
|
114
|
-
}
|
115
|
-
ext_g_states.length.should == 1
|
116
|
-
end
|
117
|
-
end
|
data/spec/span_spec.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "drawing span" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
Prawn.debug = false
|
9
|
-
create_pdf
|
10
|
-
end
|
11
|
-
|
12
|
-
after do
|
13
|
-
Prawn.debug = true
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should only accept :position as option in debug mode" do
|
17
|
-
Prawn.debug = true
|
18
|
-
lambda { @pdf.span(350, {:x => 3}) {} }.should raise_error(Prawn::Errors::UnknownOption)
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should have raise an error if :position is invalid" do
|
22
|
-
lambda { @pdf.span(350, :position => :x) {} }.should raise_error(ArgumentError)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should restore the margin box when bounding box exits" do
|
26
|
-
margin_box = @pdf.bounds
|
27
|
-
|
28
|
-
@pdf.span(350, :position => :center) do
|
29
|
-
@pdf.text "Here's some centered text in a 350 point column. " * 100
|
30
|
-
end
|
31
|
-
|
32
|
-
@pdf.bounds.should == margin_box
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should do create a margin box" do
|
36
|
-
y = @pdf.y
|
37
|
-
margin_box = @pdf.span(350, :position => :center) do
|
38
|
-
@pdf.text "Here's some centered text in a 350 point column. " * 100
|
39
|
-
end
|
40
|
-
|
41
|
-
margin_box.top.should == 792.0
|
42
|
-
margin_box.bottom.should == 0
|
43
|
-
end
|
44
|
-
end
|
data/spec/stamp_spec.rb
DELETED
@@ -1,158 +0,0 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
describe "create_stamp before any page is added" do
|
4
|
-
it "should work with the font class" do
|
5
|
-
@pdf = Prawn::Document.new(:skip_page_creation => true)
|
6
|
-
|
7
|
-
# If anything goes wrong, Prawn::Errors::NotOnPage will be raised
|
8
|
-
@pdf.create_stamp("my_stamp") do
|
9
|
-
@pdf.font.height
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should work with setting color" do
|
14
|
-
@pdf = Prawn::Document.new(:skip_page_creation => true)
|
15
|
-
|
16
|
-
# If anything goes wrong, Prawn::Errors::NotOnPage will be raised
|
17
|
-
@pdf.create_stamp("my_stamp") do
|
18
|
-
@pdf.fill_color = 'ff0000'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#stamp_at" do
|
24
|
-
it "should work" do
|
25
|
-
create_pdf
|
26
|
-
@pdf.create_stamp("MyStamp")
|
27
|
-
@pdf.stamp_at("MyStamp", [100, 200])
|
28
|
-
# I had modified PDF::Inspector::XObject to receive the
|
29
|
-
# invoke_xobject message and count the number of times it was
|
30
|
-
# called, but it was only called once, so I reverted checking the
|
31
|
-
# output with a regular expression
|
32
|
-
@pdf.render.should =~ /\/Stamp1 Do.*?/m
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "Document with a stamp" do
|
37
|
-
it "should raise_error NameTaken error when attempt to create stamp "+
|
38
|
-
"with same name as an existing stamp" do
|
39
|
-
create_pdf
|
40
|
-
@pdf.create_stamp("MyStamp")
|
41
|
-
lambda {
|
42
|
-
@pdf.create_stamp("MyStamp")
|
43
|
-
}.should raise_error(Prawn::Errors::NameTaken)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should raise_error InvalidName error when attempt to create "+
|
47
|
-
"stamp with a blank name" do
|
48
|
-
create_pdf
|
49
|
-
lambda {
|
50
|
-
@pdf.create_stamp("")
|
51
|
-
}.should raise_error(Prawn::Errors::InvalidName)
|
52
|
-
end
|
53
|
-
|
54
|
-
it "a new XObject should be defined for each stamp created" do
|
55
|
-
create_pdf
|
56
|
-
@pdf.create_stamp("MyStamp")
|
57
|
-
@pdf.create_stamp("AnotherStamp")
|
58
|
-
@pdf.stamp("MyStamp")
|
59
|
-
@pdf.stamp("AnotherStamp")
|
60
|
-
|
61
|
-
inspector = PDF::Inspector::XObject.analyze(@pdf.render)
|
62
|
-
xobjects = inspector.page_xobjects.last
|
63
|
-
xobjects.length.should == 2
|
64
|
-
end
|
65
|
-
|
66
|
-
it "calling stamp with a name that does not match an existing stamp "+
|
67
|
-
"should raise_error UndefinedObjectName" do
|
68
|
-
create_pdf
|
69
|
-
@pdf.create_stamp("MyStamp")
|
70
|
-
lambda {
|
71
|
-
@pdf.stamp("OtherStamp")
|
72
|
-
}.should raise_error(Prawn::Errors::UndefinedObjectName)
|
73
|
-
end
|
74
|
-
|
75
|
-
it "stamp should be drawn into the document each time stamp is called" do
|
76
|
-
create_pdf
|
77
|
-
@pdf.create_stamp("MyStamp")
|
78
|
-
@pdf.stamp("MyStamp")
|
79
|
-
@pdf.stamp("MyStamp")
|
80
|
-
@pdf.stamp("MyStamp")
|
81
|
-
# I had modified PDF::Inspector::XObject to receive the
|
82
|
-
# invoke_xobject message and count the number of times it was
|
83
|
-
# called, but it was only called once, so I reverted checking the
|
84
|
-
# output with a regular expression
|
85
|
-
@pdf.render.should =~ /(\/Stamp1 Do.*?){3}/m
|
86
|
-
end
|
87
|
-
|
88
|
-
it "resources added during stamp creation should be added to the "+
|
89
|
-
"stamp XObject, not the page" do
|
90
|
-
create_pdf
|
91
|
-
@pdf.create_stamp("MyStamp") do
|
92
|
-
@pdf.transparent(0.5) { @pdf.circle([100, 100], 10)}
|
93
|
-
end
|
94
|
-
@pdf.stamp("MyStamp")
|
95
|
-
|
96
|
-
# Inspector::XObject does not give information about resources, so
|
97
|
-
# resorting to string matching
|
98
|
-
|
99
|
-
output = @pdf.render
|
100
|
-
objects = output.split("endobj")
|
101
|
-
objects.each do |object|
|
102
|
-
if object =~ /\/Type \/Page$/
|
103
|
-
object.should_not =~ /\/ExtGState/
|
104
|
-
elsif object =~ /\/Type \/XObject$/
|
105
|
-
object.should =~ /\/ExtGState/
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
it "stamp stream should be wrapped in a graphic state" do
|
111
|
-
create_pdf
|
112
|
-
@pdf.create_stamp("MyStamp") do
|
113
|
-
@pdf.text "This should have a 'q' before it and a 'Q' after it"
|
114
|
-
end
|
115
|
-
@pdf.stamp("MyStamp")
|
116
|
-
stamps = PDF::Inspector::XObject.analyze(@pdf.render)
|
117
|
-
stamps.xobject_streams[:Stamp1].data.chomp.should =~ /q(.|\s)*Q\Z/
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should not add to the page graphic state stack " do
|
121
|
-
create_pdf
|
122
|
-
@pdf.state.page.stack.stack.size.should == 1
|
123
|
-
|
124
|
-
@pdf.create_stamp("MyStamp") do
|
125
|
-
@pdf.save_graphics_state
|
126
|
-
@pdf.save_graphics_state
|
127
|
-
@pdf.save_graphics_state
|
128
|
-
@pdf.text "This should have a 'q' before it and a 'Q' after it"
|
129
|
-
@pdf.restore_graphics_state
|
130
|
-
end
|
131
|
-
@pdf.state.page.stack.stack.size.should == 1
|
132
|
-
end
|
133
|
-
|
134
|
-
it "should be able to change fill and stroke colors within the stamp stream" do
|
135
|
-
create_pdf
|
136
|
-
@pdf.create_stamp("MyStamp") do
|
137
|
-
@pdf.fill_color(100, 100, 20, 0)
|
138
|
-
@pdf.stroke_color(100, 100, 20, 0)
|
139
|
-
end
|
140
|
-
@pdf.stamp("MyStamp")
|
141
|
-
stamps = PDF::Inspector::XObject.analyze(@pdf.render)
|
142
|
-
stamp_stream = stamps.xobject_streams[:Stamp1].data
|
143
|
-
stamp_stream.should include("/DeviceCMYK cs\n1.000 1.000 0.200 0.000 scn")
|
144
|
-
stamp_stream.should include("/DeviceCMYK CS\n1.000 1.000 0.200 0.000 SCN")
|
145
|
-
end
|
146
|
-
|
147
|
-
it "should save the color space even when same as current page color space" do
|
148
|
-
create_pdf
|
149
|
-
@pdf.stroke_color(100, 100, 20, 0)
|
150
|
-
@pdf.create_stamp("MyStamp") do
|
151
|
-
@pdf.stroke_color(100, 100, 20, 0)
|
152
|
-
end
|
153
|
-
@pdf.stamp("MyStamp")
|
154
|
-
stamps = PDF::Inspector::XObject.analyze(@pdf.render)
|
155
|
-
stamp_stream = stamps.xobject_streams[:Stamp1].data
|
156
|
-
stamp_stream.should include("/DeviceCMYK CS\n1.000 1.000 0.200 0.000 SCN")
|
157
|
-
end
|
158
|
-
end
|
data/spec/stream_spec.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "Stream object" do
|
6
|
-
it "should compress a stream upon request" do
|
7
|
-
stream = PDF::Core::Stream.new
|
8
|
-
stream << "Hi There " * 20
|
9
|
-
|
10
|
-
cstream = PDF::Core::Stream.new
|
11
|
-
cstream << "Hi There " * 20
|
12
|
-
cstream.compress!
|
13
|
-
|
14
|
-
cstream.filtered_stream.length.should be < stream.length,
|
15
|
-
"compressed stream expected to be smaller than source but wasn't"
|
16
|
-
cstream.data[:Filter].should == [:FlateDecode]
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should expose sompression state" do
|
20
|
-
stream = PDF::Core::Stream.new
|
21
|
-
stream << "Hello"
|
22
|
-
stream.compress!
|
23
|
-
|
24
|
-
stream.should be_compressed
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should detect from filters if stream is compressed" do
|
28
|
-
stream = PDF::Core::Stream.new
|
29
|
-
stream << "Hello"
|
30
|
-
stream.filters << :FlateDecode
|
31
|
-
|
32
|
-
stream.should be_compressed
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should have Length if in data" do
|
36
|
-
stream = PDF::Core::Stream.new
|
37
|
-
stream << "hello"
|
38
|
-
|
39
|
-
stream.data[:Length].should == 5
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should update Length when updated" do
|
43
|
-
stream = PDF::Core::Stream.new
|
44
|
-
stream << "hello"
|
45
|
-
stream.data[:Length].should == 5
|
46
|
-
|
47
|
-
stream << " world"
|
48
|
-
stream.data[:Length].should == 11
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should corecly handle decode params" do
|
52
|
-
stream = PDF::Core::Stream.new
|
53
|
-
stream << "Hello"
|
54
|
-
stream.filters << { :FlateDecode => { :Predictor => 15 } }
|
55
|
-
|
56
|
-
stream.data[:DecodeParms].should == [{ :Predictor => 15 }]
|
57
|
-
end
|
58
|
-
end
|