prawn 1.1.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,40 +1,40 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # This example is mostly just for fun, and shows how nested bounding boxes
4
4
  # can simplify calculations. See the "Bounding Box" section of the manual
5
5
  # for more basic uses.
6
- #
7
- require File.expand_path(File.join(File.dirname(__FILE__),
8
- %w[.. example_helper]))
6
+
7
+ require_relative '../example_helper'
9
8
 
10
9
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
11
10
  Prawn::ManualBuilder::Example.generate(filename) do
12
- def combine(a1, a2)
11
+ def combine(horizontal_span, vertical_span)
13
12
  output = []
14
- a1.each do |i1|
15
- a2.each do |i2|
16
- output += [[i1,i2]]
13
+ horizontal_span.each do |x|
14
+ vertical_span.each do |y|
15
+ output += [[x, y]]
17
16
  end
18
17
  end
19
18
  output
20
19
  end
21
20
 
22
- def recurse_bounding_box(max_depth=4, depth=1)
23
- width = (bounds.width-15)/2
24
- height = (bounds.height-15)/2
25
- left_top_corners = combine([5, bounds.right-width-5],
26
- [bounds.top-5, height+5])
21
+ def recurse_bounding_box(max_depth = 4, depth = 1)
22
+ width = (bounds.width - 15) / 2
23
+ height = (bounds.height - 15) / 2
24
+ left_top_corners = combine(
25
+ [5, bounds.right - width - 5],
26
+ [bounds.top - 5, height + 5]
27
+ )
27
28
  left_top_corners.each do |lt|
28
- bounding_box(lt, :width => width, :height => height) do
29
+ bounding_box(lt, width: width, height: height) do
29
30
  stroke_bounds
30
- recurse_bounding_box(max_depth, depth+1) if depth < max_depth
31
+ recurse_bounding_box(max_depth, depth + 1) if depth < max_depth
31
32
  end
32
33
  end
33
34
  end
34
35
 
35
36
  # Set up a bbox from the dashed line to the bottom of the page
36
- bounding_box([0, cursor], :width => bounds.width, :height => cursor) do
37
+ bounding_box([0, cursor], width: bounds.width, height: cursor) do
37
38
  recurse_bounding_box
38
39
  end
39
40
  end
40
-
@@ -1,31 +1,29 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Bounding Boxes accept an optional <code>:height</code> parameter. Unless it
4
4
  # is provided the bounding box will be stretchy. It will expand the height to
5
5
  # fit all content generated inside it.
6
- #
7
- require File.expand_path(File.join(File.dirname(__FILE__),
8
- %w[.. example_helper]))
6
+
7
+ require_relative '../example_helper'
9
8
 
10
9
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
11
10
  Prawn::ManualBuilder::Example.generate(filename) do
12
11
  y_position = cursor
13
- bounding_box([0, y_position], :width => 200, :height => 100) do
14
- text "This bounding box has a height of 100. If this text gets too large " +
15
- "it will flow to the next page."
12
+ bounding_box([0, y_position], width: 200, height: 100) do
13
+ text 'This bounding box has a height of 100. If this text gets too large ' \
14
+ 'it will flow to the next page.'
16
15
 
17
16
  transparent(0.5) { stroke_bounds }
18
17
  end
19
18
 
20
- bounding_box([300, y_position], :width => 200) do
21
- text "This bounding box has variable height. No matter how much text is " +
22
- "written here, the height will expand to fit."
19
+ bounding_box([300, y_position], width: 200) do
20
+ text 'This bounding box has variable height. No matter how much text is ' \
21
+ 'written here, the height will expand to fit.'
23
22
 
24
- text " _" * 100
23
+ text ' _' * 100
25
24
 
26
- text " *" * 100
25
+ text ' *' * 100
27
26
 
28
27
  transparent(0.5) { stroke_bounds }
29
28
  end
30
-
31
29
  end
data/manual/contents.rb CHANGED
@@ -1,29 +1,35 @@
1
- # encoding: utf-8
2
- #
3
- # Generates the Prawn by example manual.
1
+ # frozen_string_literal: true
4
2
 
5
- require_relative "example_helper"
3
+ # Generates the Prawn by example manual.
6
4
 
7
- Encoding.default_external = Encoding::UTF_8
5
+ require_relative 'example_helper'
8
6
 
9
- Prawn::ManualBuilder::Example.generate("manual.pdf",
10
- :skip_page_creation => true, :page_size => "FOLIO") do
7
+ def prawn_manual_document
8
+ old_default_external_encoding = Encoding.default_external
9
+ Encoding.default_external = Encoding::UTF_8
11
10
 
12
- load_page "", "cover"
13
- load_page "", "how_to_read_this_manual"
11
+ Prawn::ManualBuilder::Example.new(
12
+ skip_page_creation: true,
13
+ page_size: 'FOLIO'
14
+ ) do
15
+ load_page '', 'cover'
16
+ load_page '', 'how_to_read_this_manual'
14
17
 
15
- # Core chapters
16
- load_package "basic_concepts"
17
- load_package "graphics"
18
- load_package "text"
19
- load_package "bounding_box"
18
+ # Core chapters
19
+ load_package 'basic_concepts'
20
+ load_package 'graphics'
21
+ load_package 'text'
22
+ load_package 'bounding_box'
20
23
 
21
- # Remaining chapters
22
- load_package "layout"
23
- load_package "images"
24
- load_package "table"
25
- load_package "document_and_page_options"
26
- load_package "outline"
27
- load_package "repeatable_content"
28
- load_package "security"
24
+ # Remaining chapters
25
+ load_package 'layout'
26
+ load_page '', 'table'
27
+ load_package 'images'
28
+ load_package 'document_and_page_options'
29
+ load_package 'outline'
30
+ load_package 'repeatable_content'
31
+ load_package 'security'
32
+ end
33
+ ensure
34
+ Encoding.default_external = old_default_external_encoding
29
35
  end
data/manual/cover.rb CHANGED
@@ -1,42 +1,43 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Prawn manual how to read this manual page.
4
- #
5
4
 
6
- require_relative "example_helper"
5
+ require_relative 'example_helper'
7
6
 
8
7
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
9
8
  Prawn::ManualBuilder::Example.generate(filename) do
10
9
  move_down 200
11
10
 
12
11
  image "#{Prawn::DATADIR}/images/prawn.png",
13
- :scale => 0.9,
14
- :at => [10, cursor]
15
-
16
- formatted_text_box([ {:text => "Prawn\n",
17
- :styles => [:bold],
18
- :size => 100}
19
- ], :at => [170, cursor - 50])
20
-
21
- formatted_text_box([ {:text => "by example",
22
- :font => 'Courier',
23
- :size => 60}
24
- ], :at => [170, cursor - 160])
25
-
26
- if Dir.exist?("#{Prawn::BASEDIR}/.git")
27
- #long git commit hash
28
- #commit = `git show --pretty=%H`
29
- #short git commit hash
30
- commit = `git show --pretty=%h`
31
- git_commit = "git commit: #{commit}"
32
- else
33
- git_commit = ""
12
+ scale: 0.9,
13
+ at: [10, cursor]
14
+
15
+ formatted_text_box(
16
+ [{ text: "Prawn\n", styles: [:bold], size: 100 }],
17
+ at: [170, cursor - 50]
18
+ )
19
+
20
+ formatted_text_box(
21
+ [{ text: 'by example', font: 'Courier', size: 60 }],
22
+ at: [170, cursor - 160]
23
+ )
24
+
25
+ unless ENV['CI']
26
+ git_commit =
27
+ if Dir.exist?("#{Prawn::BASEDIR}/.git")
28
+ commit = `git show --pretty=%h`
29
+ "git commit: #{commit.lines.first}"
30
+ else
31
+ ''
32
+ end
33
+
34
+ formatted_text_box(
35
+ [{
36
+ text: "Last Update: #{Time.now.strftime('%Y-%m-%d')}\n" \
37
+ "Prawn Version: #{Prawn::VERSION}\n#{git_commit}",
38
+ size: 12
39
+ }],
40
+ at: [390, cursor - 620]
41
+ )
34
42
  end
35
-
36
- formatted_text_box([ {:text => "Last Update: #{Time.now.strftime("%Y-%m-%d")}\n"+
37
- "Prawn Version: #{Prawn::VERSION}\n"+
38
- git_commit,
39
- :size => 12}
40
- ], :at => [390, cursor - 620])
41
-
42
43
  end
@@ -1,27 +1,29 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Pass an image path to the <code>:background</code> option and it will be used
4
4
  # as the background for all pages.
5
5
  # This option can only be used on document creation.
6
- #
7
- require File.expand_path(File.join(File.dirname(__FILE__),
8
- %w[.. example_helper]))
6
+
7
+ require_relative '../example_helper'
8
+
9
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
9
10
 
10
11
  img = "#{Prawn::DATADIR}/images/letterhead.jpg"
11
12
 
12
- Prawn::Document.generate("background.pdf",
13
- :background => img,
14
- :margin => 100
15
- ) do
16
- text "My report caption", :size => 18, :align => :right
13
+ Prawn::Document.generate(filename, background: img, margin: 100) do
14
+ text 'My report caption', size: 18, align: :right
17
15
 
18
16
  move_down font.height * 2
19
17
 
20
- text "Here is my text explaning this report. " * 20,
21
- :size => 12, :align => :left, :leading => 2
18
+ text 'Here is my text explaning this report. ' * 20,
19
+ size: 12,
20
+ align: :left,
21
+ leading: 2
22
22
 
23
23
  move_down font.height
24
24
 
25
25
  text "I'm using a soft background. " * 40,
26
- :size => 12, :align => :left, :leading => 2
26
+ size: 12,
27
+ align: :left,
28
+ leading: 2
27
29
  end
@@ -1,32 +1,34 @@
1
- # encoding: utf-8
2
- #
3
- # Examples for stamps and repeaters.
4
- #
5
- require File.expand_path(File.join(File.dirname(__FILE__),
6
- %w[.. example_helper]))
1
+ # frozen_string_literal: true
7
2
 
8
- Prawn::ManualBuilder::Example.generate("document_and_page_options.pdf",
9
- :page_size => "FOLIO") do
3
+ # Examples for stamps and repeaters.
10
4
 
11
- package "document_and_page_options" do |p|
5
+ require_relative '../example_helper'
12
6
 
13
- p.example "page_size", :eval_source => false, :full_source => true
14
- p.example "page_margins", :eval_source => false, :full_source => true
15
- p.example "background", :eval_source => false, :full_source => true
16
- p.example "metadata", :eval_source => false, :full_source => true
17
- p.example "print_scaling",:eval_source => false, :full_source => true
7
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
8
+ Prawn::ManualBuilder::Example.generate(filename, page_size: 'FOLIO') do
9
+ package 'document_and_page_options' do |p|
10
+ p.example 'page_size', eval_source: false, full_source: true
11
+ p.example 'page_margins', eval_source: false, full_source: true
12
+ p.example 'background', eval_source: false, full_source: true
13
+ p.example 'metadata', eval_source: false, full_source: true
14
+ p.example 'print_scaling', eval_source: false, full_source: true
18
15
 
19
16
  p.intro do
20
- prose("So far we've already seen how to create new documents and start new pages. This chapter expands on the previous examples by showing other options avialable. Some of the options are only available when creating new documents.
17
+ prose <<-TEXT
18
+ So far we've already seen how to create new documents and start new
19
+ pages. This chapter expands on the previous examples by showing other
20
+ options avialable. Some of the options are only available when creating
21
+ new documents.
21
22
 
22
- The examples show:")
23
+ The examples show:
24
+ TEXT
23
25
 
24
- list( "How to configure page size",
25
- "How to configure page margins",
26
- "How to use a background image",
27
- "How to add metadata to the generated PDF"
28
- )
26
+ list(
27
+ 'How to configure page size',
28
+ 'How to configure page margins',
29
+ 'How to use a background image',
30
+ 'How to add metadata to the generated PDF'
31
+ )
29
32
  end
30
-
31
33
  end
32
34
  end
@@ -1,23 +1,25 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # To set the document metadata just pass a hash to the <code>:info</code>
4
4
  # option when creating new documents.
5
- # The keys in the example below are arbitrary, so you may add whatever keys you want
6
- #
7
- require File.expand_path(File.join(File.dirname(__FILE__),
8
- %w[.. example_helper]))
5
+ # The keys in the example below are arbitrary, so you may add whatever keys you
6
+ # want.
7
+
8
+ require_relative '../example_helper'
9
+
10
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
9
11
 
10
- Prawn::Document.generate("metadata.pdf",
11
- :info => {
12
- :Title => "My title",
13
- :Author => "John Doe",
14
- :Subject => "My Subject",
15
- :Keywords => "test metadata ruby pdf dry",
16
- :Creator => "ACME Soft App",
17
- :Producer => "Prawn",
18
- :CreationDate => Time.now
19
- }) do
12
+ info = {
13
+ Title: 'My title',
14
+ Author: 'John Doe',
15
+ Subject: 'My Subject',
16
+ Keywords: 'test metadata ruby pdf dry',
17
+ Creator: 'ACME Soft App',
18
+ Producer: 'Prawn',
19
+ CreationDate: Time.now
20
+ }
20
21
 
21
- text "This is a test of setting metadata properties via the info option."
22
- text "While the keys are arbitrary, the above example sets common attributes."
22
+ Prawn::Document.generate(filename, info: info) do
23
+ text 'This is a test of setting metadata properties via the info option.'
24
+ text 'While the keys are arbitrary, the above example sets common attributes.'
23
25
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # The default margin for pages is 0.5 inch but you can change that with the
4
4
  # <code>:margin</code> option or if you'd like to have different margins you
5
5
  # can use the <code>:left_margin</code>, <code>:right_margin</code>,
@@ -7,32 +7,30 @@
7
7
  #
8
8
  # These options are available both for starting new pages and creating new
9
9
  # documents.
10
- #
11
- require File.expand_path(File.join(File.dirname(__FILE__),
12
- %w[.. example_helper]))
13
10
 
14
- Prawn::Document.generate("page_margins.pdf",
15
- :margin => 100
16
- ) do
17
- text "100 pts margins."
11
+ require_relative '../example_helper'
12
+
13
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
14
+ Prawn::Document.generate(filename, margin: 100) do
15
+ text '100 pts margins.'
18
16
  stroke_bounds
19
17
 
20
- start_new_page(:left_margin => 300)
21
- text "300 pts margin on the left."
18
+ start_new_page(left_margin: 300)
19
+ text '300 pts margin on the left.'
22
20
  stroke_bounds
23
21
 
24
- start_new_page(:top_margin => 300)
25
- text "300 pts margin both on the top and on the left. Notice that whenever " +
26
- "you set an option for a new page it will remain the default for the " +
27
- "following pages."
22
+ start_new_page(top_margin: 300)
23
+ text '300 pts margin both on the top and on the left. Notice that whenever ' \
24
+ 'you set an option for a new page it will remain the default for the ' \
25
+ 'following pages.'
28
26
  stroke_bounds
29
27
 
30
- start_new_page(:margin => 50)
31
- text "50 pts margins. Using the margin option will reset previous specific " +
32
- "calls to left, right, top and bottom margins."
28
+ start_new_page(margin: 50)
29
+ text '50 pts margins. Using the margin option will reset previous specific ' \
30
+ 'calls to left, right, top and bottom margins.'
33
31
  stroke_bounds
34
32
 
35
- start_new_page(:margin => [50, 100, 150, 200])
36
- text "There is also the shorthand CSS like syntax used here."
33
+ start_new_page(margin: [50, 100, 150, 200])
34
+ text 'There is also the shorthand CSS like syntax used here.'
37
35
  stroke_bounds
38
36
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Prawn comes with support for most of the common page sizes so you'll only need
4
4
  # to provide specific values if your intended format is not supported. To see a
5
5
  # list with all supported sizes take a look at PDF::Core::PageGeometry
@@ -11,24 +11,24 @@
11
11
  # You may also define the orientation of the page to be either portrait
12
12
  # (default) or landscape. Use <code>:page_layout</code> when creating new
13
13
  # documents and <code>:layout</code> when starting new pages.
14
- #
15
- require File.expand_path(File.join(File.dirname(__FILE__),
16
- %w[.. example_helper]))
17
14
 
18
- Prawn::Document.generate("page_size.pdf",
19
- :page_size => "EXECUTIVE",
20
- :page_layout => :landscape
15
+ require_relative '../example_helper'
16
+
17
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
18
+ Prawn::Document.generate(
19
+ filename,
20
+ page_size: 'EXECUTIVE',
21
+ page_layout: :landscape
21
22
  ) do
22
- text "EXECUTIVE landscape page."
23
+ text 'EXECUTIVE landscape page.'
23
24
 
24
25
  custom_size = [275, 326]
25
26
 
26
- ["A4", "TABLOID", "B7", custom_size ].each do |size|
27
-
28
- start_new_page(:size => size, :layout => :portrait)
27
+ ['A4', 'TABLOID', 'B7', custom_size].each do |size|
28
+ start_new_page(size: size, layout: :portrait)
29
29
  text "#{size} portrait page."
30
30
 
31
- start_new_page(:size => size, :layout => :landscape)
31
+ start_new_page(size: size, layout: :landscape)
32
32
  text "#{size} landscape page."
33
33
  end
34
34
  end
@@ -1,20 +1,23 @@
1
- # encoding: utf-8
2
- #
3
- # (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document.
4
- # Valid values are <code>None</code>, which indicates that the print dialog should reflect no page scaling,
5
- # and <code>AppDefault</code>, which indicates that applications should use the current print scaling.
6
- # If this entry has an unrecognized value, applications should use the current print scaling.
7
- # Default value: <code>AppDefault</code>.
8
- #
9
- # Note: If the print dialog is suppressed and its parameters are provided directly by the application, the value of this entry should still be used.
1
+ # frozen_string_literal: true
2
+
3
+ # (Optional; PDF 1.6) The page scaling option to be selected when a print dialog
4
+ # is displayed for this document. Valid values are <code>None</code>, which
5
+ # indicates that the print dialog should reflect no page scaling, and
6
+ # <code>AppDefault</code>, which indicates that applications should use the
7
+ # current print scaling. If this entry has an unrecognized value, applications
8
+ # should use the current print scaling. Default value: <code>AppDefault</code>.
10
9
  #
10
+ # Note: If the print dialog is suppressed and its parameters are provided
11
+ # directly by the application, the value of this entry should still be used.
11
12
 
12
- require File.expand_path(File.join(File.dirname(__FILE__),
13
- %w[.. example_helper]))
13
+ require_relative '../example_helper'
14
14
 
15
- Prawn::Document.generate("print_scaling.pdf",
16
- :page_layout => :landscape,
17
- :print_scaling => :none
15
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
+ Prawn::Document.generate(
17
+ filename,
18
+ page_layout: :landscape,
19
+ print_scaling: :none
18
20
  ) do
19
- text "When you print this document, the scale to fit in print preview should be disabled by default."
21
+ text 'When you print this document, the scale to fit in print preview '\
22
+ 'should be disabled by default.'
20
23
  end
@@ -1,7 +1,8 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
- require_relative "../lib/prawn"
4
- require_relative "../lib/prawn/table"
5
- require "prawn/manual_builder"
3
+ $LOAD_PATH.unshift File.join(__dir__, '../lib')
4
+ require 'prawn'
5
+ require 'prawn/manual_builder'
6
6
 
7
7
  Prawn::ManualBuilder.manual_dir = File.dirname(__FILE__)
8
+ Prawn::Fonts::AFM.hide_m17n_warning = true
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Blend modes can be used to change the way two layers (images, graphics,
4
+ # text, etc.) are blended together. The <code>blend_mode</code> method
5
+ # accepts a single blend mode or an array of blend modes. PDF viewers should
6
+ # blend the layers based on the first recognized blend mode.
7
+ #
8
+ # Valid blend modes in v1.4 of the PDF spec include :Normal, :Multiply, :Screen,
9
+ # :Overlay, :Darken, :Lighten, :ColorDodge, :ColorBurn, :HardLight, :SoftLight,
10
+ # :Difference, :Exclusion, :Hue, :Saturation, :Color, and :Luminosity.
11
+
12
+ require_relative '../example_helper'
13
+
14
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
15
+ Prawn::ManualBuilder::Example.generate(filename) do
16
+ start_new_page
17
+
18
+ # https://commons.wikimedia.org/wiki/File:Blend_modes_2.-bottom-layer.jpg#/media/File:Blend_modes_2.-bottom-layer.jpg
19
+ bottom_layer = "#{Prawn::DATADIR}/images/blend_modes_bottom_layer.jpg"
20
+
21
+ # https://commons.wikimedia.org/wiki/File:Blend_modes_1.-top-layer.jpg#/media/File:Blend_modes_1.-top-layer.jpg
22
+ top_layer = "#{Prawn::DATADIR}/images/blend_modes_top_layer.jpg"
23
+
24
+ blend_modes = %i[
25
+ Normal Multiply Screen Overlay Darken Lighten ColorDodge
26
+ ColorBurn HardLight SoftLight Difference Exclusion Hue
27
+ Saturation Color Luminosity
28
+ ]
29
+ blend_modes.each_with_index do |blend_mode, index|
30
+ x = index % 4 * 135
31
+ y = cursor - (index / 4 * 200)
32
+
33
+ image bottom_layer, at: [x, y], fit: [125, 125]
34
+ blend_mode(blend_mode) do
35
+ image top_layer, at: [x, y], fit: [125, 125]
36
+ end
37
+
38
+ y -= 130
39
+
40
+ fill_color '009ddc'
41
+ fill_rectangle [x, y], 75, 25
42
+ blend_mode(blend_mode) do
43
+ fill_color 'fdb827'
44
+ fill_rectangle [x + 50, y], 75, 25
45
+ end
46
+
47
+ y -= 30
48
+
49
+ fill_color '000000'
50
+ text_box blend_mode.to_s, at: [x, y]
51
+ end
52
+ end
@@ -1,14 +1,13 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # To define a <code>circle</code> all you need is the center point and the
4
4
  # radius.
5
5
  #
6
6
  # To define an <code>ellipse</code> you provide the center point and two radii
7
7
  # (or axes) values. If the second radius value is ommitted, both radii will be
8
8
  # equal and you will end up drawing a circle.
9
- #
10
- require File.expand_path(File.join(File.dirname(__FILE__),
11
- %w[.. example_helper]))
9
+
10
+ require_relative '../example_helper'
12
11
 
13
12
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
14
13
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -1,19 +1,17 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # We can change the stroke and fill colors providing an HTML rgb 6 digit color
4
4
  # code string ("AB1234") or 4 values for CMYK.
5
- #
6
- require File.expand_path(File.join(File.dirname(__FILE__),
7
- %w[.. example_helper]))
5
+
6
+ require_relative '../example_helper'
8
7
 
9
8
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
10
9
  Prawn::ManualBuilder::Example.generate(filename) do
11
10
  stroke_axis
12
11
 
13
- # Fill with Yellow using RGB
14
- fill_color "FFFFCC"
15
- fill_polygon [50, 150], [150, 200], [250, 150],
16
- [250, 50], [150, 0], [50, 50]
12
+ # Fill with Yellow using RGB (Unlike css, there is no leading #)
13
+ fill_color 'FFFFCC'
14
+ fill_polygon [50, 150], [150, 200], [250, 150], [250, 50], [150, 0], [50, 50]
17
15
 
18
16
  # Stroke with Purple using CMYK
19
17
  stroke_color 50, 100, 0, 0