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.
Files changed (348) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +10 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -16
  6. data/Rakefile +17 -39
  7. data/lib/prawn/document/bounding_box.rb +85 -42
  8. data/lib/prawn/document/column_box.rb +21 -11
  9. data/lib/prawn/document/internals.rb +40 -147
  10. data/lib/prawn/document/span.rb +25 -17
  11. data/lib/prawn/document.rb +286 -245
  12. data/lib/prawn/encoding.rb +68 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +204 -155
  15. data/lib/prawn/font_metric_cache.rb +25 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +7 -13
  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 +142 -80
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +6 -5
  23. data/lib/prawn/graphics/color.rb +47 -44
  24. data/lib/prawn/graphics/dash.rb +30 -13
  25. data/lib/prawn/graphics/join_style.rb +13 -6
  26. data/lib/prawn/graphics/patterns.rb +221 -90
  27. data/lib/prawn/graphics/transformation.rb +21 -12
  28. data/lib/prawn/graphics/transparency.rb +21 -17
  29. data/lib/prawn/graphics.rb +155 -128
  30. data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
  31. data/lib/prawn/image_handler.rb +16 -2
  32. data/lib/prawn/images/image.rb +4 -2
  33. data/lib/prawn/images/jpg.rb +39 -30
  34. data/lib/prawn/images/png.rb +132 -169
  35. data/lib/prawn/images.rb +70 -62
  36. data/lib/prawn/measurement_extensions.rb +15 -10
  37. data/lib/prawn/measurements.rb +22 -23
  38. data/lib/prawn/outline.rb +301 -13
  39. data/lib/prawn/repeater.rb +19 -17
  40. data/lib/prawn/security/arcfour.rb +54 -0
  41. data/lib/prawn/security.rb +108 -86
  42. data/lib/prawn/soft_mask.rb +40 -41
  43. data/lib/prawn/stamp.rb +29 -12
  44. data/lib/prawn/text/box.rb +27 -29
  45. data/lib/prawn/text/formatted/arranger.rb +110 -67
  46. data/lib/prawn/text/formatted/box.rb +233 -165
  47. data/lib/prawn/text/formatted/fragment.rb +27 -27
  48. data/lib/prawn/text/formatted/line_wrap.rb +137 -97
  49. data/lib/prawn/text/formatted/parser.rb +149 -127
  50. data/lib/prawn/text/formatted/wrap.rb +57 -37
  51. data/lib/prawn/text/formatted.rb +6 -4
  52. data/lib/prawn/text.rb +105 -73
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +11 -21
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +42 -68
  58. data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
  59. data/manual/basic_concepts/adding_pages.rb +9 -10
  60. data/manual/basic_concepts/basic_concepts.rb +33 -24
  61. data/manual/basic_concepts/creation.rb +10 -11
  62. data/manual/basic_concepts/cursor.rb +9 -10
  63. data/manual/basic_concepts/measurement.rb +10 -11
  64. data/manual/basic_concepts/origin.rb +8 -9
  65. data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
  66. data/manual/basic_concepts/view.rb +48 -0
  67. data/manual/bounding_box/bounding_box.rb +31 -29
  68. data/manual/bounding_box/bounds.rb +17 -18
  69. data/manual/bounding_box/canvas.rb +8 -9
  70. data/manual/bounding_box/creation.rb +8 -9
  71. data/manual/bounding_box/indentation.rb +22 -23
  72. data/manual/bounding_box/nesting.rb +32 -25
  73. data/manual/bounding_box/russian_boxes.rb +19 -19
  74. data/manual/bounding_box/stretchy.rb +18 -20
  75. data/manual/contents.rb +35 -0
  76. data/manual/cover.rb +43 -0
  77. data/manual/document_and_page_options/background.rb +16 -14
  78. data/manual/document_and_page_options/document_and_page_options.rb +26 -23
  79. data/manual/document_and_page_options/metadata.rb +21 -19
  80. data/manual/document_and_page_options/page_margins.rb +20 -22
  81. data/manual/document_and_page_options/page_size.rb +15 -15
  82. data/manual/document_and_page_options/print_scaling.rb +23 -0
  83. data/manual/example_helper.rb +5 -408
  84. data/manual/graphics/blend_mode.rb +52 -0
  85. data/manual/graphics/circle_and_ellipse.rb +8 -9
  86. data/manual/graphics/color.rb +11 -13
  87. data/manual/graphics/common_lines.rb +13 -12
  88. data/manual/graphics/fill_and_stroke.rb +10 -11
  89. data/manual/graphics/fill_rules.rb +13 -12
  90. data/manual/graphics/gradients.rb +28 -22
  91. data/manual/graphics/graphics.rb +52 -46
  92. data/manual/graphics/helper.rb +20 -10
  93. data/manual/graphics/line_width.rb +13 -12
  94. data/manual/graphics/lines_and_curves.rb +13 -14
  95. data/manual/graphics/polygon.rb +10 -12
  96. data/manual/graphics/rectangle.rb +7 -8
  97. data/manual/graphics/rotate.rb +9 -12
  98. data/manual/graphics/scale.rb +19 -18
  99. data/manual/graphics/soft_masks.rb +5 -7
  100. data/manual/graphics/stroke_cap.rb +10 -11
  101. data/manual/graphics/stroke_dash.rb +16 -17
  102. data/manual/graphics/stroke_join.rb +10 -11
  103. data/manual/graphics/translate.rb +13 -13
  104. data/manual/graphics/transparency.rb +11 -13
  105. data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
  106. data/manual/images/absolute_position.rb +9 -10
  107. data/manual/images/fit.rb +9 -10
  108. data/manual/images/horizontal.rb +13 -14
  109. data/manual/images/images.rb +31 -30
  110. data/manual/images/plain_image.rb +6 -7
  111. data/manual/images/scale.rb +12 -13
  112. data/manual/images/vertical.rb +19 -17
  113. data/manual/images/width_and_height.rb +13 -14
  114. data/manual/layout/boxes.rb +14 -15
  115. data/manual/layout/content.rb +12 -13
  116. data/manual/layout/layout.rb +19 -20
  117. data/manual/layout/simple_grid.rb +8 -9
  118. data/manual/outline/add_subsection_to.rb +26 -27
  119. data/manual/outline/insert_section_after.rb +19 -20
  120. data/manual/outline/outline.rb +23 -22
  121. data/manual/outline/sections_and_pages.rb +24 -25
  122. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  123. data/manual/repeatable_content/page_numbering.rb +20 -19
  124. data/manual/repeatable_content/repeatable_content.rb +26 -22
  125. data/manual/repeatable_content/repeater.rb +18 -19
  126. data/manual/repeatable_content/stamp.rb +18 -19
  127. data/manual/security/encryption.rb +8 -11
  128. data/manual/security/permissions.rb +20 -15
  129. data/manual/security/security.rb +20 -20
  130. data/manual/table.rb +16 -0
  131. data/manual/text/alignment.rb +17 -18
  132. data/manual/text/color.rb +13 -13
  133. data/manual/text/column_box.rb +10 -12
  134. data/manual/text/fallback_fonts.rb +29 -25
  135. data/manual/text/font.rb +17 -18
  136. data/manual/text/font_size.rb +21 -22
  137. data/manual/text/font_style.rb +12 -10
  138. data/manual/text/formatted_callbacks.rb +36 -26
  139. data/manual/text/formatted_text.rb +41 -34
  140. data/manual/text/free_flowing_text.rb +28 -29
  141. data/manual/text/inline.rb +23 -26
  142. data/manual/text/kerning_and_character_spacing.rb +20 -21
  143. data/manual/text/leading.rb +10 -11
  144. data/manual/text/line_wrapping.rb +40 -21
  145. data/manual/text/paragraph_indentation.rb +17 -12
  146. data/manual/text/positioned_text.rb +19 -20
  147. data/manual/text/registering_families.rb +33 -30
  148. data/manual/text/rendering_and_color.rb +11 -12
  149. data/manual/text/right_to_left_text.rb +31 -20
  150. data/manual/text/rotation.rb +36 -27
  151. data/manual/text/single_usage.rb +13 -14
  152. data/manual/text/text.rb +62 -62
  153. data/manual/text/text_box_excess.rb +22 -19
  154. data/manual/text/text_box_extensions.rb +21 -18
  155. data/manual/text/text_box_overflow.rb +28 -21
  156. data/manual/text/utf8.rb +16 -17
  157. data/manual/text/win_ansi_charset.rb +29 -26
  158. data/prawn.gemspec +45 -43
  159. data/spec/extensions/encoding_helpers.rb +4 -3
  160. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  161. data/spec/prawn/document/column_box_spec.rb +75 -0
  162. data/spec/prawn/document/security_spec.rb +176 -0
  163. data/spec/prawn/document_annotations_spec.rb +76 -0
  164. data/spec/prawn/document_destinations_spec.rb +15 -0
  165. data/spec/prawn/document_grid_spec.rb +99 -0
  166. data/spec/prawn/document_reference_spec.rb +27 -0
  167. data/spec/prawn/document_span_spec.rb +44 -0
  168. data/spec/prawn/document_spec.rb +805 -0
  169. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  170. data/spec/prawn/font_spec.rb +544 -0
  171. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  172. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  173. data/spec/prawn/graphics_spec.rb +872 -0
  174. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  175. data/spec/prawn/image_handler_spec.rb +53 -0
  176. data/spec/prawn/images/jpg_spec.rb +20 -0
  177. data/spec/prawn/images/png_spec.rb +283 -0
  178. data/spec/prawn/images_spec.rb +229 -0
  179. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  180. data/spec/prawn/outline_spec.rb +512 -0
  181. data/spec/prawn/repeater_spec.rb +166 -0
  182. data/spec/prawn/soft_mask_spec.rb +74 -0
  183. data/spec/prawn/stamp_spec.rb +173 -0
  184. data/spec/prawn/text/box_spec.rb +1110 -0
  185. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  186. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  187. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  188. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  189. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  190. data/spec/prawn/text_draw_text_spec.rb +150 -0
  191. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  192. data/spec/prawn/text_spacing_spec.rb +95 -0
  193. data/spec/prawn/text_spec.rb +603 -0
  194. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  195. data/spec/prawn/transformation_stack_spec.rb +66 -0
  196. data/spec/prawn/view_spec.rb +63 -0
  197. data/spec/prawn_manual_spec.rb +35 -0
  198. data/spec/spec_helper.rb +22 -21
  199. data.tar.gz.sig +0 -0
  200. metadata +168 -307
  201. metadata.gz.sig +0 -0
  202. data/README.md +0 -109
  203. data/data/encodings/win_ansi.txt +0 -29
  204. data/data/images/16bit.alpha +0 -0
  205. data/data/images/16bit.dat +0 -0
  206. data/data/images/16bit.png +0 -0
  207. data/data/images/arrow.png +0 -0
  208. data/data/images/arrow2.png +0 -0
  209. data/data/images/barcode_issue.png +0 -0
  210. data/data/images/dice.alpha +0 -0
  211. data/data/images/dice.dat +0 -0
  212. data/data/images/dice.png +0 -0
  213. data/data/images/dice_interlaced.png +0 -0
  214. data/data/images/indexed_color.dat +0 -0
  215. data/data/images/indexed_color.png +0 -0
  216. data/data/images/letterhead.jpg +0 -0
  217. data/data/images/page_white_text.alpha +0 -0
  218. data/data/images/page_white_text.dat +0 -0
  219. data/data/images/page_white_text.png +0 -0
  220. data/data/images/pigs.jpg +0 -0
  221. data/data/images/prawn.png +0 -0
  222. data/data/images/ruport.png +0 -0
  223. data/data/images/ruport_data.dat +0 -0
  224. data/data/images/ruport_transparent.png +0 -0
  225. data/data/images/ruport_type0.png +0 -0
  226. data/data/images/stef.jpg +0 -0
  227. data/data/images/tru256.bmp +0 -0
  228. data/data/images/web-links.dat +0 -1
  229. data/data/images/web-links.png +0 -0
  230. data/data/pdfs/complex_template.pdf +0 -0
  231. data/data/pdfs/contains_ttf_font.pdf +0 -0
  232. data/data/pdfs/encrypted.pdf +0 -0
  233. data/data/pdfs/form.pdf +1 -819
  234. data/data/pdfs/hexagon.pdf +0 -61
  235. data/data/pdfs/indirect_reference.pdf +0 -86
  236. data/data/pdfs/multipage_template.pdf +0 -127
  237. data/data/pdfs/nested_pages.pdf +0 -118
  238. data/data/pdfs/page_without_mediabox.pdf +0 -193
  239. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  240. data/data/pdfs/two_hexagons.pdf +0 -90
  241. data/data/pdfs/version_1_6.pdf +0 -61
  242. data/data/shift_jis_text.txt +0 -1
  243. data/lib/pdf/core/annotations.rb +0 -60
  244. data/lib/pdf/core/byte_string.rb +0 -9
  245. data/lib/pdf/core/destinations.rb +0 -90
  246. data/lib/pdf/core/document_state.rb +0 -78
  247. data/lib/pdf/core/filter_list.rb +0 -51
  248. data/lib/pdf/core/filters.rb +0 -36
  249. data/lib/pdf/core/graphics_state.rb +0 -68
  250. data/lib/pdf/core/literal_string.rb +0 -16
  251. data/lib/pdf/core/name_tree.rb +0 -177
  252. data/lib/pdf/core/object_store.rb +0 -320
  253. data/lib/pdf/core/outline.rb +0 -315
  254. data/lib/pdf/core/page.rb +0 -212
  255. data/lib/pdf/core/page_geometry.rb +0 -126
  256. data/lib/pdf/core/pdf_object.rb +0 -124
  257. data/lib/pdf/core/reference.rb +0 -103
  258. data/lib/pdf/core/stream.rb +0 -98
  259. data/lib/pdf/core/text.rb +0 -275
  260. data/lib/pdf/core.rb +0 -35
  261. data/lib/prawn/compatibility.rb +0 -91
  262. data/lib/prawn/document/graphics_state.rb +0 -73
  263. data/lib/prawn/document/snapshot.rb +0 -89
  264. data/lib/prawn/font/afm.rb +0 -203
  265. data/lib/prawn/layout.rb +0 -20
  266. data/lib/prawn/table/cell/image.rb +0 -70
  267. data/lib/prawn/table/cell/in_table.rb +0 -27
  268. data/lib/prawn/table/cell/span_dummy.rb +0 -92
  269. data/lib/prawn/table/cell/subtable.rb +0 -65
  270. data/lib/prawn/table/cell/text.rb +0 -153
  271. data/lib/prawn/table/cell.rb +0 -770
  272. data/lib/prawn/table/cells.rb +0 -295
  273. data/lib/prawn/table.rb +0 -643
  274. data/manual/example_file.rb +0 -116
  275. data/manual/example_package.rb +0 -53
  276. data/manual/example_section.rb +0 -46
  277. data/manual/manual/cover.rb +0 -35
  278. data/manual/manual/foreword.rb +0 -85
  279. data/manual/manual/manual.rb +0 -35
  280. data/manual/syntax_highlight.rb +0 -52
  281. data/manual/table/basic_block.rb +0 -53
  282. data/manual/table/before_rendering_page.rb +0 -26
  283. data/manual/table/cell_border_lines.rb +0 -24
  284. data/manual/table/cell_borders_and_bg.rb +0 -31
  285. data/manual/table/cell_dimensions.rb +0 -30
  286. data/manual/table/cell_text.rb +0 -38
  287. data/manual/table/column_widths.rb +0 -30
  288. data/manual/table/content_and_subtables.rb +0 -39
  289. data/manual/table/creation.rb +0 -27
  290. data/manual/table/filtering.rb +0 -36
  291. data/manual/table/flow_and_header.rb +0 -17
  292. data/manual/table/image_cells.rb +0 -33
  293. data/manual/table/position.rb +0 -29
  294. data/manual/table/row_colors.rb +0 -20
  295. data/manual/table/span.rb +0 -30
  296. data/manual/table/style.rb +0 -22
  297. data/manual/table/table.rb +0 -52
  298. data/manual/table/width.rb +0 -27
  299. data/manual/templates/full_template.rb +0 -25
  300. data/manual/templates/page_template.rb +0 -48
  301. data/manual/templates/templates.rb +0 -27
  302. data/manual/text/group.rb +0 -29
  303. data/spec/acceptance/png.rb +0 -23
  304. data/spec/annotations_spec.rb +0 -74
  305. data/spec/bounding_box_spec.rb +0 -493
  306. data/spec/cell_spec.rb +0 -628
  307. data/spec/column_box_spec.rb +0 -33
  308. data/spec/destinations_spec.rb +0 -15
  309. data/spec/document_spec.rb +0 -761
  310. data/spec/extensions/mocha.rb +0 -44
  311. data/spec/filters_spec.rb +0 -34
  312. data/spec/font_metric_cache_spec.rb +0 -52
  313. data/spec/font_spec.rb +0 -464
  314. data/spec/formatted_text_arranger_spec.rb +0 -421
  315. data/spec/formatted_text_box_spec.rb +0 -650
  316. data/spec/formatted_text_fragment_spec.rb +0 -298
  317. data/spec/graphics_spec.rb +0 -651
  318. data/spec/grid_spec.rb +0 -85
  319. data/spec/image_handler_spec.rb +0 -42
  320. data/spec/images_spec.rb +0 -157
  321. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  322. data/spec/jpg_spec.rb +0 -25
  323. data/spec/line_wrap_spec.rb +0 -333
  324. data/spec/measurement_units_spec.rb +0 -23
  325. data/spec/name_tree_spec.rb +0 -112
  326. data/spec/object_store_spec.rb +0 -170
  327. data/spec/outline_spec.rb +0 -448
  328. data/spec/pdf_object_spec.rb +0 -172
  329. data/spec/png_spec.rb +0 -240
  330. data/spec/reference_spec.rb +0 -82
  331. data/spec/repeater_spec.rb +0 -158
  332. data/spec/security_spec.rb +0 -158
  333. data/spec/snapshot_spec.rb +0 -186
  334. data/spec/soft_mask_spec.rb +0 -117
  335. data/spec/span_spec.rb +0 -44
  336. data/spec/stamp_spec.rb +0 -158
  337. data/spec/stream_spec.rb +0 -58
  338. data/spec/stroke_styles_spec.rb +0 -211
  339. data/spec/table/span_dummy_spec.rb +0 -17
  340. data/spec/table_spec.rb +0 -1355
  341. data/spec/template_spec.rb +0 -351
  342. data/spec/text_at_spec.rb +0 -130
  343. data/spec/text_box_spec.rb +0 -1030
  344. data/spec/text_rendering_mode_spec.rb +0 -45
  345. data/spec/text_spacing_spec.rb +0 -93
  346. data/spec/text_spec.rb +0 -425
  347. data/spec/text_with_inline_formatting_spec.rb +0 -35
  348. data/spec/transparency_spec.rb +0 -89
data/spec/grid_spec.rb DELETED
@@ -1,85 +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
- describe "when a grid is defined" do
17
- before do
18
- @num_columns = 5
19
- @num_rows = 8
20
- @gutter = 10.0
21
- @pdf.define_grid(
22
- :columns => @num_columns,
23
- :rows => @num_rows,
24
- :gutter => @gutter
25
- )
26
- end
27
-
28
- it "should compute the column width" do
29
- (@pdf.grid.column_width * @num_columns.to_f +
30
- @gutter * (@num_columns - 1).to_f).should == @pdf.bounds.width
31
- end
32
-
33
- it "should compute the row height" do
34
- (@pdf.grid.row_height * @num_rows.to_f +
35
- @gutter * (@num_rows - 1).to_f).should == @pdf.bounds.height
36
- end
37
-
38
- it "should give the edges of a grid box" do
39
- grid_width = (@pdf.bounds.width.to_f -
40
- (@gutter * (@num_columns - 1).to_f )) / @num_columns.to_f
41
- grid_height = (@pdf.bounds.height.to_f -
42
- (@gutter * (@num_rows - 1).to_f ))/ @num_rows.to_f
43
-
44
- exp_tl_x = (grid_width + @gutter.to_f) * 4.0
45
- exp_tl_y = @pdf.bounds.height.to_f - (grid_height + @gutter.to_f)
46
-
47
- @pdf.grid(1,4).top_left.should == [exp_tl_x, exp_tl_y]
48
- @pdf.grid(1,4).top_right.should == [exp_tl_x + grid_width, exp_tl_y]
49
- @pdf.grid(1,4).bottom_left.should == [exp_tl_x, exp_tl_y - grid_height]
50
- @pdf.grid(1,4).bottom_right.should == [exp_tl_x + grid_width, exp_tl_y - grid_height]
51
- end
52
-
53
- it "should give the edges of a multiple grid boxes" do
54
- # Hand verified. Cheating a bit. Don't tell.
55
- @pdf.grid([1,3], [2,5]).top_left.should == [330.0, 628.75]
56
- @pdf.grid([1,3], [2,5]).top_right.should == [650.0, 628.75]
57
- @pdf.grid([1,3], [2,5]).bottom_left.should == [330.0, 456.25]
58
- @pdf.grid([1,3], [2,5]).bottom_right.should == [650.0, 456.25]
59
- end
60
-
61
- it "should draw outlines without changing global default colors to grid color" do
62
- @pdf.grid.show_all('cccccc')
63
-
64
- colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
65
- colors.fill_color.should_not == [0.8,0.8,0.8]
66
- colors.stroke_color.should_not == [0.8,0.8,0.8]
67
-
68
- # Hardcoded default color as I haven't been able to come up with a stable converter
69
- # between fill_color without lots code.
70
- #colors.fill_color.should == [0.0,0.0,0.0]
71
- colors.stroke_color.should == [0.0,0.0,0.0]
72
- end
73
-
74
- it "should draw outlines without curent color settings" do
75
- @pdf.fill_color "ccff00"
76
- @pdf.stroke_color "ffcc00"
77
-
78
- @pdf.grid.show_all
79
-
80
- colors = PDF::Inspector::Graphics::Color.analyze(@pdf.render)
81
- colors.fill_color.should == [0.8,1.0,0.0]
82
- colors.stroke_color.should == [1.0,0.8,0.0]
83
- end
84
- end
85
- end
@@ -1,42 +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 "raises an error when no matching handler is found" do
32
- handler_a.expects(:can_render? => false)
33
- handler_b.expects(:can_render? => false)
34
-
35
- image_handler.register(handler_a)
36
- image_handler.register(handler_b)
37
-
38
- expect { image_handler.find("arbitrary blob") }.
39
- to(raise_error(Prawn::Errors::UnsupportedImageType))
40
- end
41
-
42
- end
data/spec/images_spec.rb DELETED
@@ -1,157 +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
- # to support Adobe Reader, which apparently doesn't handle 16-bit alpha
87
- # channels. Verified experimentally [BE] but not confirmed in documentation
88
- # or anything. OS X Preview handles those files just fine.
89
- #
90
- it "should embed 8-bit alpha channels for 16-bit PNGs" do
91
- @pdf.image "#{Prawn::DATADIR}/images/16bit.png"
92
-
93
- output = @pdf.render
94
- output.should =~ /\/BitsPerComponent 16/
95
- output.should =~ /\/BitsPerComponent 8/
96
- end
97
-
98
- it "should flow an image to a new page if it will not fit on a page" do
99
- @pdf.image @filename, :fit => [600, 600]
100
- @pdf.image @filename, :fit => [600, 600]
101
- output = StringIO.new(@pdf.render, 'r+')
102
- hash = PDF::Reader::ObjectHash.new(output)
103
- pages = hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
104
- pages.size.should == 2
105
- hash[pages[0]][:Resources][:XObject].keys.should == [:I1]
106
- hash[pages[1]][:Resources][:XObject].keys.should == [:I2]
107
- end
108
-
109
- it "should not flow an image to a new page if it will fit on one page" do
110
- @pdf.image @filename, :fit => [400, 400]
111
- @pdf.image @filename, :fit => [400, 400]
112
- output = StringIO.new(@pdf.render, 'r+')
113
- hash = PDF::Reader::ObjectHash.new(output)
114
- pages = hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
115
- pages.size.should == 1
116
- Set.new(hash[pages[0]][:Resources][:XObject].keys).should ==
117
- Set.new([:I1, :I2])
118
- end
119
-
120
- it "should not start a new page just for a stretchy bounding box" do
121
- @pdf.expects(:start_new_page).times(0)
122
- @pdf.bounding_box([0, @pdf.cursor], :width => @pdf.bounds.width) do
123
- @pdf.image @filename
124
- end
125
- end
126
-
127
- describe ":fit option" do
128
- it "should fit inside the defined constraints" do
129
- info = @pdf.image @filename, :fit => [100,400]
130
- info.scaled_width.should <= 100
131
- info.scaled_height.should <= 400
132
-
133
- info = @pdf.image @filename, :fit => [400,100]
134
- info.scaled_width.should <= 400
135
- info.scaled_height.should <= 100
136
-
137
- info = @pdf.image @filename, :fit => [604,453]
138
- info.scaled_width.should == 604
139
- info.scaled_height.should == 453
140
- end
141
- it "should move text position" do
142
- @y = @pdf.y
143
- info = @pdf.image @filename, :fit => [100,400]
144
- @pdf.y.should < @y
145
- end
146
- end
147
-
148
- describe ":at option" do
149
- it "should not move text position" do
150
- @y = @pdf.y
151
- info = @pdf.image @filename, :at => [100,400]
152
- @pdf.y.should == @y
153
- end
154
- end
155
-
156
- end
157
-