annotate .svn/pristine/23/234b87239a907c3661f562d48ce5a22b13fe4163.svn-base @ 1327:287f201c2802 redmine-2.2-integration

Add italic
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 19 Jun 2013 20:56:22 +0100
parents cbb26bc654de
children
rev   line source
Chris@909 1 # Translation of the bookmark class from the PHP FPDF script from Olivier Plathey
Chris@909 2 # Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger
Chris@909 3 #
Chris@909 4 # First added in 1.53b
Chris@909 5 #
Chris@909 6 # Usage is as follows:
Chris@909 7 #
Chris@909 8 # require 'fpdf'
Chris@909 9 # require 'bookmark'
Chris@909 10 # pdf = FPDF.new
Chris@909 11 # pdf.extend(PDF_Bookmark)
Chris@909 12 #
Chris@909 13 # This allows it to be combined with other extensions, such as the Chinese
Chris@909 14 # module.
Chris@909 15
Chris@909 16 module PDF_Bookmark
Chris@909 17 def PDF_Bookmark.extend_object(o)
Chris@909 18 o.instance_eval('@outlines,@OutlineRoot=[],0')
Chris@909 19 super(o)
Chris@909 20 end
Chris@909 21
Chris@909 22 def Bookmark(txt,level=0,y=0)
Chris@909 23 y=self.GetY() if y==-1
Chris@909 24 @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()})
Chris@909 25 end
Chris@909 26
Chris@909 27 def putbookmarks
Chris@909 28 @nb=@outlines.size
Chris@909 29 return if @nb==0
Chris@909 30 lru=[]
Chris@909 31 level=0
Chris@909 32 @outlines.each_index do |i|
Chris@909 33 o=@outlines[i]
Chris@909 34 if o['l']>0
Chris@909 35 parent=lru[o['l']-1]
Chris@909 36 # Set parent and last pointers
Chris@909 37 @outlines[i]['parent']=parent
Chris@909 38 @outlines[parent]['last']=i
Chris@909 39 if o['l']>level
Chris@909 40 # Level increasing: set first pointer
Chris@909 41 @outlines[parent]['first']=i
Chris@909 42 end
Chris@909 43 else
Chris@909 44 @outlines[i]['parent']=@nb
Chris@909 45 end
Chris@909 46 if o['l']<=level and i>0
Chris@909 47 # Set prev and next pointers
Chris@909 48 prev=lru[o['l']]
Chris@909 49 @outlines[prev]['next']=i
Chris@909 50 @outlines[i]['prev']=prev
Chris@909 51 end
Chris@909 52 lru[o['l']]=i
Chris@909 53 level=o['l']
Chris@909 54 end
Chris@909 55 # Outline items
Chris@909 56 n=@n+1
Chris@909 57 @outlines.each_index do |i|
Chris@909 58 o=@outlines[i]
Chris@909 59 newobj
Chris@909 60 out('<</Title '+(textstring(o['t'])))
Chris@909 61 out('/Parent '+(n+o['parent']).to_s+' 0 R')
Chris@909 62 if o['prev']
Chris@909 63 out('/Prev '+(n+o['prev']).to_s+' 0 R')
Chris@909 64 end
Chris@909 65 if o['next']
Chris@909 66 out('/Next '+(n+o['next']).to_s+' 0 R')
Chris@909 67 end
Chris@909 68 if o['first']
Chris@909 69 out('/First '+(n+o['first']).to_s+' 0 R')
Chris@909 70 end
Chris@909 71 if o['last']
Chris@909 72 out('/Last '+(n+o['last']).to_s+' 0 R')
Chris@909 73 end
Chris@909 74 out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f
Chris@909 75 null]',1+2*o['p'],(@h-o['y'])*@k))
Chris@909 76 out('/Count 0>>')
Chris@909 77 out('endobj')
Chris@909 78 end
Chris@909 79 # Outline root
Chris@909 80 newobj
Chris@909 81 @OutlineRoot=@n
Chris@909 82 out('<</Type /Outlines /First '+n.to_s+' 0 R')
Chris@909 83 out('/Last '+(n+lru[0]).to_s+' 0 R>>')
Chris@909 84 out('endobj')
Chris@909 85 end
Chris@909 86
Chris@909 87 def putresources
Chris@909 88 super
Chris@909 89 putbookmarks
Chris@909 90 end
Chris@909 91
Chris@909 92 def putcatalog
Chris@909 93 super
Chris@909 94 if not @outlines.empty?
Chris@909 95 out('/Outlines '+@OutlineRoot.to_s+' 0 R')
Chris@909 96 out('/PageMode /UseOutlines')
Chris@909 97 end
Chris@909 98 end
Chris@909 99 end