• 0
Sign in to follow this  
simoesluciano

Imprimir Direto Na Lpt1

Question

Como imprimir direto na LPT1 via Delphi com Windows XP?

Já usei o código abaixo e não funcionou.

AssignFile(Arquivo, 'LPT1');

Rewrite(Arquivo);

Write(Arquivo, 'TEXTO');

CloseFile(Arquivo);

Obrigado.

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 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?

Share this post


Link to post
Share on other sites
  • 0
Guest Visitante

Como faço para dizer em qual coluna vou imprimir o texto da linha abaixo?

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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
  • 0

Segundo o manual da LX-300+ são esses os comandos:

Page format:

ESC C, ESC C0, ESC X, ESC N, ESC O, ESC 4

Mas não sei como usá-los :blink: no delphi para informar o tamanho do cheque 76mm de altura x 221mm de largura

Share this post


Link to post
Share on other sites
  • 0

Não sei se pelo Writeln na lpt1 você consegue comandar a impressora; se conseguir é só mandar #27 mais o controle. Se não conseguir, neste link tem um exemplo de como enviar os comandos Esc/P.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this