Ir para conteúdo
Fórum Script Brasil
  • 0

Imprimir Direto Na Lpt1


simoesluciano

Pergunta

10 respostass a esta questão

Posts Recomendados

  • 0

Direto do meu XP, imprimindo tanto para a porta como para uma impressora da rede...

Var

ftOutFile: TextFile;

sOutPort: String;

Begin

sOutPort := 'LPT1';

// Também pode ser: sOutPort := '\\fatura\citizen.prn'; = uma impressora compartilhada. citizen.prn é o

// nome do compartilhamento. E' importante ter o ".prn", para manter compatibilidade com outras formas

// de direcionar uma impressão para uma impressora na rede... p.e., Clipper, Turbo Pascal, Basic : )

// ou sOutPort := 'c:\temp\texto.txt'; = gravando diretamente em um arquivo

AssignFile(ftOutFile,sOutPort);

ReWrite(ftOutFile);

WriteLn(ftOutFile,'Isso vai ser impresso!');

WriteLn(ftOutFile,'Isso, a seguir, vai fazer a página avançar');

Write(ftOutFile,chr(12));

// WriteLn para dar um cr+lf automático em cada linha.

// Write para enviar só o comando #12 e avançar a folha... se usasse WriteLN, depois de avançar, ainda

// haveria um "carriage return" e um "line feed"

CloseFile(ftOutFile);

End;

Ok?

Link para o comentário
Compartilhar em outros sites

  • 0

Não faz...

Você deverá formatar a linha a ser impressa, montando cada coluna da forma como desejar, completando com espaços ou "zeros" as strings referentes aos campos dos registros...

1) Procure, nos foruns e outros sites, uma função que completa com espaços ou zeros uma string, tanto à direita, como à esquerda, e que, de quebra, possa, também, centralizar uma string;

2) Use estas funções para montar as suas strings a serem impressas. Imagine uma lista simples, com o nome do apresentador e sua renda, e que você precise imprimir esta lista bem formatada:

sNome[1] := 'FAUSTO';
sNome[2] := 'RATINHO';
sNome[3] := 'SILVIO SANTOS';
sNome[4] := 'CELSO FREITAS';
sNome[5] := 'TOM CAVALCANTI';

vRenda[1] := 25000;
vRenda[2] := 5000;
vRenda[3] := 50000;
vRenda[4] := 10000;
vRenda[5] := 3500;

WriteLn(ftOutFile,'      Nome do Sujeito         ','   Renda R$  ');
WriteLn(ftOutFile,'------------------------------','-------------');
Nome[1]+' '+FormatFloat('###,###,##0.00',vRenda[1]);
WriteLn(ftOutFile,sNome[1]+' '+FormatFloat('###,###,#0.00',vRenda[1]));
WriteLn(ftOutFile,sNome[2]+' '+FormatFloat('###,###,#0.00',vRenda[2]));
WriteLn(ftOutFile,sNome[3]+' '+FormatFloat('###,###,#0.00',vRenda[3]));
WriteLn(ftOutFile,sNome[4]+' '+FormatFloat('###,###,#0.00',vRenda[4]));
WriteLn(ftOutFile,sNome[5]+' '+FormatFloat('###,###,#0.00',vRenda[5]));
O código acima vai produzir um resultado ruim, sem formatação... Então, Você precisa: a) Completar com espaços, à direita, os nomes, até o total de 30 (trinta) espaços... B) Completar com espaços, à esquerda, os valores, até o total de 13 (treze) espaços... Considerando que você crie uma função que faça isso, que essa função tenha o nome de "Complete", e que aceite, como parâmetros, a string, o tamanho desejado e a quantidade de espaços, você deveria usar isso:
WriteLn(ftOutFile,'      Nome do Sujeito         ','  Renda R$   ');
WriteLn(ftOutFile,'------------------------------','-------------');
WriteLn(ftOutFile,Complete(sNome[1],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[1]),13,'E'));
WriteLn(ftOutFile,Complete(sNome[2],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[2]),13,'E'));
WriteLn(ftOutFile,Complete(sNome[3],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[3]),13,'E'));
WriteLn(ftOutFile,Complete(sNome[4],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[4]),13,'E'));
WriteLn(ftOutFile,Complete(sNome[5],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[5]),13,'E'));

Ok?

Link para o comentário
Compartilhar em outros sites

  • 0

Excelente! Agora entendí melhor! Muito Obrigado mesmo!

No meu caso, não preciso dos títulos das colunas pois é pra prencher um formulário contínuo de cheques, mas estou ainda com algumas dúvidas, dentre elas é de como posso quebrar a linha onde vai aparecer o extenso do valor do cheque. O valor por extenso está armazenado num campo texto na tabela e fica mais ou menos desse tamanho:

Trezentos Reais * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Como faço pra imprimir quebrando em duas linhas utilizando a impressão direta na LPT1, lembrando que às vezes o valor por extenso pode chegar até a segunda linha se o valor for grande como R$ 444.444,44?

Outra coisa, fiz alguns testes e aqui quando mando imprimir quando tem mais de um registro não consigo fazer a impressora LX-300 saltar a página do tamanho do cheque (76x221mm), no XP já criei um formulário com esse tamanho mas na hora de selecionar esse como papel padrão da impressora a LX-300 não aceita esse tamanho(não aparece).

Como fazer para saltar corretamente no tamanho (da folha) do cheque?

Link para o comentário
Compartilhar em outros sites

  • 0
Como faço pra imprimir quebrando em duas linhas utilizando a impressão direta na LPT1, lembrando que às vezes o valor por extenso pode chegar até a segunda linha se o valor for grande como R$ 444.444,44?
A melhor opção é dividir o texto a ser impresso obdecendo a quantidade máxima de caracteres que cabem na linha (observar valor de CPP - caracter por polegadas, normalmente 10cpp ou cpi). Deste modo, você manda as linhas utilizando apenas o Writeln.

Outra coisa, fiz alguns testes e aqui quando mando imprimir quando tem mais de um registro não consigo fazer a impressora LX-300 saltar a página do tamanho do cheque (76x221mm), no XP já criei um formulário com esse tamanho mas na hora de selecionar esse como papel padrão da impressora a LX-300 não aceita esse tamanho(não aparece).

Como fazer para saltar corretamente no tamanho (da folha) do cheque?

Como você está imprimindo diratamente para a impressora, acredito que a formatação que você cria no Windows não se aplica (faz tempo que não utilizo este recurso, posso estar enganado). Neste caso, você terá que controlar a impressão na mão. Uma opção, como sugeriu o colega kmkg, seria enviar a configuração do tamanho de página, para a impressora, utilizando os respectivos comandos ESCAPE (ver manual da impressora); Nesta modalidade, após configurado o tamanho da página, basta enviar um caractere FF (Form Feed - avanço de página = #12). Outra opção, talvez mais simples, pode ser simplesmente controlar o avanço de linha de modo que você manda os caracteres CR+LF (Carrier Return + Line Feed = #13#10) fazendo com que o carro da impressora avance até a próxima folha de cheque - utilizando Writeln resolve isto. Deverá, nesta situação, ser observada quantas linhas (respeitando a configuração de LPP - linhas por polegadas, normalmente 6lpp) que podem ser impressas numa folha de cheque.

Ex. Uma folha de cheque tem aproximadamente 3" (polegadas). Com a configuração de LPP igual a 5 linhas, uma folha de cheque teria um total de 15 linhas (altura da sua folha em linhas). Daí para imprimir o texto e avançar para a próxima folha, seria feito algo mais ou menos assim:

writeln(ftOutFile, ''); // avança para a 2ª linha
writeln(ftOutFile, ''); // avança para a 3ª linha
writeln(ftOutFile, 'primeira linha do valor por extenso'); // imprime e avança para a 4ª linha
writeln(ftOutFile, 'segunda linha do valor por extenso'); // imprime e avança para a 5ª linha
..
writeln(ftOutFile, ''); // avança para a 14ª linha
writeln(ftOutFile, ''); // avança para a 15ª linha
writeln(ftOutFile, ''); // avança para a 1ª linha da PRÓXIMA folha

Acho que seria mais ou menos isto.

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...