Fórum Dúvida: Impressão Direta (Assignfile) Impressora Não Fiscal Diebold #428790
14/11/2012
0
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ; begin Assignfile (print, 'LPT1'); // = PORTA DE COMUNICACAO rewrite(print); writeLn(print, 'linha impressa...'); closefile(print); //fecha o arquivo end; end;
Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?
E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado? No caso eu tiro este erro com um try ...Except, mas antes, gostaria de saber a causa do erro neste enunciado (digo assim, pq o erro diz q o arquivo não existe, mas estou passando a porta).
E desde já agradeço pela ajuda.
Rodrigo Barra
Curtir tópico
+ 0Posts
14/11/2012
Carlos Bernardo
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ; begin Assignfile (print, 'LPT1'); // = PORTA DE COMUNICACAO rewrite(print); writeLn(print, 'linha impressa...'); closefile(print); //fecha o arquivo end; end;
Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?
E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado? No caso eu tiro este erro com um try ...Except, mas antes, gostaria de saber a causa do erro neste enunciado (digo assim, pq o erro diz q o arquivo não existe, mas estou passando a porta).
E desde já agradeço pela ajuda.
Boa noite...
Se eu colocar a impressora na LPT1 o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?
Sim, vai imprimir...
E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado?
Normalmente esse erro se dá pela ausência da porta na sua máquina.
Se vc realmente quer fazer um teste, mesmo que vc não tenha porta paralela na máquina ou não tenha uma impressora física para testar, basta instalar uma impressora Genérica e mudar a propriedade PORTAS para texto... compartilha a impressora e pelo MSDOS executa o seguinte comando net use lpt1 \\nomedopc\nomedocompartilhamento
ao executar esse bloco de comando a impressora abre uma tela pedindo para vc salvar o arquivo em algum lugar, vc coloca o caminho e nome do arquivo, depois abre ele no bloco de notas...
Gostei + 0
14/11/2012
Rodrigo Barra
Gostei + 0
15/11/2012
Gilvanio Gonçalves
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ; begin Assignfile (print, 'LPT1'); // = PORTA DE COMUNICACAO rewrite(print); writeLn(print, 'linha impressa...'); closefile(print); //fecha o arquivo end; end;
Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?
E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado? No caso eu tiro este erro com um try ...Except, mas antes, gostaria de saber a causa do erro neste enunciado (digo assim, pq o erro diz q o arquivo não existe, mas estou passando a porta).
E desde já agradeço pela ajuda.
Gostei + 0
15/11/2012
Gilvanio Gonçalves
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ; begin Assignfile (print, 'LPT1'); // = PORTA DE COMUNICACAO rewrite(print); writeLn(print, 'linha impressa...'); closefile(print); //fecha o arquivo end; end;
Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?
sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm
veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e insia nele um qrgroup e dentro deste qrgroup
os qrlabel e os qrdbtext e na propriedade dele page na opção orientation mude para sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm
veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e configura para modo portrait e devina as medidas
do papel, o resto a impressora frá sozinho que é o corte no final de seu cupom corretamente, isto é uma sugestão
pois na rotina acima que vc envia por codigo, é usado para formualrio continuo amigo.
no seu caso é cupom seja fiscal ou não ok?
At+
Gostei + 0
15/11/2012
Gilvanio Gonçalves
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm
veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e insia nele um qrgroup e dentro deste qrgroup
os qrlabel e os qrdbtext e na propriedade dele page na opção orientation mude para sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm
veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e configura para modo portrait e devina as medidas
do papel, o resto a impressora frá sozinho que é o corte no final de seu cupom corretamente, isto é uma sugestão
pois na rotina acima que vc envia por codigo, é usado para formualrio continuo amigo.
no seu caso é cupom seja fiscal ou não ok?
At+
obs:caso vc faça opção pelo quickreport te passo as configuracões pra vc.
Gostei + 0
15/11/2012
Gilvanio Gonçalves
sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm
veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e insia nele um qrgroup e dentro deste qrgroup
os qrlabel e os qrdbtext e na propriedade dele page na opção orientation mude para sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm
veja como vc terá um imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e configura para modo portrait e devina as medidas
do papel, o resto a impressora frá sozinho que é o corte no final de seu cupom corretamente, isto é uma sugestão
pois na rotina acima que vc envia por codigo, é usado para formualrio continuo amigo.
no seu caso é cupom seja fiscal ou não ok?
At+
obs: caso faça a opção pelo uso do quickreport te passo as configurações.
Gostei + 0
15/11/2012
Rodrigo Barra
Mas aí eu monto o Relatório (eu sei fazer), mas como que vou chamá-lo e enviá-lo para a impressora? Se puder me enviar as configurações e me der uma ajuda para chamá-lo agradeço.
Gostei + 0
15/11/2012
Rodrigo Barra
var print : textfile ;
begin
try
begin
Assignfile (print, 'LPT1'); // = PORTA DE COMUNICACAO
rewrite(print);
writeLn(print, 'linha impressa...');
closefile(print); //fecha o arquivo
end
except ShowMessage('Erro');
end;
end;O problema é que entre algumas partes do código, eu tenho outro código que insiro Dados no Banco, como valor, quantidade, etc. Porque aproveito o "laço de repetição". Mas por causa de não ter a porta paralela, sempre cai no Except, por causa do erro: "The speficies file was not found".
A pergunta é, como faço a condição para verificar Independente de Cair no Except eu gravar os dados no Banco? Ou seja, mesmo se não existir a LPT1, os outros dados serão gravados?
Gostei + 0
15/11/2012
Gilvanio Gonçalves
e page como poPortrait, papersize = custo, length = 97,1mm rigthmargin = 0,0mm,
width 69,6mm, propriedades definas para o papel.
configurações para o seu quick report,heigth 476, width = 263, como ele ficará visualmente em tempo de projeto.
para mandar imprimir, use um botão e coloque este codigo:
Application.CreateForm (TForm2, Form2);// opcional
Form2.quickrep1.Print;onde form2 é o form do quickreport.
declare a uses form2.// no form onde esta o filtro de datas periodo.
declare a uses form1 // no form onde esta o quickreport.
implementation uses uform1, form2;
no caso form2 é o form onde é flitrado o periodo.
caso vc
não sei como inserir imagem neste form, se não te mostraria a imagem de quick preparado para cupom?.
e isto. espero que de certo ai com vc.
na questão try e except , isto é para tratamento de erros, sendo que mesmo usando
o sowmwssage,vc Não terá como saber o erro que relamente foi causado.
At+
Gostei + 0
15/11/2012
Rodrigo Barra
Mas igual, com o textFile, pra Imprimir na porta LPT1 eu uso o código:
Assignfile (print, 'LPT1');
Eu imprimindo pelo quickreport.Print ele deve mandar pra imprimir na impressora Padrão, certo?
Tem como eu mandar imprimir na LPT1, como o AssignFile?
E mesmo imprimindo pelo QuickReport, depois posso usar os seguintes comandos, sem problemas?
Writeln(Print ,#27 + '&' + '0' + #12 + #48); //Abre a gaveta
Writeln(Print ,#10 + #17); // Corte de papelE desde já agradeço pela ajuda.
Gostei + 0
15/11/2012
Rodrigo Barra
Gostei + 0
15/11/2012
Marcio
falow
Gostei + 0
15/11/2012
Rodrigo Barra
Mas o AssignPrn sempre vai imprimir na impressora padrão, certo? Porque no AssignFile tem q colocar a porta LPT1, já o Prn não tem este parâmetro.
E agradeço pela ajuda.
Gostei + 0
16/11/2012
Rodrigo Barra
E Gilvanio, também fiz o relatorio e nos testes numa hp F280 está imprimindo, agora resta ver se vai funcionar com a impressora não fiscal.
Mas de qualquer maneira agradeço à todos que me ajudaram. (o tópico ainda não está completamente resolvido, mas acho que está perto kkk)
Gostei + 0
16/11/2012
Gilvanio Gonçalves
configuração da proriedade page do quickReport
BottonMargin = 00mm, Columns = 1, ColumnSpace = 0,0mm,LeftMargin = 0,0mm
length 125,9mm, orientation = poPortrait, PaperSize = Custon.
RightMargin = 0,0mm, Ruler = true, TopMargin = 0,0mm, Width 69,6mm.
esta configurações usei na Bematech, vc ajusta conforme
o papel da sua impressora.
ao mandar imprimir veja se nada ficou vazando para esquerda ou direita, se
caso alguma margin der errado só corrigir, mas acredito que Não terá erro
pois as impressoras tipo cupom usam padrão de bobina.
quanto a sua pergunta: usando assignFile irá imprimir direto para impressora padrão.
no quickReport também, pois o comando que te passei quickreport1.print; vai para impressora
definida como padão no windows, e sendo cupom é inviavel preview amigo, pois na tela
de venda antes de imprimir o usuario vê se os dados estão correto, nos damos preview geralmente
em relatórios, mas sendo o quickreport configurado para prPortrait ao dar preview ele exibira
testo grande e visual do quick tipo poupup.
o que vc pode fazer é no form que tem o botão para imprimir, fazer uma rotina com uma tela
de opcão para o usuario que Não é correto mas? que seria assim,
mas entedo a sua duvida e que deve ter uma impressora neste micro
para outros impressos e ela é padrão e tem a de cupom que será usada esporadicamente.
você pode fazer o seguinte, no form onde tem o botão que manda imprimir, vamos deixar o usuario
direcionar a impressora, para isto no form onde esta este botão declare na unit uses Printers
exemplo:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Printers, StdCtrls;
neste mesmo form coloque o componente combobox, acima do combobox um label, caption - selecione a impressora.
no evento oncreate do form este codigo:
ComboBox1.ItemIndex := 0;
e no evento onshow:
ComboBox1.Items.Assign(Printer.Printers);
no botão imprimir este codigo:
Application.CreateForm(TForm2, Form2); //o form. do relatório
try
Form2.QuickRep1.PrinterSettings.PrinterIndex := ComboBox1.ItemIndex; //Define a impressora selecionada
Form2.QuickRep1.Print; //Imprime o relatório
finally
Form2.Release; //Libera o Form da memória
end;não esqueça das units dos form como mencionei na resposta anterior, form1 use unit form2, form2 use unit form1, ok.
existe outras rotinas como alterar a imprresora padrão do windows na hora da impressão, mas é via codigo e rotina por
procedure um pouco mais complicado, já com o combobox acho que é mais simples pra vc.
quanto a sua pergunta usando o assingfile nunca usei junto com quickreport e vc mostra um comando:
Writeln(Print ,#27 + '&' + '0' + #12 + #48); //Abre a gaveta// aqui vc vê como adaptar para abrir gaveta. Writeln(Print ,#10 + #17); // Corte de papel// não precisa a impressora faz o corte automaticamente.
quando respondi que usando assingfile envia direto para impressora é porque eu uso ele , mas desta forma.
procedure TFrmPedidos.BtnMatricialClick(Sender: TObject);
const
cJustif = #27#97#51;
c10cpi = #18;
Var
Impressora:TextFile;
S: String;
VrUnit, VrTotal : String;
desc : String;
TotPed : String;
begin
AssignFile(Impressora,'LPT1:');
Rewrite(Impressora);
Writeln(impressora);
//imprimi cabeçalho
Writeln (impressora,''+'PONTO DO OLEO - AUTO MR');
Writeln (impressora,''+'RUA Alcides Inacio Da Silva N: 600 - A - INGA Betim - Mg');
Writeln (impressora,''+ ' Telefone:(31)3011-0961');
//Pula uma Linhas
Writeln(Impressora);
Writeln(impressora,#18''+'Pedido N '+FloatToStr(TbTemp_ItensNumPed.Value)+' '+'Condicoes Pagto: '+TbTemp_ItensCond_Pagto.Value+' '+'Vendedor: '+TbTemp_ItensNome_Vendedor.Value);
// Imprimi Cliente e tel cliente
Writeln(Impressora);
Writeln(impressora,#18''+'Cliente:'+ TbTemp_ItensCliente.Value+' '+'Telefone: '+TbTemp_ItensTel_Clie.Value);
//Pula uma linha
Writeln(Impressora);
{ Move o ponteiro de registro da tabela de Itens para o primeiro}
TbTemp_Itens.First;
//imprimi cabeçalho do pedido
Writeln (impressora,''+'------------------------------------------------------------------------------');
Writeln (impressora,''+'Codigo' +' Descricao'+' Qtd'+' Valor Unit.'+' Total');
Writeln(Impressora);
Writeln (impressora,''+'------------------------------------------------------------------------------');
{ Início do Laço}
While not (TbTemp_Itens.Eof) do
Begin
S := Format('%-13s%-32s%-5s',[TbTemp_ItensCodigoPro.AsString,TbTemp_ItensDescricao.Value,TbTemp_ItensQuantidade.AsString]);
VrUnit := FormatFloat('0.00',TbTemp_ItensVal_Unit.value);
VrTotal := FormatFloat('0.00',TbTemp_ItensTotal.Value);
while length(VrUnit) < 12 do //Colocar o tamanho q vc precisar
VrUnit := ' ' + VrUnit;
while length(VrTotal) < 14 do //Colocar o tamanho q vc precisar
VrTotal := ' ' + VrTotal;
S := S + VrUnit + VrTotal;
Writeln(impressora,S);
TbTemp_Itens.next;
end;
Desc := FrmPedidos.Edit1.Text;
TotPed := FrmPedidos.txtvalTot.Caption;
// pula linhas e imprimi o total do pedido, desconto,etc
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Write(impressora,Format('%-56s',[ ' ']));
Writeln(impressora,''+'Desconto =>'+' '+Desc);
Write(impressora,Format('%-56s',[ ' ']));
Writeln(impressora,''+'Total =>'+' '+Totped);
////salto para corte impressora lx 300
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
CloseFile(impressora);
end;veja que não usei o assingprn, isto vai de programador para programador e nescessidade.
para cupom eu uso quickreport, ou fortes report.
Abs.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)
Inserção de url
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.