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,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # A PDF document is a collection of pages. When we create a new document be it
4
4
  # with <code>Document.new</code> or on a <code>Document.generate</code> block
5
5
  # one initial page is created for us.
@@ -12,14 +12,13 @@
12
12
  #
13
13
  # Just use the <code>start_new_page</code> method and a shiny new page will be
14
14
  # created for you just like in the following snippet.
15
- #
16
- require File.expand_path(File.join(File.dirname(__FILE__),
17
- %w[.. example_helper]))
15
+
16
+ require_relative '../example_helper'
18
17
 
19
18
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
20
19
  Prawn::ManualBuilder::Example.generate(filename) do
21
- text "We are still on the initial page for this example. Now I'll ask " +
22
- "Prawn to gently start a new page. Please follow me to the next page."
20
+ text "We are still on the initial page for this example. Now I'll ask " \
21
+ 'Prawn to gently start a new page. Please follow me to the next page.'
23
22
 
24
23
  start_new_page
25
24
 
@@ -1,34 +1,43 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Examples for Prawn basic concepts.
4
4
  #
5
5
 
6
- require_relative "../example_helper"
7
-
8
- Prawn::ManualBuilder::Example.generate("basic_concepts.pdf", :page_size => "FOLIO") do
9
-
10
- package "basic_concepts" do |p|
6
+ require_relative '../example_helper'
11
7
 
12
- p.example "creation", :eval_source => false, :full_source => true
13
- p.example "origin"
14
- p.example "cursor"
15
- p.example "other_cursor_helpers"
16
- p.example "adding_pages"
17
- p.example "measurement"
8
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
9
+ Prawn::ManualBuilder::Example.generate(filename, page_size: 'FOLIO') do
10
+ package 'basic_concepts' do |p|
11
+ p.example 'creation', eval_source: false, full_source: true
12
+ p.example 'origin'
13
+ p.example 'cursor'
14
+ p.example 'other_cursor_helpers'
15
+ p.example 'adding_pages'
16
+ p.example 'measurement'
17
+ p.example 'view', eval_source: false, full_source: true
18
18
 
19
19
  p.intro do
20
- prose("This chapter covers the minimum amount of functionality you'll need to start using Prawn.
21
-
22
- If you are new to Prawn this is the first chapter to read. Once you are comfortable with the concepts shown here you might want to check the Basics section of the Graphics, Bounding Box and Text sections.
23
-
24
- The examples show:")
25
-
26
- list( "How to create new pdf documents in every possible way",
27
- "Where the origin for the document coordinates is. What are Bounding Boxes and how they interact with the origin",
28
- "How the cursor behaves",
29
- "How to start new pages",
30
- "What the base unit for measurement and coordinates is and how to use other convenient measures"
31
- )
20
+ prose <<-TEXT
21
+ This chapter covers the minimum amount of functionality you'll need to
22
+ start using Prawn.
23
+
24
+ If you are new to Prawn this is the first chapter to read. Once you are
25
+ comfortable with the concepts shown here you might want to check the
26
+ Basics section of the Graphics, Bounding Box and Text sections.
27
+
28
+ The examples show:
29
+ TEXT
30
+
31
+ list(
32
+ 'How to create new pdf documents in every possible way',
33
+ 'Where the origin for the document coordinates is. What are Bounding '\
34
+ 'Boxes and how they interact with the origin',
35
+ 'How the cursor behaves',
36
+ 'How to start new pages',
37
+ 'What the base unit for measurement and coordinates is and how to use '\
38
+ 'other convenient measures',
39
+ "How to build custom view objects that use Prawn's DSL"
40
+ )
32
41
  end
33
42
  end
34
43
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # There are three ways to create a PDF Document in Prawn: creating a new
4
4
  # <code>Prawn::Document</code> instance, or using the
5
5
  # <code>Prawn::Document.generate</code> method with and without block arguments.
@@ -19,21 +19,20 @@
19
19
  # The generate method without block arguments requires
20
20
  # less typing and defines and renders the pdf document in one shot.
21
21
  # Almost all of the examples are coded this way.
22
- #
23
- require File.expand_path(File.join(File.dirname(__FILE__),
24
- %w[.. example_helper]))
22
+
23
+ require_relative '../example_helper'
25
24
 
26
25
  # Assignment
27
26
  pdf = Prawn::Document.new
28
- pdf.text "Hello World"
29
- pdf.render_file "assignment.pdf"
27
+ pdf.text 'Hello World'
28
+ pdf.render_file 'assignment.pdf'
30
29
 
31
30
  # Implicit Block
32
- Prawn::Document.generate("implicit.pdf") do
33
- text "Hello World"
31
+ Prawn::Document.generate('implicit.pdf') do
32
+ text 'Hello World'
34
33
  end
35
34
 
36
35
  # Explicit Block
37
- Prawn::Document.generate("explicit.pdf") do |pdf|
38
- pdf.text "Hello World"
36
+ Prawn::Document.generate('explicit.pdf') do |pdf|
37
+ pdf.text 'Hello World'
39
38
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # We normally write our documents from top to bottom and it is no different with
4
4
  # Prawn. Even if the origin is on the bottom left corner we still fill the page
5
5
  # from the top to the bottom. In other words the cursor for inserting content
@@ -11,9 +11,8 @@
11
11
  # The following snippet shows how the cursor behaves when we add some text to
12
12
  # the page and demonstrates some of the helpers to manage the cursor position.
13
13
  # The <code>cursor</code> method returns the current cursor position.
14
- #
15
- require File.expand_path(File.join(File.dirname(__FILE__),
16
- %w[.. example_helper]))
14
+
15
+ require_relative '../example_helper'
17
16
 
18
17
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
19
18
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -1,25 +1,24 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # The base unit in Prawn is the PDF Point. One PDF Point is equal to 1/72 of
4
4
  # an inch.
5
5
  #
6
- # There is no need to waste time converting this measures. Prawn provides
6
+ # There is no need to waste time converting this measure. Prawn provides
7
7
  # helpers for converting from other measurements
8
8
  # to PDF Points.
9
9
  #
10
10
  # Just <code>require "prawn/measurement_extensions"</code> and it will mix some
11
11
  # helpers onto <code>Numeric</code> for converting common measurement units to
12
12
  # PDF Points.
13
- #
14
- require File.expand_path(File.join(File.dirname(__FILE__),
15
- %w[.. example_helper]))
13
+
14
+ require_relative '../example_helper'
16
15
 
17
16
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
18
17
  Prawn::ManualBuilder::Example.generate(filename) do
19
- require "prawn/measurement_extensions"
18
+ require 'prawn/measurement_extensions'
20
19
 
21
- [:mm, :cm, :dm, :m, :in, :yd, :ft].each do |measurement|
22
- text "1 #{measurement} in PDF Points: #{1.send(measurement)} pt"
20
+ %i[mm cm dm m in yd ft].each do |measurement|
21
+ text "1 #{measurement} in PDF Points: #{1.public_send(measurement)} pt"
23
22
  move_down 5.mm
24
23
  end
25
24
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # This is the most important concept you need to learn about Prawn:
4
4
  #
5
5
  # PDF documents have the origin <code>[0,0]</code> at the bottom-left corner of
@@ -21,9 +21,8 @@
21
21
  #
22
22
  # The following snippet strokes a circle on the margin box origin. Then strokes
23
23
  # the boundaries of a bounding box and a circle on its origin.
24
- #
25
- require File.expand_path(File.join(File.dirname(__FILE__),
26
- %w[.. example_helper]))
24
+
25
+ require_relative '../example_helper'
27
26
 
28
27
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
29
28
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -31,7 +30,7 @@ Prawn::ManualBuilder::Example.generate(filename) do
31
30
 
32
31
  stroke_circle [0, 0], 10
33
32
 
34
- bounding_box([100, 300], :width => 300, :height => 200) do
33
+ bounding_box([100, 300], width: 300, height: 200) do
35
34
  stroke_bounds
36
35
  stroke_circle [0, 0], 10
37
36
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Another group of helpers for changing the cursor position are the pad methods.
4
4
  # They accept a numeric value and a block. <code>pad</code> will use the numeric
5
5
  # value to move the cursor down both before and after the block content.
@@ -8,33 +8,32 @@
8
8
  #
9
9
  # <code>float</code> is a method for not changing the cursor. Pass it a block
10
10
  # and the cursor will remain on the same place when the block returns.
11
- #
12
- require File.expand_path(File.join(File.dirname(__FILE__),
13
- %w[.. example_helper]))
11
+
12
+ require_relative '../example_helper'
14
13
 
15
14
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
15
  Prawn::ManualBuilder::Example.generate(filename) do
17
16
  stroke_horizontal_rule
18
- pad(20) { text "Text padded both before and after." }
17
+ pad(20) { text 'Text padded both before and after.' }
19
18
 
20
19
  stroke_horizontal_rule
21
- pad_top(20) { text "Text padded on the top." }
20
+ pad_top(20) { text 'Text padded on the top.' }
22
21
 
23
22
  stroke_horizontal_rule
24
- pad_bottom(20) { text "Text padded on the bottom." }
23
+ pad_bottom(20) { text 'Text padded on the bottom.' }
25
24
 
26
25
  stroke_horizontal_rule
27
26
  move_down 30
28
27
 
29
- text "Text written before the float block."
28
+ text 'Text written before the float block.'
30
29
 
31
30
  float do
32
31
  move_down 30
33
- bounding_box([0, cursor], :width => 200) do
34
- text "Text written inside the float block."
32
+ bounding_box([0, cursor], width: 200) do
33
+ text 'Text written inside the float block.'
35
34
  stroke_bounds
36
35
  end
37
36
  end
38
37
 
39
- text "Text written after the float block."
38
+ text 'Text written after the float block.'
40
39
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The recommended way to extend Prawn's functionality is to include the
4
+ # <code>Prawn::View</code> mixin in your own class, which will make all
5
+ # <code>Prawn::Document</code> methods available to your custom objects.
6
+ #
7
+ # This approach is preferred over inheriting from
8
+ # <code>Prawn::Document</code>, as your state will be kept completely separate
9
+ # from <code>Prawn::Document</code>'s, thus avoiding accidental method
10
+ # collisions.
11
+ #
12
+ # Note that <code>Prawn::View</code> lazily instantiates a
13
+ # <code>Prawn::Document</code> with default initialization settings, such as
14
+ # page size, layout, margins, etc.
15
+ #
16
+ # By defining your own <code>document</code> method, as shown in the example,
17
+ # you will be able to override those settings and initialize a
18
+ # <code>Prawn::Document</code> to your heart's content. This method will be
19
+ # called repeatedly by <code>Prawn::View</code>, so be sure to memoize the
20
+ # object by assigning it to an instance variable via the <code>||=</code>
21
+ # operator.
22
+
23
+ require_relative '../example_helper'
24
+
25
+ class Greeter
26
+ include Prawn::View
27
+
28
+ def initialize(name)
29
+ @name = name
30
+ end
31
+
32
+ def say_hello
33
+ text "Hello, #{@name}!"
34
+ end
35
+
36
+ def say_goodbye
37
+ font('Courier') do
38
+ text "Goodbye, #{@name}!"
39
+ end
40
+ end
41
+ end
42
+
43
+ greeter = Greeter.new('Gregory')
44
+
45
+ greeter.say_hello
46
+ greeter.say_goodbye
47
+
48
+ greeter.save_as('greetings.pdf')
@@ -1,39 +1,41 @@
1
- # encoding: utf-8
2
- #
3
- # Examples for bounding boxes.
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("bounding_box.pdf", :page_size => "FOLIO") do
3
+ # Examples for bounding boxes.
9
4
 
10
- package "bounding_box" do |p|
5
+ require_relative '../example_helper'
11
6
 
12
- p.section "Basics" do |s|
13
- s.example "creation"
14
- s.example "bounds"
7
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
8
+ Prawn::ManualBuilder::Example.generate(filename, page_size: 'FOLIO') do
9
+ package 'bounding_box' do |p|
10
+ p.section 'Basics' do |s|
11
+ s.example 'creation'
12
+ s.example 'bounds'
15
13
  end
16
14
 
17
- p.section "Advanced" do |s|
18
- s.example "stretchy"
19
- s.example "nesting"
20
- s.example "indentation"
21
- s.example "canvas"
22
- s.example "russian_boxes"
15
+ p.section 'Advanced' do |s|
16
+ s.example 'stretchy'
17
+ s.example 'nesting'
18
+ s.example 'indentation'
19
+ s.example 'canvas'
20
+ s.example 'russian_boxes'
23
21
  end
24
22
 
25
23
  p.intro do
26
- prose("Bounding boxes are the basic containers for structuring the content flow. Even being low level building blocks sometimes their simplicity is very welcome.
27
-
28
- The examples show:")
29
-
30
- list( "How to create bounding boxes with specific dimensions",
31
- "How to inspect the current bounding box for its coordinates",
32
- "Stretchy bounding boxes",
33
- "Nested bounding boxes",
34
- "Indent blocks"
35
- )
24
+ prose <<-TEXT
25
+ Bounding boxes are the basic containers for structuring the content
26
+ flow. Even being low level building blocks sometimes their simplicity is
27
+ very welcome.
28
+
29
+ The examples show:
30
+ TEXT
31
+
32
+ list(
33
+ 'How to create bounding boxes with specific dimensions',
34
+ 'How to inspect the current bounding box for its coordinates',
35
+ 'Stretchy bounding boxes',
36
+ 'Nested bounding boxes',
37
+ 'Indent blocks'
38
+ )
36
39
  end
37
-
38
40
  end
39
41
  end
@@ -1,7 +1,7 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # The <code>bounds</code> method returns the current bounding box. This is
4
- # useful because the <code>Prawn::BoundinBox</code> exposes some nice boundary
4
+ # useful because the <code>Prawn::BoundingBox</code> exposes some nice boundary
5
5
  # helpers.
6
6
  #
7
7
  # <code>top</code>, <code>bottom</code>, <code>left</code> and
@@ -16,9 +16,8 @@
16
16
  #
17
17
  # The following snippet shows the boundaries for the margin box side by side
18
18
  # with the boundaries for a custom bounding box.
19
- #
20
- require File.expand_path(File.join(File.dirname(__FILE__),
21
- %w[.. example_helper]))
19
+
20
+ require_relative '../example_helper'
22
21
 
23
22
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
24
23
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -30,18 +29,18 @@ Prawn::ManualBuilder::Example.generate(filename) do
30
29
 
31
30
  move_down 10
32
31
 
33
- text "absolute top: #{sprintf "%.2f", bounds.absolute_top}"
34
- text "absolute bottom: #{sprintf "%.2f", bounds.absolute_bottom}"
35
- text "absolute left: #{sprintf "%.2f", bounds.absolute_left}"
36
- text "absolute right: #{sprintf "%.2f", bounds.absolute_right}"
32
+ text "absolute top: #{bounds.absolute_top.to_f.round(2)}"
33
+ text "absolute bottom: #{bounds.absolute_bottom.to_f.round(2)}"
34
+ text "absolute left: #{bounds.absolute_left.to_f.round(2)}"
35
+ text "absolute right: #{bounds.absolute_right.to_f.round(2)}"
37
36
  end
38
37
 
39
- text "Margin box bounds:"
38
+ text 'Margin box bounds:'
40
39
  move_down 5
41
40
  print_coordinates
42
41
 
43
- bounding_box([250, cursor + 140], :width => 200, :height => 150) do
44
- text "This bounding box bounds:"
42
+ bounding_box([250, cursor + 140], width: 200, height: 150) do
43
+ text 'This bounding box bounds:'
45
44
  move_down 5
46
45
  print_coordinates
47
46
  transparent(0.5) { stroke_bounds }
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # The origin example already mentions that a new document already comes with
4
4
  # a margin box whose bottom left corner is used as the origin for calculating
5
5
  # coordinates.
@@ -9,16 +9,15 @@
9
9
  # box mapped to the absolute coordinates and evaluating the code inside it.
10
10
  #
11
11
  # The following snippet draws a circle on each of the four absolute corners.
12
- #
13
- require File.expand_path(File.join(File.dirname(__FILE__),
14
- %w[.. example_helper]))
12
+
13
+ require_relative '../example_helper'
15
14
 
16
15
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
17
16
  Prawn::ManualBuilder::Example.generate(filename) do
18
17
  canvas do
19
- fill_circle [bounds.left, bounds.top], 30
20
- fill_circle [bounds.right, bounds.top], 30
18
+ fill_circle [bounds.left, bounds.top], 30
19
+ fill_circle [bounds.right, bounds.top], 30
21
20
  fill_circle [bounds.right, bounds.bottom], 30
22
- fill_circle [0, 0], 30
21
+ fill_circle [0, 0], 30
23
22
  end
24
23
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # If you've read the basic concepts examples you probably know that the origin
4
4
  # of a page is on the bottom left corner and that the content flows from top to
5
5
  # bottom.
@@ -9,14 +9,13 @@
9
9
  # A bounding box can be created with the <code>bounding_box</code> method. Just
10
10
  # provide the top left corner, a required <code>:width</code> option and an
11
11
  # optional <code>:height</code>.
12
- #
13
- require File.expand_path(File.join(File.dirname(__FILE__),
14
- %w[.. example_helper]))
12
+
13
+ require_relative '../example_helper'
15
14
 
16
15
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
17
16
  Prawn::ManualBuilder::Example.generate(filename) do
18
- bounding_box([200, cursor - 100], :width => 200, :height => 100) do
19
- text "Just your regular bounding box"
17
+ bounding_box([200, cursor - 100], width: 200, height: 100) do
18
+ text 'Just your regular bounding box'
20
19
 
21
20
  transparent(0.5) { stroke_bounds }
22
21
  end
@@ -1,43 +1,42 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Sometimes you just need to indent a portion of the contents of a bounding box,
4
4
  # and using a nested bounding box is pure overkill. The <code>indent</code>
5
5
  # method is what you might need.
6
6
  #
7
7
  # Just provide a number for it to indent all content generated inside the
8
8
  # block.
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
15
- text "No indentation on the margin box."
14
+ text 'No indentation on the margin box.'
16
15
  indent(20) do
17
- text "Some indentation inside an indent block."
16
+ text 'Some indentation inside an indent block.'
18
17
  end
19
18
  move_down 20
20
19
 
21
- bounding_box([50, cursor], :width => 400, :height => cursor) do
20
+ bounding_box([50, cursor], width: 400, height: cursor) do
22
21
  transparent(0.5) { stroke_bounds }
23
22
 
24
23
  move_down 10
25
- text "No indentation inside this bounding box."
24
+ text 'No indentation inside this bounding box.'
26
25
  indent(40) do
27
- text "Inside an indent block. And so is this horizontal line:"
26
+ text 'Inside an indent block. And so is this horizontal line:'
28
27
 
29
28
  stroke_horizontal_rule
30
29
  end
31
30
  move_down 10
32
- text "No indentation"
31
+ text 'No indentation'
33
32
 
34
33
  move_down 20
35
34
  indent(60) do
36
- text "Another indent block."
35
+ text 'Another indent block.'
37
36
 
38
- bounding_box([0, cursor], :width => 200) do
39
- text "Note that this bounding box coordinates are relative to the " +
40
- "indent block"
37
+ bounding_box([0, cursor], width: 200) do
38
+ text 'Note that this bounding box coordinates are relative to the ' \
39
+ 'indent block'
41
40
 
42
41
  transparent(0.5) { stroke_bounds }
43
42
  end
@@ -1,16 +1,15 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Normally when we provide the top left corner of a bounding box we
4
4
  # express the coordinates relative to the margin box. This is not the
5
5
  # case when we have nested bounding boxes. Once nested the inner bounding box
6
- # coordinates are relative to the outter bounding box.
6
+ # coordinates are relative to the outer bounding box.
7
7
  #
8
8
  # This example shows some nested bounding boxes with fixed and stretchy heights.
9
9
  # Note how the <code>cursor</code> method returns coordinates relative to
10
10
  # the current bounding box.
11
- #
12
- require File.expand_path(File.join(File.dirname(__FILE__),
13
- %w[.. example_helper]))
11
+
12
+ require_relative '../example_helper'
14
13
 
15
14
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
15
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -20,26 +19,34 @@ Prawn::ManualBuilder::Example.generate(filename) do
20
19
  end
21
20
 
22
21
  gap = 20
23
- bounding_box([50, cursor], :width => 400, :height => 200) do
24
- box_content("Fixed height")
22
+ bounding_box([50, cursor], width: 400, height: 200) do
23
+ box_content('Fixed height')
25
24
 
26
- bounding_box([gap, cursor - gap], :width => 300) do
27
- text "Stretchy height"
25
+ bounding_box([gap, cursor - gap], width: 300) do
26
+ text 'Stretchy height'
28
27
 
29
- bounding_box([gap, bounds.top - gap], :width => 100) do
30
- text "Stretchy height"
31
- transparent(0.5) { dash(1); stroke_bounds; undash }
28
+ bounding_box([gap, bounds.top - gap], width: 100) do
29
+ text 'Stretchy height'
30
+ transparent(0.5) do
31
+ dash(1)
32
+ stroke_bounds
33
+ undash
34
+ end
32
35
  end
33
36
 
34
- bounding_box([gap * 7, bounds.top - gap], :width => 100, :height => 50) do
35
- box_content("Fixed height")
37
+ bounding_box([gap * 7, bounds.top - gap], width: 100, height: 50) do
38
+ box_content('Fixed height')
36
39
  end
37
40
 
38
- transparent(0.5) { dash(1); stroke_bounds; undash }
41
+ transparent(0.5) do
42
+ dash(1)
43
+ stroke_bounds
44
+ undash
45
+ end
39
46
  end
40
47
 
41
- bounding_box([gap, cursor - gap], :width => 300, :height => 50) do
42
- box_content("Fixed height")
48
+ bounding_box([gap, cursor - gap], width: 300, height: 50) do
49
+ box_content('Fixed height')
43
50
  end
44
51
  end
45
52
  end