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,45 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Normally when we provide the top left corner of a bounding box we
4
+ # express the coordinates relative to the margin box. This is not the
5
+ # case when we have nested bounding boxes. Once nested the inner bounding box
6
+ # coordinates are relative to the outter bounding box.
7
+ #
8
+ # This example shows some nested bounding boxes with fixed and stretchy heights.
9
+ # Note how the <code>cursor</code> method returns coordinates relative to
10
+ # the current bounding box.
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
+ def box_content(string)
18
+ text string
19
+ transparent(0.5) { stroke_bounds }
20
+ end
21
+
22
+ 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 }
32
+ end
33
+
34
+ bounding_box([gap * 7, bounds.top - gap], :width => 100, :height => 50) do
35
+ box_content("Fixed height")
36
+ end
37
+
38
+ transparent(0.5) { dash(1); stroke_bounds; undash }
39
+ end
40
+
41
+ bounding_box([gap, cursor - gap], :width => 300, :height => 50) do
42
+ box_content("Fixed height")
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+ #
3
+ # This example is mostly just for fun, and shows how nested bounding boxes
4
+ # can simplify calculations. See the "Bounding Box" section of the manual
5
+ # for more basic uses.
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
+ def combine(a1, a2)
13
+ output = []
14
+ a1.each do |i1|
15
+ a2.each do |i2|
16
+ output += [[i1,i2]]
17
+ end
18
+ end
19
+ output
20
+ end
21
+
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])
27
+ left_top_corners.each do |lt|
28
+ bounding_box(lt, :width => width, :height => height) do
29
+ stroke_bounds
30
+ recurse_bounding_box(max_depth, depth+1) if depth < max_depth
31
+ end
32
+ end
33
+ end
34
+
35
+ # 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
+ recurse_bounding_box
38
+ end
39
+ end
40
+
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Bounding Boxes accept an optional <code>:height</code> parameter. Unless it
4
+ # is provided the bounding box will be stretchy. It will expand the height to
5
+ # fit all content generated inside it.
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
+ 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
+
17
+ transparent(0.5) { stroke_bounds }
18
+ 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
+
28
+ transparent(0.5) { stroke_bounds }
29
+ end
30
+
31
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Generates the Prawn by example manual.
4
+
5
+ require_relative "example_helper"
6
+
7
+ Encoding.default_external = Encoding::UTF_8
8
+
9
+ Prawn::ManualBuilder::Example.generate("manual.pdf",
10
+ :skip_page_creation => true, :page_size => "FOLIO") do
11
+
12
+ load_page "", "cover"
13
+ load_page "", "how_to_read_this_manual"
14
+
15
+ # Core chapters
16
+ load_package "basic_concepts"
17
+ load_package "graphics"
18
+ load_package "text"
19
+ load_package "bounding_box"
20
+
21
+ # Remaining chapters
22
+ load_package "layout"
23
+ load_page "", "table"
24
+ load_package "images"
25
+ load_package "document_and_page_options"
26
+ load_package "outline"
27
+ load_package "repeatable_content"
28
+ load_package "security"
29
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Prawn manual how to read this manual page.
4
+ #
5
+
6
+ require_relative "example_helper"
7
+
8
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
9
+ Prawn::ManualBuilder::Example.generate(filename) do
10
+ move_down 200
11
+
12
+ image "#{Prawn::DATADIR}/images/prawn.png",
13
+ :scale => 0.9,
14
+ :at => [10, cursor]
15
+
16
+ formatted_text_box([ {:text => "Prawn\n",
17
+ :styles => [:bold],
18
+ :size => 100}
19
+ ], :at => [170, cursor - 50])
20
+
21
+ formatted_text_box([ {:text => "by example",
22
+ :font => 'Courier',
23
+ :size => 60}
24
+ ], :at => [170, cursor - 160])
25
+
26
+ if Dir.exist?("#{Prawn::BASEDIR}/.git")
27
+ commit = `git show --pretty=%h`
28
+ git_commit = "git commit: #{commit.lines.first}"
29
+ else
30
+ git_commit = ""
31
+ end
32
+
33
+ formatted_text_box([ {:text => "Last Update: #{Time.now.strftime("%Y-%m-%d")}\n"+
34
+ "Prawn Version: #{Prawn::VERSION}\n"+
35
+ git_commit,
36
+ :size => 12}
37
+ ], :at => [390, cursor - 620])
38
+
39
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Pass an image path to the <code>:background</code> option and it will be used
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]))
9
+
10
+ img = "#{Prawn::DATADIR}/images/letterhead.jpg"
11
+
12
+ Prawn::Document.generate("background.pdf",
13
+ :background => img,
14
+ :margin => 100
15
+ ) do
16
+ text "My report caption", :size => 18, :align => :right
17
+
18
+ move_down font.height * 2
19
+
20
+ text "Here is my text explaning this report. " * 20,
21
+ :size => 12, :align => :left, :leading => 2
22
+
23
+ move_down font.height
24
+
25
+ text "I'm using a soft background. " * 40,
26
+ :size => 12, :align => :left, :leading => 2
27
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Examples for stamps and repeaters.
4
+ #
5
+ require File.expand_path(File.join(File.dirname(__FILE__),
6
+ %w[.. example_helper]))
7
+
8
+ Prawn::ManualBuilder::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
+ p.example "print_scaling",:eval_source => false, :full_source => true
18
+
19
+ p.intro do
20
+ prose("So far we've already seen how to create new documents and start new pages. This chapter expands on the previous examples by showing other options avialable. Some of the options are only available when creating new documents.
21
+
22
+ The examples show:")
23
+
24
+ list( "How to configure page size",
25
+ "How to configure page margins",
26
+ "How to use a background image",
27
+ "How to add metadata to the generated PDF"
28
+ )
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ #
3
+ # To set the document metadata just pass a hash to the <code>:info</code>
4
+ # option when creating new documents.
5
+ # The keys in the example below are arbitrary, so you may add whatever keys you want
6
+ #
7
+ require File.expand_path(File.join(File.dirname(__FILE__),
8
+ %w[.. example_helper]))
9
+
10
+ Prawn::Document.generate("metadata.pdf",
11
+ :info => {
12
+ :Title => "My title",
13
+ :Author => "John Doe",
14
+ :Subject => "My Subject",
15
+ :Keywords => "test metadata ruby pdf dry",
16
+ :Creator => "ACME Soft App",
17
+ :Producer => "Prawn",
18
+ :CreationDate => Time.now
19
+ }) do
20
+
21
+ text "This is a test of setting metadata properties via the info option."
22
+ text "While the keys are arbitrary, the above example sets common attributes."
23
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The default margin for pages is 0.5 inch but you can change that with the
4
+ # <code>:margin</code> option or if you'd like to have different margins you
5
+ # can use the <code>:left_margin</code>, <code>:right_margin</code>,
6
+ # <code>:top_margin</code>, <code>:bottom_margin</code> options.
7
+ #
8
+ # These options are available both for starting new pages and creating new
9
+ # documents.
10
+ #
11
+ require File.expand_path(File.join(File.dirname(__FILE__),
12
+ %w[.. example_helper]))
13
+
14
+ Prawn::Document.generate("page_margins.pdf",
15
+ :margin => 100
16
+ ) do
17
+ text "100 pts margins."
18
+ stroke_bounds
19
+
20
+ start_new_page(:left_margin => 300)
21
+ text "300 pts margin on the left."
22
+ 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."
28
+ stroke_bounds
29
+
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."
33
+ stroke_bounds
34
+
35
+ start_new_page(:margin => [50, 100, 150, 200])
36
+ text "There is also the shorthand CSS like syntax used here."
37
+ stroke_bounds
38
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Prawn comes with support for most of the common page sizes so you'll only need
4
+ # to provide specific values if your intended format is not supported. To see a
5
+ # list with all supported sizes take a look at PDF::Core::PageGeometry
6
+ #
7
+ # # To define the size use <code>:page_size</code> when creating new documents
8
+ # and <code>:size</code> when starting new pages. The default page size for new
9
+ # documents is LETTER (612.00 x 792.00).
10
+ #
11
+ # You may also define the orientation of the page to be either portrait
12
+ # (default) or landscape. Use <code>:page_layout</code> when creating new
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
+
18
+ Prawn::Document.generate("page_size.pdf",
19
+ :page_size => "EXECUTIVE",
20
+ :page_layout => :landscape
21
+ ) do
22
+ text "EXECUTIVE landscape page."
23
+
24
+ custom_size = [275, 326]
25
+
26
+ ["A4", "TABLOID", "B7", custom_size ].each do |size|
27
+
28
+ start_new_page(:size => size, :layout => :portrait)
29
+ text "#{size} portrait page."
30
+
31
+ start_new_page(:size => size, :layout => :landscape)
32
+ text "#{size} landscape page."
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+ #
3
+ # (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document.
4
+ # Valid values are <code>None</code>, which indicates that the print dialog should reflect no page scaling,
5
+ # and <code>AppDefault</code>, which indicates that applications should use the current print scaling.
6
+ # If this entry has an unrecognized value, applications should use the current print scaling.
7
+ # Default value: <code>AppDefault</code>.
8
+ #
9
+ # Note: If the print dialog is suppressed and its parameters are provided directly by the application, the value of this entry should still be used.
10
+ #
11
+
12
+ require File.expand_path(File.join(File.dirname(__FILE__),
13
+ %w[.. example_helper]))
14
+
15
+ Prawn::Document.generate("print_scaling.pdf",
16
+ :page_layout => :landscape,
17
+ :print_scaling => :none
18
+ ) do
19
+ text "When you print this document, the scale to fit in print preview should be disabled by default."
20
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative "../lib/prawn"
4
+ require "prawn/manual_builder"
5
+
6
+ Prawn::ManualBuilder.manual_dir = File.dirname(__FILE__)
7
+ Prawn::Font::AFM.hide_m17n_warning = true
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ #
3
+ # To define a <code>circle</code> all you need is the center point and the
4
+ # radius.
5
+ #
6
+ # To define an <code>ellipse</code> you provide the center point and two radii
7
+ # (or axes) values. If the second radius value is ommitted, both radii will be
8
+ # equal and you will end up drawing a circle.
9
+ #
10
+ require File.expand_path(File.join(File.dirname(__FILE__),
11
+ %w[.. example_helper]))
12
+
13
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
14
+ Prawn::ManualBuilder::Example.generate(filename) do
15
+ stroke_axis
16
+
17
+ stroke_circle [100, 300], 100
18
+
19
+ fill_ellipse [200, 100], 100, 50
20
+
21
+ fill_ellipse [400, 100], 50
22
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ #
3
+ # We can change the stroke and fill colors providing an HTML rgb 6 digit color
4
+ # code string ("AB1234") or 4 values for CMYK.
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
+ # Fill with Yellow using RGB
14
+ fill_color "FFFFCC"
15
+ fill_polygon [50, 150], [150, 200], [250, 150],
16
+ [250, 50], [150, 0], [50, 50]
17
+
18
+ # Stroke with Purple using CMYK
19
+ stroke_color 50, 100, 0, 0
20
+ stroke_rectangle [300, 300], 200, 100
21
+
22
+ # Both together
23
+ fill_and_stroke_circle [400, 100], 50
24
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Prawn provides helpers for drawing some commonly used lines:
4
+ #
5
+ # <code>vertical_line</code> and <code>horizontal_line</code> do just what their
6
+ # names imply. Specify the start and end point at a fixed coordinate to define
7
+ # the line.
8
+ #
9
+ # <code>horizontal_rule</code> draws a horizontal line on the current bounding
10
+ # box from border to border, using the current y position.
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
+ stroke_axis
18
+
19
+ stroke_color "ff0000"
20
+
21
+ stroke do
22
+ # just lower the current y position
23
+ move_down 50
24
+ horizontal_rule
25
+
26
+ vertical_line 100, 300, :at => 50
27
+
28
+ horizontal_line 200, 500, :at => 150
29
+ end
30
+ end