Impressão Matricial x Laser - Mudança de página
07/01/2010
0
Estou com uma dúvida muito "cruel" a respeito do tamanho da pagina ao imprimir em LASER (Papel A4) ou na impressora matricial.
Deixa passar as coordenadas de como estou fazendo,
Uso o rvsystem mais ou menos assim:
Procedure TForm1.rvsystem1Print(Sender: TObject);
Var Lin, Pag : Integer;
begin
with RvSystem1.BaseReport do
Begin
FontName:='Courier New'; //define o tipo de fonte
fontsize:=7; //defini o tamanho da fonte
Lin := 64; //Defino o tamanho máximo da página, para que na primeira entrada o cabeçalho seja impresso
pag := 0;
cdsLanCheques.First;
While Not cdsLanCheques.Eof do
Begin
If (lin >= 63) Then //Caso a linha seja maior que 63 vai imprimir o cabeçalho
Begin
if Pag >= 1 Then //Se a pagina for igual ou maior que 1 terá quebra de pagina
Begin
println('+Continua------------------------------------------------------------------+');
NewPage;
SetFont('Courier New',7);
end;
Inc(Pag);
Lin := 0;
Println('+==========================================================================+');
Println('|Relacao de cheques enviados para: '+AcrescEspaco(txtDestino.Text,40,'D')+'|');
println('|Data do envio: '+formataData(deEnvio.Date)+' Hora emissao do relatorio: '+FormataHora(now)+' Pagina: '+IntToStr(Pag) +'|');
println('|==========================================================================|');
println('|Clien| E m i t e n t e |Bco| No Cheque| Deposito | V a l o r |');
println('|--------------------------------------------------------------------------|');
end;
println('|'+AcrescEspaco(cdsLanChequesCliente.AsString,5,'E')+'|'+
AcrescEspaco(cdsLanChequesEmitente.AsString,30,'D')+'|'+
cdsLanChequesBanco.AsString+'|'+
AcrescEspaco(cdsLanChequesCheque.AsString,10,'D') +'|'+
formataData(cdsLanChequesDataDepo.AsDateTime)+'|'+
AcrescEspaco(Formatar_valores(cdsLanChequesValorCh.AsFloat),10,'E')+' |');
Inc(Lin);
cdsLanCheques.Next;
end;
println('|--------------------------------------------------------------------------|');
println('| Qtde cheques: '+AcrescEspaco(stQuant.Caption,3,'E')+RepeteChar(' ',36)+
' Total: |'+AcrescEspaco(stTotalCh.Caption,10,'E')+' |');
println('|==========================================================================|');
End;
end;
No bottão imprimir:
RvSystem1.SystemPrinter.MarginBottom := 1;
RvSystem1.SystemPrinter.MarginLeft := 0.3;
RvSystem1.SystemPrinter.MarginTop := 1;
RvSystem1.SystemPrinter.MarginBottom := 1;
RvSystem1.SystemPrinter.Units := unCM;
RvSystem1.SystemPrinter.UnitsFactor := 2.54;
rpDev.SelectPaper('Letter',false);
rvsystem1.SystemSetups := [];
rvsystem1.Execute;
O problema é o seguinte, depois que visualizo o arquivo, tenho a opção de imprimir na impressora
LASER ou Matricial, só que se eu colocar If (lin >= 63) o tamanho da folha fica pequeno na impressora laser e se caso eu usar o comando
...........
If (LinesLeft=0 ) Then
Begin
if Pag = 1 Then
Begin
println('+Continua------------------------------------------------------------------+');
NewPage;
SetFont('Courier New',7);
end;o
.....
e mandar na impressora matricial fica grande.
Não sei se entenderam, mas se quiserem mais alguma informação é só postar.
Grato.
Dirceu Morais
Posts
25/03/2011
Dirceu Morais
Pessoal ainda não consegui resolver o problema que mencionei se alguém souber me ajudar ficarei grato.
Ps.
Talvez tenha algum outro modo de fazer isto.
Só lembrando que preciso de GERAR UM RELATÓRIO NO VIDEO.
E depois escolher a impressora (Matricial ou Jato Tinta/Laser)
Quando escolho jato de tinta (laser) sem problemas nenhuma, o problema é quando escolho Matricial, que tem a quebra de página.
25/03/2011
Nilton Souza
Percebi que você está fazendo o relatório no "braço"...
Já pensou em escrever direto para a porta LPT?
Veja este trecho de código que eu usava para imprimir NOTAS FISCAIS (antes da NFe hehehe):
var Prn: TextFile;
begin
...
AssignFile(Prn, 'LPT1');
{$I-}
Rewrite(Prn);
{$I+}
if IOResult = 0 then
begin
try
// Inicializa Impressora
Write(Prn, #27#64);
// Espaçamento entre linhas: 2 = default (range: 0-2)
Write(Prn, #27#45 + '1');
// Underline - OFF
Write(Prn, #27#45 + '0'); // 1 -> para ligar
// Tamanho da página
Write(Prn, #27#67 + '65'); // Número de linhas
// Fonte Reduzida (12 CPI)
Write(Prn, #27#77);
// Fonte Normal
// Write(Prn, #27#80);
// Italic - OFF
Write(Prn, #27#53); // 52 p/ ligar
// Condensad - OFF
Write(Prn, #18); // 15 p/ ligar
// Expanded - OFF
Write(Prn, #27#87#0); // 1 p/ ligar
// Bold - ON
Write(Prn, #27#69); // 70 p/ desligar
// Pula 3 linhas for Lin := 1 to 3 do WriteLn(Prn, '');
WriteLn(Prn, FmtVal(' £ £ ££££££',
[
UnitGlobalDoProjeto.ifthen(chk_entrada.Checked, 'X', ''),
UnitGlobalDoProjeto.ifthen(chk_entrada.Checked, '', 'X'),
FGS_FormataInt(StrToInt(edt_nota_fiscal_id.Text), 6)
]));
for Lin := 1 to 5 do WriteLn(Prn, '');
WriteLn(Prn, FmtVal('££££££££££££££££££££££££££££££££ £££££ £££££££££££££££££££',
[
MTO_BuscaValidador('edt_cfop').MGS_ValorDoCampoBusca('cfop_descricao'),
MTO_BuscaValidador('edt_cfop').MGS_ValorDoCampoBusca('cfop_id'),
'' // INSC. ESTADUAL DO SUBSTITUTO TRIBUTÁRIO
]));
...
// Ejetar a página Write(Prn, #12);
finally CloseFile(Prn); end; end;end;
obs.: 1) usei isso por anos na impressão de notas fiscais de um sistema meu (funciona "bonitinho") 2) a função FmtVal eu criei para facilitar o posicionamento no formulário (se quiser te passo ela).
28/03/2011
Dirceu Morais
Mas minha intenção é a seguinte, quando o usuário pedir pra imprimir, primeiro quero que ele visualize o que vai ser impresso. Depois ele decide se vai mandar pra impressora ou não. E quando ele mandar pra impressora, ele terá a opção de escolher se vai imprimir em uma matricial ou em uma laser (ainda tenho a opçao de mandar por email, pdf, doc, txt).
Meu problema é que se eu preparo o arquivo pra Laser, e na visualização e na hora de imprimir mudo para impressora Matricial a mudança de página não bate como a visualização pois o tamanho das páginas são diferente.
Se eu fizer o contrário preparar pra matricial e imprimir na laser até que não dá tanto problema (Mas tbém não sai 100%).
Com relação a função que vc criou se puder me mandar fico grato. digitosistemas@yahoo.com.br
28/03/2011
Dirceu Morais
Acho que consegui resolver (Não ficou 100% - mas melhorou bastante), fiz alguns testes e funcionou.
Clique aqui para fazer login e interagir na Comunidade :)