Mercurial > hg > soundsoftware-site
diff .svn/pristine/23/234b87239a907c3661f562d48ce5a22b13fe4163.svn-base @ 926:b73a59a6acbd luisf
Merge from cannam_integration
author | luisf <luis.figueira@eecs.qmul.ac.uk> |
---|---|
date | Fri, 11 May 2012 16:10:11 +0100 |
parents | cbb26bc654de |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.svn/pristine/23/234b87239a907c3661f562d48ce5a22b13fe4163.svn-base Fri May 11 16:10:11 2012 +0100 @@ -0,0 +1,99 @@ +# Translation of the bookmark class from the PHP FPDF script from Olivier Plathey +# Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger +# +# First added in 1.53b +# +# Usage is as follows: +# +# require 'fpdf' +# require 'bookmark' +# pdf = FPDF.new +# pdf.extend(PDF_Bookmark) +# +# This allows it to be combined with other extensions, such as the Chinese +# module. + +module PDF_Bookmark + def PDF_Bookmark.extend_object(o) + o.instance_eval('@outlines,@OutlineRoot=[],0') + super(o) + end + + def Bookmark(txt,level=0,y=0) + y=self.GetY() if y==-1 + @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()}) + end + + def putbookmarks + @nb=@outlines.size + return if @nb==0 + lru=[] + level=0 + @outlines.each_index do |i| + o=@outlines[i] + if o['l']>0 + parent=lru[o['l']-1] + # Set parent and last pointers + @outlines[i]['parent']=parent + @outlines[parent]['last']=i + if o['l']>level + # Level increasing: set first pointer + @outlines[parent]['first']=i + end + else + @outlines[i]['parent']=@nb + end + if o['l']<=level and i>0 + # Set prev and next pointers + prev=lru[o['l']] + @outlines[prev]['next']=i + @outlines[i]['prev']=prev + end + lru[o['l']]=i + level=o['l'] + end + # Outline items + n=@n+1 + @outlines.each_index do |i| + o=@outlines[i] + newobj + out('<</Title '+(textstring(o['t']))) + out('/Parent '+(n+o['parent']).to_s+' 0 R') + if o['prev'] + out('/Prev '+(n+o['prev']).to_s+' 0 R') + end + if o['next'] + out('/Next '+(n+o['next']).to_s+' 0 R') + end + if o['first'] + out('/First '+(n+o['first']).to_s+' 0 R') + end + if o['last'] + out('/Last '+(n+o['last']).to_s+' 0 R') + end + out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f +null]',1+2*o['p'],(@h-o['y'])*@k)) + out('/Count 0>>') + out('endobj') + end + # Outline root + newobj + @OutlineRoot=@n + out('<</Type /Outlines /First '+n.to_s+' 0 R') + out('/Last '+(n+lru[0]).to_s+' 0 R>>') + out('endobj') + end + + def putresources + super + putbookmarks + end + + def putcatalog + super + if not @outlines.empty? + out('/Outlines '+@OutlineRoot.to_s+' 0 R') + out('/PageMode /UseOutlines') + end + end +end