Página 2 de 3
Impressao de Etiqueta com Papel A4
Enviado: 17 Set 2012 14:18
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
Impressao de Etiqueta com Papel A4
Enviado: 17 Set 2012 18:14
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.
Impressao de Etiqueta com Papel A4
Enviado: 17 Set 2012 19:41
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
Impressao de Etiqueta com Papel A4
Enviado: 17 Set 2012 20:22
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.
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 00:18
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))
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 00:33
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".
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 01:20
por Paulo Pereira
legal...
Quanto ao help, vc deveria postar aqui basta zipar e anexar o arquivo.. ai todos poderemos usar...
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 10:09
por Toledo
Segue o link para copiar o Help do xHarbour:
Mensagem editada: [ link era DEMO e em linguagem desconhecida ]
Abraços,
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 11:30
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.
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 11:58
por Eolo
O arquivo é grande demais pra anexar.
Aqui vai o link pra baixar:
http://mbf.me/qiRaO
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 12:37
por Paulo Pereira
Agora sim..
Muito obrigado...
Impressao de Etiqueta com Papel A4
Enviado: 18 Set 2012 12:48
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.
Impressao de Etiqueta com Papel A4
Enviado: 19 Set 2012 11:21
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.
Impressao de Etiqueta com Papel A4
Enviado: 13 Out 2012 22:08
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
Impressao de Etiqueta com Papel A4
Enviado: 24 Out 2012 16:21
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 ??