23 Oct
duccio

duccio il 23 October 2006 parla di Rails Snippet

PDF-Writer per creare pdf in rails

Ho provato pdf-writer per generare file pdf con rails, se vi interessa provarlo di seguito vi posto un estratto di codice per inserire testo, immagini, settare le codifiche ed inserire tabelle.

Chiaramente prima di cominciare è necessario installare la gemma pdf-writer:

    1 sudo gem install pdf-writer

installate anche le dipendenze: color-tools, transaction-simple.

    1 require 'pdf/writer' 
    2 require 'pdf/simpletable'
    3 ...
    4 ...
    5 def generate_pdf
    6  pdf = PDF::Writer.new()   
    7   #Per impostare i margini del documento in (mm)
    8   pdf.margins_mm(20)
    9   pdf.select_font("Helvetica", :encoding => nil)
   10   pdf.fill_color    Color::RGB::Black 
   11   #Per Aggiungere una immagine e posizionarla a 50 punti da sinistra e 
   12   #a 700 punti dal basso di 60x60 punti di dimensione
   13   pdf.add_image_from_file("images/logo.jpg", 50, 700, 60, 60)
   14   pdf.add_text(120, 745, "Testo di prova") 
   15   #Per generare una linea lunga 510 punti
   16   pdf.line(50, 690, 560, 690).stroke
   17   pdf.move_pointer(180, true)
   18   #Un esempio per generare una tabella 
   19   PDF::SimpleTable.new do |tab|
   20     tab.bold_headings = true
   21     tab.column_order.push(*%w(desc imp))
   22     tab.columns["desc"] = PDF::SimpleTable::Column.new("desc") { |col|
   23       col.width = 350
   24       col.heading = "Descrizione"
   25     }
   26     tab.columns["imp"] = PDF::SimpleTable::Column.new("imp") { |col|
   27       col.heading = "Importo"
   28     }
   29     tab.show_lines    = :all
   30     tab.show_headings = true
   31     tab.orientation   = :right
   32     tab.position      = 80
   33     data = []
   34     #Se avete un oggetto su cui ciclare per tirare fuori i valori
   35     object.each do |i, index|
   36       data << {"desc" => "#{i.description}",  "imp" => "#{format_pdf_price(i.price).to_s}"}
   37     end
   38     tab.data.replace data
   39     #Renderizza la tabella sul pdf partendo dalla y precedentemente
   40     #impostata con pdf.move_pointer(180, true)
   41     tab.render_on(pdf)
   42     
   43     pdf.y = pdf.y - 50   
   44     pdf.add_text(120, pdf.y, "Fine pdf") 
   45   end
   46   #Per salvare il file con il nome che vi serve:
   47   pdf.save_as("../pdf-invoices/prova.pdf}")  
   48   #Per renderezzare il file sul browser
   49   send_data pdf.render, :filename => "prova.pdf", :type => "application/pdf"

Alla linea 17:

    17   pdf.move_pointer(180, true)

Viene spostato il cursore per fare in modo che la tabella venga renderizzata al punto giusto sul pdf; senza spostare il cursore la tabella verrebbe renderizzata in cima alla pagina.

E LA CODIFICA?

Quando viene scelto il tipo di carattere si può specificare anche la codifica se non vi interessa specificarla allora:

    1   pdf.select_font("Helvetica", :encoding => nil)

Può accadere che vi siano problemi nel riconoscimento di caratteri speciali o nel simbolo dell’euro, per questo motivo è necessario specificare il carattere ASCII del simbolo che vi interessa utilizzare. Ad esempio se vi interessa inserire il simbolo dell’euro dovete inserire 33.chr nel vostro codice ruby.

1 Commento a “PDF-Writer per creare pdf in rails”

  1. Stefano il 24 October 2008 alle 10:23 dice:

    Non riesco ad inserire l’immagine nel pdf.
    L’errore è “Errno::ENOENT in PublicController#pdf

    No such file or directory - images/intestazione.gif”

Scrivi un commento