Imprimir na Impressora Bematech M-20 com php
Pessoal, peguei esse código na NET e fiz algumas alterações o arquivo imprimir.txt esta sendo gerado, mas não estou sabendo como enviar esses dados via php para impressora Bematech M-20.
Veja código impressao.php abaixo:
<?php
#Arquivo de funções *************************************
include("conexao/bdinc.php");
#********************************************************
/*
* Gerar um arquivo .txt para imprimir na impressora Bematech MP-20 MI
*/
$n_colunas = 40; // 40 colunas por linha
/**
* Adiciona a quantidade necessaria de espaços no inicio
* da string informada para deixa-la centralizada na tela
*
* @global int $n_colunas Numero maximo de caracteres aceitos
* @param string $info String a ser centralizada
* @return string
*/
function centraliza($info)
{
global $n_colunas;
$aux = strlen($info);
if ($aux < $n_colunas) {
// calcula quantos espaços devem ser adicionados
// antes da string para deixa-la centralizada
$espacos = floor(($n_colunas - $aux) / 2);
$espaco = '';
for ($i = 0; $i < $espacos; $i++){
$espaco .= ' ';
}
// retorna a string com os espaços necessários para centraliza-la
return $espaco.$info;
} else {
// se for maior ou igual ao número de colunas
// retorna a string cortada com o número máximo de colunas.
return substr($info, 0, $n_colunas);
}
}
/**
* Adiciona a quantidade de espaços informados na String
* passada na possição informada.
*
* Se a string informada for maior que a quantidade de posições
* informada, então corta a string para ela ter a quantidade
* de caracteres exata das posições.
*
* @param string $string String a ter os espaços adicionados.
* @param int $posicoes Qtde de posições da coluna
* @param string $onde Onde será adicionar os espaços. I (inicio) ou F (final).
* @return string
*/
function addEspacos($string, $posicoes, $onde)
{
$aux = strlen($string);
if ($aux >= $posicoes)
return substr ($string, 0, $posicoes);
$dif = $posicoes - $aux;
$espacos = '';
for($i = 0; $i < $dif; $i++) {
$espacos .= ' ';
}
if ($onde === 'I')
return $espacos.$string;
else
return $string.$espacos;
}
$txt_cabecalho = array();
$txt_itens = array();
$txt_valor_total = '';
$txt_rodape = array();
$txt_cabecalho[] = 'Razão social da empresa aqui';
$txt_cabecalho[] = 'CNPJ da empresa aqui';
$txt_cabecalho[] = ' '; // força pular uma linha entre o cabeçalho e os itens
$txt_itens[] = array('Cod.', 'Descrição', 'Un', 'Qtd', 'V. UN', 'Subtotal');
$tot_itens = 0;
$cod = 1;
//trazendo o produto
$sql = "SELECT mov_saida.cod_produto,produto.descricao,produto.unidade,mov_saida.valor_unitario, mov_saida.q_saida,mov_saida.subtotal
FROM mov_saida,produto
WHERE mov_saida.cod_produto=produto.cod_produto
AND mov_saida.cod_produto = '$cod'";
$res = mysqli_query($con,$sql);
//VERIFICA A QUANTIDADE DE REGISTROS RETORNADOS
$registros = mysqli_num_rows($res);
if($registros > 0){
while ($linha = mysqli_fetch_array($res)){
$cod = $linha[0];
$descricao = $linha[1];
$unidade = $linha[2];
$valor_unitario = number_format(($linha[3]), 2,',',' ');
$q_saida = number_format(($linha[4]), 2,',',' ');
$subtotal = number_format(($linha[5]), 2,',',' ');
$txt_itens[] = array($cod,$descricao,$unidade,$valor_unitario,$q_saida,$subtotal);
$tot_itens += $subtotal;
}
}//fecha if
$aux_valor_total = 'Total Geral: '.number_format(($tot_itens), 2,',',' ');
// calcula o total de espaços que deve ser adicionado antes do "Sub-total" para alinhado a esquerda
$total_espacos = $n_colunas - strlen($aux_valor_total);
$espacos = '';
for($i = 0; $i < $total_espacos; $i++){
$espacos .= ' ';
}
$txt_valor_total = $espacos.$aux_valor_total;
$txt_rodape[] = 'Cód. Cliente: 150';
$txt_rodape[] = 'CPF/CNPJ: 999.999.999-99';
$txt_rodape[] = 'Nome do cliente';
$txt_rodape[] = ' '; // força pular uma linha
$txt_rodape[] = '________________________________________';
$txt_rodape[] = ' Assinatura do Cliente ';
// centraliza todas as posições do array $txt_cabecalho
$cabecalho = array_map("centraliza", $txt_cabecalho);
/* para cada linha de item (array) existente no array $txt_itens,
* adiciona cada posição da linha em um novo array $itens
* fazendo a formatação dos espaçamentos entre cada coluna
* da linha através da função "addEspacos"
*/
foreach ($txt_itens as $item) {
/*
* Cod. => máximo de 5 colunas
* Produto => máximo de 11 colunas
* Env. => máximo de 4 colunas
* Qtd => máximo de 7 colunas
* V. UN => máximo de 7 colunas
* Total => máximo de 7 colunas
*
* $itens[] = 'Cod. Produto Env. Qtd V. UN Total'
*/
$itens[] = addEspacos($item[0], 5, 'F')
. addEspacos($item[1], 11, 'F')
. addEspacos($item[2], 4, 'I')
. addEspacos($item[3], 6, 'I')
. addEspacos($item[4], 7, 'I')
. addEspacos($item[5], 9, 'I')
;
}
/* concatena o cabelhaço, os itens, o sub-total e rodapé
* adicionando uma quebra de linha "\r\n" ao final de cada
* item dos arrays $cabecalho, $itens, $txt_rodape
*/
$txt = implode("\r\n", $cabecalho)
. "\r\n"
. implode("\r\n", $itens)
. "\r\n"
. $txt_valor_total // Subtotal
. "\r\n\r\n"
. implode("\r\n", $txt_rodape);
// caminho e nome onde o TXT será criado no servidor
$file = 'uploads/nome_arquivo.txt';
// cria o arquivo
$_file = fopen($file,"w");
fwrite($_file,$txt);
fclose($_file);
header("Pragma: public");
// Força o header para salvar o arquivo
header("Content-type: application/save");
header("X-Download-Options: noopen "); // For IE8
header("X-Content-Type-Options: nosniff"); // For IE8
// Pré define o nome do arquivo
header("Content-Disposition: attachment; filename=imprimir.txt");
header("Expires: 0");
header("Pragma: no-cache");
// Lê o arquivo para download
readfile($file);
exit;
?>
Agora veja o anexo do arquivo imprimir.txt gerado:
Portanto, sabe como enviar esses dados gerado direto na impressora quando o usuário insert um pedido?
Discussão (0)
Carregando comentários...