prawn 1.1.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +1 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -9
  6. data/Rakefile +9 -40
  7. data/lib/prawn/document/bounding_box.rb +54 -40
  8. data/lib/prawn/document/column_box.rb +8 -10
  9. data/lib/prawn/document/internals.rb +39 -146
  10. data/lib/prawn/document/span.rb +23 -17
  11. data/lib/prawn/document.rb +217 -182
  12. data/lib/prawn/encoding.rb +69 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +124 -104
  15. data/lib/prawn/font_metric_cache.rb +23 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +5 -12
  18. data/lib/prawn/fonts/otf.rb +11 -0
  19. data/lib/prawn/fonts/ttc.rb +36 -0
  20. data/lib/prawn/{font → fonts}/ttf.rb +140 -88
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +5 -5
  23. data/lib/prawn/graphics/color.rb +46 -44
  24. data/lib/prawn/graphics/dash.rb +27 -11
  25. data/lib/prawn/graphics/join_style.rb +11 -6
  26. data/lib/prawn/graphics/patterns.rb +220 -78
  27. data/lib/prawn/graphics/transformation.rb +20 -12
  28. data/lib/prawn/graphics/transparency.rb +20 -18
  29. data/lib/prawn/graphics.rb +153 -115
  30. data/lib/prawn/grid.rb +93 -50
  31. data/lib/prawn/image_handler.rb +4 -4
  32. data/lib/prawn/images/image.rb +3 -2
  33. data/lib/prawn/images/jpg.rb +31 -24
  34. data/lib/prawn/images/png.rb +101 -68
  35. data/lib/prawn/images.rb +64 -56
  36. data/lib/prawn/measurement_extensions.rb +10 -9
  37. data/lib/prawn/measurements.rb +20 -23
  38. data/lib/prawn/outline.rb +96 -75
  39. data/lib/prawn/repeater.rb +16 -16
  40. data/lib/prawn/security/arcfour.rb +2 -2
  41. data/lib/prawn/security.rb +100 -85
  42. data/lib/prawn/soft_mask.rb +37 -38
  43. data/lib/prawn/stamp.rb +28 -13
  44. data/lib/prawn/text/box.rb +24 -29
  45. data/lib/prawn/text/formatted/arranger.rb +108 -63
  46. data/lib/prawn/text/formatted/box.rb +187 -124
  47. data/lib/prawn/text/formatted/fragment.rb +24 -20
  48. data/lib/prawn/text/formatted/line_wrap.rb +133 -73
  49. data/lib/prawn/text/formatted/parser.rb +147 -127
  50. data/lib/prawn/text/formatted/wrap.rb +48 -35
  51. data/lib/prawn/text/formatted.rb +5 -5
  52. data/lib/prawn/text.rb +103 -68
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +10 -22
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +39 -54
  58. data/manual/basic_concepts/adding_pages.rb +6 -7
  59. data/manual/basic_concepts/basic_concepts.rb +34 -25
  60. data/manual/basic_concepts/creation.rb +10 -11
  61. data/manual/basic_concepts/cursor.rb +4 -5
  62. data/manual/basic_concepts/measurement.rb +8 -9
  63. data/manual/basic_concepts/origin.rb +5 -6
  64. data/manual/basic_concepts/other_cursor_helpers.rb +11 -12
  65. data/manual/basic_concepts/view.rb +48 -0
  66. data/manual/bounding_box/bounding_box.rb +30 -28
  67. data/manual/bounding_box/bounds.rb +12 -13
  68. data/manual/bounding_box/canvas.rb +7 -8
  69. data/manual/bounding_box/creation.rb +6 -7
  70. data/manual/bounding_box/indentation.rb +14 -15
  71. data/manual/bounding_box/nesting.rb +25 -18
  72. data/manual/bounding_box/russian_boxes.rb +18 -18
  73. data/manual/bounding_box/stretchy.rb +12 -14
  74. data/manual/contents.rb +28 -22
  75. data/manual/cover.rb +33 -32
  76. data/manual/document_and_page_options/background.rb +15 -13
  77. data/manual/document_and_page_options/document_and_page_options.rb +24 -22
  78. data/manual/document_and_page_options/metadata.rb +20 -18
  79. data/manual/document_and_page_options/page_margins.rb +18 -20
  80. data/manual/document_and_page_options/page_size.rb +13 -13
  81. data/manual/document_and_page_options/print_scaling.rb +18 -15
  82. data/manual/example_helper.rb +5 -4
  83. data/manual/graphics/blend_mode.rb +52 -0
  84. data/manual/graphics/circle_and_ellipse.rb +4 -5
  85. data/manual/graphics/color.rb +7 -9
  86. data/manual/graphics/common_lines.rb +7 -8
  87. data/manual/graphics/fill_and_stroke.rb +5 -6
  88. data/manual/graphics/fill_rules.rb +12 -11
  89. data/manual/graphics/gradients.rb +27 -21
  90. data/manual/graphics/graphics.rb +46 -40
  91. data/manual/graphics/helper.rb +19 -9
  92. data/manual/graphics/line_width.rb +8 -7
  93. data/manual/graphics/lines_and_curves.rb +8 -9
  94. data/manual/graphics/polygon.rb +6 -8
  95. data/manual/graphics/rectangle.rb +4 -5
  96. data/manual/graphics/rotate.rb +6 -9
  97. data/manual/graphics/scale.rb +14 -13
  98. data/manual/graphics/soft_masks.rb +4 -6
  99. data/manual/graphics/stroke_cap.rb +7 -8
  100. data/manual/graphics/stroke_dash.rb +15 -16
  101. data/manual/graphics/stroke_join.rb +6 -7
  102. data/manual/graphics/translate.rb +10 -10
  103. data/manual/graphics/transparency.rb +7 -9
  104. data/manual/how_to_read_this_manual.rb +8 -9
  105. data/manual/images/absolute_position.rb +6 -7
  106. data/manual/images/fit.rb +7 -8
  107. data/manual/images/horizontal.rb +10 -11
  108. data/manual/images/images.rb +28 -27
  109. data/manual/images/plain_image.rb +5 -6
  110. data/manual/images/scale.rb +9 -10
  111. data/manual/images/vertical.rb +16 -14
  112. data/manual/images/width_and_height.rb +10 -11
  113. data/manual/layout/boxes.rb +10 -11
  114. data/manual/layout/content.rb +9 -10
  115. data/manual/layout/layout.rb +17 -18
  116. data/manual/layout/simple_grid.rb +6 -7
  117. data/manual/outline/add_subsection_to.rb +20 -21
  118. data/manual/outline/insert_section_after.rb +15 -16
  119. data/manual/outline/outline.rb +22 -21
  120. data/manual/outline/sections_and_pages.rb +17 -18
  121. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  122. data/manual/repeatable_content/page_numbering.rb +17 -16
  123. data/manual/repeatable_content/repeatable_content.rb +27 -23
  124. data/manual/repeatable_content/repeater.rb +15 -16
  125. data/manual/repeatable_content/stamp.rb +14 -15
  126. data/manual/security/encryption.rb +8 -11
  127. data/manual/security/permissions.rb +20 -15
  128. data/manual/security/security.rb +18 -18
  129. data/manual/table.rb +16 -0
  130. data/manual/text/alignment.rb +16 -17
  131. data/manual/text/color.rb +12 -12
  132. data/manual/text/column_box.rb +9 -11
  133. data/manual/text/fallback_fonts.rb +25 -21
  134. data/manual/text/font.rb +11 -12
  135. data/manual/text/font_size.rb +13 -14
  136. data/manual/text/font_style.rb +10 -8
  137. data/manual/text/formatted_callbacks.rb +33 -23
  138. data/manual/text/formatted_text.rb +36 -25
  139. data/manual/text/free_flowing_text.rb +22 -23
  140. data/manual/text/inline.rb +18 -19
  141. data/manual/text/kerning_and_character_spacing.rb +14 -15
  142. data/manual/text/leading.rb +7 -8
  143. data/manual/text/line_wrapping.rb +37 -18
  144. data/manual/text/paragraph_indentation.rb +15 -10
  145. data/manual/text/positioned_text.rb +16 -17
  146. data/manual/text/registering_families.rb +27 -24
  147. data/manual/text/rendering_and_color.rb +9 -10
  148. data/manual/text/right_to_left_text.rb +30 -19
  149. data/manual/text/rotation.rb +33 -24
  150. data/manual/text/single_usage.rb +8 -9
  151. data/manual/text/text.rb +56 -54
  152. data/manual/text/text_box_excess.rb +20 -17
  153. data/manual/text/text_box_extensions.rb +18 -15
  154. data/manual/text/text_box_overflow.rb +24 -17
  155. data/manual/text/utf8.rb +12 -13
  156. data/manual/text/win_ansi_charset.rb +28 -25
  157. data/prawn.gemspec +45 -50
  158. data/spec/extensions/encoding_helpers.rb +3 -3
  159. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  160. data/spec/prawn/document/column_box_spec.rb +75 -0
  161. data/spec/prawn/document/security_spec.rb +176 -0
  162. data/spec/prawn/document_annotations_spec.rb +76 -0
  163. data/spec/prawn/document_destinations_spec.rb +15 -0
  164. data/spec/prawn/document_grid_spec.rb +99 -0
  165. data/spec/prawn/document_reference_spec.rb +27 -0
  166. data/spec/prawn/document_span_spec.rb +44 -0
  167. data/spec/prawn/document_spec.rb +805 -0
  168. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  169. data/spec/prawn/font_spec.rb +544 -0
  170. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  171. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  172. data/spec/prawn/graphics_spec.rb +872 -0
  173. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  174. data/spec/prawn/image_handler_spec.rb +53 -0
  175. data/spec/prawn/images/jpg_spec.rb +20 -0
  176. data/spec/prawn/images/png_spec.rb +283 -0
  177. data/spec/prawn/images_spec.rb +229 -0
  178. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  179. data/spec/prawn/outline_spec.rb +512 -0
  180. data/spec/prawn/repeater_spec.rb +166 -0
  181. data/spec/prawn/soft_mask_spec.rb +74 -0
  182. data/spec/prawn/stamp_spec.rb +173 -0
  183. data/spec/prawn/text/box_spec.rb +1110 -0
  184. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  185. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  186. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  187. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  188. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  189. data/spec/prawn/text_draw_text_spec.rb +150 -0
  190. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  191. data/spec/prawn/text_spacing_spec.rb +95 -0
  192. data/spec/prawn/text_spec.rb +603 -0
  193. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  194. data/spec/prawn/transformation_stack_spec.rb +66 -0
  195. data/spec/prawn/view_spec.rb +63 -0
  196. data/spec/prawn_manual_spec.rb +35 -0
  197. data/spec/spec_helper.rb +19 -25
  198. data.tar.gz.sig +0 -0
  199. metadata +113 -276
  200. metadata.gz.sig +0 -0
  201. data/data/encodings/win_ansi.txt +0 -29
  202. data/data/images/16bit.alpha +0 -0
  203. data/data/images/16bit.color +0 -0
  204. data/data/images/16bit.png +0 -0
  205. data/data/images/arrow.png +0 -0
  206. data/data/images/arrow2.png +0 -0
  207. data/data/images/dice.alpha +0 -0
  208. data/data/images/dice.color +0 -0
  209. data/data/images/dice.png +0 -0
  210. data/data/images/dice_interlaced.png +0 -0
  211. data/data/images/fractal.jpg +0 -0
  212. data/data/images/indexed_color.dat +0 -0
  213. data/data/images/indexed_color.png +0 -0
  214. data/data/images/letterhead.jpg +0 -0
  215. data/data/images/license.md +0 -8
  216. data/data/images/page_white_text.alpha +0 -0
  217. data/data/images/page_white_text.color +0 -0
  218. data/data/images/page_white_text.png +0 -0
  219. data/data/images/pigs.jpg +0 -0
  220. data/data/images/prawn.png +0 -0
  221. data/data/images/ruport.png +0 -0
  222. data/data/images/ruport_data.dat +0 -0
  223. data/data/images/ruport_transparent.png +0 -0
  224. data/data/images/ruport_type0.png +0 -0
  225. data/data/images/stef.jpg +0 -0
  226. data/data/images/tru256.bmp +0 -0
  227. data/data/images/web-links.dat +0 -1
  228. data/data/images/web-links.png +0 -0
  229. data/data/pdfs/complex_template.pdf +0 -0
  230. data/data/pdfs/contains_ttf_font.pdf +0 -0
  231. data/data/pdfs/encrypted.pdf +0 -0
  232. data/data/pdfs/form.pdf +1 -819
  233. data/data/pdfs/hexagon.pdf +0 -61
  234. data/data/pdfs/indirect_reference.pdf +0 -86
  235. data/data/pdfs/multipage_template.pdf +0 -127
  236. data/data/pdfs/nested_pages.pdf +0 -118
  237. data/data/pdfs/page_without_mediabox.pdf +0 -193
  238. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  239. data/data/pdfs/two_hexagons.pdf +0 -90
  240. data/data/pdfs/version_1_6.pdf +0 -61
  241. data/data/shift_jis_text.txt +0 -1
  242. data/lib/prawn/document/graphics_state.rb +0 -73
  243. data/lib/prawn/font/afm.rb +0 -247
  244. data/lib/prawn/table/cell/image.rb +0 -69
  245. data/lib/prawn/table/cell/in_table.rb +0 -33
  246. data/lib/prawn/table/cell/span_dummy.rb +0 -93
  247. data/lib/prawn/table/cell/subtable.rb +0 -66
  248. data/lib/prawn/table/cell/text.rb +0 -154
  249. data/lib/prawn/table/cell.rb +0 -772
  250. data/lib/prawn/table/cells.rb +0 -255
  251. data/lib/prawn/table/column_width_calculator.rb +0 -182
  252. data/lib/prawn/table.rb +0 -644
  253. data/manual/table/basic_block.rb +0 -53
  254. data/manual/table/before_rendering_page.rb +0 -26
  255. data/manual/table/cell_border_lines.rb +0 -24
  256. data/manual/table/cell_borders_and_bg.rb +0 -31
  257. data/manual/table/cell_dimensions.rb +0 -30
  258. data/manual/table/cell_text.rb +0 -38
  259. data/manual/table/column_widths.rb +0 -30
  260. data/manual/table/content_and_subtables.rb +0 -39
  261. data/manual/table/creation.rb +0 -27
  262. data/manual/table/filtering.rb +0 -36
  263. data/manual/table/flow_and_header.rb +0 -17
  264. data/manual/table/image_cells.rb +0 -33
  265. data/manual/table/position.rb +0 -29
  266. data/manual/table/row_colors.rb +0 -20
  267. data/manual/table/span.rb +0 -30
  268. data/manual/table/style.rb +0 -22
  269. data/manual/table/table.rb +0 -52
  270. data/manual/table/width.rb +0 -27
  271. data/spec/acceptance/png.rb +0 -25
  272. data/spec/annotations_spec.rb +0 -74
  273. data/spec/bounding_box_spec.rb +0 -510
  274. data/spec/cell_spec.rb +0 -629
  275. data/spec/column_box_spec.rb +0 -65
  276. data/spec/destinations_spec.rb +0 -15
  277. data/spec/document_spec.rb +0 -730
  278. data/spec/extensions/mocha.rb +0 -46
  279. data/spec/font_metric_cache_spec.rb +0 -52
  280. data/spec/font_spec.rb +0 -449
  281. data/spec/formatted_text_arranger_spec.rb +0 -421
  282. data/spec/formatted_text_box_spec.rb +0 -639
  283. data/spec/formatted_text_fragment_spec.rb +0 -298
  284. data/spec/graphics_spec.rb +0 -669
  285. data/spec/grid_spec.rb +0 -96
  286. data/spec/image_handler_spec.rb +0 -54
  287. data/spec/images_spec.rb +0 -153
  288. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  289. data/spec/jpg_spec.rb +0 -25
  290. data/spec/line_wrap_spec.rb +0 -344
  291. data/spec/measurement_units_spec.rb +0 -25
  292. data/spec/outline_spec.rb +0 -430
  293. data/spec/png_spec.rb +0 -237
  294. data/spec/reference_spec.rb +0 -25
  295. data/spec/repeater_spec.rb +0 -160
  296. data/spec/security_spec.rb +0 -158
  297. data/spec/soft_mask_spec.rb +0 -79
  298. data/spec/span_spec.rb +0 -44
  299. data/spec/stamp_spec.rb +0 -160
  300. data/spec/stroke_styles_spec.rb +0 -211
  301. data/spec/table/span_dummy_spec.rb +0 -17
  302. data/spec/table_spec.rb +0 -1527
  303. data/spec/text_at_spec.rb +0 -115
  304. data/spec/text_box_spec.rb +0 -1034
  305. data/spec/text_rendering_mode_spec.rb +0 -45
  306. data/spec/text_spacing_spec.rb +0 -93
  307. data/spec/text_spec.rb +0 -437
  308. data/spec/text_with_inline_formatting_spec.rb +0 -35
  309. data/spec/transparency_spec.rb +0 -91
data/spec/grid_spec.rb DELETED
@@ -1,96 +0,0 @@
1
- # encoding: utf-8
2
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
3
-
4
- describe "A document's grid" do
5
- before do
6
- @pdf = Prawn::Document.new
7
- end
8
-
9
- it "should allow definition of a grid" do
10
- @pdf.define_grid(:columns => 5, :rows => 8, :gutter => 0.1)
11
- @pdf.grid.columns.should == 5
12
- @pdf.grid.rows.should == 8
13
- @pdf.grid.gutter.should == 0.1
14
- end
15
-
16
- it "should allow re-definition of a grid" do
17
- @pdf.define_grid(:columns => 5, :rows => 8, :gutter => 0.1)
18
- @pdf.grid.columns.should == 5
19
- @pdf.grid.rows.should == 8
20
- @pdf.grid.gutter.should == 0.1
21
- @pdf.define_grid(:columns => 3, :rows => 6, :gutter => 0.1)
22
- @pdf.grid.columns.should == 3
23
- @pdf.grid.rows.should == 6
24
- @pdf.grid.gutter.should == 0.1
25
- end
26
-
27
- describe "when a grid is defined" do
28
- before do
29
- @num_columns = 5
30
- @num_rows = 8
31
- @gutter = 10.0
32
- @pdf.define_grid(
33
- :columns => @num_columns,
34
- :rows => @num_rows,
35
- :gutter => @gutter
36
- )
37
- end
38
-
39
- it "should compute the column width" do
40
- (@pdf.grid.column_width * @num_columns.to_f +
41
- @gutter * (@num_columns - 1).to_f).should == @pdf.bounds.width
42
- end
43
-
44
- it "should compute the row height" do
45
- (@pdf.grid.row_height * @num_rows.to_f +
46
- @gutter * (@num_rows - 1).to_f).should == @pdf.bounds.height
47
- end
48
-
49
- it "should give the edges of a grid box" do
50
- grid_width = (@pdf.bounds.width.to_f -
51
- (@gutter * (@num_columns - 1).to_f )) / @num_columns.to_f
52
- grid_height = (@pdf.bounds.height.to_f -
53
- (@gutter * (@num_rows - 1).to_f ))/ @num_rows.to_f
54
-
55
- exp_tl_x = (grid_width + @gutter.to_f) * 4.0
56
- exp_tl_y = @pdf.bounds.height.to_f - (grid_height + @gutter.to_f)
57
-
58
- @pdf.grid(1,4).top_left.should == [exp_tl_x, exp_tl_y]
59
- @pdf.grid(1,4).top_right.should == [exp_tl_x + grid_width, exp_tl_y]
60
- @pdf.grid(1,4).bottom_left.should == [exp_tl_x, exp_tl_y - grid_height]
61
- @pdf.grid(1,4).bottom_right.should == [exp_tl_x + grid_width, exp_tl_y - grid_height]
62
- end
63
-
64
- it "should give the edges of a multiple grid boxes" do
65
- # Hand verified. Cheating a bit. Don't tell.
66
- @pdf.grid([1,3], [2,5]).top_left.should == [330.0, 628.75]
67
- @pdf.grid([1,3], [2,5]).top_right.should == [650.0, 628.75]
68
- @pdf.grid([1,3], [2,5]).bottom_left.should == [330.0, 456.25]
69
- @pdf.grid([1,3], [2,5]).bottom_right.should == [650.0, 456.25]
70
- end
71
-
72
- it "should draw outlines without changing global default colors to grid color" do
73
- @pdf.grid.show_all('cccccc')
74
-
75
- colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
76
- colors.fill_color.should_not == [0.8,0.8,0.8]
77
- colors.stroke_color.should_not == [0.8,0.8,0.8]
78
-
79
- # Hardcoded default color as I haven't been able to come up with a stable converter
80
- # between fill_color without lots code.
81
- #colors.fill_color.should == [0.0,0.0,0.0]
82
- colors.stroke_color.should == [0.0,0.0,0.0]
83
- end
84
-
85
- it "should draw outlines without curent color settings" do
86
- @pdf.fill_color "ccff00"
87
- @pdf.stroke_color "ffcc00"
88
-
89
- @pdf.grid.show_all
90
-
91
- colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
92
- colors.fill_color.should == [0.8,1.0,0.0]
93
- colors.stroke_color.should == [1.0,0.8,0.0]
94
- end
95
- end
96
- end
@@ -1,54 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
-
5
- describe "ImageHandler" do
6
- let(:image_handler) { Prawn::ImageHandler.new }
7
-
8
- let(:handler_a) { mock("Handler A") }
9
- let(:handler_b) { mock("Handler B") }
10
-
11
- it "finds the image handler for an image" do
12
- handler_a.expects(:can_render? => true)
13
-
14
- image_handler.register(handler_a)
15
- image_handler.register(handler_b)
16
-
17
- handler = image_handler.find("arbitrary blob")
18
- handler.should == handler_a
19
- end
20
-
21
- it "can prepend handlers" do
22
- handler_b.expects(:can_render? => true)
23
-
24
- image_handler.register(handler_a)
25
- image_handler.register!(handler_b)
26
-
27
- handler = image_handler.find("arbitrary blob")
28
- handler.should == handler_b
29
- end
30
-
31
- it "can unregister a handler" do
32
- handler_b.expects(:can_render? => true)
33
-
34
- image_handler.register(handler_a)
35
- image_handler.register(handler_b)
36
-
37
- image_handler.unregister(handler_a)
38
-
39
- handler = image_handler.find('arbitrary blob')
40
- handler.should == handler_b
41
- end
42
-
43
- it "raises an error when no matching handler is found" do
44
- handler_a.expects(:can_render? => false)
45
- handler_b.expects(:can_render? => false)
46
-
47
- image_handler.register(handler_a)
48
- image_handler.register(handler_b)
49
-
50
- expect { image_handler.find("arbitrary blob") }.
51
- to(raise_error(Prawn::Errors::UnsupportedImageType))
52
- end
53
-
54
- end
data/spec/images_spec.rb DELETED
@@ -1,153 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
- require 'set'
5
- require 'pathname'
6
-
7
- describe "the image() function" do
8
-
9
- before(:each) do
10
- @filename = "#{Prawn::DATADIR}/images/pigs.jpg"
11
- create_pdf
12
- end
13
-
14
- it "should only embed an image once, even if it's added multiple times" do
15
- @pdf.image @filename, :at => [100,100]
16
- @pdf.image @filename, :at => [300,300]
17
-
18
- output = @pdf.render
19
- images = PDF::Inspector::XObject.analyze(output)
20
- # there should be 2 images in the page resources
21
- images.page_xobjects.first.size.should == 2
22
- # but only 1 image xobject
23
- output.scan(/\/Type \/XObject/).size.should == 1
24
- end
25
-
26
- it "should return the image info object" do
27
- info = @pdf.image(@filename)
28
-
29
- info.should be_a_kind_of(Prawn::Images::JPG)
30
-
31
- info.height.should == 453
32
- end
33
-
34
- it "should accept IO objects" do
35
- file = File.open(@filename, "rb")
36
- info = @pdf.image(file)
37
-
38
- info.height.should == 453
39
- end
40
-
41
- it "rewinds IO objects to be able to embed them multiply" do
42
- file = File.open(@filename, "rb")
43
-
44
- @pdf.image(file)
45
- info = @pdf.image(file)
46
- info.height.should == 453
47
- end
48
-
49
- it "should accept Pathname objects" do
50
- info = @pdf.image(Pathname.new(@filename))
51
- info.height.should == 453
52
- end
53
-
54
- context "setting the length of the bytestream" do
55
- it "should correctly work with images from Pathname objects" do
56
- info = @pdf.image(Pathname.new(@filename))
57
- expect(@pdf).to have_parseable_xobjects
58
- end
59
-
60
- it "should correctly work with images from IO objects" do
61
- info = @pdf.image(File.open(@filename, 'rb'))
62
- expect(@pdf).to have_parseable_xobjects
63
- end
64
-
65
- it "should correctly work with images from IO objects not set to mode rb" do
66
- info = @pdf.image(File.open(@filename, 'r'))
67
- expect(@pdf).to have_parseable_xobjects
68
- end
69
- end
70
-
71
- it "should raise_error an UnsupportedImageType if passed a BMP" do
72
- filename = "#{Prawn::DATADIR}/images/tru256.bmp"
73
- lambda { @pdf.image filename, :at => [100,100] }.should raise_error(Prawn::Errors::UnsupportedImageType)
74
- end
75
-
76
- it "should raise_error an UnsupportedImageType if passed an interlaced PNG" do
77
- filename = "#{Prawn::DATADIR}/images/dice_interlaced.png"
78
- lambda { @pdf.image filename, :at => [100,100] }.should raise_error(Prawn::Errors::UnsupportedImageType)
79
- end
80
-
81
- it "should bump PDF version to 1.5 or greater on embedding 16-bit PNGs" do
82
- @pdf.image "#{Prawn::DATADIR}/images/16bit.png"
83
- @pdf.state.version.should >= 1.5
84
- end
85
-
86
- it "should embed 16-bit alpha channels for 16-bit PNGs" do
87
- @pdf.image "#{Prawn::DATADIR}/images/16bit.png"
88
-
89
- output = @pdf.render
90
- output.should =~ /\/BitsPerComponent 16/
91
- output.should_not =~ /\/BitsPerComponent 8/
92
- end
93
-
94
- it "should flow an image to a new page if it will not fit on a page" do
95
- @pdf.image @filename, :fit => [600, 600]
96
- @pdf.image @filename, :fit => [600, 600]
97
- output = StringIO.new(@pdf.render, 'r+')
98
- hash = PDF::Reader::ObjectHash.new(output)
99
- pages = hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
100
- pages.size.should == 2
101
- hash[pages[0]][:Resources][:XObject].keys.should == [:I1]
102
- hash[pages[1]][:Resources][:XObject].keys.should == [:I2]
103
- end
104
-
105
- it "should not flow an image to a new page if it will fit on one page" do
106
- @pdf.image @filename, :fit => [400, 400]
107
- @pdf.image @filename, :fit => [400, 400]
108
- output = StringIO.new(@pdf.render, 'r+')
109
- hash = PDF::Reader::ObjectHash.new(output)
110
- pages = hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
111
- pages.size.should == 1
112
- Set.new(hash[pages[0]][:Resources][:XObject].keys).should ==
113
- Set.new([:I1, :I2])
114
- end
115
-
116
- it "should not start a new page just for a stretchy bounding box" do
117
- @pdf.expects(:start_new_page).times(0)
118
- @pdf.bounding_box([0, @pdf.cursor], :width => @pdf.bounds.width) do
119
- @pdf.image @filename
120
- end
121
- end
122
-
123
- describe ":fit option" do
124
- it "should fit inside the defined constraints" do
125
- info = @pdf.image @filename, :fit => [100,400]
126
- info.scaled_width.should <= 100
127
- info.scaled_height.should <= 400
128
-
129
- info = @pdf.image @filename, :fit => [400,100]
130
- info.scaled_width.should <= 400
131
- info.scaled_height.should <= 100
132
-
133
- info = @pdf.image @filename, :fit => [604,453]
134
- info.scaled_width.should == 604
135
- info.scaled_height.should == 453
136
- end
137
- it "should move text position" do
138
- @y = @pdf.y
139
- info = @pdf.image @filename, :fit => [100,400]
140
- @pdf.y.should < @y
141
- end
142
- end
143
-
144
- describe ":at option" do
145
- it "should not move text position" do
146
- @y = @pdf.y
147
- info = @pdf.image @filename, :at => [100,400]
148
- @pdf.y.should == @y
149
- end
150
- end
151
-
152
- end
153
-