prawn 0.13.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +10 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -16
  6. data/Rakefile +17 -39
  7. data/lib/prawn/document/bounding_box.rb +85 -42
  8. data/lib/prawn/document/column_box.rb +21 -11
  9. data/lib/prawn/document/internals.rb +40 -147
  10. data/lib/prawn/document/span.rb +25 -17
  11. data/lib/prawn/document.rb +286 -245
  12. data/lib/prawn/encoding.rb +68 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +204 -155
  15. data/lib/prawn/font_metric_cache.rb +25 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +7 -13
  18. data/lib/prawn/fonts/otf.rb +11 -0
  19. data/lib/prawn/fonts/ttc.rb +36 -0
  20. data/lib/prawn/{font → fonts}/ttf.rb +142 -80
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +6 -5
  23. data/lib/prawn/graphics/color.rb +47 -44
  24. data/lib/prawn/graphics/dash.rb +30 -13
  25. data/lib/prawn/graphics/join_style.rb +13 -6
  26. data/lib/prawn/graphics/patterns.rb +221 -90
  27. data/lib/prawn/graphics/transformation.rb +21 -12
  28. data/lib/prawn/graphics/transparency.rb +21 -17
  29. data/lib/prawn/graphics.rb +155 -128
  30. data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
  31. data/lib/prawn/image_handler.rb +16 -2
  32. data/lib/prawn/images/image.rb +4 -2
  33. data/lib/prawn/images/jpg.rb +39 -30
  34. data/lib/prawn/images/png.rb +132 -169
  35. data/lib/prawn/images.rb +70 -62
  36. data/lib/prawn/measurement_extensions.rb +15 -10
  37. data/lib/prawn/measurements.rb +22 -23
  38. data/lib/prawn/outline.rb +301 -13
  39. data/lib/prawn/repeater.rb +19 -17
  40. data/lib/prawn/security/arcfour.rb +54 -0
  41. data/lib/prawn/security.rb +108 -86
  42. data/lib/prawn/soft_mask.rb +40 -41
  43. data/lib/prawn/stamp.rb +29 -12
  44. data/lib/prawn/text/box.rb +27 -29
  45. data/lib/prawn/text/formatted/arranger.rb +110 -67
  46. data/lib/prawn/text/formatted/box.rb +233 -165
  47. data/lib/prawn/text/formatted/fragment.rb +27 -27
  48. data/lib/prawn/text/formatted/line_wrap.rb +137 -97
  49. data/lib/prawn/text/formatted/parser.rb +149 -127
  50. data/lib/prawn/text/formatted/wrap.rb +57 -37
  51. data/lib/prawn/text/formatted.rb +6 -4
  52. data/lib/prawn/text.rb +105 -73
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +11 -21
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +42 -68
  58. data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
  59. data/manual/basic_concepts/adding_pages.rb +9 -10
  60. data/manual/basic_concepts/basic_concepts.rb +33 -24
  61. data/manual/basic_concepts/creation.rb +10 -11
  62. data/manual/basic_concepts/cursor.rb +9 -10
  63. data/manual/basic_concepts/measurement.rb +10 -11
  64. data/manual/basic_concepts/origin.rb +8 -9
  65. data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
  66. data/manual/basic_concepts/view.rb +48 -0
  67. data/manual/bounding_box/bounding_box.rb +31 -29
  68. data/manual/bounding_box/bounds.rb +17 -18
  69. data/manual/bounding_box/canvas.rb +8 -9
  70. data/manual/bounding_box/creation.rb +8 -9
  71. data/manual/bounding_box/indentation.rb +22 -23
  72. data/manual/bounding_box/nesting.rb +32 -25
  73. data/manual/bounding_box/russian_boxes.rb +19 -19
  74. data/manual/bounding_box/stretchy.rb +18 -20
  75. data/manual/contents.rb +35 -0
  76. data/manual/cover.rb +43 -0
  77. data/manual/document_and_page_options/background.rb +16 -14
  78. data/manual/document_and_page_options/document_and_page_options.rb +26 -23
  79. data/manual/document_and_page_options/metadata.rb +21 -19
  80. data/manual/document_and_page_options/page_margins.rb +20 -22
  81. data/manual/document_and_page_options/page_size.rb +15 -15
  82. data/manual/document_and_page_options/print_scaling.rb +23 -0
  83. data/manual/example_helper.rb +5 -408
  84. data/manual/graphics/blend_mode.rb +52 -0
  85. data/manual/graphics/circle_and_ellipse.rb +8 -9
  86. data/manual/graphics/color.rb +11 -13
  87. data/manual/graphics/common_lines.rb +13 -12
  88. data/manual/graphics/fill_and_stroke.rb +10 -11
  89. data/manual/graphics/fill_rules.rb +13 -12
  90. data/manual/graphics/gradients.rb +28 -22
  91. data/manual/graphics/graphics.rb +52 -46
  92. data/manual/graphics/helper.rb +20 -10
  93. data/manual/graphics/line_width.rb +13 -12
  94. data/manual/graphics/lines_and_curves.rb +13 -14
  95. data/manual/graphics/polygon.rb +10 -12
  96. data/manual/graphics/rectangle.rb +7 -8
  97. data/manual/graphics/rotate.rb +9 -12
  98. data/manual/graphics/scale.rb +19 -18
  99. data/manual/graphics/soft_masks.rb +5 -7
  100. data/manual/graphics/stroke_cap.rb +10 -11
  101. data/manual/graphics/stroke_dash.rb +16 -17
  102. data/manual/graphics/stroke_join.rb +10 -11
  103. data/manual/graphics/translate.rb +13 -13
  104. data/manual/graphics/transparency.rb +11 -13
  105. data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
  106. data/manual/images/absolute_position.rb +9 -10
  107. data/manual/images/fit.rb +9 -10
  108. data/manual/images/horizontal.rb +13 -14
  109. data/manual/images/images.rb +31 -30
  110. data/manual/images/plain_image.rb +6 -7
  111. data/manual/images/scale.rb +12 -13
  112. data/manual/images/vertical.rb +19 -17
  113. data/manual/images/width_and_height.rb +13 -14
  114. data/manual/layout/boxes.rb +14 -15
  115. data/manual/layout/content.rb +12 -13
  116. data/manual/layout/layout.rb +19 -20
  117. data/manual/layout/simple_grid.rb +8 -9
  118. data/manual/outline/add_subsection_to.rb +26 -27
  119. data/manual/outline/insert_section_after.rb +19 -20
  120. data/manual/outline/outline.rb +23 -22
  121. data/manual/outline/sections_and_pages.rb +24 -25
  122. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  123. data/manual/repeatable_content/page_numbering.rb +20 -19
  124. data/manual/repeatable_content/repeatable_content.rb +26 -22
  125. data/manual/repeatable_content/repeater.rb +18 -19
  126. data/manual/repeatable_content/stamp.rb +18 -19
  127. data/manual/security/encryption.rb +8 -11
  128. data/manual/security/permissions.rb +20 -15
  129. data/manual/security/security.rb +20 -20
  130. data/manual/table.rb +16 -0
  131. data/manual/text/alignment.rb +17 -18
  132. data/manual/text/color.rb +13 -13
  133. data/manual/text/column_box.rb +10 -12
  134. data/manual/text/fallback_fonts.rb +29 -25
  135. data/manual/text/font.rb +17 -18
  136. data/manual/text/font_size.rb +21 -22
  137. data/manual/text/font_style.rb +12 -10
  138. data/manual/text/formatted_callbacks.rb +36 -26
  139. data/manual/text/formatted_text.rb +41 -34
  140. data/manual/text/free_flowing_text.rb +28 -29
  141. data/manual/text/inline.rb +23 -26
  142. data/manual/text/kerning_and_character_spacing.rb +20 -21
  143. data/manual/text/leading.rb +10 -11
  144. data/manual/text/line_wrapping.rb +40 -21
  145. data/manual/text/paragraph_indentation.rb +17 -12
  146. data/manual/text/positioned_text.rb +19 -20
  147. data/manual/text/registering_families.rb +33 -30
  148. data/manual/text/rendering_and_color.rb +11 -12
  149. data/manual/text/right_to_left_text.rb +31 -20
  150. data/manual/text/rotation.rb +36 -27
  151. data/manual/text/single_usage.rb +13 -14
  152. data/manual/text/text.rb +62 -62
  153. data/manual/text/text_box_excess.rb +22 -19
  154. data/manual/text/text_box_extensions.rb +21 -18
  155. data/manual/text/text_box_overflow.rb +28 -21
  156. data/manual/text/utf8.rb +16 -17
  157. data/manual/text/win_ansi_charset.rb +29 -26
  158. data/prawn.gemspec +45 -43
  159. data/spec/extensions/encoding_helpers.rb +4 -3
  160. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  161. data/spec/prawn/document/column_box_spec.rb +75 -0
  162. data/spec/prawn/document/security_spec.rb +176 -0
  163. data/spec/prawn/document_annotations_spec.rb +76 -0
  164. data/spec/prawn/document_destinations_spec.rb +15 -0
  165. data/spec/prawn/document_grid_spec.rb +99 -0
  166. data/spec/prawn/document_reference_spec.rb +27 -0
  167. data/spec/prawn/document_span_spec.rb +44 -0
  168. data/spec/prawn/document_spec.rb +805 -0
  169. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  170. data/spec/prawn/font_spec.rb +544 -0
  171. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  172. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  173. data/spec/prawn/graphics_spec.rb +872 -0
  174. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  175. data/spec/prawn/image_handler_spec.rb +53 -0
  176. data/spec/prawn/images/jpg_spec.rb +20 -0
  177. data/spec/prawn/images/png_spec.rb +283 -0
  178. data/spec/prawn/images_spec.rb +229 -0
  179. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  180. data/spec/prawn/outline_spec.rb +512 -0
  181. data/spec/prawn/repeater_spec.rb +166 -0
  182. data/spec/prawn/soft_mask_spec.rb +74 -0
  183. data/spec/prawn/stamp_spec.rb +173 -0
  184. data/spec/prawn/text/box_spec.rb +1110 -0
  185. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  186. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  187. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  188. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  189. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  190. data/spec/prawn/text_draw_text_spec.rb +150 -0
  191. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  192. data/spec/prawn/text_spacing_spec.rb +95 -0
  193. data/spec/prawn/text_spec.rb +603 -0
  194. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  195. data/spec/prawn/transformation_stack_spec.rb +66 -0
  196. data/spec/prawn/view_spec.rb +63 -0
  197. data/spec/prawn_manual_spec.rb +35 -0
  198. data/spec/spec_helper.rb +22 -21
  199. data.tar.gz.sig +0 -0
  200. metadata +168 -307
  201. metadata.gz.sig +0 -0
  202. data/README.md +0 -109
  203. data/data/encodings/win_ansi.txt +0 -29
  204. data/data/images/16bit.alpha +0 -0
  205. data/data/images/16bit.dat +0 -0
  206. data/data/images/16bit.png +0 -0
  207. data/data/images/arrow.png +0 -0
  208. data/data/images/arrow2.png +0 -0
  209. data/data/images/barcode_issue.png +0 -0
  210. data/data/images/dice.alpha +0 -0
  211. data/data/images/dice.dat +0 -0
  212. data/data/images/dice.png +0 -0
  213. data/data/images/dice_interlaced.png +0 -0
  214. data/data/images/indexed_color.dat +0 -0
  215. data/data/images/indexed_color.png +0 -0
  216. data/data/images/letterhead.jpg +0 -0
  217. data/data/images/page_white_text.alpha +0 -0
  218. data/data/images/page_white_text.dat +0 -0
  219. data/data/images/page_white_text.png +0 -0
  220. data/data/images/pigs.jpg +0 -0
  221. data/data/images/prawn.png +0 -0
  222. data/data/images/ruport.png +0 -0
  223. data/data/images/ruport_data.dat +0 -0
  224. data/data/images/ruport_transparent.png +0 -0
  225. data/data/images/ruport_type0.png +0 -0
  226. data/data/images/stef.jpg +0 -0
  227. data/data/images/tru256.bmp +0 -0
  228. data/data/images/web-links.dat +0 -1
  229. data/data/images/web-links.png +0 -0
  230. data/data/pdfs/complex_template.pdf +0 -0
  231. data/data/pdfs/contains_ttf_font.pdf +0 -0
  232. data/data/pdfs/encrypted.pdf +0 -0
  233. data/data/pdfs/form.pdf +1 -819
  234. data/data/pdfs/hexagon.pdf +0 -61
  235. data/data/pdfs/indirect_reference.pdf +0 -86
  236. data/data/pdfs/multipage_template.pdf +0 -127
  237. data/data/pdfs/nested_pages.pdf +0 -118
  238. data/data/pdfs/page_without_mediabox.pdf +0 -193
  239. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  240. data/data/pdfs/two_hexagons.pdf +0 -90
  241. data/data/pdfs/version_1_6.pdf +0 -61
  242. data/data/shift_jis_text.txt +0 -1
  243. data/lib/pdf/core/annotations.rb +0 -60
  244. data/lib/pdf/core/byte_string.rb +0 -9
  245. data/lib/pdf/core/destinations.rb +0 -90
  246. data/lib/pdf/core/document_state.rb +0 -78
  247. data/lib/pdf/core/filter_list.rb +0 -51
  248. data/lib/pdf/core/filters.rb +0 -36
  249. data/lib/pdf/core/graphics_state.rb +0 -68
  250. data/lib/pdf/core/literal_string.rb +0 -16
  251. data/lib/pdf/core/name_tree.rb +0 -177
  252. data/lib/pdf/core/object_store.rb +0 -320
  253. data/lib/pdf/core/outline.rb +0 -315
  254. data/lib/pdf/core/page.rb +0 -212
  255. data/lib/pdf/core/page_geometry.rb +0 -126
  256. data/lib/pdf/core/pdf_object.rb +0 -124
  257. data/lib/pdf/core/reference.rb +0 -103
  258. data/lib/pdf/core/stream.rb +0 -98
  259. data/lib/pdf/core/text.rb +0 -275
  260. data/lib/pdf/core.rb +0 -35
  261. data/lib/prawn/compatibility.rb +0 -91
  262. data/lib/prawn/document/graphics_state.rb +0 -73
  263. data/lib/prawn/document/snapshot.rb +0 -89
  264. data/lib/prawn/font/afm.rb +0 -203
  265. data/lib/prawn/layout.rb +0 -20
  266. data/lib/prawn/table/cell/image.rb +0 -70
  267. data/lib/prawn/table/cell/in_table.rb +0 -27
  268. data/lib/prawn/table/cell/span_dummy.rb +0 -92
  269. data/lib/prawn/table/cell/subtable.rb +0 -65
  270. data/lib/prawn/table/cell/text.rb +0 -153
  271. data/lib/prawn/table/cell.rb +0 -770
  272. data/lib/prawn/table/cells.rb +0 -295
  273. data/lib/prawn/table.rb +0 -643
  274. data/manual/example_file.rb +0 -116
  275. data/manual/example_package.rb +0 -53
  276. data/manual/example_section.rb +0 -46
  277. data/manual/manual/cover.rb +0 -35
  278. data/manual/manual/foreword.rb +0 -85
  279. data/manual/manual/manual.rb +0 -35
  280. data/manual/syntax_highlight.rb +0 -52
  281. data/manual/table/basic_block.rb +0 -53
  282. data/manual/table/before_rendering_page.rb +0 -26
  283. data/manual/table/cell_border_lines.rb +0 -24
  284. data/manual/table/cell_borders_and_bg.rb +0 -31
  285. data/manual/table/cell_dimensions.rb +0 -30
  286. data/manual/table/cell_text.rb +0 -38
  287. data/manual/table/column_widths.rb +0 -30
  288. data/manual/table/content_and_subtables.rb +0 -39
  289. data/manual/table/creation.rb +0 -27
  290. data/manual/table/filtering.rb +0 -36
  291. data/manual/table/flow_and_header.rb +0 -17
  292. data/manual/table/image_cells.rb +0 -33
  293. data/manual/table/position.rb +0 -29
  294. data/manual/table/row_colors.rb +0 -20
  295. data/manual/table/span.rb +0 -30
  296. data/manual/table/style.rb +0 -22
  297. data/manual/table/table.rb +0 -52
  298. data/manual/table/width.rb +0 -27
  299. data/manual/templates/full_template.rb +0 -25
  300. data/manual/templates/page_template.rb +0 -48
  301. data/manual/templates/templates.rb +0 -27
  302. data/manual/text/group.rb +0 -29
  303. data/spec/acceptance/png.rb +0 -23
  304. data/spec/annotations_spec.rb +0 -74
  305. data/spec/bounding_box_spec.rb +0 -493
  306. data/spec/cell_spec.rb +0 -628
  307. data/spec/column_box_spec.rb +0 -33
  308. data/spec/destinations_spec.rb +0 -15
  309. data/spec/document_spec.rb +0 -761
  310. data/spec/extensions/mocha.rb +0 -44
  311. data/spec/filters_spec.rb +0 -34
  312. data/spec/font_metric_cache_spec.rb +0 -52
  313. data/spec/font_spec.rb +0 -464
  314. data/spec/formatted_text_arranger_spec.rb +0 -421
  315. data/spec/formatted_text_box_spec.rb +0 -650
  316. data/spec/formatted_text_fragment_spec.rb +0 -298
  317. data/spec/graphics_spec.rb +0 -651
  318. data/spec/grid_spec.rb +0 -85
  319. data/spec/image_handler_spec.rb +0 -42
  320. data/spec/images_spec.rb +0 -157
  321. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  322. data/spec/jpg_spec.rb +0 -25
  323. data/spec/line_wrap_spec.rb +0 -333
  324. data/spec/measurement_units_spec.rb +0 -23
  325. data/spec/name_tree_spec.rb +0 -112
  326. data/spec/object_store_spec.rb +0 -170
  327. data/spec/outline_spec.rb +0 -448
  328. data/spec/pdf_object_spec.rb +0 -172
  329. data/spec/png_spec.rb +0 -240
  330. data/spec/reference_spec.rb +0 -82
  331. data/spec/repeater_spec.rb +0 -158
  332. data/spec/security_spec.rb +0 -158
  333. data/spec/snapshot_spec.rb +0 -186
  334. data/spec/soft_mask_spec.rb +0 -117
  335. data/spec/span_spec.rb +0 -44
  336. data/spec/stamp_spec.rb +0 -158
  337. data/spec/stream_spec.rb +0 -58
  338. data/spec/stroke_styles_spec.rb +0 -211
  339. data/spec/table/span_dummy_spec.rb +0 -17
  340. data/spec/table_spec.rb +0 -1355
  341. data/spec/template_spec.rb +0 -351
  342. data/spec/text_at_spec.rb +0 -130
  343. data/spec/text_box_spec.rb +0 -1030
  344. data/spec/text_rendering_mode_spec.rb +0 -45
  345. data/spec/text_spacing_spec.rb +0 -93
  346. data/spec/text_spec.rb +0 -425
  347. data/spec/text_with_inline_formatting_spec.rb +0 -35
  348. data/spec/transparency_spec.rb +0 -89
data/lib/prawn.rb CHANGED
@@ -1,32 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Welcome to Prawn, the best PDF Generation library ever.
2
4
  # This documentation covers user level functionality.
3
5
  #
4
- # Those looking to contribute code or write extensions should look
5
- # into the lib/prawn/core/* source tree.
6
- #
7
- %w[ttfunk/lib].each do |dep|
8
- $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../../vendor/#{dep}")
9
- end
10
-
11
- begin
12
- require 'ttfunk'
13
- rescue LoadError
14
- puts "Failed to load ttfunk. If you are running Prawn from git:"
15
- puts " git submodule init"
16
- puts " git submodule update"
17
- exit
18
- end
6
+ require 'set'
19
7
 
20
- require "set"
8
+ require 'ttfunk'
9
+ require 'pdf/core'
21
10
 
22
11
  module Prawn
23
- VERSION = "0.13.0"
24
-
25
- extend self
26
-
27
12
  file = __FILE__
28
13
  file = File.readlink(file) if File.symlink?(file)
29
- dir = File.dirname(file)
14
+ dir = File.dirname(file)
30
15
 
31
16
  # The base source directory for Prawn as installed on the system
32
17
  #
@@ -34,7 +19,9 @@ module Prawn
34
19
  BASEDIR = File.expand_path(File.join(dir, '..'))
35
20
  DATADIR = File.expand_path(File.join(dir, '..', 'data'))
36
21
 
37
- # Whe set to true, Prawn will verify hash options to ensure only valid keys
22
+ FLOAT_PRECISION = 1.0e-9
23
+
24
+ # When set to true, Prawn will verify hash options to ensure only valid keys
38
25
  # are used. Off by default.
39
26
  #
40
27
  # Example:
@@ -43,62 +30,49 @@ module Prawn
43
30
  # Detected unknown option(s): [:tomato]
44
31
  # Accepted options are: [:page_size, :page_layout, :left_margin, ...]
45
32
  #
33
+ # @private
46
34
  attr_accessor :debug
47
35
 
48
- def verify_options(accepted, actual) #:nodoc:
36
+ module_function :debug, :debug=
37
+
38
+ module_function
39
+
40
+ # @private
41
+ def verify_options(accepted, actual)
49
42
  return unless debug || $DEBUG
50
- unless (act=Set[*actual.keys]).subset?(acc=Set[*accepted])
43
+
44
+ unless (act = Set[*actual.keys]).subset?(acc = Set[*accepted])
51
45
  raise Prawn::Errors::UnknownOption,
52
- "\nDetected unknown option(s): #{(act - acc).to_a.inspect}\n" <<
46
+ "\nDetected unknown option(s): #{(act - acc).to_a.inspect}\n" \
53
47
  "Accepted options are: #{accepted.inspect}"
54
48
  end
55
49
  yield if block_given?
56
50
  end
57
-
58
- module Configurable #:nodoc:
59
- def configuration(*args)
60
- @config ||= Marshal.load(Marshal.dump(default_configuration))
61
- if Hash === args[0]
62
- @config.update(args[0])
63
- elsif args.length > 1
64
- @config.values_at(*args)
65
- elsif args.length == 1
66
- @config[args[0]]
67
- else
68
- @config
69
- end
70
- end
71
-
72
- alias_method :C, :configuration
73
- end
74
51
  end
75
52
 
76
- require_relative "prawn/compatibility"
77
- require_relative "prawn/errors"
78
-
79
- require_relative "pdf/core"
80
-
81
- require_relative "prawn/utilities"
82
- require_relative "prawn/text"
83
- require_relative "prawn/graphics"
84
- require_relative "prawn/images"
85
- require_relative "prawn/images/image"
86
- require_relative "prawn/images/jpg"
87
- require_relative "prawn/images/png"
88
- require_relative "prawn/stamp"
89
- require_relative "prawn/soft_mask"
90
- require_relative "prawn/security"
91
- require_relative "prawn/document"
92
- require_relative "prawn/font"
93
- require_relative "prawn/encoding"
94
- require_relative "prawn/measurements"
95
- require_relative "prawn/repeater"
96
- require_relative "prawn/outline"
97
- require_relative "prawn/layout"
98
-
99
- require_relative "prawn/image_handler"
100
-
101
-
53
+ require_relative 'prawn/version'
54
+
55
+ require_relative 'prawn/errors'
56
+
57
+ require_relative 'prawn/utilities'
58
+ require_relative 'prawn/text'
59
+ require_relative 'prawn/graphics'
60
+ require_relative 'prawn/images'
61
+ require_relative 'prawn/images/image'
62
+ require_relative 'prawn/images/jpg'
63
+ require_relative 'prawn/images/png'
64
+ require_relative 'prawn/stamp'
65
+ require_relative 'prawn/soft_mask'
66
+ require_relative 'prawn/security'
67
+ require_relative 'prawn/transformation_stack'
68
+ require_relative 'prawn/document'
69
+ require_relative 'prawn/font'
70
+ require_relative 'prawn/measurements'
71
+ require_relative 'prawn/repeater'
72
+ require_relative 'prawn/outline'
73
+ require_relative 'prawn/grid'
74
+ require_relative 'prawn/view'
75
+ require_relative 'prawn/image_handler'
102
76
 
103
77
  Prawn.image_handler.register(Prawn::Images::PNG)
104
78
  Prawn.image_handler.register(Prawn::Images::JPG)
@@ -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,16 +12,15 @@
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
- Prawn::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."
23
-
19
+ Prawn::ManualBuilder::Example.generate(filename) do
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.'
22
+
24
23
  start_new_page
25
-
24
+
26
25
  text "See. We've left the previous page behind."
27
26
  end
@@ -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
- require File.expand_path(File.join(File.dirname(__FILE__),
6
- %w[.. example_helper]))
7
5
 
8
- Prawn::Example.generate("basic_concepts.pdf", :page_size => "FOLIO") do
9
-
10
- package "basic_concepts" do |p|
11
-
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"
18
-
6
+ require_relative '../example_helper'
7
+
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
+
19
19
  p.intro do
20
- prose("This chapter covers the minimum amount of functionality you'll need to start using Prawn.
20
+ prose <<-TEXT
21
+ This chapter covers the minimum amount of functionality you'll need to
22
+ start using Prawn.
21
23
 
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.
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.
23
27
 
24
- The examples show:")
28
+ The examples show:
29
+ TEXT
25
30
 
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
- )
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,23 +11,22 @@
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
- Prawn::Example.generate(filename) do
18
+ Prawn::ManualBuilder::Example.generate(filename) do
20
19
  stroke_axis
21
-
20
+
22
21
  text "the cursor is here: #{cursor}"
23
22
  text "now it is here: #{cursor}"
24
-
23
+
25
24
  move_down 200
26
25
  text "on the first move the cursor went down to: #{cursor}"
27
-
26
+
28
27
  move_up 100
29
28
  text "on the second move the cursor went up to: #{cursor}"
30
-
29
+
31
30
  move_cursor_to 50
32
31
  text "on the last move the cursor went directly to: #{cursor}"
33
32
  end
@@ -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
- Prawn::Example.generate(filename) do
19
- require "prawn/measurement_extensions"
20
-
21
- [:mm, :cm, :dm, :m, :in, :yd, :ft].each do |measurement|
22
- text "1 #{measurement} in PDF Points: #{1.send(measurement)} pt"
17
+ Prawn::ManualBuilder::Example.generate(filename) do
18
+ require 'prawn/measurement_extensions'
19
+
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,17 +21,16 @@
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
- Prawn::Example.generate(filename) do
28
+ Prawn::ManualBuilder::Example.generate(filename) do
30
29
  stroke_axis
31
-
30
+
32
31
  stroke_circle [0, 0], 10
33
-
34
- bounding_box([100, 300], :width => 300, :height => 200) do
32
+
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
- Prawn::Example.generate(filename) do
15
+ Prawn::ManualBuilder::Example.generate(filename) do
17
16
  stroke_horizontal_rule
18
- pad(20) { text "Text padded both before and after." }
19
-
17
+ pad(20) { text 'Text padded both before and after.' }
18
+
20
19
  stroke_horizontal_rule
21
- pad_top(20) { text "Text padded on the top." }
22
-
20
+ pad_top(20) { text 'Text padded on the top.' }
21
+
23
22
  stroke_horizontal_rule
24
- pad_bottom(20) { text "Text padded on the bottom." }
25
-
23
+ pad_bottom(20) { text 'Text padded on the bottom.' }
24
+
26
25
  stroke_horizontal_rule
27
26
  move_down 30
28
-
29
- text "Text written before the float block."
30
-
27
+
28
+ text 'Text written before the float block.'
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
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Examples for bounding boxes.
4
- #
5
- require File.expand_path(File.join(File.dirname(__FILE__),
6
- %w[.. example_helper]))
7
4
 
8
- Prawn::Example.generate("bounding_box.pdf", :page_size => "FOLIO") do
9
-
10
- package "bounding_box" do |p|
11
-
12
- p.section "Basics" do |s|
13
- s.example "creation"
14
- s.example "bounds"
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 'bounding_box' do |p|
10
+ p.section 'Basics' do |s|
11
+ s.example 'creation'
12
+ s.example 'bounds'
15
13
  end
16
-
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"
14
+
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.
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.
27
28
 
28
- The examples show:")
29
+ The examples show:
30
+ TEXT
29
31
 
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
- )
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,32 +16,31 @@
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
- Prawn::Example.generate(filename) do
23
+ Prawn::ManualBuilder::Example.generate(filename) do
25
24
  def print_coordinates
26
25
  text "top: #{bounds.top}"
27
26
  text "bottom: #{bounds.bottom}"
28
27
  text "left: #{bounds.left}"
29
28
  text "right: #{bounds.right}"
30
-
29
+
31
30
  move_down 10
32
-
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}"
31
+
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
-
39
- text "Margin box bounds:"
37
+
38
+ text 'Margin box bounds:'
40
39
  move_down 5
41
40
  print_coordinates
42
-
43
- bounding_box([250, cursor + 140], :width => 200, :height => 150) do
44
- text "This bounding box bounds:"
41
+
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
- Prawn::Example.generate(filename) do
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