Chris@909: # Translation of the bookmark class from the PHP FPDF script from Olivier Plathey Chris@909: # Translated by Sylvain Lafleur and ?? with the help of Brian Ollenberger Chris@909: # Chris@909: # First added in 1.53b Chris@909: # Chris@909: # Usage is as follows: Chris@909: # Chris@909: # require 'fpdf' Chris@909: # require 'bookmark' Chris@909: # pdf = FPDF.new Chris@909: # pdf.extend(PDF_Bookmark) Chris@909: # Chris@909: # This allows it to be combined with other extensions, such as the Chinese Chris@909: # module. Chris@909: Chris@909: module PDF_Bookmark Chris@909: def PDF_Bookmark.extend_object(o) Chris@909: o.instance_eval('@outlines,@OutlineRoot=[],0') Chris@909: super(o) Chris@909: end Chris@909: Chris@909: def Bookmark(txt,level=0,y=0) Chris@909: y=self.GetY() if y==-1 Chris@909: @outlines.push({'t'=>txt,'l'=>level,'y'=>y,'p'=>self.PageNo()}) Chris@909: end Chris@909: Chris@909: def putbookmarks Chris@909: @nb=@outlines.size Chris@909: return if @nb==0 Chris@909: lru=[] Chris@909: level=0 Chris@909: @outlines.each_index do |i| Chris@909: o=@outlines[i] Chris@909: if o['l']>0 Chris@909: parent=lru[o['l']-1] Chris@909: # Set parent and last pointers Chris@909: @outlines[i]['parent']=parent Chris@909: @outlines[parent]['last']=i Chris@909: if o['l']>level Chris@909: # Level increasing: set first pointer Chris@909: @outlines[parent]['first']=i Chris@909: end Chris@909: else Chris@909: @outlines[i]['parent']=@nb Chris@909: end Chris@909: if o['l']<=level and i>0 Chris@909: # Set prev and next pointers Chris@909: prev=lru[o['l']] Chris@909: @outlines[prev]['next']=i Chris@909: @outlines[i]['prev']=prev Chris@909: end Chris@909: lru[o['l']]=i Chris@909: level=o['l'] Chris@909: end Chris@909: # Outline items Chris@909: n=@n+1 Chris@909: @outlines.each_index do |i| Chris@909: o=@outlines[i] Chris@909: newobj Chris@909: out('<>') Chris@909: out('endobj') Chris@909: end Chris@909: # Outline root Chris@909: newobj Chris@909: @OutlineRoot=@n Chris@909: out('<>') Chris@909: out('endobj') Chris@909: end Chris@909: Chris@909: def putresources Chris@909: super Chris@909: putbookmarks Chris@909: end Chris@909: Chris@909: def putcatalog Chris@909: super Chris@909: if not @outlines.empty? Chris@909: out('/Outlines '+@OutlineRoot.to_s+' 0 R') Chris@909: out('/PageMode /UseOutlines') Chris@909: end Chris@909: end Chris@909: end