HashCode

An organizer of symbols

RGhost 0.8.5 ênfase na criação de PDF em Ruby

Acabei de atualizar o RGhost para a versão 0.8.5, adicionei novas features e correção de uns bugzinhos, abaixo as principais mudanças.

Mac OS e Linux plug and play

Detecta e configura o path do ghostscript automaticamente para MacOS e Linux, avisa quando não detectou o executável e avisa o cara, com abaixo

Ghostscript not found in your environment.
Install it and set the variable RGhost::Config::GS[:path] with the executable path.
Example: RGhost::Config::GS[:path]='/path/to/my/gs'      #unix-style
 RGhost::Config::GS[:path]="C:\\gs\\bin\\gswin32c.exe"  #windows-style

Para windows vou fazer depois mais pode configurar manualmente.

PDF Quality

Permite configurar a qualidade final do PDF que podem ser

  • :screen - Baixa resolução, alta compressão, similar a opção “Screen Optimized” Acrobat Distiller.
  • :ebook - Resolução mediana similar a opção “eBook” do Acrobat Distiller.
  • :printer - Similar a opção “Print Optimized” do Acrobat Distiller ótima resolução pra impressão.
  • :prepress - Qualidade para apresentação em tela cheia similar a “Prepress Optimized” do Acrobat Distiller.

Use o parâmetro :quality no método render

doc=RGhost::Document.new
doc... #algo aqui
doc.render :pdf, :quality => :ebook

PDF Document Info

Declara informações sobre o documento
Nas propriedades aparecerá

Usando o novo método Document#info

doc.info :Title => "My Report about XXX",
         :Author => "Company XXX",
         :Subject => "RGhost new version",
         :Creator => "We system",
         :Keywords => "foo bar bas to search enginers"

Fontes externas TTF ou Type1

Carregamento de fontes externas via método tag com a opção :from

doc.define_tags  do
  tag :one_font, :name => "HelveticaOblique", :size => 12
  tag :another, :name => "Monaco",  :size => 30 , :from => "/tmp/monaco.ttf"
end

PDF Security

Agora permite atribuir uma senha para usuários e para o dono do documento essa senha desabilita opções de abertura, impressão etc. O código fica da seguinte forma

doc.security do |sec|
  sec.owner_password ="testXXX"
  sec.user_password ="testYYY"
  sec.disable :print, :copy
end

Acima estou desabilitando a impressão e a cópia do conteúdo. Agora desabilitando tudo

doc.security do |sec|
  sec.owner_password ="test123"
  sec.user_password ="test567"
  sec.disable :all
end

Quando o documento for aberto uma senha será solicitada.

A senha com total privilégio e a do “owner” e limite total para “user”.

PDF Hyperlink(Text and Rectangle)

O campeão de pedidos o hyperlink. Criado com base na clase text_in e bem simples de usar

doc.text_link "Click here",:url => "http://mysite", :tag => :link, :color => :blue

Posicionamento absoluto

doc.text_link "Click here",:x=> 2, :y=> 4, :url => "http://mysite"

Exemplo de um link que checa informações online do PDF.


Ou defina um retângulo clicável

Com o simples código

doc.rectangle_link :url=> "http://www.hashcode.eti.br",
                   :width => 10, :height => 5,
                   :x  => 5,:y => 22,
                   :color => :blue

Grid::Rails dentro do Document

Crie suas grids usando um bloco dentro do documento, veja

doc.rails_grid :style => :border_lines, :width => 4 do |grid|
  grid.column :title,   :title => "Título",
  grid.column :name, :title => "Comentário", :format => lambda {|s| s.gsub(/^(.{20}).*$/,'\1...')}
  grid.column :created_on, :title => "Data",  :format => lambda {|s| s.strftime("%d %b")}
  grid.data Post.find(:all, :limit => 100)
end

Bugs

  • Correção do encoding do header da Grid::Rails e do callback grid.header.before_create.
  • Correção da métrica em 2 décimos entre Cm e Inch.
  • Correção do yield do Document não recebia instância atualizada, agora funfa.

Lembre-se

gem install rghost

Espero que gostem!

7 Responses to “RGhost 0.8.5 ênfase na criação de PDF em Ruby”

  1. Thiago Souza Says:

    Fala Shairon,

    Sempre com atualizações interessantes, vou testar algumas delas e lhe dar um feedback.

    Mê diz uma coisa. no format de um coluna da grid não tem como passar como parametro a linha também não?

    ex:

    grid.column :valor, :title => “Entrada”, :format => lambda {|v, row| value if row.tipo == ‘E’ }

    para obter o mesmo resultado que teria com o código acima tive que fazer isso

    grid.column lambda { format_entrada_to_report }, :title => “Entrada”
    grid.column lambda { format_saida_to_report }, :title => “Saida”

    no modelo

    def format_entrada_to_report
    value if tipo == ‘E’
    end

    def format_saida_to_report
    value if tipo == ‘S’
    end

  2. shairon Says:

    Achei interessante sua idéia, hoje não tem como fazer mas vou tentar implementar isso.

  3. Nome do Jogo » Blog Archive » Rails Podcast Brasil - Episódio 31 Says:

    [...] RGhost 0.8.5 ênfase na criação de PDF em Ruby [...]

  4. kivanio Says:

    Grande Mestre,

    poderia adicionar a detecção automática também para os BSD’s?
    o caminho é este em todos:
    RGhost::Config::GS[:path] = ‘/usr/local/bin/gs’
    Assim posso retirar está detecção do plugin acts_as_payment que após está atualização ficou desnecessária.

  5. shairon Says:

    sim só me fala qual o conteúdo da var PLATFORM

  6. Juliano Garcia Says:

    Grande shairon, parabens pelo rghost..
    não tem como imprimir o :title com um valor da base?

    exemplo :title => ‘accounts.gtam.tam1′

    um abraço

  7. shairon Says:

    @juliano, Desculpe esse comment passou direto :). Não tem como, mas vc pode colocar a primeira linha dentro dos seus dados.

Leave a Reply

Quanto é ?