HashCode

An organizer of symbols

Archive for the ‘postscript’ Category

RGhost 0.8.6 amigo do Prawn e do Ruport

Thursday, November 6th, 2008

Já está disponível RGhost 0.8.6, compatível com Prawn e Ruport, isto é, agora você pode fazer seu benchmark sem precisar desinstalar o RGhost para usar o Prawn ou vise-versa.

A outra novidade é o ganho de 50 milissegundos pra cada template(EPS) renderizado, tal façanha pode não parecer muita coisa mas se seu documento tiver 100 páginas, são 5 segundos a menos(tempo de um gole de cerveja). Isso devido a criação de uma nova forma de vetorizar fontes em Postscript.

Divirtam-se e ganhem dinheiro!

RGhost 0.8 e RGhost Barcode publicado

Thursday, June 19th, 2008

Rubeiros,

Publiquei hoje um nova versão do RGhost http://rghost.rubyforge.org totalmente refatorada.
Bati forte em desempenho e na doçura da sintaxe, ficando mais fácil programar em Ruby e gerar códigos em Postscript.
Fiz um teste estuprador até 10K páginas com template e passou legal.

Abaixo algumas das mudanças.

  • Namespace RGhost adicionado e algumas nomes de classes/módulos mudaram.
  • Teste de ambiente e de fonts como RGhost::Config.is_ok?.render :pdf, :filename => “/tmp/test.pdf” e environment_fonts.
  • Retirado o suporte aos 4 códigos de barras GNU Barcode.
  • Criado o projeto rghost_barcode http://rghost-barcode.rubyforge.org que suporta 32 tipos de códigos de barras incluindo uns doidão.
  • Suporte a qualquer fonte TTF e Type 1.
  • Possibilita agora a cópia da API para a memória de impressoras de alto volume.
  • Tag scope para personalização de fontes.
  • Reformulação de vetores e adicionado: canto arredondados, polígono, etc.
  • Melhora do uso de templates registrando-os do dicionário interno da pilha PS.
  • As classes TextArea e Text foram reformuladas, suporte a alinhamento do texto, tags, e outros.
  • Virtual page.
  • Reestruturado o suporte ao ActiveRecord, agora podemos usar n Grid::Rails em um doc.
  • Alguns callbacks mudaram de posição como o before_page_create e o odd_pages.
  • Documentação em Inglês
  • o resto eu esqueci :)

Se alguém se interessar por traduzir o manual em português é só enviar um email para mim em pvt que eu mando o odt.

Agradeço a todos que reportaram bugs e me ajudaram a testar.

Desculpem a demora. Espero que gostem.

Composição de funções em pilha

Tuesday, September 11th, 2007

Lendo e testando o post do Tom Moerte sobre
Composição de funções em Ruby traduzido pelo Akita e refatorado pelo TaQ, a solução de composição de blocos/funções baseai-se em um operador de composição(em Haskell) para geração de uma nova função, simplificando o cálculo e dividindo o problema em partes.

Já em Postscript é implícita tal composição. Por ser uma Linguagem de Programação Orientada a Pilha com a sintaxe Pós-Fixada (Notação Polonesa Invertida) os argumentos e os operadores ficam em um contexto único(pilha), facilitando a execução de cálculos matemáticos sem a necessidade de criar um operador “que junta as funções e passa os parâmetros”. Muito mais simples. Acompanhe.

Primeiramente observe a função

f(x) = X² + 1

Portando para X= 3, temos

f(3) = 3² + 1
f(3) = 10

a mesma função em notação polonesa com operadores postscript

3 2 exp  1 add

quando é executado 3 2 exp o resultado 9 fica na pilha, o valor 1 também está na pilha então 9 1 add resulta em 10. Veja no ghostscript o passo-a-passo(pstack mostra os valores da pilha)

GS>3
GS<1>2
GS<2>pstack
2
3
GS<2>exp
GS<1>pstack
9.0
GS<1>1
GS<2>pstack
1
9.0
GS<2>add
GS<1>pstack
10.0

Vamos criar as funções

/square { 2 exp} def         % eleva ao quadrado o valor corrente
/inc { 1 add } def         %adiciona 1 no valor corrente

testando

GS>3 square
GS<1>pstack
9.0
GS<1>inc
GS<1>pstack
10.0

A composição
Apenas aninhar as funções

/nova{ square inc } def
GS>3 nova
GS<1>pstack
10.0

Programação em pilha tem lá suas vantagens mas não é nada humano.

Impressão direta via TCP/IP com RubyGhost

Tuesday, July 10th, 2007

Geralmente as impressoras de médio e grande porte disponibilizam uma porta TCP conhecida como ‘porta bruta’ de número 9100. Demonstrarei aqui uma forma de imprimir diretamente neste tipo de printer, para o nosso exemplo usaremos o driver postscript genérico da Adobe(PS-Adobe-3.0).
Models Contas e Clientes

class Contas < ActiveRecord::Base
  belongs_to :clientes
end
class Clientes < ActiveRecord::Base
  has_one :contas
end

Configurando as colunas

require 'rghost'
clientes=Clientes.find :all, :include => :contas, :limit => 10000

grid=DataGrid::RailsGrid.new :width => 4 , :align => :center
grid.col :codigo, :title => "Código do Cliente", :width => 5
grid.col :nome, :title => "Nome"
grid.col :created_on, :title => "Data de Cadastro ", :format => :eurodate
grid.col lambda { contas.login }, :title => "Login"
grid.data(clientes)

Criando o documento com dados do ActiveRecord

doc=Document.new :paper => :A4, :landscape => true, :duplex => true
doc.before_page_create do
  set Image.for("/tmp/fatura.eps")
end
doc.set grid
doc.done

Enviando o documento

printer = TCPSocket.open('192.168.1.70', 9100)
printer.write doc.render_stream(:ps)

Deve ter saído lá na impressora… :)

Para mais informações no RGhost - RubyForge . Documentação em português no RubyForge