Tramite applicazione web fornisco un anteprima del pdf che costruisco
molto agilmente con la libreria prawn e che interfaccio tramite prawnto:
http://asciicasts.com/episodes/153-pdfs-with-prawn
La creazione però devo farla via batch perchè devo fare delle altre
operazioni sui pdf creati. Sono riuscito a crearli con un task rake,
replicando quanto faccio nel template dell’applicazione web con qualcosa
del genere:
namespace :batch do
namespace :pdf do
desc “Create pdf from data”
task(:create => :environment) do
require ‘prawn’
DATA_DIRECTORY = File.join(RAILS_ROOT, “lib”, “tasks”, “pdf”)
letters = Letter.all
begin
num = 0
letters.each do |letter|
Prawn::Document.generate(File.join(DATA_DIRECTORY,
“#{letter.id.to_s}_#{letter.name}.pdf”), :top_margin => 75) do |pdf|
#Stampa
pdf.move_down(10)
pdf.text letter.object, :size => 10, :style => :bold
pdf.move_down(20)
pdf.text letter.body, :size => 10, :style => :italic
end #Fine prawn
end #Fine do letters
puts "Letters printed: " + num.to_s
rescue StandardError => bang
puts "Error " + bang
end #End begin
end #End task
end #End namespace pdf
end #End namespace batch
Ho ridotto l’esempio per semplicità ma è molto articolato e richiama
anche degli helper, qualche idea per come evitare di duplicare il codice
e sfruttare quello dell’applicativo?