prawn 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +2 -2
  3. data/Gemfile +18 -0
  4. data/LICENSE +1 -1
  5. data/README.md +17 -4
  6. data/Rakefile +18 -22
  7. data/data/images/indexed_color.dat +0 -0
  8. data/data/images/indexed_color.png +0 -0
  9. data/data/pdfs/nested_pages.pdf +13 -13
  10. data/lib/pdf/core.rb +35 -0
  11. data/lib/{prawn → pdf}/core/annotations.rb +6 -7
  12. data/lib/{prawn → pdf}/core/byte_string.rb +1 -1
  13. data/lib/{prawn → pdf}/core/destinations.rb +23 -23
  14. data/lib/{prawn → pdf}/core/document_state.rb +8 -8
  15. data/lib/pdf/core/filter_list.rb +51 -0
  16. data/lib/pdf/core/filters.rb +36 -0
  17. data/lib/pdf/core/graphics_state.rb +68 -0
  18. data/lib/{prawn → pdf}/core/literal_string.rb +1 -1
  19. data/lib/{prawn → pdf}/core/name_tree.rb +14 -2
  20. data/lib/{prawn → pdf}/core/object_store.rb +80 -24
  21. data/lib/pdf/core/outline.rb +315 -0
  22. data/lib/{prawn → pdf}/core/page.rb +23 -26
  23. data/lib/{prawn/document → pdf/core}/page_geometry.rb +11 -21
  24. data/lib/{prawn → pdf}/core/pdf_object.rb +48 -32
  25. data/lib/{prawn → pdf}/core/reference.rb +35 -44
  26. data/lib/pdf/core/stream.rb +98 -0
  27. data/lib/{prawn → pdf}/core/text.rb +24 -17
  28. data/lib/prawn.rb +95 -17
  29. data/lib/prawn/compatibility.rb +66 -26
  30. data/lib/prawn/document.rb +48 -30
  31. data/lib/prawn/document/bounding_box.rb +3 -3
  32. data/lib/prawn/document/column_box.rb +46 -8
  33. data/lib/prawn/document/graphics_state.rb +10 -73
  34. data/lib/prawn/document/internals.rb +24 -23
  35. data/lib/prawn/document/snapshot.rb +6 -7
  36. data/lib/prawn/document/span.rb +10 -10
  37. data/lib/prawn/encoding.rb +7 -7
  38. data/lib/prawn/errors.rb +18 -29
  39. data/lib/prawn/font.rb +64 -28
  40. data/lib/prawn/font/afm.rb +32 -74
  41. data/lib/prawn/font/dfont.rb +2 -2
  42. data/lib/prawn/font/ttf.rb +28 -57
  43. data/lib/prawn/font_metric_cache.rb +45 -0
  44. data/lib/prawn/graphics.rb +307 -41
  45. data/lib/prawn/graphics/cap_style.rb +3 -3
  46. data/lib/prawn/graphics/color.rb +12 -5
  47. data/lib/prawn/graphics/dash.rb +52 -31
  48. data/lib/prawn/graphics/join_style.rb +7 -7
  49. data/lib/prawn/graphics/patterns.rb +137 -0
  50. data/lib/prawn/graphics/transformation.rb +9 -9
  51. data/lib/prawn/graphics/transparency.rb +1 -1
  52. data/lib/prawn/image_handler.rb +30 -0
  53. data/lib/prawn/images.rb +86 -105
  54. data/lib/prawn/images/image.rb +48 -0
  55. data/lib/prawn/images/jpg.rb +14 -10
  56. data/lib/prawn/images/png.rb +50 -37
  57. data/lib/prawn/layout.rb +2 -2
  58. data/lib/prawn/layout/grid.rb +51 -51
  59. data/lib/prawn/measurement_extensions.rb +5 -5
  60. data/lib/prawn/measurements.rb +25 -21
  61. data/lib/prawn/outline.rb +4 -308
  62. data/lib/prawn/repeater.rb +8 -8
  63. data/lib/prawn/security.rb +50 -36
  64. data/lib/prawn/soft_mask.rb +94 -0
  65. data/lib/prawn/stamp.rb +3 -3
  66. data/lib/prawn/table.rb +292 -118
  67. data/lib/prawn/table/cell.rb +272 -45
  68. data/lib/prawn/table/cell/image.rb +70 -0
  69. data/lib/prawn/table/cell/in_table.rb +2 -2
  70. data/lib/prawn/table/cell/span_dummy.rb +92 -0
  71. data/lib/prawn/table/cell/subtable.rb +2 -2
  72. data/lib/prawn/table/cell/text.rb +42 -24
  73. data/lib/prawn/table/cells.rb +137 -48
  74. data/lib/prawn/text.rb +35 -23
  75. data/lib/prawn/text/box.rb +18 -5
  76. data/lib/prawn/text/formatted.rb +5 -4
  77. data/lib/prawn/text/formatted/arranger.rb +292 -0
  78. data/lib/prawn/text/formatted/box.rb +52 -13
  79. data/lib/prawn/text/formatted/fragment.rb +37 -22
  80. data/lib/prawn/text/formatted/line_wrap.rb +286 -0
  81. data/lib/prawn/text/formatted/parser.rb +14 -6
  82. data/lib/prawn/text/formatted/wrap.rb +151 -0
  83. data/lib/prawn/utilities.rb +44 -0
  84. data/manual/basic_concepts/adding_pages.rb +27 -0
  85. data/manual/basic_concepts/basic_concepts.rb +34 -0
  86. data/manual/basic_concepts/creation.rb +39 -0
  87. data/manual/basic_concepts/cursor.rb +33 -0
  88. data/manual/basic_concepts/measurement.rb +25 -0
  89. data/manual/basic_concepts/origin.rb +38 -0
  90. data/manual/basic_concepts/other_cursor_helpers.rb +40 -0
  91. data/manual/bounding_box/bounding_box.rb +39 -0
  92. data/manual/bounding_box/bounds.rb +49 -0
  93. data/manual/bounding_box/canvas.rb +24 -0
  94. data/manual/bounding_box/creation.rb +23 -0
  95. data/manual/bounding_box/indentation.rb +46 -0
  96. data/manual/bounding_box/nesting.rb +45 -0
  97. data/manual/bounding_box/russian_boxes.rb +40 -0
  98. data/manual/bounding_box/stretchy.rb +31 -0
  99. data/manual/document_and_page_options/background.rb +27 -0
  100. data/manual/document_and_page_options/document_and_page_options.rb +31 -0
  101. data/manual/document_and_page_options/metadata.rb +23 -0
  102. data/manual/document_and_page_options/page_margins.rb +38 -0
  103. data/manual/document_and_page_options/page_size.rb +34 -0
  104. data/manual/example_file.rb +116 -0
  105. data/manual/example_helper.rb +411 -0
  106. data/manual/example_package.rb +53 -0
  107. data/manual/example_section.rb +46 -0
  108. data/manual/graphics/circle_and_ellipse.rb +22 -0
  109. data/manual/graphics/color.rb +24 -0
  110. data/manual/graphics/common_lines.rb +28 -0
  111. data/manual/graphics/fill_and_stroke.rb +42 -0
  112. data/manual/graphics/fill_rules.rb +37 -0
  113. data/manual/graphics/gradients.rb +37 -0
  114. data/manual/graphics/graphics.rb +58 -0
  115. data/manual/graphics/helper.rb +24 -0
  116. data/manual/graphics/line_width.rb +35 -0
  117. data/manual/graphics/lines_and_curves.rb +41 -0
  118. data/manual/graphics/polygon.rb +29 -0
  119. data/manual/graphics/rectangle.rb +21 -0
  120. data/manual/graphics/rotate.rb +28 -0
  121. data/manual/graphics/scale.rb +41 -0
  122. data/manual/graphics/soft_masks.rb +46 -0
  123. data/manual/graphics/stroke_cap.rb +31 -0
  124. data/manual/graphics/stroke_dash.rb +48 -0
  125. data/manual/graphics/stroke_join.rb +30 -0
  126. data/manual/graphics/translate.rb +29 -0
  127. data/manual/graphics/transparency.rb +35 -0
  128. data/manual/images/absolute_position.rb +23 -0
  129. data/manual/images/fit.rb +21 -0
  130. data/manual/images/horizontal.rb +25 -0
  131. data/manual/images/images.rb +40 -0
  132. data/manual/images/plain_image.rb +18 -0
  133. data/manual/images/scale.rb +22 -0
  134. data/manual/images/vertical.rb +28 -0
  135. data/manual/images/width_and_height.rb +25 -0
  136. data/manual/layout/boxes.rb +27 -0
  137. data/manual/layout/content.rb +25 -0
  138. data/manual/layout/layout.rb +28 -0
  139. data/manual/layout/simple_grid.rb +23 -0
  140. data/manual/manual/cover.rb +35 -0
  141. data/manual/manual/foreword.rb +85 -0
  142. data/manual/manual/how_to_read_this_manual.rb +41 -0
  143. data/manual/manual/manual.rb +35 -0
  144. data/manual/outline/add_subsection_to.rb +61 -0
  145. data/manual/outline/insert_section_after.rb +47 -0
  146. data/manual/outline/outline.rb +32 -0
  147. data/manual/outline/sections_and_pages.rb +67 -0
  148. data/manual/repeatable_content/page_numbering.rb +54 -0
  149. data/manual/repeatable_content/repeatable_content.rb +31 -0
  150. data/manual/repeatable_content/repeater.rb +55 -0
  151. data/manual/repeatable_content/stamp.rb +41 -0
  152. data/manual/security/encryption.rb +31 -0
  153. data/manual/security/permissions.rb +38 -0
  154. data/manual/security/security.rb +28 -0
  155. data/manual/syntax_highlight.rb +52 -0
  156. data/manual/table/basic_block.rb +53 -0
  157. data/manual/table/before_rendering_page.rb +26 -0
  158. data/manual/table/cell_border_lines.rb +24 -0
  159. data/manual/table/cell_borders_and_bg.rb +31 -0
  160. data/manual/table/cell_dimensions.rb +30 -0
  161. data/manual/table/cell_text.rb +38 -0
  162. data/manual/table/column_widths.rb +30 -0
  163. data/manual/table/content_and_subtables.rb +39 -0
  164. data/manual/table/creation.rb +27 -0
  165. data/manual/table/filtering.rb +36 -0
  166. data/manual/table/flow_and_header.rb +17 -0
  167. data/manual/table/image_cells.rb +33 -0
  168. data/manual/table/position.rb +29 -0
  169. data/manual/table/row_colors.rb +20 -0
  170. data/manual/table/span.rb +30 -0
  171. data/manual/table/style.rb +22 -0
  172. data/manual/table/table.rb +52 -0
  173. data/manual/table/width.rb +27 -0
  174. data/manual/templates/full_template.rb +25 -0
  175. data/manual/templates/page_template.rb +48 -0
  176. data/manual/templates/templates.rb +27 -0
  177. data/manual/text/alignment.rb +44 -0
  178. data/manual/text/color.rb +24 -0
  179. data/manual/text/column_box.rb +32 -0
  180. data/manual/text/fallback_fonts.rb +37 -0
  181. data/manual/text/font.rb +41 -0
  182. data/manual/text/font_size.rb +45 -0
  183. data/manual/text/font_style.rb +23 -0
  184. data/manual/text/formatted_callbacks.rb +60 -0
  185. data/manual/text/formatted_text.rb +54 -0
  186. data/manual/text/free_flowing_text.rb +51 -0
  187. data/manual/text/group.rb +29 -0
  188. data/manual/text/inline.rb +43 -0
  189. data/manual/text/kerning_and_character_spacing.rb +39 -0
  190. data/manual/text/leading.rb +25 -0
  191. data/manual/text/line_wrapping.rb +41 -0
  192. data/manual/text/paragraph_indentation.rb +26 -0
  193. data/manual/text/positioned_text.rb +38 -0
  194. data/manual/text/registering_families.rb +48 -0
  195. data/manual/text/rendering_and_color.rb +37 -0
  196. data/manual/text/right_to_left_text.rb +43 -0
  197. data/manual/text/rotation.rb +43 -0
  198. data/manual/text/single_usage.rb +37 -0
  199. data/manual/text/text.rb +75 -0
  200. data/manual/text/text_box_excess.rb +32 -0
  201. data/manual/text/text_box_extensions.rb +45 -0
  202. data/manual/text/text_box_overflow.rb +44 -0
  203. data/manual/text/utf8.rb +28 -0
  204. data/{examples/m17n → manual/text}/win_ansi_charset.rb +14 -10
  205. data/prawn.gemspec +18 -12
  206. data/spec/acceptance/png.rb +23 -0
  207. data/spec/annotations_spec.rb +16 -32
  208. data/spec/bounding_box_spec.rb +128 -15
  209. data/spec/cell_spec.rb +169 -38
  210. data/spec/column_box_spec.rb +33 -0
  211. data/spec/destinations_spec.rb +5 -5
  212. data/spec/document_spec.rb +150 -104
  213. data/spec/extensions/encoding_helpers.rb +10 -0
  214. data/spec/extensions/mocha.rb +1 -0
  215. data/spec/filters_spec.rb +34 -0
  216. data/spec/font_metric_cache_spec.rb +52 -0
  217. data/spec/font_spec.rb +183 -97
  218. data/spec/formatted_text_arranger_spec.rb +43 -43
  219. data/spec/formatted_text_box_spec.rb +30 -20
  220. data/spec/formatted_text_fragment_spec.rb +8 -8
  221. data/spec/graphics_spec.rb +158 -69
  222. data/spec/grid_spec.rb +15 -15
  223. data/spec/image_handler_spec.rb +42 -0
  224. data/spec/images_spec.rb +49 -24
  225. data/spec/inline_formatted_text_parser_spec.rb +73 -19
  226. data/spec/jpg_spec.rb +4 -4
  227. data/spec/line_wrap_spec.rb +26 -26
  228. data/spec/measurement_units_spec.rb +6 -6
  229. data/spec/name_tree_spec.rb +21 -21
  230. data/spec/object_store_spec.rb +39 -39
  231. data/spec/outline_spec.rb +93 -53
  232. data/spec/pdf_object_spec.rb +88 -86
  233. data/spec/png_spec.rb +31 -28
  234. data/spec/reference_spec.rb +32 -32
  235. data/spec/repeater_spec.rb +25 -11
  236. data/spec/security_spec.rb +44 -12
  237. data/spec/snapshot_spec.rb +8 -9
  238. data/spec/soft_mask_spec.rb +117 -0
  239. data/spec/span_spec.rb +10 -15
  240. data/spec/spec_helper.rb +25 -8
  241. data/spec/stamp_spec.rb +29 -30
  242. data/spec/stream_spec.rb +58 -0
  243. data/spec/stroke_styles_spec.rb +36 -18
  244. data/spec/table/span_dummy_spec.rb +17 -0
  245. data/spec/table_spec.rb +697 -105
  246. data/spec/template_spec.rb +108 -54
  247. data/spec/text_at_spec.rb +18 -17
  248. data/spec/text_box_spec.rb +111 -62
  249. data/spec/text_rendering_mode_spec.rb +5 -5
  250. data/spec/text_spacing_spec.rb +4 -4
  251. data/spec/text_spec.rb +57 -49
  252. data/spec/transparency_spec.rb +5 -5
  253. metadata +421 -213
  254. data/data/fonts/Action Man.dfont +0 -0
  255. data/data/fonts/Activa.ttf +0 -0
  256. data/data/fonts/Chalkboard.ttf +0 -0
  257. data/data/fonts/DejaVuSans.ttf +0 -0
  258. data/data/fonts/Dustismo_Roman.ttf +0 -0
  259. data/data/fonts/comicsans.ttf +0 -0
  260. data/data/fonts/gkai00mp.ttf +0 -0
  261. data/data/images/rails.dat +0 -0
  262. data/data/images/rails.png +0 -0
  263. data/examples/bounding_box/russian_boxes.rb +0 -37
  264. data/examples/example_helper.rb +0 -11
  265. data/examples/general/context_sensitive_headers.rb +0 -38
  266. data/examples/graphics/cmyk.rb +0 -13
  267. data/examples/graphics/gradient.rb +0 -23
  268. data/examples/graphics/png_types.rb +0 -23
  269. data/examples/graphics/remote_images.rb +0 -13
  270. data/examples/m17n/full_win_ansi_character_list.rb +0 -20
  271. data/examples/m17n/sjis.rb +0 -29
  272. data/examples/table/bill.rb +0 -54
  273. data/examples/table/header.rb +0 -15
  274. data/examples/text/font_calculations.rb +0 -92
  275. data/examples/text/hyphenation.rb +0 -45
  276. data/examples/text/indent_paragraphs.rb +0 -24
  277. data/lib/prawn/core.rb +0 -85
  278. data/lib/prawn/core/text/formatted/arranger.rb +0 -294
  279. data/lib/prawn/core/text/formatted/line_wrap.rb +0 -273
  280. data/lib/prawn/core/text/formatted/wrap.rb +0 -153
  281. data/lib/prawn/graphics/gradient.rb +0 -84
  282. data/lib/prawn/security/arcfour.rb +0 -51
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Table cells can span multiple columns, rows, or both. When building a cell,
4
+ # use the hash argument constructor with a <code>:colspan</code> and/or
5
+ # <code>:rowspan</code> argument. Row or column spanning must be specified when
6
+ # building the data array; you can't set the span in the table's initialization
7
+ # block. This is because cells are laid out in the grid before that block is
8
+ # called, so that references to row and column numbers make sense.
9
+ #
10
+ # Cells are laid out in the order given, skipping any positions spanned by
11
+ # previously instantiated cells. Therefore, a cell with <code>rowspan: 2</code>
12
+ # will be missing at least one cell in the row below it. See the code and table
13
+ # below for an example.
14
+ #
15
+ # It is illegal to overlap cells via spanning. A
16
+ # <code>Prawn::Errors::InvalidTableSpan</code> error will be raised if spans
17
+ # would cause cells to overlap.
18
+ #
19
+ require File.expand_path(File.join(File.dirname(__FILE__),
20
+ %w[.. example_helper]))
21
+
22
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
23
+ Prawn::Example.generate(filename) do
24
+ table([
25
+ ["A", {:content => "2x1", :colspan => 2}, "B"],
26
+ [{:content => "1x2", :rowspan => 2}, "C", "D", "E"],
27
+ [{:content => "2x2", :colspan => 2, :rowspan => 2}, "F"],
28
+ ["G", "H"]
29
+ ])
30
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ #
3
+ # We've seen how to apply styles to a selection of cells by setting the
4
+ # individual properties. Another option is to use the <code>style</code> method
5
+ #
6
+ # <code>style</code> lets us define multiple properties at once with a hash. It
7
+ # also accepts a block that will be called for each cell and can be used for
8
+ # some complex styling.
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::Example.generate(filename) do
15
+ table([[""] * 8] * 8) do
16
+ cells.style(:width => 24, :height => 24)
17
+
18
+ cells.style do |c|
19
+ c.background_color = ((c.row + c.column) % 2).zero? ? '000000' : 'ffffff'
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Examples for tables.
4
+ #
5
+ require File.expand_path(File.join(File.dirname(__FILE__),
6
+ %w[.. example_helper]))
7
+
8
+ Prawn::Example.generate("table.pdf", :page_size => "FOLIO") do
9
+
10
+ package "table" do |p|
11
+
12
+ p.section "Basics" do |s|
13
+ s.example "creation"
14
+ s.example "content_and_subtables"
15
+ s.example "flow_and_header"
16
+ s.example "position"
17
+ end
18
+
19
+ p.section "Styling" do |s|
20
+ s.example "column_widths"
21
+ s.example "width"
22
+ s.example "row_colors"
23
+ s.example "cell_dimensions"
24
+ s.example "cell_borders_and_bg"
25
+ s.example "cell_border_lines"
26
+ s.example "cell_text"
27
+ s.example "image_cells"
28
+ s.example "span"
29
+ s.example "before_rendering_page"
30
+ end
31
+
32
+ p.section "Initializer Block" do |s|
33
+ s.example "basic_block"
34
+ s.example "filtering"
35
+ s.example "style"
36
+ end
37
+
38
+ p.intro do
39
+ prose("Prawn comes with table support out of the box. Tables can be styled in whatever way you see fit. The whole table, rows, columns and cells can be styled independently from each other.
40
+
41
+ The examples show:")
42
+
43
+ list( "How to create tables",
44
+ "What content can be placed on tables",
45
+ "Subtables (or tables within tables)",
46
+ "How to style the whole table",
47
+ "How to use initializer blocks to style only specific portions of the table"
48
+ )
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The default table width depends on the content provided. It will expand up
4
+ # to the current bounding box width to fit the content. If you want the table to
5
+ # have a fixed width no matter the content you may use the <code>:width</code>
6
+ # option to manually set the width.
7
+ #
8
+ require File.expand_path(File.join(File.dirname(__FILE__),
9
+ %w[.. example_helper]))
10
+
11
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
12
+ Prawn::Example.generate(filename) do
13
+ text "Normal width:"
14
+ table [%w[A B C]]
15
+ move_down 20
16
+
17
+ text "Fixed width:"
18
+ table([%w[A B C]], :width => 300)
19
+ move_down 20
20
+
21
+ text "Normal width:"
22
+ table([["A", "Blah " * 20, "C"]])
23
+ move_down 20
24
+
25
+ text "Fixed width:"
26
+ table([["A", "Blah " * 20, "C"]], :width => 300)
27
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ #
3
+ #<b>NOTE: Templates are currently unmaintained and may be removed by Prawn 1.0!</b>
4
+ #
5
+ # You may load another PDF while creating a new one. Just pass the loaded PDF
6
+ # filename to the <code>:template</code> option when creating/generating the new
7
+ # PDF.
8
+ #
9
+ # The provided PDF will be loaded and its first page will be set as the
10
+ # current page. If you'd like to resume the document you may take advantage of
11
+ # two helpers: <code>page_count</code> and <code>go_to_page</code>.
12
+ #
13
+ require File.expand_path(File.join(File.dirname(__FILE__),
14
+ %w[.. example_helper]))
15
+
16
+ filename = "#{Prawn::DATADIR}/pdfs/multipage_template.pdf"
17
+
18
+ Prawn::Example.generate("full_template.pdf", :template => filename) do
19
+ go_to_page(page_count)
20
+
21
+ start_new_page
22
+
23
+ text "Previous pages and content imported.", :align => :center
24
+ text "This page and content is brand new.", :align => :center
25
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+ # <b>NOTE: Templates are currently unmaintained and may be removed by Prawn 1.0!</b>
3
+ #
4
+ # If you only need to load some pages from another PDF, you can accomplish it
5
+ # with the <code>start_new_page</code> method. You may pass it a
6
+ # <code>:template</code> option with the path for an existing pdf and a
7
+ # <code>:template_page</code> option to specify which page to load.
8
+ # You can also load a <code>:template</code> using a URI:
9
+ #
10
+ # <code>require 'open-uri'</code>
11
+ #
12
+ # <code>start_new_page(:template => open('url_for_your.pdf'))</code>
13
+ #
14
+ # The following example loads some pages from an existing PDF. If we don't
15
+ # specify the <code>:template_page</code> option, the first page of the template
16
+ # PDF will be loaded. That's what happens on the first load below. Then we load
17
+ # a page by specifying the <code>:template_page</code> option and then we do it
18
+ # again this time adding some content to the loaded page.
19
+ #
20
+ require File.expand_path(File.join(File.dirname(__FILE__),
21
+ %w[.. example_helper]))
22
+
23
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
24
+ Prawn::Example.generate(filename) do
25
+ text "Please scan the next 3 pages to see the page templates in action."
26
+ move_down 10
27
+ text "You also might want to look at the pdf used as a template: "
28
+ url = "https://github.com/prawnpdf/prawn/raw/master/data/pdfs/form.pdf"
29
+ move_down 10
30
+
31
+ formatted_text [{:text => url, :link => url}]
32
+
33
+ filename = "#{Prawn::DATADIR}/pdfs/form.pdf"
34
+ start_new_page(:template => filename)
35
+
36
+ start_new_page(:template => filename, :template_page => 2)
37
+
38
+ start_new_page(:template => filename, :template_page => 2)
39
+
40
+ fill_color "FF8888"
41
+
42
+ text_box "John Doe", :at => [75, cursor-75]
43
+ text_box "john@doe.com", :at => [75, cursor-105]
44
+ text_box "John Doe inc", :at => [75, cursor-135]
45
+ text_box "You didn't think I'd tell, did you?", :at => [75, cursor-165]
46
+
47
+ fill_color "000000"
48
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Examples for loading existing pdfs.
4
+ #
5
+ require File.expand_path(File.join(File.dirname(__FILE__),
6
+ %w[.. example_helper]))
7
+
8
+ Prawn::Example.generate("templates.pdf", :page_size => "FOLIO") do
9
+
10
+ package "templates" do |p|
11
+
12
+ p.example "full_template", :eval_source => false, :full_source => true
13
+ p.example "page_template"
14
+
15
+ p.intro do
16
+ prose("<b>NOTE: Templates are currently unmaintained and may be removed by Prawn 1.0!</b>")
17
+ prose("Templates let you embed other PDF documents inside the current one.
18
+
19
+ The examples show:")
20
+
21
+ list( "How to load the whole content from another PDF",
22
+ "How to load single pages from another PDF"
23
+ )
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Horizontal text alignment can be achieved by supplying the <code>:align</code>
4
+ # option to the text methods. Available options are <code>:left</code>
5
+ # (default), <code>:right</code>, <code>:center</code>, and
6
+ # <code>:justify</code>.
7
+ #
8
+ # Vertical text alignment can be achieved using the <code>:valign</code> option
9
+ # with the text methods. Available options are <code>:top</code> (default),
10
+ # <code>:center</code>, and <code>:bottom</code>.
11
+ #
12
+ # Both forms of alignment will be evaluated in the context of the current
13
+ # bounding_box.
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::Example.generate(filename) do
20
+ text "This text should be left aligned"
21
+ text "This text should be centered", :align => :center
22
+ text "This text should be right aligned", :align => :right
23
+
24
+ bounding_box([0, 220], :width => 250, :height => 220) do
25
+ text "This text is flowing from the left. " * 4
26
+
27
+ move_down 15
28
+ text "This text is flowing from the center. " * 3, :align => :center
29
+
30
+ move_down 15
31
+ text "This text is flowing from the right. " * 4, :align => :right
32
+
33
+ move_down 15
34
+ text "This text is justified. " * 6, :align => :justify
35
+ transparent(0.5) { stroke_bounds }
36
+ end
37
+
38
+ bounding_box([300, 220], :width => 250, :height => 220) do
39
+ text "This text should be vertically top aligned"
40
+ text "This text should be vertically centered", :valign => :center
41
+ text "This text should be vertically bottom aligned", :valign => :bottom
42
+ transparent(0.5) { stroke_bounds }
43
+ end
44
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The <code>:color</code> attribute can give a block of text a default color,
4
+ # in RGB hex format or 4-value 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::Example.generate(filename) do
11
+ text "Default color is black"
12
+ move_down 25
13
+
14
+ text "Changed to red", :color => "FF0000"
15
+ move_down 25
16
+
17
+ text "CMYK color", :color => [22, 55, 79, 30]
18
+ move_down 25
19
+
20
+ text "Also works with <color rgb='ff0000'>inline</color> formatting",
21
+ :color => "0000FF",
22
+ :inline_format => true
23
+ end
24
+
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The <code>column_box</code> method allows you to define columns that flow
4
+ # their contents from one section to the next. You can have a number of columns
5
+ # on the page, and only when the last column overflows will a new page be
6
+ # created.
7
+ #
8
+ require File.expand_path(File.join(File.dirname(__FILE__),
9
+ %w[.. example_helper]))
10
+
11
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
12
+ Prawn::Example.generate(filename) do
13
+ text "The Prince", :align => :center, :size => 18
14
+ text "Niccolò Machiavelli", :align => :center, :size => 14
15
+ move_down 12
16
+
17
+ column_box([0, cursor], :columns => 2, :width => bounds.width) do
18
+ text((<<-END.gsub(/\s+/, ' ') + "\n\n") * 3)
19
+ All the States and Governments by which men are or ever have been ruled,
20
+ have been and are either Republics or Princedoms. Princedoms are either
21
+ hereditary, in which the sovereignty is derived through an ancient line
22
+ of ancestors, or they are new. New Princedoms are either wholly new, as
23
+ that of Milan to Francesco Sforza; or they are like limbs joined on to
24
+ the hereditary possessions of the Prince who acquires them, as the
25
+ Kingdom of Naples to the dominions of the King of Spain. The States thus
26
+ acquired have either been used to live under a Prince or have been free;
27
+ and he who acquires them does so either by his own arms or by the arms of
28
+ others, and either by good fortune or by merit.
29
+ END
30
+ end
31
+ end
32
+
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Prawn enables the declaration of fallback fonts for those glyphs that may not
4
+ # be present in the desired font. Use the <code>:fallback_fonts</code> option
5
+ # with any of the text or text box methods, or set fallback_fonts document-wide.
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::Example.generate(filename) do
12
+ file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
13
+ font_families["Kai"] = {
14
+ :normal => { :file => file, :font => "Kai" }
15
+ }
16
+
17
+ file = "#{Prawn::DATADIR}/fonts/Action Man.dfont"
18
+ font_families["Action Man"] = {
19
+ :normal => { :file => file, :font => "ActionMan" },
20
+ }
21
+
22
+ font("Action Man") do
23
+ text("When fallback fonts are included, each glyph will be rendered " +
24
+ "using the first font that includes the glyph, starting with the " +
25
+ "current font and then moving through the fallback fonts from left " +
26
+ "to right." +
27
+ "\n\n" +
28
+ "hello ƒ 你好\n再见 ƒ goodbye",
29
+ :fallback_fonts => ["Times-Roman", "Kai"])
30
+ end
31
+ move_down 20
32
+
33
+ formatted_text([ { :text => "Fallback fonts can even override" },
34
+ { :text => "fragment fonts (你好)", :font => "Times-Roman" },
35
+ ],
36
+ :fallback_fonts => ["Times-Roman", "Kai"])
37
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The <code>font</code> method can be used in three different ways.
4
+ #
5
+ # If we don't pass it any arguments it will return the current font being used
6
+ # to render text.
7
+ #
8
+ # If we just pass it a font name it will use that font for rendering text
9
+ # through the rest of the document.
10
+ #
11
+ # It can also be used by passing a font name and a block. In this case the
12
+ # specified font will only be used to render text inside the block.
13
+ #
14
+ # The default font is Helvetica.
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::Example.generate(filename) do
21
+ text "Let's see which font we are using: #{font.inspect}"
22
+
23
+ move_down 20
24
+ font "Times-Roman"
25
+ text "Written in Times."
26
+
27
+ move_down 20
28
+ font("Courier") do
29
+ text "Written in Courier because we are inside the block."
30
+ end
31
+
32
+ move_down 20
33
+ text "Written in Times again as we left the previous block."
34
+
35
+ move_down 20
36
+ text "Let's see which font we are using again: #{font.inspect}"
37
+
38
+ move_down 20
39
+ font "Helvetica"
40
+ text "Back to normal."
41
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The <code>font_size</code> method works just like the <code>font</code>
4
+ # method.
5
+ #
6
+ # In fact we can even use <code>font</code> with the <code>:size</code> option
7
+ # to declare which size we want.
8
+ #
9
+ # Another way to change the font size is by supplying the <code>:size</code>
10
+ # option to the text methods.
11
+ #
12
+ # The default font size is <code>12</code>.
13
+ #
14
+ require File.expand_path(File.join(File.dirname(__FILE__),
15
+ %w[.. example_helper]))
16
+
17
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
18
+ Prawn::Example.generate(filename) do
19
+ text "Let's see which is the current font_size: #{font_size.inspect}"
20
+
21
+ move_down 10
22
+ font_size 16
23
+ text "Yeah, something bigger!"
24
+
25
+ move_down 10
26
+ font_size(25) { text "Even bigger!" }
27
+
28
+ move_down 10
29
+ text "Back to 16 again."
30
+
31
+ move_down 10
32
+ text "Single line on 20 using the :size option.", :size => 20
33
+
34
+ move_down 10
35
+ text "Back to 16 once more."
36
+
37
+ move_down 10
38
+ font("Courier", :size => 10) do
39
+ text "Yeah, using Courier 10 courtesy of the font method."
40
+ end
41
+
42
+ move_down 10
43
+ font("Helvetica", :size => 12)
44
+ text "Back to normal"
45
+ end