prawn-git 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (252) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +10 -0
  3. data/COPYING +2 -0
  4. data/GPLv2 +340 -0
  5. data/GPLv3 +674 -0
  6. data/Gemfile +11 -0
  7. data/LICENSE +56 -0
  8. data/Rakefile +55 -0
  9. data/data/fonts/Courier-Bold.afm +342 -0
  10. data/data/fonts/Courier-BoldOblique.afm +342 -0
  11. data/data/fonts/Courier-Oblique.afm +342 -0
  12. data/data/fonts/Courier.afm +342 -0
  13. data/data/fonts/Helvetica-Bold.afm +2827 -0
  14. data/data/fonts/Helvetica-BoldOblique.afm +2827 -0
  15. data/data/fonts/Helvetica-Oblique.afm +3051 -0
  16. data/data/fonts/Helvetica.afm +3051 -0
  17. data/data/fonts/MustRead.html +19 -0
  18. data/data/fonts/Symbol.afm +213 -0
  19. data/data/fonts/Times-Bold.afm +2588 -0
  20. data/data/fonts/Times-BoldItalic.afm +2384 -0
  21. data/data/fonts/Times-Italic.afm +2667 -0
  22. data/data/fonts/Times-Roman.afm +2419 -0
  23. data/data/fonts/ZapfDingbats.afm +225 -0
  24. data/data/images/16bit.alpha +0 -0
  25. data/data/images/16bit.color +0 -0
  26. data/data/images/16bit.png +0 -0
  27. data/data/images/arrow.png +0 -0
  28. data/data/images/arrow2.png +0 -0
  29. data/data/images/dice.alpha +0 -0
  30. data/data/images/dice.color +0 -0
  31. data/data/images/dice.png +0 -0
  32. data/data/images/dice_interlaced.png +0 -0
  33. data/data/images/fractal.jpg +0 -0
  34. data/data/images/indexed_color.dat +0 -0
  35. data/data/images/indexed_color.png +0 -0
  36. data/data/images/letterhead.jpg +0 -0
  37. data/data/images/license.md +8 -0
  38. data/data/images/page_white_text.alpha +0 -0
  39. data/data/images/page_white_text.color +0 -0
  40. data/data/images/page_white_text.png +0 -0
  41. data/data/images/pal_bk.png +0 -0
  42. data/data/images/pigs.jpg +0 -0
  43. data/data/images/prawn.png +0 -0
  44. data/data/images/ruport.png +0 -0
  45. data/data/images/ruport_data.dat +0 -0
  46. data/data/images/ruport_transparent.png +0 -0
  47. data/data/images/ruport_type0.png +0 -0
  48. data/data/images/stef.jpg +0 -0
  49. data/data/images/tru256.bmp +0 -0
  50. data/data/images/web-links.dat +1 -0
  51. data/data/images/web-links.png +0 -0
  52. data/data/pdfs/complex_template.pdf +0 -0
  53. data/data/pdfs/contains_ttf_font.pdf +0 -0
  54. data/data/pdfs/encrypted.pdf +0 -0
  55. data/data/pdfs/form.pdf +820 -0
  56. data/data/pdfs/hexagon.pdf +61 -0
  57. data/data/pdfs/indirect_reference.pdf +86 -0
  58. data/data/pdfs/multipage_template.pdf +127 -0
  59. data/data/pdfs/nested_pages.pdf +118 -0
  60. data/data/pdfs/page_without_mediabox.pdf +193 -0
  61. data/data/pdfs/resources_as_indirect_object.pdf +83 -0
  62. data/data/pdfs/two_hexagons.pdf +90 -0
  63. data/data/pdfs/version_1_6.pdf +61 -0
  64. data/data/shift_jis_text.txt +1 -0
  65. data/lib/prawn.rb +89 -0
  66. data/lib/prawn/document.rb +706 -0
  67. data/lib/prawn/document/bounding_box.rb +539 -0
  68. data/lib/prawn/document/column_box.rb +144 -0
  69. data/lib/prawn/document/internals.rb +58 -0
  70. data/lib/prawn/document/span.rb +57 -0
  71. data/lib/prawn/encoding.rb +87 -0
  72. data/lib/prawn/errors.rb +80 -0
  73. data/lib/prawn/font.rb +413 -0
  74. data/lib/prawn/font/afm.rb +256 -0
  75. data/lib/prawn/font/dfont.rb +43 -0
  76. data/lib/prawn/font/ttf.rb +355 -0
  77. data/lib/prawn/font_metric_cache.rb +46 -0
  78. data/lib/prawn/graphics.rb +646 -0
  79. data/lib/prawn/graphics/cap_style.rb +47 -0
  80. data/lib/prawn/graphics/color.rb +232 -0
  81. data/lib/prawn/graphics/dash.rb +109 -0
  82. data/lib/prawn/graphics/join_style.rb +49 -0
  83. data/lib/prawn/graphics/patterns.rb +126 -0
  84. data/lib/prawn/graphics/transformation.rb +157 -0
  85. data/lib/prawn/graphics/transparency.rb +101 -0
  86. data/lib/prawn/grid.rb +279 -0
  87. data/lib/prawn/image_handler.rb +44 -0
  88. data/lib/prawn/images.rb +199 -0
  89. data/lib/prawn/images/image.rb +49 -0
  90. data/lib/prawn/images/jpg.rb +91 -0
  91. data/lib/prawn/images/png.rb +290 -0
  92. data/lib/prawn/measurement_extensions.rb +50 -0
  93. data/lib/prawn/measurements.rb +77 -0
  94. data/lib/prawn/outline.rb +289 -0
  95. data/lib/prawn/repeater.rb +124 -0
  96. data/lib/prawn/security.rb +288 -0
  97. data/lib/prawn/security/arcfour.rb +54 -0
  98. data/lib/prawn/soft_mask.rb +94 -0
  99. data/lib/prawn/stamp.rb +136 -0
  100. data/lib/prawn/text.rb +437 -0
  101. data/lib/prawn/text/box.rb +141 -0
  102. data/lib/prawn/text/formatted.rb +7 -0
  103. data/lib/prawn/text/formatted/arranger.rb +290 -0
  104. data/lib/prawn/text/formatted/box.rb +614 -0
  105. data/lib/prawn/text/formatted/fragment.rb +264 -0
  106. data/lib/prawn/text/formatted/line_wrap.rb +277 -0
  107. data/lib/prawn/text/formatted/parser.rb +224 -0
  108. data/lib/prawn/text/formatted/wrap.rb +160 -0
  109. data/lib/prawn/utilities.rb +46 -0
  110. data/lib/prawn/version.rb +5 -0
  111. data/lib/prawn/view.rb +91 -0
  112. data/manual/absolute_position.pdf +0 -0
  113. data/manual/basic_concepts/adding_pages.rb +27 -0
  114. data/manual/basic_concepts/basic_concepts.rb +36 -0
  115. data/manual/basic_concepts/creation.rb +39 -0
  116. data/manual/basic_concepts/cursor.rb +33 -0
  117. data/manual/basic_concepts/measurement.rb +25 -0
  118. data/manual/basic_concepts/origin.rb +38 -0
  119. data/manual/basic_concepts/other_cursor_helpers.rb +40 -0
  120. data/manual/basic_concepts/view.rb +42 -0
  121. data/manual/bounding_box/bounding_box.rb +39 -0
  122. data/manual/bounding_box/bounds.rb +49 -0
  123. data/manual/bounding_box/canvas.rb +24 -0
  124. data/manual/bounding_box/creation.rb +23 -0
  125. data/manual/bounding_box/indentation.rb +46 -0
  126. data/manual/bounding_box/nesting.rb +45 -0
  127. data/manual/bounding_box/russian_boxes.rb +40 -0
  128. data/manual/bounding_box/stretchy.rb +31 -0
  129. data/manual/contents.rb +29 -0
  130. data/manual/cover.rb +39 -0
  131. data/manual/document_and_page_options/background.rb +27 -0
  132. data/manual/document_and_page_options/document_and_page_options.rb +32 -0
  133. data/manual/document_and_page_options/metadata.rb +23 -0
  134. data/manual/document_and_page_options/page_margins.rb +38 -0
  135. data/manual/document_and_page_options/page_size.rb +34 -0
  136. data/manual/document_and_page_options/print_scaling.rb +20 -0
  137. data/manual/example_helper.rb +7 -0
  138. data/manual/graphics/circle_and_ellipse.rb +22 -0
  139. data/manual/graphics/color.rb +24 -0
  140. data/manual/graphics/common_lines.rb +30 -0
  141. data/manual/graphics/fill_and_stroke.rb +42 -0
  142. data/manual/graphics/fill_rules.rb +37 -0
  143. data/manual/graphics/gradients.rb +37 -0
  144. data/manual/graphics/graphics.rb +58 -0
  145. data/manual/graphics/helper.rb +24 -0
  146. data/manual/graphics/line_width.rb +35 -0
  147. data/manual/graphics/lines_and_curves.rb +41 -0
  148. data/manual/graphics/polygon.rb +29 -0
  149. data/manual/graphics/rectangle.rb +21 -0
  150. data/manual/graphics/rotate.rb +28 -0
  151. data/manual/graphics/scale.rb +41 -0
  152. data/manual/graphics/soft_masks.rb +46 -0
  153. data/manual/graphics/stroke_cap.rb +31 -0
  154. data/manual/graphics/stroke_dash.rb +48 -0
  155. data/manual/graphics/stroke_join.rb +30 -0
  156. data/manual/graphics/translate.rb +29 -0
  157. data/manual/graphics/transparency.rb +35 -0
  158. data/manual/how_to_read_this_manual.rb +40 -0
  159. data/manual/images/absolute_position.rb +23 -0
  160. data/manual/images/fit.rb +21 -0
  161. data/manual/images/horizontal.rb +25 -0
  162. data/manual/images/images.rb +40 -0
  163. data/manual/images/plain_image.rb +18 -0
  164. data/manual/images/scale.rb +22 -0
  165. data/manual/images/vertical.rb +28 -0
  166. data/manual/images/width_and_height.rb +25 -0
  167. data/manual/layout/boxes.rb +27 -0
  168. data/manual/layout/content.rb +25 -0
  169. data/manual/layout/layout.rb +28 -0
  170. data/manual/layout/simple_grid.rb +23 -0
  171. data/manual/outline/add_subsection_to.rb +61 -0
  172. data/manual/outline/insert_section_after.rb +47 -0
  173. data/manual/outline/outline.rb +32 -0
  174. data/manual/outline/sections_and_pages.rb +67 -0
  175. data/manual/repeatable_content/alternate_page_numbering.rb +32 -0
  176. data/manual/repeatable_content/page_numbering.rb +54 -0
  177. data/manual/repeatable_content/repeatable_content.rb +32 -0
  178. data/manual/repeatable_content/repeater.rb +55 -0
  179. data/manual/repeatable_content/stamp.rb +41 -0
  180. data/manual/security/encryption.rb +31 -0
  181. data/manual/security/permissions.rb +38 -0
  182. data/manual/security/security.rb +28 -0
  183. data/manual/table.rb +16 -0
  184. data/manual/text/alignment.rb +44 -0
  185. data/manual/text/color.rb +24 -0
  186. data/manual/text/column_box.rb +32 -0
  187. data/manual/text/fallback_fonts.rb +37 -0
  188. data/manual/text/font.rb +41 -0
  189. data/manual/text/font_size.rb +45 -0
  190. data/manual/text/font_style.rb +23 -0
  191. data/manual/text/formatted_callbacks.rb +60 -0
  192. data/manual/text/formatted_text.rb +50 -0
  193. data/manual/text/free_flowing_text.rb +51 -0
  194. data/manual/text/inline.rb +41 -0
  195. data/manual/text/kerning_and_character_spacing.rb +39 -0
  196. data/manual/text/leading.rb +25 -0
  197. data/manual/text/line_wrapping.rb +41 -0
  198. data/manual/text/paragraph_indentation.rb +34 -0
  199. data/manual/text/positioned_text.rb +38 -0
  200. data/manual/text/registering_families.rb +48 -0
  201. data/manual/text/rendering_and_color.rb +37 -0
  202. data/manual/text/right_to_left_text.rb +47 -0
  203. data/manual/text/rotation.rb +43 -0
  204. data/manual/text/single_usage.rb +37 -0
  205. data/manual/text/text.rb +73 -0
  206. data/manual/text/text_box_excess.rb +32 -0
  207. data/manual/text/text_box_extensions.rb +45 -0
  208. data/manual/text/text_box_overflow.rb +48 -0
  209. data/manual/text/utf8.rb +28 -0
  210. data/manual/text/win_ansi_charset.rb +60 -0
  211. data/prawn.gemspec +45 -0
  212. data/spec/acceptance/png.rb +25 -0
  213. data/spec/annotations_spec.rb +74 -0
  214. data/spec/bounding_box_spec.rb +510 -0
  215. data/spec/column_box_spec.rb +65 -0
  216. data/spec/data/curves.pdf +66 -0
  217. data/spec/destinations_spec.rb +15 -0
  218. data/spec/document_spec.rb +748 -0
  219. data/spec/extensions/encoding_helpers.rb +11 -0
  220. data/spec/extensions/mocha.rb +46 -0
  221. data/spec/font_metric_cache_spec.rb +52 -0
  222. data/spec/font_spec.rb +474 -0
  223. data/spec/formatted_text_arranger_spec.rb +421 -0
  224. data/spec/formatted_text_box_spec.rb +705 -0
  225. data/spec/formatted_text_fragment_spec.rb +298 -0
  226. data/spec/graphics_spec.rb +683 -0
  227. data/spec/grid_spec.rb +96 -0
  228. data/spec/image_handler_spec.rb +54 -0
  229. data/spec/images_spec.rb +153 -0
  230. data/spec/inline_formatted_text_parser_spec.rb +564 -0
  231. data/spec/jpg_spec.rb +25 -0
  232. data/spec/line_wrap_spec.rb +367 -0
  233. data/spec/measurement_units_spec.rb +25 -0
  234. data/spec/outline_spec.rb +430 -0
  235. data/spec/png_spec.rb +245 -0
  236. data/spec/reference_spec.rb +25 -0
  237. data/spec/repeater_spec.rb +160 -0
  238. data/spec/security_spec.rb +158 -0
  239. data/spec/soft_mask_spec.rb +79 -0
  240. data/spec/span_spec.rb +44 -0
  241. data/spec/spec_helper.rb +54 -0
  242. data/spec/stamp_spec.rb +160 -0
  243. data/spec/stroke_styles_spec.rb +211 -0
  244. data/spec/text_at_spec.rb +143 -0
  245. data/spec/text_box_spec.rb +1043 -0
  246. data/spec/text_rendering_mode_spec.rb +45 -0
  247. data/spec/text_spacing_spec.rb +93 -0
  248. data/spec/text_spec.rb +557 -0
  249. data/spec/text_with_inline_formatting_spec.rb +35 -0
  250. data/spec/transparency_spec.rb +91 -0
  251. data/spec/view_spec.rb +43 -0
  252. metadata +509 -0
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The cap style defines how the edge of a line or curve will be drawn. There are
4
+ # three types: <code>:butt</code> (the default), <code>:round</code> and
5
+ # <code>:projecting_square</code>
6
+ #
7
+ # The difference is better seen with thicker lines. With <code>:butt</code>
8
+ # lines are drawn starting and ending at the exact points provided. With both
9
+ # <code>:round</code> and <code>:projecting_square</code> the line is projected
10
+ # beyond the start and end points.
11
+ #
12
+ # Just like <code>line_width=</code> the <code>cap_style=</code> method needs an
13
+ # explicit receiver to work.
14
+ #
15
+ require File.expand_path(File.join(File.dirname(__FILE__),
16
+ %w[.. example_helper]))
17
+
18
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
19
+ Prawn::ManualBuilder::Example.generate(filename) do
20
+ stroke_axis
21
+
22
+ self.line_width = 25
23
+
24
+ [:butt, :round, :projecting_square].each_with_index do |cap, i|
25
+ self.cap_style = cap
26
+
27
+ y = 250 - i*100
28
+ stroke_horizontal_line 100, 300, :at => y
29
+ stroke_circle [400, y], 15
30
+ end
31
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+ #
3
+ # This sets the dashed pattern for lines and curves. The (dash) length defines
4
+ # how long each dash will be.
5
+ #
6
+ # The <code>:space</code> option defines the length of the space between the
7
+ # dashes.
8
+ #
9
+ # The <code>:phase</code> option defines the start point of the sequence of
10
+ # dashes and spaces.
11
+ #
12
+ # Complex dash patterns can be specified by using an array with alternating
13
+ # dash/gap lengths for the first parameter (note that the <code>:space</code>
14
+ # option is ignored in this case).
15
+ #
16
+ require File.expand_path(File.join(File.dirname(__FILE__),
17
+ %w[.. example_helper]))
18
+
19
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
20
+ Prawn::ManualBuilder::Example.generate(filename) do
21
+ stroke_axis
22
+
23
+ dash([1, 2, 3, 2, 1, 5], :phase => 6)
24
+ stroke_horizontal_line 50, 500, :at => 230
25
+ dash([1, 2, 3, 4, 5, 6, 7, 8])
26
+ stroke_horizontal_line 50, 500, :at => 220
27
+
28
+ base_y = 210
29
+
30
+ 24.times do |i|
31
+ length = (i / 4) + 1
32
+ space = length # space between dashes same length as dash
33
+ phase = 0 # start with dash
34
+
35
+ case i % 4
36
+ when 0 then base_y -= 5
37
+ when 1 then phase = length # start with space between dashes
38
+ when 2 then space = length * 0.5 # space between dashes half as long as dash
39
+ when 3
40
+ space = length * 0.5 # space between dashes half as long as dash
41
+ phase = length # start with space between dashes
42
+ end
43
+ base_y -= 5
44
+
45
+ dash(length, :space => space, :phase => phase)
46
+ stroke_horizontal_line 50, 500, :at => base_y - (2 * i)
47
+ end
48
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The join style defines how the intersection between two lines is drawn. There
4
+ # are three types: <code>:miter</code> (the default), <code>:round</code> and
5
+ # <code>:bevel</code>
6
+ #
7
+ # Just like <code>cap_style</code>, the difference between styles is better
8
+ # seen with thicker lines.
9
+ #
10
+ require File.expand_path(File.join(File.dirname(__FILE__),
11
+ %w[.. example_helper]))
12
+
13
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
14
+ Prawn::ManualBuilder::Example.generate(filename) do
15
+ stroke_axis
16
+
17
+ self.line_width = 25
18
+
19
+ [:miter, :round, :bevel].each_with_index do |style, i|
20
+ self.join_style = style
21
+
22
+ y = 200 - i*100
23
+ stroke do
24
+ move_to(100, y)
25
+ line_to(200, y + 100)
26
+ line_to(300, y)
27
+ end
28
+ stroke_rectangle [400, y + 75], 50, 50
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ #
3
+ # This transformation is used to translate the user space. Just provide the
4
+ # x and y coordinates for the new origin.
5
+ #
6
+ require File.expand_path(File.join(File.dirname(__FILE__),
7
+ %w[.. example_helper]))
8
+
9
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
10
+ Prawn::ManualBuilder::Example.generate(filename) do
11
+ stroke_axis
12
+
13
+ 1.upto(3) do |i|
14
+
15
+ x = i * 50
16
+ y = i * 100
17
+ translate(x, y) do
18
+
19
+ # Draw a point on the new origin
20
+ fill_circle [0, 0], 2
21
+ draw_text "New origin after translation to [#{x}, #{y}]",
22
+ :at => [5, -2], :size => 8
23
+
24
+ stroke_rectangle [100, 75], 100, 50
25
+ text_box "Top left corner at [100,75]",
26
+ :at => [110, 65], :width => 80, :size => 8
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Although the name of the method is <code>transparency</code>, what we are
4
+ # actually setting is the opacity for fill and stroke. So <code>0</code> means
5
+ # completely transparent and <code>1.0</code> means completely opaque
6
+ #
7
+ # You may call it providing one or two values. The first value sets fill opacity
8
+ # and the second value sets stroke opacity. If the second value is omitted fill
9
+ # and stroke will have the same opacity.
10
+ #
11
+ require File.expand_path(File.join(File.dirname(__FILE__),
12
+ %w[.. example_helper]))
13
+
14
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
15
+ Prawn::ManualBuilder::Example.generate(filename) do
16
+ stroke_axis
17
+
18
+ self.line_width = 5
19
+ fill_color "ff0000"
20
+ fill_rectangle [0, 100], 500, 100
21
+
22
+ fill_color "000000"
23
+ stroke_color "ffffff"
24
+
25
+ base_x = 100
26
+ [[0.5, 1], 0.5, [1, 0.5]].each do |args|
27
+
28
+ transparent(*args) do
29
+ fill_circle [base_x, 100], 50
30
+ stroke_rectangle [base_x - 20, 100], 40, 80
31
+ end
32
+
33
+ base_x += 150
34
+ end
35
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
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
+ header("How to read this manual")
10
+
11
+ prose <<-END_TEXT
12
+ This manual is a collection of examples categorized by theme and organized from the least to the most complex. While it covers most of the common use cases it is not a comprehensive guide.
13
+
14
+ The best way to read it depends on your previous knowledge of Prawn and what you need to accomplish.
15
+
16
+ If you are beginning with Prawn the first chapter will teach you the most basic concepts and how to create pdf documents. For an overview of the other features each chapter beyond the first either has a Basics section (which offer enough insight on the feature without showing all the advanced stuff you might never use) or is simple enough with only a few examples.
17
+
18
+ Once you understand the basics you might want to come back to this manual looking for examples that accomplish tasks you need.
19
+
20
+ Advanced users are encouraged to go beyond this manual and read the source code directly if any doubt is not directly covered on this manual.
21
+ END_TEXT
22
+
23
+ move_down(Prawn::ManualBuilder::Example::BOX_MARGIN)
24
+ header("Reading the examples")
25
+
26
+ prose <<-END_TEXT
27
+ The title of each example is the relative path from the Prawn source manual/ folder.
28
+
29
+ The first body of text is the introductory text for the example. Generaly it is a short description of the features illustrated by the example.
30
+
31
+ Next comes the example source code block in fixed width font.
32
+
33
+ Most of the example snippets illustrate features that alter the page in place. The effect of these snippets is shown right below a dashed line. If it doesn't make sense to evaluate the snippet inline, a box with the link for the example file is shown instead.
34
+
35
+ Note that the <code>stroke_axis</code> method used throughout the manual is part of standard Prawn. It is defined in this file:
36
+
37
+ https://github.com/prawnpdf/prawn/blob/master/lib/prawn/graphics.rb
38
+ END_TEXT
39
+
40
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ #
3
+ # One of the options that the <code>image</code> method accepts is
4
+ # <code>:at</code>. If you've read some of the graphics examples you are
5
+ # probably already familiar with it. Just provide it the upper-left corner where
6
+ # you want the image placed.
7
+ #
8
+ # While sometimes useful this option won't be practical. Notice that the cursor
9
+ # won't be moved after the image is rendered and there is nothing forbidding the
10
+ # text to overlap with the image.
11
+ #
12
+ require File.expand_path(File.join(File.dirname(__FILE__),
13
+ %w[.. example_helper]))
14
+
15
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
+ Prawn::ManualBuilder::Example.generate(filename) do
17
+ y_position = cursor
18
+ text "The image won't go below this line of text."
19
+
20
+ image "#{Prawn::DATADIR}/images/fractal.jpg", :at => [200, y_position]
21
+
22
+ text "And this line of text will go just below the previous one."
23
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ #
3
+ # <code>:fit</code> option is useful when you want the image to have the
4
+ # maximum size within a container preserving the aspect ratio without
5
+ # overlapping.
6
+ #
7
+ # Just provide the container width and height pair.
8
+ #
9
+ require File.expand_path(File.join(File.dirname(__FILE__),
10
+ %w[.. example_helper]))
11
+
12
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
13
+ Prawn::ManualBuilder::Example.generate(filename) do
14
+ size = 300
15
+
16
+ text "Using the fit option"
17
+ bounding_box([0, cursor], :width => size, :height => size) do
18
+ image "#{Prawn::DATADIR}/images/pigs.jpg", :fit => [size, size]
19
+ stroke_bounds
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The image may be positioned relatively to the current bounding box. The
4
+ # horizontal position may be set with the <code>:position</code> option.
5
+ #
6
+ # It may be <code>:left</code>, <code>:center</code>, <code>:right</code> or a
7
+ # number representing an x-offset from the left boundary.
8
+ #
9
+ require File.expand_path(File.join(File.dirname(__FILE__),
10
+ %w[.. example_helper]))
11
+
12
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
13
+ Prawn::ManualBuilder::Example.generate(filename) do
14
+ bounding_box([50, cursor], :width => 400, :height => 450) do
15
+ stroke_bounds
16
+
17
+ [:left, :center, :right].each do |position|
18
+ text "Image aligned to the #{position}."
19
+ image "#{Prawn::DATADIR}/images/stef.jpg", :position => position
20
+ end
21
+
22
+ text "The next image has a 50 point offset from the left boundary"
23
+ image "#{Prawn::DATADIR}/images/stef.jpg", :position => 50
24
+ end
25
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Examples for embedding images.
4
+ #
5
+ require File.expand_path(File.join(File.dirname(__FILE__),
6
+ %w[.. example_helper]))
7
+
8
+ Prawn::ManualBuilder::Example.generate("images.pdf", :page_size => "FOLIO") do
9
+
10
+ package "images" do |p|
11
+
12
+ p.section "Basics" do |s|
13
+ s.example "plain_image"
14
+ s.example "absolute_position"
15
+ end
16
+
17
+ p.section "Relative Positioning" do |s|
18
+ s.example "horizontal"
19
+ s.example "vertical"
20
+ end
21
+
22
+ p.section "Size" do |s|
23
+ s.example "width_and_height"
24
+ s.example "scale"
25
+ s.example "fit"
26
+ end
27
+
28
+ p.intro do
29
+ prose("Embedding images on PDF documents is fairly easy. Prawn supports both JPG and PNG images.
30
+
31
+ The examples show:")
32
+
33
+ list( "How to add an image to a page",
34
+ "How place the image on a specific position",
35
+ "How to configure the image dimensions by setting the width and height or by scaling it"
36
+ )
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ #
3
+ # To embed images onto your PDF file use the <code>image</code> method.
4
+ # It accepts the file path of the image to be loaded and some optional
5
+ # arguments.
6
+ #
7
+ # If only the image path is provided the image will be rendered starting on
8
+ # the cursor position. No manipulation is done with the image even if it doesn't
9
+ # fit entirely on the page like the following snippet.
10
+ #
11
+ require File.expand_path(File.join(File.dirname(__FILE__),
12
+ %w[.. example_helper]))
13
+
14
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
15
+ Prawn::ManualBuilder::Example.generate(filename) do
16
+ text "The image will go right below this line of text."
17
+ image "#{Prawn::DATADIR}/images/pigs.jpg"
18
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ #
3
+ # To scale an image use the <code>:scale</code> option.
4
+ #
5
+ # It scales the image proportionally given the provided value.
6
+ #
7
+ require File.expand_path(File.join(File.dirname(__FILE__),
8
+ %w[.. example_helper]))
9
+
10
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
11
+ Prawn::ManualBuilder::Example.generate(filename) do
12
+ text "Normal size"
13
+ image "#{Prawn::DATADIR}/images/stef.jpg"
14
+ move_down 20
15
+
16
+ text "Scaled to 50%"
17
+ image "#{Prawn::DATADIR}/images/stef.jpg", :scale => 0.5
18
+ move_down 20
19
+
20
+ text "Scaled to 200%"
21
+ image "#{Prawn::DATADIR}/images/stef.jpg", :scale => 2
22
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ #
3
+ # To set the vertical position of an image use the <code>:vposition</code>
4
+ # option.
5
+ #
6
+ # It may be <code>:top</code>, <code>:center</code>, <code>:bottom</code> or a
7
+ # number representing the y-offset from the top boundary.
8
+ #
9
+ require File.expand_path(File.join(File.dirname(__FILE__),
10
+ %w[.. example_helper]))
11
+
12
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
13
+ Prawn::ManualBuilder::Example.generate(filename) do
14
+ bounding_box([0, cursor], :width => 500, :height => 450) do
15
+ stroke_bounds
16
+
17
+ [:top, :center, :bottom].each do |vposition|
18
+ text "Image vertically aligned to the #{vposition}.", :valign => vposition
19
+ image "#{Prawn::DATADIR}/images/stef.jpg", :position => 250,
20
+ :vposition => vposition
21
+ end
22
+
23
+ text_box "The next image has a 100 point offset from the top boundary",
24
+ :at => [bounds.width - 110, bounds.top - 10], :width => 100
25
+ image "#{Prawn::DATADIR}/images/stef.jpg", :position => :right,
26
+ :vposition => 100
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The image size can be set with the <code>:width</code> and
4
+ # <code>:height</code> options.
5
+ #
6
+ # If only one of those is provided, the image will be scaled proportionally.
7
+ # When both are provided, the image will be stretched to fit the dimensions
8
+ # without maintaining the aspect ratio.
9
+ #
10
+ require File.expand_path(File.join(File.dirname(__FILE__),
11
+ %w[.. example_helper]))
12
+
13
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
14
+ Prawn::ManualBuilder::Example.generate(filename) do
15
+ text "Scale by setting only the width"
16
+ image "#{Prawn::DATADIR}/images/pigs.jpg", :width => 150
17
+ move_down 20
18
+
19
+ text "Scale by setting only the height"
20
+ image "#{Prawn::DATADIR}/images/pigs.jpg", :height => 100
21
+ move_down 20
22
+
23
+ text "Stretch to fit the width and height provided"
24
+ image "#{Prawn::DATADIR}/images/pigs.jpg", :width => 500, :height => 100
25
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ #
3
+ # After defined the grid is there but nothing happens. To start taking effect
4
+ # we need to use the grid boxes.
5
+ #
6
+ # <code>grid</code> has three different return values based on the arguments
7
+ # received. With no arguments it will return the grid itself. With integers it
8
+ # will return the grid box at those indices. With two arrays it will return a
9
+ # multi-box spanning the region of the two grid boxes at the arrays indices.
10
+ #
11
+ require File.expand_path(File.join(File.dirname(__FILE__),
12
+ %w[.. example_helper]))
13
+
14
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
15
+ Prawn::ManualBuilder::Example.generate(filename) do
16
+ # The grid only need to be defined once, but since all the examples should be
17
+ # able to run alone we are repeating it on every example
18
+ define_grid(:columns => 5, :rows => 8, :gutter => 10)
19
+
20
+ grid(4,0).show
21
+ grid(5,1).show
22
+
23
+ grid([6,2], [7,3]).show
24
+
25
+ grid([4,4], [7,4]).show
26
+ grid([7,0], [7,1]).show
27
+ end