Ajuda - Busca - Membros - Calendário
Versão Completa: (Resolvido) problemas com impressão direta
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
flavioavilela
bom dia a todos...
estou fazendo uma impressão direta usando LX300+II com um papel pré-impresso pela porta USB.
não estou conseguindo encaixar de forma alguma as informações nos campos corretamente, sempre sai um pouquinho mais acima, um pouquinho mais abaixo, pra esquerda ou pra direita, nunca onde precisa... e já configurei o papel personalizado com as medidas que preciso aqui e tal....
segue exemplo de um código simples:
CODE
with VDOPrinter1 do
  begin
    BeginDoc;
    if PrinterType = ptCanvas then
      CanvasSets.Font.Size:= 14
    else
      //DotMatrixSets.Font.Size:=

    NewLine(2);
    Print(60, EdtNatureza_Operacao.Text, True);
    NewLine(2);
    Print(02, EdtRemetente.Text);
    Print(39, EdtDestinatario.Text, True);
    NewLine(4);
    Print(02, EdtConsignatario.Text, true);
    NewLine(4);
    Print(01, EdtCalculado.Text);
    EndDoc;
  end;


por exemplo, se eu colocar ai 'Print(02, EdtRemetente.Text)', seria pra sair na segunda coluna, mas sai lá pra 10, 12 coluna...

Outra coisa: como eu faço pra saber certin qual a coluna que devo colocar para sair a informação naquele determinado lugar??? alguém já fez isso e possa dar um auxilio????
desde já, obrigado a todos...
Jhonas
QUOTE
por exemplo, se eu colocar ai 'Print(02, EdtRemetente.Text)', seria pra sair na segunda coluna, mas sai lá pra 10, 12 coluna...

Outra coisa: como eu faço pra saber certin qual a coluna que devo colocar para sair a informação naquele determinado lugar??? alguém já fez isso e possa dar um auxilio????


Se voce não usar a fonte Courrier ( que tem espaçamentos iguais entre os caracteres ) fica dificil.

outra solução na hora da impressão é controlar a propriedade Top e Left do componente ou do QR

Informações úteis sobre os códigos da impressora

http://scriptbrasil.com.br/forum/index.php...st&p=477817

abraço

flavioavilela
tipo, as configurações do componente (VDOPrint) não funciona... altero a fonte, tamanho, margem esqueda e direita e na hora de imprimir não muda nada... e estou usando a courier mesmo....
Jhonas
QUOTE
tipo, as configurações do componente (VDOPrint) não funciona... altero a fonte, tamanho, margem esqueda e direita e na hora de imprimir não muda nada... e estou usando a courier mesmo....
Voce deve usar o componente VDODmPrinter

Utilizado para impressão rápida (modo DOS). Específico para impressoras matriciais, opera com padrão Epson, e utiliza o Spool de impressão do Windows

exemplo:

QUOTE
procedure TfrmDemo.SpeedButton2Click(Sender: TObject);
var
I: Byte;
begin
with VDODmPrinter1 do
begin
{ Inicia o Documento }
BeginDoc;
{ Altera o fonte para escrita de um título }
Font.Size := fsLargeCondensed;
{ Imprime o título e avança para linha seguinte }
Print(00,'Título do Relatório', True);
{ Altero o fonte para o tamanho default }
Font.Size := fsCondensed;
{ Imprime um traço e avança para linha seguinte }
Replicate(00, 80);
{ Imprime um cabeçalho de detail e avança para
para linha seguinte apenas quando imprimir a
última coluna }
Print(00,'Código');
Print(10,'Nome');
Print(26,'E-mail');
Print(54,'Linha', True);
{ Imprime um traço e avança para linha seguinte }
Replicate(00, 80);
{ Imprime os detalhes... simulando um loop em um dataset}
for I := 1 to 10 do
begin
Print(00, Format('%6.6d',[I]));
Print(10, 'TVDODmPrinter');
Print(26, 'seuemail@seuservidor.com');
Print(54, 'Esta é a linha numero: ' + Format('%3.3d', [CurrentLine]), True);
end;
{ Avança + duas linhas e imprime o número da página }
NewLine(2);
Print(00,'Página ' + Format('%3.3d', [CurrentPage]), True);
{ Passa à próxima página apenas para exemplificar }
NewPage;
{ Inicio outra paginca para exemplificar o uso das fontes e alinhamento }
Font.Size := fsDefault;
Font.Align := faLeft;
Print(00, 'Fonte padrão, com 10cpp e alinhada a esquerda', True);
Font.Size := fsCondensed;
Font.Align := faCenter;
Print(00, 'Fonte condensada, com 10cpp e alinhada ao centro', True);
Font.Size := fsLargeCondensed;
Font.Align := faRight;
Print(00, 'Fonte condensada expandida, c/10cpp e alinhada a direita', True);
Font.Size := fsLarge;
Font.Align := faLeft;
Print(00, 'Fonte expandida, c/10cpp e al. esquerda', True);
Font.Size := fsDefault;
Font.Align := faLeft;
Font.Style := [fsDmBold];
Print(00, 'Fonte padrão, com 10cpp em "negrito"', True);
Font.Style := [fsDmDoubleStrike];
Print(00, 'Fonte padrão, com 10cpp em "passada-dupla"', True);
Font.Style := [fsDmItalic];
Print(00, 'Fonte padrão, com 10cpp em "italico"', True);
Font.Style := [fsDmSuperScript];
Print(00, 'Fonte padrão, com 10cpp em "sobrescrito"', True);
Font.Style := [fsDmSubScript];
Print(00, 'Fonte padrão, com 10cpp em "subrescrito"', True);
Font.Style := [fsDmUnderline];
Print(00, 'Fonte padrão, com 10cpp em "sublinhado"', True);
Font.Style := [fsDmBold, fsDmItalic];
Print(00, 'Fonte padrão, com 10cpp em "negrito" E "italico"', True);
Font.Style := [];
Font.Pitch := fp12cpp;
Print(00, 'Fonte padrão, com 12cpp', True);
Font.Size := fsCondensed;
Print(00, 'Fonte condensada, com 12cpp', True);
Font.Pitch := fp10cpp;
Font.Size := fsDefault;
Font.FontType := ftNLQ;
Font.NLQFont := ntSansSerif;
Print(00, 'Fonte padrão, com 10cpp e utilizando o tipo NLQ "Sans-Serif"', True);
Font.NLQFont := ntRoman;
Print(00, 'Fonte padrão, com 10cpp e utilizando o tipo NLQ "Roman"', True);
{ Avança + duas linhas e imprime o número da página }
NewLine(2);
Print(00,'Página ' + Format('%3.3d', [CurrentPage]), True);
{ Finalizo o Documento, ejetando a página }
EndDoc;
end;

end;


abraço
flavioavilela
certo... só estou em dúvida numa coisa... coloquei esse componente e tal... coloquei a fonte como Condensado... só que quando eu coloco essa fonte, antes, para colocar um determinado item em uma linha, eu mandava ele ir pra coluna 20 por exemplo, agora, eu tenho que por 40, 42 pra ir pra mesma linha que antes eu colocava 20... porque isso?????? e outra coisa, não estou conseguindo controlar o espaço entre as linhas... eu coloco uma informação em uma linha e mando ir colocando outras linhas abaixo, ele vai ficando desencaixado, não cai na linha certa.... eu faço assim:

CODE
Print(85, qDestinatario.FieldByName('Nome_Fantasia').AsString, true);

o true indica que estou indo pra linha debaixo né... e caso eu preciso ir pra uma, duas linhas abaixo, eu coloco
CODE
NewLine(2)
ai ele pula duas linhas.... ai esse pular de linhas está dando boró....
outra coisa que fiz: no papel personalizado, coloquei as margens como 0, pois o papel pré-impresso aqui aparentemente não tem margem, só um contorno aqui.... e ai, o que fazer????
Jhonas
QUOTE
coloquei esse componente e tal... coloquei a fonte como Condensado... só que quando eu coloco essa fonte, antes, para colocar um determinado item em uma linha, eu mandava ele ir pra coluna 20 por exemplo, agora, eu tenho que por 40, 42 pra ir pra mesma linha que antes eu colocava 20... porque isso??????
Se voce usou

Font.Size := fsCondensed;

significa que os caracteres foram condensados , ou seja , agrupados mais proximos uns dos outros. Então para colocar o caracter novamente na posição correta, voce terá que dar mais espaços ... entendeu ?

exemplo; imagine o espaço normal

1 2 3 4 5 6 7 8 9 0

agora o mesmo espaço condensado

1234567890

por isso tem que dar mais espaços na coluna para imprimir no mesmo lugar anterior


Print(85, qDestinatario.FieldByName('Nome_Fantasia').AsString, true);

QUOTE
o true indica que estou indo pra linha debaixo né..


Veja o exemplo:

CODE
{ Imprime um cabeçalho de detail e avança para
para linha seguinte apenas quando imprimir a
última coluna }

Print(00,'Código');
Print(10,'Nome');
Print(26,'E-mail');
Print(54,'Linha', True);


QUOTE
e outra coisa, não estou conseguindo controlar o espaço entre as linhas... eu coloco uma informação em uma linha e mando ir colocando outras linhas abaixo, ele vai ficando desencaixado, não cai na linha certa


CODE
{ Avança + duas linhas e imprime o número da página }

NewLine(2);
Print(00,'Página ' + Format('%3.3d', [CurrentPage]), True);
Print(00,''); // voltar a posição inicial de paragrafo


abraço







{ Imprime um traço e avança para linha seguinte }
Replicate(00, 80);
flavioavilela
certo... vou testar e já já volto com a resposta... abraço
flavioavilela
bom dia meu lider.... está dando quaaaaase certo.... vou simular aqui o que está acontecendo:

Remetente Destinatário
________ ___________

Endereço Endereço
_______ ____________

Município Município
_______ ____________

CNPJ CNPJ
_______ ____________

eu mando imprimir beleza, ele passa pelas linhas do remetente e destinatário beleza, no endereço beleza, ai depois do município já vai ficando ou pouco acima da linha, no CNPJ um pouco mais ainda até chegar um ponto em que uma informação está no lugar da outra saca...... e sempre que eu coloco uma folha pra imprimir sai numa forma, se eu pegar e recolocar ela e mandar imprimir novamente, no mesmo momento em que saiu da impressora, ela já sai ocilando a posição dela novamente saca, nunca vai no mesmo local as linhas......... será porque isso?????? estou usando uma LX300II+.......

desde já, agradeço pela sua atenção....
flavioavilela
cara, acho que descobri o problema, só não estou conseguindo resolver rsrs.... quando eu configuro a página personalizada desse papel pré-impresso, ele altera a posição das linhas.... só que, eu messo com a regua certinho, preciso, mas ainda não sai em cima... se eu vou alterando os valores do papel personalizado, ele vai consertando umas linhas e bagunçando outras....... será que eu tenho que configurar também o VDODmPrinter, as propriedades MarginLeft e MarginRight ou outro tipo de configuração????? como fazer isso agora?????? sad.gif wacko.gif
flavioavilela
boa tarde a todos...
consegui resolver o problema.... a configuração entrelinhas no componente.... alterei e funcionou....
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.