Impressao de Etiqueta com Papel A4

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Paulo Pereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 28 Abr 2011 00:29
Localização: Joinville / SC

Impressao de Etiqueta com Papel A4

Mensagem por Paulo Pereira »

Entao Eolo.. vc conhece o caminho das Pedras...
Meu cliente quer que apareca a imagem do produto na Ordem de producao...
esta imagem esta em JPG, 595x842, varia de 50k a 100k.. nao sei se isso é problema. Preciso mudar para BMP ??
A impressao será uma folha A4 numa HP. juntamente com varias informacoes do PCP, nao tem nada definido. posso calocar a imagem onde quiser..

Imagem sempre foi meu calcalhar de Aquiles.. Nao sei se o melhor seria usar o Oprinter ou Win32Bmp ou inserir a imagem em um PDF.. ??

Achava que ao passar para o Harbour teria funcoes mais praticas para imprimir uma imagem... sem ter que ficar calculando pixel, area etc..

Obrigado
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Impressao de Etiqueta com Papel A4

Mensagem por Eolo »

Paulo, dá uma olhada no meu post de 24-mar-12, onde eu mostro como imprimir uma logo. É bem simples.
. até onde eu sei, sim, tem que transformar em BMP, o que vc pode fazer facilmente com o Photoshop ou outros.
. não importa o tamanho da sua imagem, o xharbour vai adaptá-la às coordenadas que vc definir
. mas mantenha a mesma proporção altura/largura original da imagem, senão ela vai sair distorcida (esticada ou achatada). Só pra exemplificar: se vc tem uma foto 3x4 e manda imprimir em 3x5, a largura 3 vai sair ok, mas a Win32prn vai esticar a altura até a posição 5.

Eu sempre usei a Win32prn, então não posso falar de PDF ou outros. Mas concordo que se tivesse uma interface pra ajustar as coisas no papel, ficaria mais fácil :-)

Mas pixels não é complicado, não. Em uma A4, no Clipper, vc tem digamos 80 x 65 (colunas/linhas), certo? Já em pixels, vc tem 2480 pixels de largura e 3507 pixels de altura (em modo rascunho), então se vc quer algo no centro da página, a grosso modo vc manda pra coluna 40 no Clipper e pro pixel 1240 na Win32prn... É como comparar 2 folhas quadriculadas, linhas verticais e horizontais, uma com 80x25 e a outra com 2480x3507 linhas...

A única "encrenca" é que o número de pixels depende do modo de impressão, mas é simples. A Win32prn tem 4 modos: no -1, rascunho, são 2480 x 3507 pixels; no modo -2, regular, o dobro do rascunho; no -3, o dobro do -2; e, no -4, ótimo, o dobro do -3. O que faço: monto a coisa em modo rascunho e, dependendo do modo de impressão que o usuário setar, multiplico as coordenadas em pixels por 1, 2, 3 ou 4. Feito.
Paulo Pereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 28 Abr 2011 00:29
Localização: Joinville / SC

Impressao de Etiqueta com Papel A4

Mensagem por Paulo Pereira »

Desculpe as pergutas basicas
no exemplo...

Código: Selecionar todos

priv arq:=_pat+"\0703\cheque\imagem\logo.bmp"
if file(arq)
  oWin32Bmp := Win32Bmp():new()
  oWin32Bmp:loadFile(arq)
  x1=85*pix
  y1=85*pix
  x2=295*pix
  y2=85*pix
  oWin32Bmp:draw( oprinter,  { x1, y1, x2, y2 } )
endi
Aqui vc faz referencia ao objeto oprinter, mas onde ele foi definido ??
oWin32Bmp:draw( oprinter, { x1, y1, x2, y2 } )

Em outro exemplo vc faz referencia a printer, que variavel é essa ??
oPrinter := Win32Prn():new(printer)

PS: Um BMP é umas 10 vezes maior que o JPG, nao da para acreditar que nao tem funcao para imprimir JPG
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Impressao de Etiqueta com Papel A4

Mensagem por Eolo »

Na sequencia:

1. a variável PRINTER ficou meio perdida no tópico, não fiz referência a ela porque achei que não precisava, mas ela vem de um comando anterior, "printer:=GetDefaultPrinter()", que elege a impressora padrão do Windows pra jogar no papel a impressão que vai ser criada. Nota: neste caso, escolhi a printer padrão, mas pode ser qualquer uma instalada, vc pode até deixar a critério du usuário escolher qual printer da rede ele quer usar. No meu caso, não precisei dessa opção.

2. em seguida, o comando "oPrinter:=Win32Prn():new(printer)" cria o job de impressão, direcionado à impressora da variável "printer", que recebe o handle "oPrinter". Tudo que eu mandar pra oPrinter, vai pro job. Nota: imagina o job de impressão como uma A4 virtual. No Clipper, a impressão vai direto pra LPT, certo? Aqui, vc imprime na A4 virtual e, quando estiver tudo pronto, vc solta o comando oPrinter:endDoc(), que manda a impressão pro papel.

3. a partir daí, todos os outros comandos
oPrinter:setPrintQuality(-1)
oPrinter:formtype(9)
oPrinter:create()
...
oWin32Bmp:draw( oprinter,{x1,y1,x2,y2})
etc.

apontam pro job "oPrinter" que vai ser impresso na impressora "Printer".

Sobre o uso do BMP ou JPG, arrisco um palpite (não posso afirmar com certeza): no BMP vc tem na mão as coordenadas da imagem, direto, enquanto que o JPG é um "BMP comprimido, zipado". Pra usar um JPG, seria preciso antes descomprimir o arquivo, então talvez por isso o xHarbour tenha decidido usar o BMP. Fazendo uma correlação com música, o JPG seria um MP3, que pra tocar precisa ser deszipado. Já um WAV (ou o BMP) não requer isso.

BMP é o apelido de bitmap, ou "mapa de bits", cada bit de uma imagem tem as respectivas coordenadas de posição, cor etc. gravadas no arquivo. Em um JPG, essas coordenadas são zipadas, pra economizar espaço em disco.
Paulo Pereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 28 Abr 2011 00:29
Localização: Joinville / SC

Impressao de Etiqueta com Papel A4

Mensagem por Paulo Pereira »

Muito Obrigado..
Consegui imprimir uma imagem, sem usar 'muletas', progamas externos...
E para cada linha de texto precisa pegar a largua e altura fazer o setpos()
e imprimir..é bem na unha..

Voce teria o manual do das opcaos do objeto Win32Prn() ??


* imprime nome linha 1
lar=iif(lado=1,1117*pix,2357*pix)
alt=(119*pix)+((round(imprime/2,0)-1)*(354*pix))
setpos(lar,alt)
oPrinter:TextOutat(lar,alt,hb_oemtoansi(nome01),.f.,.f.,alinha(1))
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Impressao de Etiqueta com Papel A4

Mensagem por Eolo »

Paulo, me passa seu email, mando o HELP do xHarbour.
Isso de pixels e tais parece meio complicado, mas não é.
Quando vc pegar o jeito, nunca mais quer saber do Clipper e LPT... hehehee

O Setpos() é uma muleta, pra ajudar quem veio do Clipper.
Começa a pensar em pixels, é o futuro.

EDITANDO: acho que a linha "setpos(lar,alt)" no meu fonte tá sobrando...
a função TextOutat() trabalha em pixels, então a linha anterior não faz sentido. BUG inofensivo.
Text Out At = Texto Impresso Em (coordenadas x,y em pixels), que pode ser alinhado à esquerda, à direta ou centralizado na coordenada "coluna")

Linha 1 na altura X em pixels, com fonte Arial 12 Bold etc.
Linha 2? Descubra quanto tem que aumentar em X pra sair com o espaçamento que vc quer.

É fantástico, vc imprime TUDO e em QUALQUER lugar do A4, "sem restrições".
Paulo Pereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 28 Abr 2011 00:29
Localização: Joinville / SC

Impressao de Etiqueta com Papel A4

Mensagem por Paulo Pereira »

legal...
Quanto ao help, vc deveria postar aqui basta zipar e anexar o arquivo.. ai todos poderemos usar...
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Impressao de Etiqueta com Papel A4

Mensagem por Toledo »

Segue o link para copiar o Help do xHarbour:

Mensagem editada: [ link era DEMO e em linguagem desconhecida ]

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Paulo Pereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 28 Abr 2011 00:29
Localização: Joinville / SC

Impressao de Etiqueta com Papel A4

Mensagem por Paulo Pereira »

Opa..
Nao querendo abusar.. mas que linguagem é essa ? Esperanto..?? Latin...??
nao tem ingles ?

Syntax
Win32Prn():new( [<param>] ) --> xReturn

Arguments
<param>
Convallis bibendum turpis. Fusce dignissim ligula eu tortor. Fuse nec nibh sit amet sem viverra tempus. Maecenas non neque in leo dapibu. Return
Lobortis. Fusce nec magna vel sem sodales accumsan. Phasellus egestas, nunc at faucbus.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Impressao de Etiqueta com Papel A4

Mensagem por Eolo »

O arquivo é grande demais pra anexar.
Aqui vai o link pra baixar:
http://mbf.me/qiRaO
Paulo Pereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 28 Abr 2011 00:29
Localização: Joinville / SC

Impressao de Etiqueta com Papel A4

Mensagem por Paulo Pereira »

Agora sim..
Muito obrigado...
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Impressao de Etiqueta com Papel A4

Mensagem por alxsts »

Olá!

Subi este manual para a Seção de Downloads do Fórum (xHarbour Language Reference Guide). Está aguardando liberação pela administração.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Impressao de Etiqueta com Papel A4

Mensagem por Eolo »

Um lembrete (pra quem usa xHarbour 1.0.0 e/ou 1.2.1+.

No 1.0.0, a função oWin32Prn:textOutAt(), no último parâmetro nTextAlign, recebe 0, 1 ou 2, para alinhamento à esquerda, direita e centralizado.

No 1.2.1+, esses valores mudam para 0, 2 e 6.
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Impressao de Etiqueta com Papel A4

Mensagem por Claudio Soto »

mantenha a PROPORÇÃO altura/largura do BMP original
Hola todos,
aquí les dejo una función para ajustar las dimensiones de una imagen a las dimensiones del dispositivo de salida manteniendo las proporciones originales de la imagen.
Saludos,
Claudio Soto.

Código: Selecionar todos

FUNCTION Ejemplo ()
// Dimensiones de la imagen
Image_Width  := 1200
Image_Height :=  800

// Dimensiones del dispositivo de salida
DevOut_Width  := 320
DevOut_Height := 200

// Ajusta las dimensiones de la imagen a las dimensiones del rectangulo de salida
AdjustRect (@DevOut_Width, @DevOut_Height, Image_Width, Image_Height) 

// Retorna:
// DevOut_Width  <---- nuevo ancho que debe tener el dispositivo de salida  
// DevOut_Height <---- nueva altura que debe tener el dipositivo de salida

RETURN


PROCEDURE AdjustRect (DevOut_Width, DevOut_Height, Image_Width, Image_Height) 
   IF Image_Width * DevOut_Height / Image_Height <= DevOut_Width
      DevOut_Width  = INT (Image_Width  * DevOut_Height / Image_Height)
   ELSE
      DevOut_Height = INT (Image_Height * DevOut_Width  / Image_Width)
   ENDIF   
RETURN      
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Paulo Pereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 28 Abr 2011 00:29
Localização: Joinville / SC

Impressao de Etiqueta com Papel A4

Mensagem por Paulo Pereira »

Oi.
Estou fazendo o seguinte... Sempre usei o Dosprint, e meu cliente esta acostumado a gerar o PDF, etc...
Vendo o manual do dosprint, existe um comando muito simples para colocar uma imagem no PDF, chr(27)"imagem.jpg,xxxDPI" , sendo que posso usar os JPG do meu cliente , mais de 8000 pecas/imagens, sem ter que ficar convertento.
Imagina o tamanho em BMP..

O problema é que ele tem imagem com resolucao 2484 x 3512 e até maiores que ficam enormes na impressao. e outras como 827 x 1169 sai tranquido..

Entao preciso se uma funcao para pegar as dimensoes da IMAGEM (altura x lurgura), desse modo conforme o tamanho aumento o DPI e ela sai menor...

Alguem tem essa funcao, pegar as dimensoes da imagem ??
Responder