Comando de impressão de arquivo.

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

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Comando de impressão de arquivo.

Mensagem por cjp »

Colegas,

Estou usando há algum tempo a função win_printfileraw() para imprimir um arquivo gerado no meu programa em Harbour.

Gostaria de mudar a fonte da impressão para Courier. Imagino que isso deve ser feito na hora de gerar o arquivo de impressão, mas não sei como fazer isto. Alguém saberia me informar como fazer?

Estou gerando o arquivo desta maneira:

Código: Selecionar todos

                              set printer to "arqprint.tmp"
                              set devi to print
                              @ ...,... say "...."
etc
Tem como mudar a fonte neste caso?
Inacio de Carvalho Neto
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Comando de impressão de arquivo.

Mensagem por Pablo César »

cjp escreveu:Estou usando há algum tempo a função win_printfileraw() para imprimir um arquivo gerado no meu programa em Harbour.
Olá Inácio, se você está usando @ say... e win_printfileraw para gerar arquivo e imprimir, então isso quer dizer que você não está imprimindo em modo gráfico. Portanto você estaria utilizando a formatação dos comandos que a própria impressora oferece em modo texto. Portanto, para você mudar de fontes e tamanho de fontes, você terá que mudar para o modo gráfico. O STRU.prg o aplicativo imprime em modo gráfico, é totalmente diferente da forma que você estava acostumado com Clipper.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Comando de impressão de arquivo.

Mensagem por cjp »

Eu sei disso, Pablo. Inclusive já uso impressão em modo gráfico em outras funções.

Mas, nesta, mantive no modo anterior, porque estava tendo dificuldade em convertê-la. E esta foi a saída mais fácil para imprimir sem precisar de muita alteração no programa.

Então neste caso não tem jeito mesmo de mudar a fonte? Só se eu mudar para o modo gráfico mesmo, né? Que pena!!!
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Comando de impressão de arquivo.

Mensagem por Jairo Maia »

Olá Inácio,

As opções que você tem de mudança de fontes neste caso, me parece que se resume no seguinte:

Código: Selecionar todos

@ nLinha, nColuna Say "CHR(27)+'M'"                    // ativa fonte elite
@ nLinha, nColuna Say "CHR(27)+'P'"                     // desativa fonte elite

@ nLinha, nColuna Say "CHR(27)+'E'"                     // ativa fonte em negrito
@ nLinha, nColuna Say "CHR(27)+'F'"                     // desativa fonte em negrito

@ nLinha, nColuna Say "CHR(27)+'W'+CHR(1)"       // ativa fonte expandida
@ nLinha, nColuna Say "CHR(27)+'W'+CHR(0)"       // desativa fonte expandida
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Comando de impressão de arquivo.

Mensagem por Pablo César »

Sim, bem mencionado caro amigo Jairo: comandos de impressão no padrão EPSON.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Duda 'Sgluber'
Usuário Nível 3
Usuário Nível 3
Mensagens: 148
Registrado em: 11 Mar 2013 21:57
Localização: Interior de São Paulo

Comando de impressão de arquivo.

Mensagem por Duda 'Sgluber' »

cjp escreveu:...
Então neste caso não tem jeito mesmo de mudar a fonte? Só se eu mudar para o modo gráfico mesmo, né? Que pena!!!
Tem jeito sim, cjp! :-)

Impressoras q usam o padrão HP também aceitam comandos de impressão em modo texto. Recentemente eu postei algumas mensagens sobre este assunto, inclusive disponibilizei aqui um documento em PDF que apresenta "um milhão" de opções de configuração para impressoras padrão HP.

Dê uma olhada e não deixe de voltar a escrever se continuar em dúvida. Desculpe por não oferecer exemplos agora, é que estou de saída (no momento)! ;-)
Comecei pra valer nos tempos do MSX e nunca mais parei... grande caminhada! :-)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Comando de impressão de arquivo.

Mensagem por cjp »

Duda e demais colegas,

Vou testar as soluções apontadas e depois eu posto o resultado.

Obrigado

Inacio
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Comando de impressão de arquivo.

Mensagem por Jairo Maia »

Olá Pessoal,

Inácio, primeiro uma correção: os comandos que passei acima são para matricial, em DeskJet ou Laser os comandos são os seguintes:

Código: Selecionar todos

@ nLinha, nColuna Say "CHR(27)+'(s12H'"   // ativa fonte elite
@ nLinha, nColuna Say "CHR(27)+'(s10H'"   // desativa fonte elite

@ nLinha, nColuna Say "CHR(27)+'(s3B'"    // ativa fonte em negrito
@ nLinha, nColuna Say "CHR(27)+'(s-3B'"   // desativa fonte em negrito
 
@ nLinha, nColuna Say "CHR(27)+'(s3B'"    // ativa fonte expandida
@ nLinha, nColuna Say "CHR(27)+'(s-3B'"   // desativa fonte expandida
Duda, muito interessante o documento. Apenas não entendi direito como definir os comandos. Por exemplo, para setar a fonte Courier seria assim?:

Código: Selecionar todos

@ nLinha, nColuna Say Chr( 027 ) + Chr( 040 ) + Chr( 115 ) + Chr( 052 ) + Chr( 048 ) + Chr( 057 )
Eu acharia legal também se você pudesse dar um exemplo de uso quando puder.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Comando de impressão de arquivo.

Mensagem por cjp »

Caro Duda e demais colegas,

Li com atenção o arquivo que vc postou, mas não achei nele nada que dissesse respeito específico à alteração do tipo de fonte para a Courier. Pode ser que eu não tenha entendido.

Também tentei da forma como o Jairo postou, mas não funcionou, não está imprimindo em Courier.

Poderia me dar uma ajuda?
Inacio de Carvalho Neto
Avatar do usuário
Duda 'Sgluber'
Usuário Nível 3
Usuário Nível 3
Mensagens: 148
Registrado em: 11 Mar 2013 21:57
Localização: Interior de São Paulo

Comando de impressão de arquivo.

Mensagem por Duda 'Sgluber' »

Inacio, Jairo e demais amigos,

desculpem a demora! Estive bastante enrolado nos últimos dias... coisas de quem se mete a programar, vocês sabem! :-)

Prometo postar algo melhor nestes próximos dias, mas por enquanto vou deixar uma "palhinha" especial pra você, Inacio:

Código: Selecionar todos

*
* HP.prg
*
* Compilação:
*
* hbmk2 -lhbwin hp
*
* Duda, 01.abr.2013... SAÚDE e PAZ para o meu pai, que hoje faz 68 anos... é não é mentira! :-D
*

FUNCTION MAIN

local aCourier, i

#define esc           chr (27)
#define hp_courier    esc + '(s0p8h0s0b4099T'  // Courier
#define hp_courierb   esc + '(s0p8h0s3b4099T'  // Courier Bold
#define hp_courieri   esc + '(s0p8h1s0b4099T'  // Courier Italic
#define hp_courierbi  esc + '(s0p8h1s3b4099T'  // Courier Bold Italic

cls

aCourier := {hp_courier, hp_courierb, hp_courieri, hp_courierbi}

set print  to hp.prn
set device to print
setprc (00,00)

for i = 1 to len (aCourier)
	@ prow()+1, 00     say aCourier [i]
	@ prow()  , pcol() say 'Clipper On Line'
next i

set print  to
set device to screen

win_printfileraw (win_printergetdefault(), 'hp.prn', 'HP - testando Courier...')						

RETURN
Hehehe... meio às pressas, mas acho que já será uma pequena ajuda! :-)

Detalhe: experimente trocar as sequências "p8" por "p5", por exemplo, e veja o resultado.

Abs e até mais! ;-)
Comecei pra valer nos tempos do MSX e nunca mais parei... grande caminhada! :-)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Comando de impressão de arquivo.

Mensagem por asimoes »

Uma pequena contribuição:

Código: Selecionar todos

   set print  to hp.prn
   set device to print
   //setprc (00,00)
   @ 00,00 SAY CHR(27)+'%0A' //Substitui o SetPrc(0,0)
   
   ImpLaser(000,100,8,"TESTE DE IMPRESSÃO COM TAM 8","AR")
   set print  to
   set device to screen
   win_printfileraw (win_printergetdefault(), 'hp.prn', 'HP - testando Courier...')      

Código: Selecionar todos

*----------------------------------------------------------------------------*
FUNCTION ImpLaser(nVer,nHor,nTam,cTexto,cTpLetra,lNegrito)
* nVer:     Posicao na VERTICAL em dots - cada 10 pontos correspondem a
*           aproximadamente 0,5 cm
* nHor:     Posicao na HORIZONTAL em dots - cada 40 pontos correspondem a
*           aproximadamente 1 Linha
* nTam:     Tamanho da letra - 1, 2, 3, 4, ..., 100
* cTexto:   Texto a ser impresso
* cTpLetra: Tipo da letra
* lNegrito: Imprime ou nao em negrito
*
* @ 00,00 SAY CHR(27)+'%0A' --> Comando e obrigatorio. Substitui o SetPrc(00,00)
*
*  %0A                     pcl mode
*  *t600R                  resolucao 600 dpi
*  &l1X                    numero de copia
*  *vT                     negrito
*  (19U                    tabela de simbolos windows 3.1 latin 1
*  (s4148t0b0s5.00v1P      (s4148t - seleciona fonte univers condensed
*                           (s0b    - (0) normal  (3) negrito
*                           (s0s    - condensed
*                           (s1P    - (1) poliespacado  (0) monoespacado
*  *p1206X                 posicionamento do cursor na Linha (em dots)
*  *p100Y                  posicionamento do cursor na Coluna (em dots)
*----------------------------------------------------------------------------*
DEFAULT nTam         TO 10
DEFAULT cTpLetra     TO 'UC'
DEFAULT lNegrito     TO .F.
DEFAULT cTexto       TO ' '

DO CASE
   CASE cTpLetra = 'WD' // WingDings
        @ 00,00 SAY  CHR(27)+'(579L'+;
                     CHR(27)+'(s31402t0b0s'+ALLTRIM(STR(nTam,4))+'.00h0P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'LG' // Letter Gothic
        @ 00,00 SAY  CHR(27)+'(19U'+;
                     CHR(27)+'(s4102t0b0s'+ALLTRIM(STR(nTam,4))+'.00h0P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'AR' // Arial
        @ 00,00 SAY  CHR(27)+'(19U'+;
                     CHR(27)+'(s16602t0b0s'+ALLTRIM(STR(nTam,4))+'.00v1P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'UC' // Universal Condensed
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(19U'+;
                     CHR(27)+'(s4148t0b4s'+ALLTRIM(STR(nTam,4))+'.00v1P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'UB' // Universal Condensed Bold
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(19U'+;
                     CHR(27)+'(s4148t3b0s'+ALLTRIM(STR(nTam,4))+'.00v1P'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'CB' // Courier Bold
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(8U'+;
                     CHR(27)+'(s0p'+ALLTRIM(STR(nTam,4))+'h0s3b4099T'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'CN' // Courier Normal
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(8U'+;
                     CHR(27)+'(s0p'+ALLTRIM(STR(nTam,4))+'h0s4b3099T'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto
   CASE cTpLetra = 'I250' // Codigo de Barras (Intercalado 2 de 5)
        @ 00,00 SAY  CHR(27)+'*t600R'+;
                     CHR(27)+'&l1X'+;
                     CHR(27)+'(8U'+;
                     CHR(27)+'(250X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nVer,4))+'X'+;
                     CHR(27)+'*p'+ALLTRIM(STR(nHor,4))+'Y'+;
                     cTexto

ENDCASE
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Comando de impressão de arquivo.

Mensagem por cjp »

Duda, teu exemplo não funcionou. Não dá erro nenhum, mas não imprime em Courier.

Asimões, o teu exemplo funcionou. Está imprimindo em Courier sim, mas tem um problema na acentuação: fica com caracteres estranhos em lugar das letras acentuadas. Como faço pra resolver isso?
Inacio de Carvalho Neto
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Comando de impressão de arquivo.

Mensagem por asimoes »

CJP,

Você você pode usar a função hb_oemtoansi("texto acentuado") ou editar o seu fonte usando uma fonte courier new.
Obs.: Se usar o UltraEdit setar a fonte para courier new.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Duda 'Sgluber'
Usuário Nível 3
Usuário Nível 3
Mensagens: 148
Registrado em: 11 Mar 2013 21:57
Localização: Interior de São Paulo

Comando de impressão de arquivo.

Mensagem por Duda 'Sgluber' »

asimoes escreveu:Uma pequena contribuição:
...
Uma GRANDE contribuição... assim eu nem preciso postar mais exemplos!

Valeu, asimoes! :-)
cjp escreveu:Duda, teu exemplo não funcionou. Não dá erro nenhum, mas não imprime em Courier.

Asimões, o teu exemplo funcionou. Está imprimindo em Courier sim, mas tem um problema na acentuação: fica com caracteres estranhos em lugar das letras acentuadas. Como faço pra resolver isso?
asimoes escreveu:...
Você você pode usar a função hb_oemtoansi("texto acentuado") ou editar o seu fonte usando uma fonte courier new.
Obs.: Se usar o UltraEdit setar a fonte para courier new.
...
Estranho, mas é fato que esses comandos não funcionam em 100% das impressoras... até onde eu sei, as "famílias" 5L, 6L, 1022 e 1100 funcionam normalmente. Acabei de recompilar meu exemplo e pra mim sai exatamente assim:
Teste courier.jpg
Nem cheguei a perguntar em qual marca/modelo vc iria utilizar, mas enfim: se o exemplo do asimoes resolveu, é o q importa! :-)

Qto aos caracteres acentuados, ofereço uma outra sugestão:

Código: Selecionar todos

@ prow(), pcol() say chr (27) + '(12U'
Se vc usar este comando sempre no ínicio do arquivo de impressão q for gerado, a página de código 850 será selecionada, e ela oferece toda a acentuação em português.

Se quiser dar uma olhada em todas as páginas disponíveis, verifique a seção "Symbol set selection" daquele PDF q eu postei em HP - Comandos de impressão.

Abs e até mais! :-)
Comecei pra valer nos tempos do MSX e nunca mais parei... grande caminhada! :-)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Comando de impressão de arquivo.

Mensagem por asimoes »

Duda,

O seu teste inicial funcionou também aqui comigo, usando as seguintes impressoras:

Ricoh AF-2050 e LexMark T-654

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder