Página 3 de 4

Comando de impressão de arquivo.

Enviado: 27 Mar 2013 16:35
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?

Comando de impressão de arquivo.

Enviado: 27 Mar 2013 16:48
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.

Comando de impressão de arquivo.

Enviado: 27 Mar 2013 19:25
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!!!

Comando de impressão de arquivo.

Enviado: 28 Mar 2013 08:51
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

Comando de impressão de arquivo.

Enviado: 28 Mar 2013 09:00
por Pablo César
Sim, bem mencionado caro amigo Jairo: comandos de impressão no padrão EPSON.

Comando de impressão de arquivo.

Enviado: 29 Mar 2013 00:10
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)! ;-)

Comando de impressão de arquivo.

Enviado: 29 Mar 2013 01:19
por cjp
Duda e demais colegas,

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

Obrigado

Inacio

Comando de impressão de arquivo.

Enviado: 29 Mar 2013 07:02
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.

Comando de impressão de arquivo.

Enviado: 01 Abr 2013 18:18
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?

Comando de impressão de arquivo.

Enviado: 01 Abr 2013 19:06
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! ;-)

Comando de impressão de arquivo.

Enviado: 02 Abr 2013 08:47
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

Comando de impressão de arquivo.

Enviado: 02 Abr 2013 17:33
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?

Comando de impressão de arquivo.

Enviado: 02 Abr 2013 19:16
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

Comando de impressão de arquivo.

Enviado: 03 Abr 2013 09:48
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! :-)

Comando de impressão de arquivo.

Enviado: 03 Abr 2013 11:30
por asimoes
Duda,

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

Ricoh AF-2050 e LexMark T-654

[]´s