prawn 0.13.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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,15 +9,14 @@
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
- Prawn::Example.generate(filename) do
18
- bounding_box([200, cursor - 100], :width => 200, :height => 100) do
19
- text "Just your regular bounding box"
20
-
16
+ Prawn::ManualBuilder::Example.generate(filename) do
17
+ bounding_box([200, cursor - 100], width: 200, height: 100) do
18
+ text 'Just your regular bounding box'
19
+
21
20
  transparent(0.5) { stroke_bounds }
22
21
  end
23
22
  end
@@ -1,44 +1,43 @@
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
- # block.
9
- #
10
- require File.expand_path(File.join(File.dirname(__FILE__),
11
- %w[.. example_helper]))
8
+ # block.
9
+
10
+ require_relative '../example_helper'
12
11
 
13
12
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
14
- Prawn::Example.generate(filename) do
15
- text "No indentation on the margin box."
13
+ Prawn::ManualBuilder::Example.generate(filename) do
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
-
21
- bounding_box([50, cursor], :width => 400, :height => cursor) do
19
+
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:"
28
-
26
+ text 'Inside an indent block. And so is this horizontal line:'
27
+
29
28
  stroke_horizontal_rule
30
29
  end
31
30
  move_down 10
32
- text "No indentation"
33
-
31
+ text 'No indentation'
32
+
34
33
  move_down 20
35
34
  indent(60) do
36
- text "Another indent block."
37
-
38
- bounding_box([0, cursor], :width => 200) do
39
- text "Note that this bounding box coordinates are relative to the " +
40
- "indent block"
41
-
35
+ text 'Another indent block.'
36
+
37
+ bounding_box([0, cursor], width: 200) do
38
+ text 'Note that this bounding box coordinates are relative to the ' \
39
+ 'indent block'
40
+
42
41
  transparent(0.5) { stroke_bounds }
43
42
  end
44
43
  end
@@ -1,45 +1,52 @@
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
- Prawn::Example.generate(filename) do
15
+ Prawn::ManualBuilder::Example.generate(filename) do
17
16
  def box_content(string)
18
17
  text string
19
18
  transparent(0.5) { stroke_bounds }
20
19
  end
21
-
20
+
22
21
  gap = 20
23
- bounding_box([50, cursor], :width => 400, :height => 200) do
24
- box_content("Fixed height")
25
-
26
- bounding_box([gap, cursor - gap], :width => 300) do
27
- text "Stretchy height"
28
-
29
- bounding_box([gap, bounds.top - gap], :width => 100) do
30
- text "Stretchy height"
31
- transparent(0.5) { dash(1); stroke_bounds; undash }
22
+ bounding_box([50, cursor], width: 400, height: 200) do
23
+ box_content('Fixed height')
24
+
25
+ bounding_box([gap, cursor - gap], width: 300) do
26
+ text 'Stretchy height'
27
+
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
-
34
- bounding_box([gap * 7, bounds.top - gap], :width => 100, :height => 50) do
35
- box_content("Fixed height")
36
+
37
+ bounding_box([gap * 7, bounds.top - gap], width: 100, height: 50) do
38
+ box_content('Fixed height')
39
+ end
40
+
41
+ transparent(0.5) do
42
+ dash(1)
43
+ stroke_bounds
44
+ undash
36
45
  end
37
-
38
- transparent(0.5) { dash(1); stroke_bounds; undash }
39
46
  end
40
-
41
- bounding_box([gap, cursor - gap], :width => 300, :height => 50) do
42
- box_content("Fixed height")
47
+
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
@@ -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
- Prawn::Example.generate(filename) do
12
- def combine(a1, a2)
10
+ Prawn::ManualBuilder::Example.generate(filename) do
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
- Prawn::Example.generate(filename) do
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."
16
-
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.'
15
+
17
16
  transparent(0.5) { stroke_bounds }
18
17
  end
19
-
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."
23
-
24
- text " _" * 100
25
-
26
- text " *" * 100
27
-
18
+
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.'
22
+
23
+ text ' _' * 100
24
+
25
+ text ' *' * 100
26
+
28
27
  transparent(0.5) { stroke_bounds }
29
28
  end
30
-
31
29
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Generates the Prawn by example manual.
4
+
5
+ require_relative 'example_helper'
6
+
7
+ def prawn_manual_document
8
+ old_default_external_encoding = Encoding.default_external
9
+ Encoding.default_external = Encoding::UTF_8
10
+
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'
17
+
18
+ # Core chapters
19
+ load_package 'basic_concepts'
20
+ load_package 'graphics'
21
+ load_package 'text'
22
+ load_package 'bounding_box'
23
+
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
35
+ end
data/manual/cover.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Prawn manual how to read this manual page.
4
+
5
+ require_relative 'example_helper'
6
+
7
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
8
+ Prawn::ManualBuilder::Example.generate(filename) do
9
+ move_down 200
10
+
11
+ image "#{Prawn::DATADIR}/images/prawn.png",
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
+ )
42
+ end
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
- # This option can only be used on document creation.
6
- #
7
- require File.expand_path(File.join(File.dirname(__FILE__),
8
- %w[.. example_helper]))
5
+ # This option can only be used on document creation.
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,31 +1,34 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Examples for stamps and repeaters.
4
- #
5
- require File.expand_path(File.join(File.dirname(__FILE__),
6
- %w[.. example_helper]))
7
4
 
8
- Prawn::Example.generate("document_and_page_options.pdf",
9
- :page_size => "FOLIO") do
10
-
11
- package "document_and_page_options" do |p|
12
-
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
-
5
+ require_relative '../example_helper'
6
+
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
15
+
18
16
  p.intro do
19
- 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.
20
22
 
21
- The examples show:")
23
+ The examples show:
24
+ TEXT
22
25
 
23
- list( "How to configure page size",
24
- "How to configure page margins",
25
- "How to use a background image",
26
- "How to add metadata to the generated PDF"
27
- )
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
+ )
28
32
  end
29
-
30
33
  end
31
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
- #
6
- require File.expand_path(File.join(File.dirname(__FILE__),
7
- %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')
11
+
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
+ }
8
21
 
9
- Prawn::Document.generate("metadata.pdf",
10
- :info => {
11
- :Title => "My title",
12
- :Author => "John Doe",
13
- :Subject => "My Subject",
14
- :Keywords => "test metadata ruby pdf dry",
15
- :Creator => "ACME Soft App",
16
- :Producer => "Prawn",
17
- :CreationDate => Time.now,
18
- :Grok => "Test Property"
19
- }) do
20
-
21
- text "This is a test of setting metadata properties via the info option."
22
- text "It allows one to specify non standard properties like 'Grok'."
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
-
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."
21
+
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
-
35
- start_new_page(:margin => [50, 100, 150, 200])
36
- text "There is also the shorthand CSS like syntax used here."
32
+
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
- ["A4", "TABLOID", "B7", custom_size ].each do |size|
27
-
28
- start_new_page(:size => size, :layout => :portrait)
26
+
27
+ ['A4', 'TABLOID', 'B7', custom_size].each do |size|
28
+ start_new_page(size: size, layout: :portrait)
29
29
  text "#{size} portrait page."
30
-
31
- start_new_page(:size => size, :layout => :landscape)
30
+
31
+ start_new_page(size: size, layout: :landscape)
32
32
  text "#{size} landscape page."
33
33
  end
34
34
  end
@@ -0,0 +1,23 @@
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>.
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.
12
+
13
+ require_relative '../example_helper'
14
+
15
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
+ Prawn::Document.generate(
17
+ filename,
18
+ page_layout: :landscape,
19
+ print_scaling: :none
20
+ ) do
21
+ text 'When you print this document, the scale to fit in print preview '\
22
+ 'should be disabled by default.'
23
+ end