Ajuda com impressão de cupom

12 respostas Resolvido
java
C

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`

12 Respostas

S

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.

C

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?

C

Uma ajudinha???

C

Não? Nada? Ninguem?

S

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";
C

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.

S

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.

C

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

S
Solucao aceita

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)
C

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

C

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?

S

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

Criado 16 de junho de 2020
Ultima resposta 20 de jun. de 2020
Respostas 12
Participantes 2