Sendo um cupom não fiscal, a impressora é conectada na lpt1: ou com2:
ë possível com javascript, mas terá que mexer na segurança do browser o que é um risco para o cliente:
eis um código antigo que utilizei a muito tempo e por muito pouco tempo.
<?php
/**************************************************************************************************************************/
$arquivo = "nf.txt";
session_start();
$_SESSION['conteudo']="";
//qtd de caracteres que cabem no campo
$tam_campo['saida']=1;
$tam_campo['entrada']=1;
$tam_campo['natureza']=30;
$tam_campo['cfop']=9;
$tam_campo['ie_subst']=29;
$tam_campo['razao']=70;
$tam_campo['cnpj']=39;
$tam_campo['dt_emiss']=16;
$tam_campo['endereco']=70;
$tam_campo['bairro']=22;
$tam_campo['cep']=17;
$tam_campo['dt_movto']=16;
$tam_campo['municipio']=42;
$tam_campo['fone']=20;
$tam_campo['uf']=8;
$tam_campo['iestadual']=39;
$tam_campo['hora']=16;
$tam_campo['codigo']=8;
$tam_campo['descricao']=62;
$tam_campo['cf']=5;
$tam_campo['sit_trib']=6;
$tam_campo['unid']=5;
$tam_campo['qtd']=9;
$tam_campo['vl_unit']=9;
$tam_campo['vl_tot']=10;
$tam_campo['aliq_icms']=3;
$tam_campo['aliq_ipi']=2;
$tam_campo['val_ipi']=9;
$tam_campo['bs_icms']=19;
$tam_campo['vl_icms']=19;
$tam_campo['bs_icms2']=19;
$tam_campo['vl_icms2']=19;
$tam_campo['vl_totprod']=18;
$tam_campo['vl_frete']=19;
$tam_campo['vl_seguro']=19;
$tam_campo['out_despesas']=19;
$tam_campo['vl_ipi']=18;
$tam_campo['vl_nota']=18;
$tam_campo['razao_trans']=32;
$tam_campo['resp_frete']=2;
$tam_campo['placa']=9;
$tam_campo['uf_placa']=2;
$tam_campo['cnpj_trans']=21;
$tam_campo['ender_trans']=33;
$tam_campo['munisc_trans']=24;
$tam_campo['uf_trans']=3;
$tam_campo['ie_trans']=21;
$tam_campo['qtd_volume']=7;
$tam_campo['especie']=31;
$tam_campo['marca']=9;
$tam_campo['numero']=9;
$tam_campo['peso_br']=11;
$tam_campo['peso_lq']=14;
$tam_campo['dado_adic']=35;
$tam_campo['num_nf']=10;
/**************************************************************************************************************************
function imprime_lpt1(arg1)
Descricao: Funcao responsavel pela impressao diretamente na porta lpt1.
Requisitos: Internet Explorer superior que 5.0, mas nao testado no 5.5, testado e funcionando no 6.0.
Nao testado em outros browsers
****** IMPORTANTISSIMO ******
Se estas alteracoes nao forem feitas, a impressao nao ocorrera corretamente.
Alteracao das configuracoes de seguranca do navegador:
Ferramentas -> Opcoes de Internet -> Seguranca ->
Intranet local -> Nivel Personalizado ->
Iniciar e executar scripts de controle ActiveX nao marcados como seguro -> Ativar
Caso nao funcione:
Internet -> Nivel Personalizado ->
Iniciar e executar scripts de controle ActiveX nao marcados como seguro -> Ativar
Entrada: Linha que sera impressa na autenticacao ou o comprovante de pagamento.
Saida: Impressao em impressora fiscal do argumento de entrada.
**************************************************************************************************************************/
function linha($lin){
for($i=1;$i<=$lin;$i++)
$_SESSION['conteudo'] .= "\r\n";
}
function coluna($sp){
for($i=1;$i<=$sp;$i++)
$_SESSION['conteudo'] .= " ";
}
/**************************************************************************************************************************/
$fp = fopen($arquivo, "w");
linha(5);coluna(76);
$_SESSION['conteudo'].='X';
coluna(11);
$_SESSION['conteudo'].='X';
linha(8);coluna(3);
$_SESSION['conteudo'].='VENDA MERCADORIA';
$_POST['natureza']='Venda de Mercadoria';
coluna($tam_campo['natureza']-strlen($_POST['natureza'])+7);
$_SESSION['conteudo'].='5.102';
$_POST['cfop']='5.102';
coluna($tam_campo['cfop']-strlen($_POST['cfop'])+5);
$_SESSION['conteudo'].='123.456.789.123';
linha(3);coluna(3);
$_SESSION['conteudo'].='Nome do Cliente';
$_POST['razao']='Nome do Cliente';
coluna($tam_campo['razao']-strlen($_POST['razao'])+5);
$_SESSION['conteudo'].='060.033.100/0001-04';
$_POST['cnpj']='060.033.115/0001-04';
coluna($tam_campo['cnpj']-strlen($_POST['cnpj'])+8);
$_SESSION['conteudo'].='19/02/2008';
linha(2);coluna(3);
$_SESSION['conteudo'].='Endereço do Cliente';
$_POST['endereco']='Endereço do Cliente';
coluna($tam_campo['endereco']-strlen($_POST['endereco'])+5);
$_SESSION['conteudo'].='Bairro';
$_POST['bairro']='Bairro';
coluna($tam_campo['bairro']-strlen($_POST['bairro'])+5);
$_SESSION['conteudo'].='09790-290';
$_POST['cep']='09790-290';
coluna($tam_campo['cep']-strlen($_POST['cep'])+3);
$_SESSION['conteudo'].='19/02/2008';
linha(2);coluna(3);
$_SESSION['conteudo'].='Municipio do Cliente';
$_POST['municipio']='Municipo do Cliente';
coluna($tam_campo['municipio']-strlen($_POST['municipio'])+2);
$_SESSION['conteudo'].='(11)4334-2345';
$_POST['fone']='(11)4334-2345';
coluna($tam_campo['fone']-strlen($_POST['fone'])+3);
$_SESSION['conteudo'].='SP';
$_POST['uf']='SP';
coluna($tam_campo['uf']-strlen($_POST['uf'])+3);
$_SESSION['conteudo'].='321.321.321.321';
$_POST['iestadual']='321.321.321.321';
coluna($tam_campo['iestadual']-strlen($_POST['iestadual'])+6);
$_SESSION['conteudo'].='10:40';
linha(3);coluna(3);
$_SESSION['conteudo'].='Dados de Faturamento ao cliente'.chr(15);
linha(3);
/*************************** PRODUTOS ******************************/
for($r=1;$r<=18;$r++){
linha(1);coluna(3);
$_SESSION['conteudo'].='Cod.P.';
$_POST['codigo'.$r].='Cod.P.';
coluna($tam_campo['codigo']-strlen($_POST['codigo'.$r])+1);
$_SESSION['conteudo'].='Descrição do Produto Descrição do Produto Descrição do';
$_POST['descricao'.$r].='Descrição do Produto Descrição do Produto Descrição do';
coluna($tam_campo['descricao']-strlen($_POST['descricao'.$r])+3);
$_SESSION['conteudo'].='(1)';
$_POST['cf'.$r].='(1)';
coluna($tam_campo['cf']-strlen($_POST['cf'.$r])+1);
$_SESSION['conteudo'].='ST';
$_POST['sit_trib'.$r].='ST';
coluna($tam_campo['sit_trib']-strlen($_POST['sit_trib'.$r])+1);
$_SESSION['conteudo'].='Un';
$_POST['unid'.$r].='Un';
coluna($tam_campo['unid']-strlen($_POST['unid'.$r])+2);
$_SESSION['conteudo'].='Qt.';
$_POST['qtd'.$r].='Qt.';
coluna($tam_campo['qtd']-strlen($_POST['qtd'.$r])+1);
$_SESSION['conteudo'].='VlUnit';
$_POST['vl_unit'.$r].='VlUnit';
coluna($tam_campo['vl_unit']-strlen($_POST['vl_unit'.$r])+2);
$_SESSION['conteudo'].='Valor T.';
$_POST['vl_tot'.$r].='Valor T.';
coluna($tam_campo['vl_tot']-strlen($_POST['vl_tot'.$r])+5);
$_SESSION['conteudo'].='12';
}
// coluna($tam_campo['aliq_icms']-strlen($_POST['aliq_icms'.$r])+1);
// $_SESSION['conteudo'].=$_POST['aliq_ipi'.$r];
// coluna($tam_campo['aliq_ipi']-strlen($_POST['aliq_ipi'.$r])+1);
// $_SESSION['conteudo'].=$_POST['val_ipi'.$r];
/*******************************************************************/
linha(3);coluna(3);
$_SESSION['conteudo'].='bs_icms';
$_POST['bs_icms'].='bs_icms';
coluna($tam_campo['bs_icms']-strlen($_POST['bs_icms'])+10);
$_SESSION['conteudo'].='vl_icms';
$_POST['vl_icms'].='vl_icms';
coluna($tam_campo['vl_icms']-strlen($_POST['vl_icms'])+10);
$_SESSION['conteudo'].='bs_icms2';
$_POST['bs_icms2'].='bs_icms2';
coluna($tam_campo['bs_icms2']-strlen($_POST['bs_icms2'])+10);
$_SESSION['conteudo'].='vl_icms2';
$_POST['vl_icms2'].='vl_icms2';
coluna($tam_campo['vl_icms2']-strlen($_POST['vl_icms2'])+9);
$_SESSION['conteudo'].='vl_totprod';
linha(2);coluna(3);
$_SESSION['conteudo'].='vl_frete';
$_POST['vl_frete'].='vl_frete';
coluna($tam_campo['vl_frete']-strlen($_POST['vl_frete'])+10);
$_SESSION['conteudo'].='vl_seguro';
$_POST['vl_seguro'].='vl_seguro';
coluna($tam_campo['vl_seguro']-strlen($_POST['vl_seguro'])+10);
$_SESSION['conteudo'].='out_despesas';
$_POST['out_despesas'].='out_despesas';
coluna($tam_campo['out_despesas']-strlen($_POST['out_despesas'])+10);
$_SESSION['conteudo'].='vl_ipi';
$_POST['vl_ipi'].='vl_ipi';
coluna($tam_campo['vl_ipi']-strlen($_POST['vl_ipi'])+10);
$_SESSION['conteudo'].='vl_nota';
linha(3);coluna(3);
$_SESSION['conteudo'].='razao_trans';
$_POST['razao_trans'].='razao_trans';
coluna($tam_campo['razao_trans']-strlen($_POST['razao_trans'])+51);
$_SESSION['conteudo'].='1';
$_POST['resp_frete'].='resp_frete';
coluna($tam_campo['resp_frete']-strlen($_POST['resp_frete'])+14);
$_SESSION['conteudo'].='placa';
$_POST['placa'].='placa';
coluna($tam_campo['placa']-strlen($_POST['placa'])+5);
$_SESSION['conteudo'].='uf';
$_POST['uf_placa'].='uf_placa';
coluna($tam_campo['uf_placa']-strlen($_POST['uf_placa'])+11);
$_SESSION['conteudo'].='cnpj_trans';
linha(2);coluna(3);
$_SESSION['conteudo'].='ender_trans';
$_POST['ender_trans'].='ender_trans';
coluna($tam_campo['ender_trans']-strlen($_POST['ender_trans'])+40);
$_SESSION['conteudo'].='munisc_trans';
$_POST['munisc_trans'].='munisc_trans';
coluna($tam_campo['munisc_trans']-strlen($_POST['munisc_trans'])+7);
$_SESSION['conteudo'].='uf';
$_POST['uf_trans'].='uf_trans';
coluna($tam_campo['uf_trans']-strlen($_POST['uf_trans'])+10);
$_SESSION['conteudo'].='ie_trans';
linha(2);coluna(3);
$_SESSION['conteudo'].='qtd_volume';
$_POST['qtd_volume'].='qtd_volume';
coluna($tam_campo['qtd_volume']-strlen($_POST['qtd_volume'])+10);
$_SESSION['conteudo'].='especie';
$_POST['especie'].='especie';
coluna($tam_campo['especie']-strlen($_POST['especie'])+2);
$_SESSION['conteudo'].='marca';
$_POST['marca'].='marca';
coluna($tam_campo['marca']-strlen($_POST['marca'])+13);
$_SESSION['conteudo'].='numero';
$_POST['numero'].='numero';
coluna($tam_campo['numero']-strlen($_POST['numero'])+15);
$_SESSION['conteudo'].='peso_br';
$_POST['peso_br'].='peso_br';
coluna($tam_campo['peso_br']-strlen($_POST['peso_br'])+13);
$_SESSION['conteudo'].='peso_lq';
linha(2);coluna(3);
$_SESSION['conteudo'].='dado_adic1';
linha(1);coluna(2);
$_SESSION['conteudo'].='dado_adic2';
linha(1);coluna(2);
$_SESSION['conteudo'].='dado_adic3';
linha(1);coluna(2);
$_SESSION['conteudo'].='dado_adic4';
linha(1);coluna(2);
$_SESSION['conteudo'].='dado_adic5';
linha(1);coluna(2);
$_SESSION['conteudo'].='dado_adic6';
linha(7);coluna(115);
$_SESSION['conteudo'].='num_nf';
$escreve = fwrite($fp, $_SESSION['conteudo']);
fclose($fp);
?>
<html>
<head>
<script>
function cria_bat(){
//Cria objeto para manipulacao de arquivos no cliente.
var fso = new ActiveXObject("Scripting.FileSystemObject");
if ( !(fso.FileExists("c:\\imprime.bat")) ) {
//Cria o arquivo imprime.bat, escreve o comando responsavel pela impressao e fecha o arquivo.
var b = fso.CreateTextFile("c:\\imprime.bat", true);
b.WriteLine("type G:\\\\httpraiz\\\\nf\\\\<?=$arquivo;?> > LPT1");
b.Close();
}
}
function imprime() {
//Cria um objeto para execucao de um programa no computador do cliente.
var WshShell = new ActiveXObject("WScript.Shell");
//Executa o arquivo responsavel pela impressao do arquivo imprime.prn.
var oExec = WshShell.Exec("c:\\imprime.bat");
}
</script>
</head>
<body>
<script>
cria_bat();
imprime();
</script>
</body>
</html>