Ajuda com impressão de cupom

Pessoal, sera que podem me ajudar, tenho um cogigo de impressao de cupom não fiscal, esta tudo certinho imprimindo e tal, mas como que faço para almenta a font da letra e deixar algumas palavras em negrito? Segue o codigo abaixo.

private void imprimirCupom(ArrayList listaModelVendasProdutoses, ModelVendas modelVendas, ModelCliente modelCliente) {

    String dataF = "dd/MM/yyyy";
    String horaF = "H:mm - a";
    String data, hora;
    java.util.Date tempoAtual = new java.util.Date();
    SimpleDateFormat formata = new SimpleDateFormat(dataF);
    data = formata.format(tempoAtual);
    formata = new SimpleDateFormat(horaF);
    hora = formata.format(tempoAtual);

    String conteudoImprimir = "";

    for (int i = 0; i < listaModelVendasProdutoses.size(); i++) {
        conteudoImprimir
                += +this.listaModelVendasProdutoses.get(i).getVenProQuantidade() + "    "
                + listaModelVendasProdutoses.get(i).getVenProValor() + "    "
                + listaModelProdutoses.get(i).getProNome() + "\n\r";
    }
    this.imprimir("    BIA HOT DOG             \n\r"
            + "    Av. Tomaz de Aquino, 2154   \n\r"
            + "            Alvorada            \n\r"
            + "    CNPJ: 30.756.687.0001/50    \n\r"
            + "................................\n\r"
            + "          CUPOM FISCAL          \n\r"
            + "................................\n\r"
            + " QT   PRECO   DESCRICAO         \n\r"
            + " " + conteudoImprimir + ""
            + "................................\n\r"
            + "VALOR BRUTO: " + modelVendas.getVenValorBruto() + "\n\r"
            + "  ADICIONAL: " + modelVendas.getVenAdicional() + "\n\r"
            + "   DESCONTO: " + modelVendas.getVenDesconto() + "\n\r"
            + "VALOR TOTAL: " + modelVendas.getVenValorLiquido() + "\n\r"
            + "................................\n\r"
            + "           OBSERVACAO           \n\r"
            + "................................\n\r"
            + " " + modelVendas.getObservacao() + "\n\r"
            + "................................\n\r"
            + "            CLIENTES            \n\r"
            + "................................\n\r"
            + "NOME: " + modelCliente.getCliNome() + "\n\r"
            + "ENDERECO: " + modelCliente.getCliEndereco()+ "\n\r"
            + "BAIRRO: " + modelCliente.getCliBairro()+ "\n\r"
            + "TELEFONE: " + modelCliente.getCliTel()+ "\n\r"
            + "................................\n\r"
            + data + " - " + hora + "\n\r"
            + "\n\r \n\r \n\r"
            + "\f"
    );
}

public void imprimir(String pTexto) {
    try {
        InputStream prin = new ByteArrayInputStream(pTexto.getBytes());
        DocFlavor docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        SimpleDoc documentoTexto = new SimpleDoc(prin, docFlavor, null);
        PrintService impressora = PrintServiceLookup.lookupDefaultPrintService();
        //pega impressora padrao
        PrintRequestAttributeSet printerAtributes = new HashPrintRequestAttributeSet();
        printerAtributes.add(new JobName("Impressao", null));
        printerAtributes.add(OrientationRequested.PORTRAIT);
        printerAtributes.add(MediaSizeName.ISO_A4);
        //informa tipo de folha
        DocPrintJob printJob = impressora.createPrintJob();
        try {
            printJob.print(documentoTexto, printerAtributes);
        } catch (PrintException e) {
            JOptionPane.showMessageDialog(null, "Nao foi possivel realizar a impressao", "Erro", JOptionPane.WARNING_MESSAGE);
        }
        prin.close();
    } catch (Exception e) {
    }

}`Texto pré-formatado`

Ao invés de passar null no 3° parâmetro, tenta configurar um DocAttributeSet, imagino que há DocAttributes para configurar o estilo de fonte a ser usado em determinados intervalos de texto.

Então, agradeço a ajuda mas não sei aplicar este parâmetro, iniciante só se lasca mesmo kkk poderia me ajudar com isso?

Uma ajudinha???

Não? Nada? Ninguem?

Tenta procurar alguma documentação do javax.print, a última vez que usei essa API foi em 2005.
Também nem tenho certeza se existem Attributes pro DocAttributes pertinentes à formatação de String.

Outra coisa que você poderia ver é se sua impressora suporta alguns caracteres de controle.
Algumas impressoras da EPSON imprimem em negrito caso você coloque o texto desejado entre umas marcações especiais.

Exemplo:

String INI_NEGRITO = "\u001BE\u0001"; // marcação pra iniciar o negrito
String FIM_NEGRITO = "\u001BE\0";     // marcação pra finalizar o negrito

String texto = "bla bla bla " + INI_NEGRITO + "aqui vai estar em negrito" + FIM_NEGRITO + " bla bla bla";

Orra muito obrigado, deu certinho para ficar em negrito.
Não querendo ser chato, para aumentar a fonte, tem alguma ideia? Pesquisei para um caramba mas não acho nada.

Ah é? Que bom senão outra alternativa seria você implementar na munheca um objeto Pageable pra “desenhar” seu texto com a classe Graphics2d, mas isso dá um trabalho do cão.

Tens que pesquisar por comandos ESC/POS.
Nesta página tem uma tabela de comandos.

Por exemplo o negrito é o comando "ESC E n"
Onde n=1 liga o negrito e n=0 desliga o negrito

Na String Java:

  • O ESC você vai substituir por \u001B, que é o código ASCII da tecla ESC.
  • O E vai ser E mesmo
  • O n você vai usar \u0001 ou \1 para ligar e \u0000 ou \0 para desligar

Se não me engano o comando ESC/POS para aumentar o tamanho da letra é o "GS ! n", aqui tem a documentação dele.

Valeu mesmo vou dar uma estudada nisso aqui que vendo por cima nao entendi muito, mas vou ver certinho. valeu.

1 curtida

Lembra o código que postei:

String INI_NEGRITO = "\u001BE\1"; // marcação pra iniciar o negrito
String FIM_NEGRITO = "\u001BE\0"; // marcação pra finalizar o negrito

O INI_NEGRITO equivale ao comando ESC E 1
O FIM_NEGRITO equivale ao comando ESC E 0

Talvez se desmembrar o comando em Strings independentes, fique mais facil de entender a lógica, veja:

String ESC = "\u001B";
String E   = "E";
String ON  = "\1";
String OFF = "\0";

String INI_NEGRITO = ESC + E + ON;  // marcação pra iniciar o negrito   (comando ESC E 1)
String FIM_NEGRITO = ESC + E + OFF; // marcação pra finalizar o negrito (comando ESC E 0)

Obrigado pela explicação ai, me ajudou muito.

1 curtida

staroski Desculpa só uma duvida, sabe dizer pq nao imprime os --------? para imprimir traços asim tenho que dar espaço, ficando - - - - - -, assim fica horrível, sabe dizer pq?

Não sei.
Tenta achar algum manual com os comandos da sua impressora.
Talvez o -- seja algum código.