L1g3r Logo           SignalQ Sites: NetAdminTools - Coprolite - SpotBridge - NAW
RoboCoop - AreWeDown - SysAdminTools
Xfig - Gold Loaf - GeekPapa - FixGMC - FixRambler
Part F - PDF Controller
Topic:MCJ Web Presentation   Date: 2010-01-08
Printer Friendly: Print   

spacerspacer
<<  <   >  >>

Subject

This controller creates the design PDF for l1g3r.com. Not very DRY (don't repeat yourself), but it works for the prototype. I used an HTML tokenizer so that I can edit the HTML in MCJ and it automatically changes in the PDF. Further, because of the challenge of embedding graphics, I have to fiddle a lot with the layout manually.

class PdfcController < ApplicationController
  def ppage
    system ("/bin/rm /wwwdocs/l1g/design.pdf")
    respond_to do |format|
      format.pdf
      Prawn::Document.generate('/wwwdocs/l1g/design.pdf' ) do |pdf|
        pdf.font "Helvetica"
        #page1
        pdf.text_box "L1G3R Information Systems", :size => 12,:align => :right
 
        pdf.image "/wwwdocs/l1g/l1gw.png", :width => 80 
        pdf.move_down 2 
        pdf.text "Mountain Climbing Journal", :size => 16, :align => :center, :style => :bold
        pdf.text "Baroque Knowledge Management System", :size => 16, :align => :center, :style => :bold
        pdf.text "High Level Design", :size => 16, :align => :center, :style => :bold
        pdf.text "Introduction", :size => 16, :style => :bold
        pdf.text "Hybrid HLD", :size => 14, :style => :bold 
        pdf.move_down 3 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>45,
          :realm=>'l1g'})
        tokenizer = HTML::Tokenizer.new(@artrow.entry)
        while token = tokenizer.next
          if token[0,3] == "<im" 
           pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 325, :align => :center
          elsif token[0,3] == "<p>"
            pdf.text " "   
          elsif token[0,3] == "<br" 
          else  
           pdf.text token 
          end 
        end

        #section2start
        pdf.start_new_page
        pdf.text "Scope", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>46,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 375, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section2end

        #section3start
        pdf.move_down 20 
        pdf.text "Definitions", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>47,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section3end
      
        #section4start
        pdf.move_down 20 
        pdf.text "Overview", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>48,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
              pdf.font_size 12
            elsif token[0,3] == "<br"
            elsif token[0,3] == "&nb"
            elsif token[0,3] == "&mi"
            elsif token[0,3] == "<bi"
            elsif token[0,3] == "</b"
            elsif token[0,3] == " &n"
            elsif token[0,3] == "<st"
              pdf.font "Helvetica", :style => :bold
            elsif token[0,3] == "</s"
            else 
              pdf.text token
            end
          end
        pdf.font "Helvetica", :style => :normal
        #section4end
        
        #section5start
        pdf.text " "
        pdf.font_size 12
        pdf.text "General Description", :size => 16, :style => :bold
        pdf.text "MCJ Perspective", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>49,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<pr"
            elsif token[0,3] == "<a "
            elsif token[0,3] == "</a"
            elsif token[0,3] == "</i"
            elsif token[0,3] == "</p"
            elsif token[0,3] == "<i>"
              pdf.font "Times-Roman", :style => :italic 
            elsif token[0,3] == "<p>"
              pdf.text " "
              pdf.font_size 12
              pdf.font "Helvetica"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section5end
        #section6start
        pdf.move_down 20 
        pdf.text "Tools Used", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>50,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          waitforit = "bath time"
          while ((token = tokenizer.next) && (waitforit != "hot cheese"))
            if token[0,3] == "<ta"
              pdf.image "/wwwdocs/l1g/arts/toolstable.png", :width => 500, :align => :center
              waitforit = "hot cheese"
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else 
              pdf.text token
            end
          end
        #section6end
        #section7start
        pdf.move_down 20 
        pdf.text "Constraints and Assumptions", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>51,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section7end
        #section8start
        pdf.move_down 20 
        pdf.text "Special Design Aspects", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>52,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section8end
        #section9start
        pdf.move_down 20 
        pdf.text "Main Design Features", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>53,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
              pdf.text " "
            elsif token[0,3] == "<b>"
              pdf.font "Helvetica", :style => :bold
            elsif token[0,3] == "<br"
            elsif token[0,3] == "</b"
              pdf.font "Helvetica", :style => :normal
            else pdf.text token
            end
          end
        #section9end
        #section10start
        pdf.start_new_page
        pdf.text "Application Architecture", :size => 14, :style => :bold 
        pdf.move_down 20 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>54,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/aagg.png",:width => 300, :align => :center
            elsif token[0,3] == "<p>"
              pdf.text " "
            elsif token[0,3] == "<br"
            elsif token[0,3] == "<ce"
            elsif token[0,3] == "</c"
            elsif token[0,3] == "<b>"
              pdf.font "Helvetica", :style => :bold
            elsif token[0,3] == "</b"
              pdf.font "Helvetica", :style => :normal
            else pdf.text token
            end
          end
        #section10end
        #section11start
        pdf.move_down 20 
        pdf.start_new_page
        pdf.text "Technology Architecture", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>55,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if (token[0,3] == "<im") && (token[32,3] == "nam")
                pdf.image "/wwwdocs/l1g/arts/namoroka.png",:width=> 130,:align => :center
            elsif (token[0,3] == "<im") && (token[32,3] == "fir")
                pdf.image "/wwwdocs/l1g/arts/firefox.png",:width=> 275,:align => :center
            elsif (token[0,3] == "<im")
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<b>"
              pdf.font "Helvetica", :style => :bold
            elsif token[0,3] == "<i>"
              pdf.font "Helvetica", :style => :italic
            elsif token[0,3] == "</i"
              pdf.font "Helvetica", :style => :normal
            elsif token[0,3] == "</b"
              pdf.font "Helvetica", :style => :normal
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section11end
        #section12start
        pdf.move_down 20 
        pdf.text "Standards", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>56,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if (token[0,3] == "<im")
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<b>"
              pdf.font "Helvetica", :style => :bold
            elsif token[0,3] == "<i>"
              pdf.font "Helvetica", :style => :italic
            elsif token[0,3] == "</i"
              pdf.font "Helvetica", :style => :normal
            elsif token[0,3] == "</b"
              pdf.font "Helvetica", :style => :normal
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section12end
        #section13start
        pdf.start_new_page
        pdf.move_down 20 
        pdf.text "Database Design", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>57,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/mcjschema.png",:width => 530, :align => :center
            elsif token[0,3] == "<ce"
            elsif token[0,3] == "</c"
            elsif token[0,3] == "</b"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section13end
        #section14start
        pdf.start_new_page
        pdf.move_down 20 
        pdf.text "User Interface", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>58,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if (token[0,3] == "<im") && (token[32,3] == "mai")
                pdf.image "/wwwdocs/l1g/arts/mainwindow.png",:width=> 500,:align => :center
            elsif (token[0,3] == "<im") && (token[32,3] == "uti")
                pdf.start_new_page
                pdf.image "/wwwdocs/l1g/arts/utility.png",:width=> 400,:align => :center
            elsif (token[0,3] == "<im") && (token[32,3] == "sql")
                pdf.start_new_page
                pdf.image "/wwwdocs/l1g/arts/sql.png",:width=> 400,:align => :center
            elsif (token[0,3] == "<im") && (token[32,3] == "jar")
                pdf.image "/wwwdocs/l1g/arts/jart.png",:width=> 300,:align => :center
                pdf.start_new_page
            elsif (token[0,3] == "<im") && (token[32,3] == "jke")
                pdf.image "/wwwdocs/l1g/arts/jkey.png",:width=> 440,:align => :center
            elsif token[0,3] == "<p>"
              pdf.text " "
            elsif token[0,3] == "<b>"
              pdf.font "Helvetica", :style => :bold
            elsif token[0,3] == "<i>"
              pdf.font "Helvetica", :style => :italic
            elsif token[0,3] == "</i"
              pdf.font "Helvetica", :style => :normal
            elsif token[0,3] == "</b"
              pdf.font "Helvetica", :style => :normal
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section14end
        #section15start
        pdf.move_down 20 
        pdf.text "Files", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>59,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section15end
        #section16start
        pdf.move_down 20 
        pdf.text "Reports", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>60,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section16end
        #section17start
        pdf.move_down 20 
        pdf.text "Error Handling", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>61,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section17end
        #section18start
        pdf.move_down 20 
        pdf.text "Interfaces", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>62,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section18end
        #section19start
        pdf.move_down 20 
        pdf.text "Help", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>63,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section19end
        #section20start
        pdf.move_down 20 
        pdf.text "Performance", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>64,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section20end
        #section21start
        pdf.move_down 20 
        pdf.text "Security", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>65,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section21end
        #section22start
        pdf.move_down 20 
        pdf.text "Reliability", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>66,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section22end
        #section23start
        pdf.move_down 20 
        pdf.text "Maintainability", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>67,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section23end
        #section24start
        pdf.move_down 20 
        pdf.text "Portability", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>68,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section24end
        #section25start
        pdf.move_down 20 
        pdf.text "Reusability", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>69,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section25end
        #section26start
        pdf.move_down 20 
        pdf.text "Application Compatibility", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>70,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section26end
        #section27start
        pdf.move_down 20 
        pdf.text "Resource Utilization", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>71,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section27end
        #section28start
        pdf.move_down 20 
        pdf.text "Future Considerations", :size => 14, :style => :bold 
        @artrow = Art.find(:first,
          :conditions=> {
          :artnum=>72,
          :realm=>'l1g'})
          tokenizer = HTML::Tokenizer.new(@artrow.entry)
          while token = tokenizer.next
            if token[0,3] == "<im"
              pdf.image "/wwwdocs/l1g/arts/hldintro.png",:width => 350, :align => :center
            elsif token[0,3] == "<p>"
            elsif token[0,3] == "<br"
            else pdf.text token
            end
          end
        #section28end
      pdf.number_pages " Page <page> of <total>", [pdf.bounds.right - 60, pdf.bounds.bottom - 15 ]

      end 
    end
    send_file "/wwwdocs/l1g/arts/design.pdf", :disposition => "inline"
  end
end 


Updates and Comments:
On my GNU/Linux workstation this file is located at /opt/mcjr/app/views/layouts/_acrtpage.erb
People:
Places:
Things:
pdf
Don't claim much
Times: