Win32prn de maneira fácil
Enviado: 16 Jan 2007 14:30
Essa é minha primeira postagem, eu faço pequenos programas em clipper para uso pessoal, folha de pagamento, nota fiscal, faturas, envelope de pagamento, férias etc coisas simples, ao tentar passar meus programas para xHarbour senti certa dificuldade com a parte de impressão por isso deixo aki o que aprendi e espero ajudar akeles que tambem estão com duvidas relativas a classe win32prn.
Segue um exemplo simples:
function main()
local oprinter:=win32prn(), ncol:=0, nlin:=0
oprinter:new(getdefaultprinter())
oprinter:formtype:=9 // folha A4
oprinter:create()
oprinter:startdoc()
oprinter:setfont("Courier New",14,,,,,,1,) // definindo a fonte
ncol:=oprinter:GetCharWidth() // largura da fonte em pixels
nlin:=oprinter:GetCharHeight() // altura da fonte em pixels
oprinter:textoutat(01*ncol,01*nlin,"Seu texto vai aqui") // lembrando coluna e depois linha
...
oprinter:textoutat(01*ncol,40*nlin,"Aqui ja estamos na linha 40 ")
oprinter:enddoc()
oprinter:destroy()
return
Só isso, agora copie e compile e vera que funciona de maneira muito simples e fácil, sem bmp sem arquivo de teste enorme e confuso. Abaixo segue um exemplo mais completo:
function main()
local oprinter:=win32prn(), ncol:=0, nlin:=0
oprinter:new(getdefaultprinter())
oprinter:formtype:=9
oprinter:SetPrintQuality(4) // qualidade da impressão
oprinter:create()
oprinter:startdoc()
oprinter:setfont("Courier New",14,,,,,,1,)
ncol:=oprinter:GetCharWidth()
nlin:=oprinter:GetCharHeight()
oprinter:textoutat(01*ncol,01*nlin,"qualidade ="+str(oprinter:SetPrintQuality()))
oprinter:textoutat(01*ncol,02*nlin,"maxrow ="+str(oprinter:MaxRow()))
oprinter:textoutat(01*ncol,03*nlin,"maxcol ="+str(oprinter:MaxCol()))
oprinter:UnderLine(65536) // agora sai sublinhado
oprinter:textoutat(oprinter:MM_TO_POSX(010), oprinter:MM_TO_POSY(200), "imprimindo a 10mm da borda esquerda e 200mm da borda superior da folha")
oprinter:enddoc()
oprinter:destroy()
return
Espero ter ajudado na minha impressora HP930C USB funcionou perfeitamente, no arquivo "psc.prg" que acompanha o Print Script 94 (http://www.xharbour.com/xhc/index.asp?p ... show_sub=2) tem o detalhamento dessa classe, começa na linha "CLASS WINPRN32" é só dar o comando "localizar..." e no arquivo "wingdi.ch" vem coisas como:
#define DMPAPER_EXECUTIVE 7 // Executive 7 1/4 x 10 1/2 in
#define DMPAPER_A3 8 // A3 297 x 420 mm
#define DMPAPER_A4 9 // A4 210 x 297 mm
#define DMPAPER_A4SMALL 10 // A4 Small 210 x 297 mm
#define DMPAPER_A5 11 // A5 148 x 210 mm
#define DMPAPER_B4 12 // B4 (JIS) 250 x 354
#define DMPAPER_B5 13 // B5 (JIS) 182 x 257 mm
#define DMPAPER_FOLIO 14 // Folio 8 1/2 x 13 in
Um abraço a todos. Me desculpa mas achei que o que escrevi poderia ser util a muita gente como eu que estava acostumada a usar Clipper para fazer programas para uso pessoal e não querem pagar para imprimir usando programas de terceiros, a solução acima é suficiente para mim.
Segue um exemplo simples:
function main()
local oprinter:=win32prn(), ncol:=0, nlin:=0
oprinter:new(getdefaultprinter())
oprinter:formtype:=9 // folha A4
oprinter:create()
oprinter:startdoc()
oprinter:setfont("Courier New",14,,,,,,1,) // definindo a fonte
ncol:=oprinter:GetCharWidth() // largura da fonte em pixels
nlin:=oprinter:GetCharHeight() // altura da fonte em pixels
oprinter:textoutat(01*ncol,01*nlin,"Seu texto vai aqui") // lembrando coluna e depois linha
...
oprinter:textoutat(01*ncol,40*nlin,"Aqui ja estamos na linha 40 ")
oprinter:enddoc()
oprinter:destroy()
return
Só isso, agora copie e compile e vera que funciona de maneira muito simples e fácil, sem bmp sem arquivo de teste enorme e confuso. Abaixo segue um exemplo mais completo:
function main()
local oprinter:=win32prn(), ncol:=0, nlin:=0
oprinter:new(getdefaultprinter())
oprinter:formtype:=9
oprinter:SetPrintQuality(4) // qualidade da impressão
oprinter:create()
oprinter:startdoc()
oprinter:setfont("Courier New",14,,,,,,1,)
ncol:=oprinter:GetCharWidth()
nlin:=oprinter:GetCharHeight()
oprinter:textoutat(01*ncol,01*nlin,"qualidade ="+str(oprinter:SetPrintQuality()))
oprinter:textoutat(01*ncol,02*nlin,"maxrow ="+str(oprinter:MaxRow()))
oprinter:textoutat(01*ncol,03*nlin,"maxcol ="+str(oprinter:MaxCol()))
oprinter:UnderLine(65536) // agora sai sublinhado
oprinter:textoutat(oprinter:MM_TO_POSX(010), oprinter:MM_TO_POSY(200), "imprimindo a 10mm da borda esquerda e 200mm da borda superior da folha")
oprinter:enddoc()
oprinter:destroy()
return
Espero ter ajudado na minha impressora HP930C USB funcionou perfeitamente, no arquivo "psc.prg" que acompanha o Print Script 94 (http://www.xharbour.com/xhc/index.asp?p ... show_sub=2) tem o detalhamento dessa classe, começa na linha "CLASS WINPRN32" é só dar o comando "localizar..." e no arquivo "wingdi.ch" vem coisas como:
#define DMPAPER_EXECUTIVE 7 // Executive 7 1/4 x 10 1/2 in
#define DMPAPER_A3 8 // A3 297 x 420 mm
#define DMPAPER_A4 9 // A4 210 x 297 mm
#define DMPAPER_A4SMALL 10 // A4 Small 210 x 297 mm
#define DMPAPER_A5 11 // A5 148 x 210 mm
#define DMPAPER_B4 12 // B4 (JIS) 250 x 354
#define DMPAPER_B5 13 // B5 (JIS) 182 x 257 mm
#define DMPAPER_FOLIO 14 // Folio 8 1/2 x 13 in
Um abraço a todos. Me desculpa mas achei que o que escrevi poderia ser util a muita gente como eu que estava acostumada a usar Clipper para fazer programas para uso pessoal e não querem pagar para imprimir usando programas de terceiros, a solução acima é suficiente para mim.