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/outline_spec.rb
DELETED
@@ -1,448 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
3
|
-
|
4
|
-
describe "Outline" do
|
5
|
-
before(:each) do
|
6
|
-
@pdf = Prawn::Document.new() do
|
7
|
-
text "Page 1. This is the first Chapter. "
|
8
|
-
start_new_page
|
9
|
-
text "Page 2. More in the first Chapter. "
|
10
|
-
start_new_page
|
11
|
-
outline.define do
|
12
|
-
section 'Chapter 1', :destination => 1, :closed => true do
|
13
|
-
page :destination => 1, :title => 'Page 1'
|
14
|
-
page :destination => 2, :title => 'Page 2'
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
if RUBY_VERSION >= "1.9"
|
20
|
-
describe "outline encoding" do
|
21
|
-
it "should store all outline titles as UTF-16" do
|
22
|
-
render_and_find_objects
|
23
|
-
@hash.values.each do |obj|
|
24
|
-
if obj.is_a?(Hash) && obj[:Title]
|
25
|
-
title = obj[:Title].dup
|
26
|
-
title.force_encoding("UTF-16LE")
|
27
|
-
title.valid_encoding?.should == true
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
describe "#generate_outline" do
|
34
|
-
before(:each) do
|
35
|
-
render_and_find_objects
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should create a root outline dictionary item" do
|
39
|
-
@outline_root.should_not be_nil
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should set the first and last top items of the root outline dictionary item" do
|
43
|
-
referenced_object(@outline_root[:First]).should == @section_1
|
44
|
-
referenced_object(@outline_root[:Last]).should == @section_1
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "#create_outline_item" do
|
48
|
-
it "should create outline items for each section and page" do
|
49
|
-
[@section_1, @page_1, @page_2].each {|item| item.should_not be_nil}
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "#set_relations, #set_variables_for_block, and #reset_parent" do
|
54
|
-
it "should link sibling items" do
|
55
|
-
referenced_object(@page_1[:Next]).should == @page_2
|
56
|
-
referenced_object(@page_2[:Prev]).should == @page_1
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should link child items to parent item" do
|
60
|
-
[@page_1, @page_2].each {|page| referenced_object(page[:Parent]).should == @section_1 }
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should set the first and last child items for parent item" do
|
64
|
-
referenced_object(@section_1[:First]).should == @page_1
|
65
|
-
referenced_object(@section_1[:Last]).should == @page_2
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "#increase_count" do
|
70
|
-
|
71
|
-
it "should add the count of all descendant items" do
|
72
|
-
@outline_root[:Count].should == 3
|
73
|
-
@section_1[:Count].abs.should == 2
|
74
|
-
@page_1[:Count].should == 0
|
75
|
-
@page_2[:Count].should == 0
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "closed option" do
|
81
|
-
|
82
|
-
it "should set the item's integer count to negative" do
|
83
|
-
@section_1[:Count].should == -2
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "adding a custom destination" do
|
91
|
-
before(:each) do
|
92
|
-
@pdf.start_new_page
|
93
|
-
@pdf.text "Page 3 with a destination"
|
94
|
-
@pdf.add_dest('customdest', @pdf.dest_xyz(200, 200))
|
95
|
-
pdf = @pdf
|
96
|
-
@pdf.outline.update do
|
97
|
-
page :destination => pdf.dest_xyz(200, 200), :title => 'Custom Destination'
|
98
|
-
end
|
99
|
-
render_and_find_objects
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should create an outline item" do
|
103
|
-
@custom_dest.should_not be_nil
|
104
|
-
end
|
105
|
-
|
106
|
-
it "should reference the custom destination" do
|
107
|
-
referenced_object(@custom_dest[:Dest].first).should == referenced_object(@pages.last)
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
describe "addding a section later with outline#section" do
|
113
|
-
before(:each) do
|
114
|
-
@pdf.start_new_page
|
115
|
-
@pdf.text "Page 3. An added section "
|
116
|
-
@pdf.outline.update do
|
117
|
-
section 'Added Section', :destination => 3 do
|
118
|
-
page :destination => 3, :title => 'Page 3'
|
119
|
-
end
|
120
|
-
end
|
121
|
-
render_and_find_objects
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should add new outline items to document" do
|
125
|
-
[@section_2, @page_3].each { |item| item.should_not be_nil}
|
126
|
-
end
|
127
|
-
|
128
|
-
it "should reset the last items for root outline dictionary" do
|
129
|
-
referenced_object(@outline_root[:First]).should == @section_1
|
130
|
-
referenced_object(@outline_root[:Last]).should == @section_2
|
131
|
-
end
|
132
|
-
|
133
|
-
it "should reset the next relation for the previous last top level item" do
|
134
|
-
referenced_object(@section_1[:Next]).should == @section_2
|
135
|
-
end
|
136
|
-
|
137
|
-
it "should set the previous relation of the addded to section" do
|
138
|
-
referenced_object(@section_2[:Prev]).should == @section_1
|
139
|
-
end
|
140
|
-
|
141
|
-
it "should increase the count of root outline dictionary" do
|
142
|
-
@outline_root[:Count].should == 5
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
describe "#outline.add_subsection_to" do
|
148
|
-
context "positioned last" do
|
149
|
-
|
150
|
-
before(:each) do
|
151
|
-
@pdf.start_new_page
|
152
|
-
@pdf.text "Page 3. An added subsection "
|
153
|
-
@pdf.outline.update do
|
154
|
-
add_subsection_to 'Chapter 1' do
|
155
|
-
section 'Added SubSection', :destination => 3 do
|
156
|
-
page :destination => 3, :title => 'Added Page 3'
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
render_and_find_objects
|
161
|
-
end
|
162
|
-
|
163
|
-
it "should add new outline items to document" do
|
164
|
-
[@subsection, @added_page_3].each { |item| item.should_not be_nil}
|
165
|
-
end
|
166
|
-
|
167
|
-
it "should reset the last item for parent item dictionary" do
|
168
|
-
referenced_object(@section_1[:First]).should == @page_1
|
169
|
-
referenced_object(@section_1[:Last]).should == @subsection
|
170
|
-
end
|
171
|
-
|
172
|
-
it "should set the prev relation for the new subsection to its parent's old last item" do
|
173
|
-
referenced_object(@subsection[:Prev]).should == @page_2
|
174
|
-
end
|
175
|
-
|
176
|
-
|
177
|
-
it "the subsection should become the next relation for its parent's old last item" do
|
178
|
-
referenced_object(@page_2[:Next]).should == @subsection
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should set the first relation for the new subsection" do
|
182
|
-
referenced_object(@subsection[:First]).should == @added_page_3
|
183
|
-
end
|
184
|
-
|
185
|
-
it "should set the correct last relation of the added to section" do
|
186
|
-
referenced_object(@subsection[:Last]).should == @added_page_3
|
187
|
-
end
|
188
|
-
|
189
|
-
it "should increase the count of root outline dictionary" do
|
190
|
-
@outline_root[:Count].should == 5
|
191
|
-
end
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
context "positioned first" do
|
196
|
-
|
197
|
-
before(:each) do
|
198
|
-
@pdf.start_new_page
|
199
|
-
@pdf.text "Page 3. An added subsection "
|
200
|
-
@pdf.outline.update do
|
201
|
-
add_subsection_to 'Chapter 1', :first do
|
202
|
-
section 'Added SubSection', :destination => 3 do
|
203
|
-
page :destination => 3, :title => 'Added Page 3'
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
render_and_find_objects
|
208
|
-
end
|
209
|
-
|
210
|
-
it "should add new outline items to document" do
|
211
|
-
[@subsection, @added_page_3].each { |item| item.should_not be_nil}
|
212
|
-
end
|
213
|
-
|
214
|
-
it "should reset the first item for parent item dictionary" do
|
215
|
-
referenced_object(@section_1[:First]).should == @subsection
|
216
|
-
referenced_object(@section_1[:Last]).should == @page_2
|
217
|
-
end
|
218
|
-
|
219
|
-
it "should set the next relation for the new subsection to its parent's old first item" do
|
220
|
-
referenced_object(@subsection[:Next]).should == @page_1
|
221
|
-
end
|
222
|
-
|
223
|
-
it "the subsection should become the prev relation for its parent's old first item" do
|
224
|
-
referenced_object(@page_1[:Prev]).should == @subsection
|
225
|
-
end
|
226
|
-
|
227
|
-
it "should set the first relation for the new subsection" do
|
228
|
-
referenced_object(@subsection[:First]).should == @added_page_3
|
229
|
-
end
|
230
|
-
|
231
|
-
it "should set the correct last relation of the added to section" do
|
232
|
-
referenced_object(@subsection[:Last]).should == @added_page_3
|
233
|
-
end
|
234
|
-
|
235
|
-
it "should increase the count of root outline dictionary" do
|
236
|
-
@outline_root[:Count].should == 5
|
237
|
-
end
|
238
|
-
|
239
|
-
end
|
240
|
-
|
241
|
-
it "should require an existing title" do
|
242
|
-
lambda do
|
243
|
-
@pdf.go_to_page 1
|
244
|
-
@pdf.start_new_page
|
245
|
-
@pdf.text "Inserted Page"
|
246
|
-
@pdf.outline.update do
|
247
|
-
add_subsection_to 'Wrong page' do
|
248
|
-
page page_number, :title => "Inserted Page"
|
249
|
-
end
|
250
|
-
end
|
251
|
-
render_and_find_objects
|
252
|
-
end.should raise_error(Prawn::Errors::UnknownOutlineTitle)
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
describe "#outline.insert_section_after" do
|
257
|
-
describe "inserting in the middle of another section" do
|
258
|
-
before(:each) do
|
259
|
-
@pdf.go_to_page 1
|
260
|
-
@pdf.start_new_page
|
261
|
-
@pdf.text "Inserted Page"
|
262
|
-
@pdf.outline.update do
|
263
|
-
insert_section_after 'Page 1' do
|
264
|
-
page :destination => page_number, :title => "Inserted Page"
|
265
|
-
end
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
it "should insert new outline items to document" do
|
270
|
-
render_and_find_objects
|
271
|
-
@inserted_page.should_not be_nil
|
272
|
-
end
|
273
|
-
|
274
|
-
it "should adjust the count of all ancestors" do
|
275
|
-
render_and_find_objects
|
276
|
-
@outline_root[:Count].should == 4
|
277
|
-
@section_1[:Count].abs.should == 3
|
278
|
-
end
|
279
|
-
|
280
|
-
describe "#adjust_relations" do
|
281
|
-
|
282
|
-
it "should reset the sibling relations of adjoining items to inserted item" do
|
283
|
-
render_and_find_objects
|
284
|
-
referenced_object(@page_1[:Next]).should == @inserted_page
|
285
|
-
referenced_object(@page_2[:Prev]).should == @inserted_page
|
286
|
-
end
|
287
|
-
|
288
|
-
it "should set the sibling relation of added item to adjoining items" do
|
289
|
-
render_and_find_objects
|
290
|
-
referenced_object(@inserted_page[:Next]).should == @page_2
|
291
|
-
referenced_object(@inserted_page[:Prev]).should == @page_1
|
292
|
-
end
|
293
|
-
|
294
|
-
it "should not affect the first and last relations of parent item" do
|
295
|
-
render_and_find_objects
|
296
|
-
referenced_object(@section_1[:First]).should == @page_1
|
297
|
-
referenced_object(@section_1[:Last]).should == @page_2
|
298
|
-
end
|
299
|
-
|
300
|
-
end
|
301
|
-
|
302
|
-
|
303
|
-
context "when adding another section afterwards" do
|
304
|
-
it "should have reset the root position so that a new section is added at the end of root sections" do
|
305
|
-
@pdf.start_new_page
|
306
|
-
@pdf.text "Another Inserted Page"
|
307
|
-
@pdf.outline.update do
|
308
|
-
section 'Added Section' do
|
309
|
-
page :destination => page_number, :title => "Inserted Page"
|
310
|
-
end
|
311
|
-
end
|
312
|
-
render_and_find_objects
|
313
|
-
referenced_object(@outline_root[:Last]).should == @section_2
|
314
|
-
referenced_object(@section_1[:Next]).should == @section_2
|
315
|
-
end
|
316
|
-
end
|
317
|
-
|
318
|
-
end
|
319
|
-
|
320
|
-
|
321
|
-
describe "inserting at the end of another section" do
|
322
|
-
|
323
|
-
before(:each) do
|
324
|
-
@pdf.go_to_page 2
|
325
|
-
@pdf.start_new_page
|
326
|
-
@pdf.text "Inserted Page"
|
327
|
-
@pdf.outline.update do
|
328
|
-
insert_section_after 'Page 2' do
|
329
|
-
page :destination => page_number, :title => "Inserted Page"
|
330
|
-
end
|
331
|
-
end
|
332
|
-
render_and_find_objects
|
333
|
-
end
|
334
|
-
|
335
|
-
describe "#adjust_relations" do
|
336
|
-
|
337
|
-
it "should reset the sibling relations of adjoining item to inserted item" do
|
338
|
-
referenced_object(@page_2[:Next]).should == @inserted_page
|
339
|
-
end
|
340
|
-
|
341
|
-
it "should set the sibling relation of added item to adjoining items" do
|
342
|
-
referenced_object(@inserted_page[:Next]).should be_nil
|
343
|
-
referenced_object(@inserted_page[:Prev]).should == @page_2
|
344
|
-
end
|
345
|
-
|
346
|
-
it "should adjust the last relation of parent item" do
|
347
|
-
referenced_object(@section_1[:Last]).should == @inserted_page
|
348
|
-
end
|
349
|
-
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
|
-
it "should require an existing title" do
|
354
|
-
lambda do
|
355
|
-
@pdf.go_to_page 1
|
356
|
-
@pdf.start_new_page
|
357
|
-
@pdf.text "Inserted Page"
|
358
|
-
@pdf.outline.update do
|
359
|
-
insert_section_after 'Wrong page' do
|
360
|
-
page :destination => page_number, :title => "Inserted Page"
|
361
|
-
end
|
362
|
-
end
|
363
|
-
render_and_find_objects
|
364
|
-
end.should raise_error(Prawn::Errors::UnknownOutlineTitle)
|
365
|
-
end
|
366
|
-
|
367
|
-
end
|
368
|
-
|
369
|
-
describe "#page" do
|
370
|
-
it "should require a title option to be set" do
|
371
|
-
lambda do
|
372
|
-
@pdf = Prawn::Document.new() do
|
373
|
-
text "Page 1. This is the first Chapter. "
|
374
|
-
outline.define do
|
375
|
-
page :destination => 1, :title => nil
|
376
|
-
end
|
377
|
-
end
|
378
|
-
end.should raise_error(Prawn::Errors::RequiredOption)
|
379
|
-
end
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
describe "foreign character encoding" do
|
384
|
-
before(:each) do
|
385
|
-
pdf = Prawn::Document.new() do
|
386
|
-
outline.define do
|
387
|
-
section 'La pomme croquée', :destination => 1, :closed => true
|
388
|
-
end
|
389
|
-
end
|
390
|
-
@hash = PDF::Reader::ObjectHash.new(StringIO.new(pdf.render, 'r+'))
|
391
|
-
end
|
392
|
-
|
393
|
-
it "should handle other encodings for the title" do
|
394
|
-
object = find_by_title('La pomme croquée')
|
395
|
-
object.should_not == nil
|
396
|
-
end
|
397
|
-
end
|
398
|
-
|
399
|
-
describe "with optimize_objects option" do
|
400
|
-
before(:each) do
|
401
|
-
@pdf = Prawn::Document.new(:optimize_objects => true) do
|
402
|
-
outline.define do
|
403
|
-
section 'Chapter 1', :destination => 1, :closed => true do
|
404
|
-
page :destination => 1, :title => 'Page 1'
|
405
|
-
end
|
406
|
-
end
|
407
|
-
end
|
408
|
-
render_and_find_objects
|
409
|
-
end
|
410
|
-
|
411
|
-
it "should generate an outline" do
|
412
|
-
@section_1.should_not be_nil
|
413
|
-
@page_1.should_not be_nil
|
414
|
-
end
|
415
|
-
end
|
416
|
-
|
417
|
-
def render_and_find_objects
|
418
|
-
output = StringIO.new(@pdf.render, 'r+')
|
419
|
-
@hash = PDF::Reader::ObjectHash.new(output)
|
420
|
-
@outline_root = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Outlines}
|
421
|
-
@pages = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
|
422
|
-
@section_1 = find_by_title('Chapter 1')
|
423
|
-
@page_1 = find_by_title('Page 1')
|
424
|
-
@page_2 = find_by_title('Page 2')
|
425
|
-
@section_2 = find_by_title('Added Section')
|
426
|
-
@page_3 = find_by_title('Page 3')
|
427
|
-
@inserted_page = find_by_title('Inserted Page')
|
428
|
-
@subsection = find_by_title('Added SubSection')
|
429
|
-
@added_page_3 = find_by_title('Added Page 3')
|
430
|
-
@custom_dest = find_by_title('Custom Destination')
|
431
|
-
end
|
432
|
-
|
433
|
-
# Outline titles are stored as UTF-16. This method accepts a UTF-8 outline title
|
434
|
-
# and returns the PDF Object that contains an outline with that name
|
435
|
-
def find_by_title(title)
|
436
|
-
@hash.values.find {|obj|
|
437
|
-
if obj.is_a?(Hash) && obj[:Title]
|
438
|
-
title_codepoints = obj[:Title].unpack("n*")
|
439
|
-
title_codepoints.shift
|
440
|
-
utf8_title = title_codepoints.pack("U*")
|
441
|
-
utf8_title == title ? obj : nil
|
442
|
-
end
|
443
|
-
}
|
444
|
-
end
|
445
|
-
|
446
|
-
def referenced_object(reference)
|
447
|
-
@hash[reference]
|
448
|
-
end
|
data/spec/pdf_object_spec.rb
DELETED
@@ -1,172 +0,0 @@
|
|
1
|
-
# encoding: ASCII-8BIT
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
# See PDF Reference, Sixth Edition (1.7) pp51-60 for details
|
6
|
-
describe "PDF Object Serialization" do
|
7
|
-
|
8
|
-
it "should convert Ruby's nil to PDF null" do
|
9
|
-
PDF::Core::PdfObject(nil).should == "null"
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should convert Ruby booleans to PDF booleans" do
|
13
|
-
PDF::Core::PdfObject(true).should == "true"
|
14
|
-
PDF::Core::PdfObject(false).should == "false"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should convert a Ruby number to PDF number" do
|
18
|
-
PDF::Core::PdfObject(1).should == "1"
|
19
|
-
PDF::Core::PdfObject(1.214112421).should == "1.214112421"
|
20
|
-
# scientific notation is not valid in PDF
|
21
|
-
PDF::Core::PdfObject(0.000005).should == "0.000005"
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should convert a Ruby time object to a PDF timestamp" do
|
25
|
-
t = Time.now
|
26
|
-
PDF::Core::PdfObject(t).should == t.strftime("(D:%Y%m%d%H%M%S%z").chop.chop + "'00')"
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should convert a Ruby string to PDF string when inside a content stream" do
|
30
|
-
s = "I can has a string"
|
31
|
-
PDF::Inspector.parse(PDF::Core::PdfObject(s, true)).should == s
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should convert a Ruby string to a UTF-16 PDF string when outside a content stream" do
|
35
|
-
s = "I can has a string"
|
36
|
-
s_utf16 = "\xFE\xFF" + s.unpack("U*").pack("n*")
|
37
|
-
PDF::Inspector.parse(PDF::Core::PdfObject(s, false)).should == s_utf16
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should convert a Ruby string with characters outside the BMP to its " +
|
41
|
-
"UTF-16 representation with a BOM" do
|
42
|
-
# U+10192 ROMAN SEMUNCIA SIGN
|
43
|
-
semuncia = [65938].pack("U")
|
44
|
-
PDF::Core::PdfObject(semuncia, false).upcase.should == "<FEFFD800DD92>"
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should pass through bytes regardless of content stream status for ByteString" do
|
48
|
-
PDF::Core::PdfObject(PDF::Core::ByteString.new("\xDE\xAD\xBE\xEF")).upcase.
|
49
|
-
should == "<DEADBEEF>"
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should escape parens when converting from Ruby string to PDF" do
|
53
|
-
s = 'I )(can has a string'
|
54
|
-
PDF::Inspector.parse(PDF::Core::PdfObject(s, true)).should == s
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should handle ruby escaped parens when converting to PDF string" do
|
58
|
-
s = 'I can \\)( has string'
|
59
|
-
PDF::Inspector.parse(PDF::Core::PdfObject(s, true)).should == s
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should escape various strings correctly when converting a LiteralString" do
|
63
|
-
ls = PDF::Core::LiteralString.new("abc")
|
64
|
-
PDF::Core::PdfObject(ls).should == "(abc)"
|
65
|
-
|
66
|
-
ls = PDF::Core::LiteralString.new("abc\x0Ade") # should escape \n
|
67
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C\x0Ade)"
|
68
|
-
|
69
|
-
ls = PDF::Core::LiteralString.new("abc\x0Dde") # should escape \r
|
70
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C\x0Dde)"
|
71
|
-
|
72
|
-
ls = PDF::Core::LiteralString.new("abc\x09de") # should escape \t
|
73
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C\x09de)"
|
74
|
-
|
75
|
-
ls = PDF::Core::LiteralString.new("abc\x08de") # should escape \b
|
76
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C\x08de)"
|
77
|
-
|
78
|
-
ls = PDF::Core::LiteralString.new("abc\x0Cde") # should escape \f
|
79
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C\x0Cde)"
|
80
|
-
|
81
|
-
ls = PDF::Core::LiteralString.new("abc(de") # should escape \(
|
82
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C(de)"
|
83
|
-
|
84
|
-
ls = PDF::Core::LiteralString.new("abc)de") # should escape \)
|
85
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C)de)"
|
86
|
-
|
87
|
-
ls = PDF::Core::LiteralString.new("abc\x5Cde") # should escape \\
|
88
|
-
PDF::Core::PdfObject(ls).should == "(abc\x5C\x5Cde)"
|
89
|
-
PDF::Core::PdfObject(ls).size.should == 9
|
90
|
-
end
|
91
|
-
|
92
|
-
it "should escape strings correctly when converting a LiteralString that is not utf-8" do
|
93
|
-
data = "\x43\xaf\xc9\x7f\xef\xf\xe6\xa8\xcb\x5c\xaf\xd0"
|
94
|
-
ls = PDF::Core::LiteralString.new(data)
|
95
|
-
PDF::Core::PdfObject(ls).should == "(\x43\xaf\xc9\x7f\xef\xf\xe6\xa8\xcb\x5c\x5c\xaf\xd0)"
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should convert a Ruby symbol to PDF name" do
|
99
|
-
PDF::Core::PdfObject(:my_symbol).should == "/my_symbol"
|
100
|
-
PDF::Core::PdfObject(:"A;Name_With-Various***Characters?").should ==
|
101
|
-
"/A;Name_With-Various***Characters?"
|
102
|
-
end
|
103
|
-
|
104
|
-
it "should convert a whitespace or delimiter containing Ruby symbol to a PDF name" do
|
105
|
-
PDF::Core::PdfObject(:"my symbol").should == "/my#20symbol"
|
106
|
-
PDF::Core::PdfObject(:"my#symbol").should == "/my#23symbol"
|
107
|
-
PDF::Core::PdfObject(:"my/symbol").should == "/my#2Fsymbol"
|
108
|
-
PDF::Core::PdfObject(:"my(symbol").should == "/my#28symbol"
|
109
|
-
PDF::Core::PdfObject(:"my)symbol").should == "/my#29symbol"
|
110
|
-
PDF::Core::PdfObject(:"my<symbol").should == "/my#3Csymbol"
|
111
|
-
PDF::Core::PdfObject(:"my>symbol").should == "/my#3Esymbol"
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should convert a Ruby array to PDF Array when inside a content stream" do
|
115
|
-
PDF::Core::PdfObject([1,2,3]).should == "[1 2 3]"
|
116
|
-
PDF::Inspector.parse(PDF::Core::PdfObject([[1,2],:foo,"Bar"], true)).should ==
|
117
|
-
[[1,2],:foo, "Bar"]
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should convert a Ruby array to PDF Array when outside a content stream" do
|
121
|
-
bar = "\xFE\xFF" + "Bar".unpack("U*").pack("n*")
|
122
|
-
PDF::Core::PdfObject([1,2,3]).should == "[1 2 3]"
|
123
|
-
PDF::Inspector.parse(PDF::Core::PdfObject([[1,2],:foo,"Bar"], false)).should ==
|
124
|
-
[[1,2],:foo, bar]
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should convert a Ruby hash to a PDF Dictionary when inside a content stream" do
|
128
|
-
dict = PDF::Core::PdfObject( {:foo => :bar,
|
129
|
-
"baz" => [1,2,3],
|
130
|
-
:bang => {:a => "what", :b => [:you, :say] }}, true )
|
131
|
-
|
132
|
-
res = PDF::Inspector.parse(dict)
|
133
|
-
|
134
|
-
res[:foo].should == :bar
|
135
|
-
res[:baz].should == [1,2,3]
|
136
|
-
res[:bang].should == { :a => "what", :b => [:you, :say] }
|
137
|
-
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should convert a Ruby hash to a PDF Dictionary when outside a content stream" do
|
141
|
-
what = "\xFE\xFF" + "what".unpack("U*").pack("n*")
|
142
|
-
dict = PDF::Core::PdfObject( {:foo => :bar,
|
143
|
-
"baz" => [1,2,3],
|
144
|
-
:bang => {:a => "what", :b => [:you, :say] }}, false )
|
145
|
-
|
146
|
-
res = PDF::Inspector.parse(dict)
|
147
|
-
|
148
|
-
res[:foo].should == :bar
|
149
|
-
res[:baz].should == [1,2,3]
|
150
|
-
res[:bang].should == { :a => what, :b => [:you, :say] }
|
151
|
-
|
152
|
-
end
|
153
|
-
|
154
|
-
it "should not allow keys other than strings or symbols for PDF dicts" do
|
155
|
-
lambda { PDF::Core::PdfObject(:foo => :bar, :baz => :bang, 1 => 4) }.
|
156
|
-
should raise_error(PDF::Core::Errors::FailedObjectConversion)
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should convert a Prawn::Reference to a PDF indirect object reference" do
|
160
|
-
ref = PDF::Core::Reference(1,true)
|
161
|
-
PDF::Core::PdfObject(ref).should == ref.to_s
|
162
|
-
end
|
163
|
-
|
164
|
-
it "should convert a NameTree::Node to a PDF hash" do
|
165
|
-
node = PDF::Core::NameTree::Node.new(Prawn::Document.new, 10)
|
166
|
-
node.add "hello", 1.0
|
167
|
-
node.add "world", 2.0
|
168
|
-
data = PDF::Core::PdfObject(node)
|
169
|
-
res = PDF::Inspector.parse(data)
|
170
|
-
res.should == {:Names => ["hello", 1.0, "world", 2.0]}
|
171
|
-
end
|
172
|
-
end
|