1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# encoding: utf-8
# 
# Basic text flowing example including the use of bounding boxes.  A somewhat
# old example, mostly retained for nostalgia.
#
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
require "prawn"

content = <<-EOS
How does
Prawn    deal     with
   white
     space 
     
       and
       
       line
       breaks?
EOS

poem = <<-EOS
GOOD-BYE

Good-bye, proud world! I'm going home: Thou art not my friend, and I'm not thine. Long through thy weary crowds I roam; A river-ark on the ocean brine, Long I've been tossed like the driven foam: But now, proud world! I'm going home.

Good-bye to Flattery's fawning face; To Grandeur with his wise grimace; To upstart Wealth's averted eye; To supple Office, low and high; To crowded halls, to court and street; To frozen hearts and hasting feet; To those who go, and those who come; Good-bye, proud world! I'm going home.

I am going to my own hearth-stone, Bosomed in yon green hills alone,-- secret nook in a pleasant land, Whose groves the frolic fairies planned; Where arches green, the livelong day, Echo the blackbird's roundelay, And vulgar feet have never trod A spot that is sacred to thought and God.

O, when I am safe in my sylvan home, I tread on the pride of Greece and Rome; And when I am stretched beneath the pines, Where the evening star so holy shines, I laugh at the lore and the pride of man, At the sophist schools and the learned clan; For what are they all, in their high conceit, When man in the bush with God may meet?
EOS

overflow = "This text should flow gracefully onto the next page, like a stream"+
           " flows elegantly from a mountain lake down into the village below."

Prawn::Document.generate("flow.pdf") do |pdf|

  pdf.font "Times-Roman"
  pdf.stroke_line [pdf.bounds.left,  pdf.bounds.top],
                  [pdf.bounds.right, pdf.bounds.top]
  
  pdf.text content, :size => 10
               
  pdf.bounding_box([100,600], :width => 200, :height => 525) do
    pdf.stroke_line [pdf.bounds.left,  pdf.bounds.top],
                    [pdf.bounds.right, pdf.bounds.top]
    pdf.text poem, :size => 12
  end
  
  pdf.bounding_box([325,600], :width => 200, :height => 525) do
    pdf.stroke_line [pdf.bounds.left,  pdf.bounds.top],
                    [pdf.bounds.right, pdf.bounds.top]
    pdf.text poem.reverse, :size => 12
  end
  
  pdf.text overflow * 10, :size => 14
  
  pdf.text "Hooray! We've conquered the evil PDF gods", :size => 36
               
  pdf.bounding_box([100,450], :width => 300) do
    pdf.stroke_line [pdf.bounds.left,  pdf.bounds.top],
                    [pdf.bounds.right, pdf.bounds.top]
    pdf.text poem, :size => 12, :spacing => 5
  end
  
  pdf.text "And this text automatically goes below the poem", :size => 18
  
end