Impressão via porta USB

754 views
Skip to first unread message

Paulo Dayvson

unread,
Sep 3, 2013, 3:23:03 PM9/3/13
to ce...@googlegroups.com
Olá caros colegas do CEJUG sou novato na área e estou com uma grande dúvida, preciso fazer a impressão de etiquetas em uma impressora Zebra TLP 2844 que está instalada numa porta USB, mas ao enviar o comando para a porta nada é impresso e não aparece erro algum.

O que posso fazer para realizar a impressão? Obrigado.

Código para enviar impressão:
FileOutputStream outputFile = null;
outputFile = new FileOutputStream("USB002");
PrintWriter out = new PrintWriter(outputFile);


Carlos Júnior

unread,
Sep 3, 2013, 4:09:37 PM9/3/13
to ce...@googlegroups.com
Paulo,

para impressão na zebra TLP é necessário alguns comandos específicos da impressora. a alguns anos atrás precisei implementar uns códigos de barra e tive que baixar o manual da impressora para implementar efetuar a impressão corretamente.

Você já implementou essas rotinas ?

[ ]'s

Francisco Xavier

unread,
Sep 3, 2013, 4:40:39 PM9/3/13
to ce...@googlegroups.com
Precisa ser impresso diretamente para a USB? Implementei um sistema que gera um código de barra e imprimo nessa impressora mas mando imprimir utilizando o JasperPrintManager, o único problema é que a impressora precisa ser a padrão...



De: Paulo Dayvson <diada...@gmail.com>
Para: ce...@googlegroups.com
Enviadas: Terça-feira, 3 de Setembro de 2013 16:23
Assunto: [CEJUG] Impressão via porta USB

--
Você está recebendo esta mensagem porque se inscreveu no grupo "CEJUG" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para cejug+un...@googlegroups.com.
Para postar neste grupo, envie um e-mail para ce...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/cejug.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.


Helio Frota

unread,
Sep 3, 2013, 5:03:46 PM9/3/13
to ce...@googlegroups.com, ca...@googlegroups.com
Precisa ser impresso diretamente para a USB? Implementei um sistema que gera um código de barra e imprimo nessa impressora mas mando imprimir utilizando o JasperPrintManager, o único problema é que a impressora precisa ser a padrão...

Um colega de trabalho, Emanuel, que também é membro do cejug desenrolou desse mesmo jeito.

--
Helio Frota
JUG Leader - CEJUG
heliofrota.com



ELIAS SALES F JUNIOR

unread,
Sep 3, 2013, 6:05:07 PM9/3/13
to ce...@googlegroups.com
package br.com.gsmweb.model.service;

import java.awt.print.PrinterJob;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;

public class GeradorImpressao {  

private static GeradorImpressao instance = new GeradorImpressao();  
private static PrintService printer = null;  
private static PrintRequestAttributeSet aset = null;  

private GeradorImpressao(){}  

public static GeradorImpressao getInstance() {  
return instance;  
}  
public static void main(String[] args) {
detectaImpressora("Teste");
}
/** 
* Efetua impress&#65533;o do texto passado como par&#65533;metro. 
* @param texto 
*/  
public static void detectaImpressora(String toPrint) {  
aset = new HashPrintRequestAttributeSet();  
aset.add(new JobName("Impressao", null));  
aset.add(MediaSizeName.ISO_A8);  
aset.add(new Copies(1));  
// aset.add(MediaTray.MAIN);  


for (PrintService p : PrinterJob.lookupPrintServices()) {  
// PEGA A PRIMEIRA IMP INSTALADA  
printer = p;                  
break;  
  
}  
//MediaPrintableArea printableArea = (MediaPrintableArea)printer.getSupportedAttributeValues(MediaPrintableArea.class, null, aset);  

try {  
print(toPrint);  
} catch (PrintException e) {  
e.printStackTrace();  
}  
}  

public synchronized static boolean print(String toPrint) throws PrintException {  

try {  
DocPrintJob docPrint = printer.createPrintJob();  
PrintJobWatcher pjDone = new PrintJobWatcher(docPrint);  
InputStream stream = new ByteArrayInputStream(toPrint.getBytes());  
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;  
Doc doc = new SimpleDoc(stream, flavor, null);  
docPrint.print(doc, aset);  
pjDone.waitForDone();  
stream.close();  
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}  
return true;  

}  
}  
class PrintJobWatcher {  
// true iff it is safe to close the print job's input stream  
boolean done = false;  

PrintJobWatcher(DocPrintJob job) {  
// Add a listener to the print job  
job.addPrintJobListener(new PrintJobAdapter() {  
public void printJobCanceled(PrintJobEvent pje) {  
allDone();  
}  
public void printJobCompleted(PrintJobEvent pje) {  
allDone();  
}  
public void printJobFailed(PrintJobEvent pje) {  
allDone();  
}  
public void printJobNoMoreEvents(PrintJobEvent pje) {  
allDone();  
}  
void allDone() {  
synchronized (PrintJobWatcher.this) {  
done = true;  
PrintJobWatcher.this.notify();  
}  
}  
});  
}  
public synchronized void waitForDone() {  
try {  
while (!done) {  
wait();  
}  
} catch (InterruptedException e) {  
}  
}  
}  


Abraço.

Elias Sales
Analista de Sistemas

Paulo Dayvson

unread,
Sep 4, 2013, 10:27:00 AM9/4/13
to ce...@googlegroups.com
Sim, fiz todos os comandos para imprimir nela, peguei direto do software deles e mesmo assim nada.

Aqui está o código completo:
import java.io.FileOutputStream;
import java.io.PrintWriter;

import javax.swing.JApplet;
import javax.swing.JLabel;

import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Applet extends JApplet { // Classe estende a classe JApplet, pois estou criando um applet
 
/*Para imprimir minhas etiquetas eu precisava de dados do Banco de Dados, e como é impossivel apenas um applet
*conectar com o banco de dados, sem o auxilio do Servlet, resolvemos passar para o applet uma array, contendo
*as informacoes que eu necessito.
*/
/**
*/
private static final long serialVersionUID = 1L;
private String valorArray = null;
private String valor1 = null;  //varivel que recebe o codigo do produto
private String valor2 = null; //variavel que recebe o nome do produto
private String[] ts = null;  // array que recebe o valor da variavel valorArray, para que eu possa dividir minha array
//transforma a data que vem do sistema em data no formato 00/00/0000
private static final SimpleDateFormat formatoString = new SimpleDateFormat("dd/MM/yyyy", new Locale("pt", "BR"));
 
@SuppressWarnings("unused")
public void init() { //método que inicia meu applet
FileOutputStream outputFile = null; //método que vai receber a porta da minha impressora termica tlp.
//valorArray = getParameter("valorApplet"); //getParameter, pega o valor que meu html enviou, com o nome de valorApplet.
valorArray = "91-608-6042#PRODUTO N_2#";
ts = valorArray.split("#"); //o jogo da velha é o que separa os valores codigo de produto.
JLabel lbl = new JLabel("Enviando impressão...");
                add(lbl);
        
for(int i=0; i<ts.length; i=(i+2)){ // repete ate dividir minha array completamente.
valor1 = ts[i];
valor2 = ts[i+1];
try {
outputFile = new FileOutputStream("USB002"); // meu objeto outputFile, recebe a porta
PrintWriter out = new PrintWriter(outputFile); // PrinterWriter escreve na porta selecionada.
//////////
out.println("Q240,024");
out.println("q831");
out.println("rN");
out.println("S4");
out.println("D7");
out.println("ZT");
out.println("JF");
out.println("OD");
out.println("R215,0");
out.println("f100");
out.println("N");
out.println("B364,222,2,1,4,12,82,B,\"12345\"");
out.println("A364,96,2,4,1,1,N,\"Usuário: 12345\"");
out.println("A364,70,2,4,1,1,N,\"Senha: 123456\"");
out.println("A364,43,2,4,1,1,N,\"Cliente titular\"");
out.println("P1");
/////////
out.close(); //fechando a comunicacao com a porta
outputFile.close(); //fechando a porta
System.out.println("ok");
} catch (Exception e) {
Logger.getLogger(Applet.class.getName()).log(Level.SEVERE, null, e); //caso ocorra alguma excessao, ao tentar a comunicacao com a porta
}
}
}
}

Paulo Dayvson

unread,
Sep 4, 2013, 10:30:17 AM9/4/13
to ce...@googlegroups.com, Francisco Xavier
Pelo cenário, acho que não vou ter outra solução a não ser essa, pois existe outra impressora conectada para ser usada também.

ELIAS SALES F JUNIOR

unread,
Sep 4, 2013, 12:21:42 PM9/4/13
to ce...@googlegroups.com
A porta é essa mesmo ? "USB002" ?

Carlos Júnior

unread,
Sep 4, 2013, 1:47:15 PM9/4/13
to ce...@googlegroups.com
Paulo, meu trecho de código.
Lembrando que utilizei para gerar código de barras em etiquetas.

==

public void geraEtiquaImpressora(List subprodutos)
    {
        PrintService psZebra;
        String sPrinterName;
        psZebra = null;
        sPrinterName = "Zebra  TLP2844";
        PrintService services[] = PrintServiceLookup.lookupPrintServices(null, null);
        PrintService aprintservice[];
        int k = (aprintservice = services).length;
        for(int j = 0; j < k; j++)
        {
            PrintService ps = aprintservice[j];
            if(sPrinterName.equalsIgnoreCase(ps.getName()))
                psZebra = ps;
        }

        if(psZebra == null)
        {
            System.out.println("Zebra printer is not found.");
            return;
        }
        try
        {
            System.out.println((new StringBuilder("Found printer: ")).append(sPrinterName).toString());
            DocPrintJob job = psZebra.createPrintJob();
            int altura = 160;
            int largura = 240;
            int entreEtq = 14;
            int alturaBarra = 72;
            int qtdCol = 3;
            int col = 1;
            int topoX = 24;
            int topoY = 2;
            int x = topoX;
            int y = topoY;
            String s = "Q160,016\nq240\nrN\nS1\nD7\nZT\nR24,16\nJB\nOD\nN\n";
            for(Iterator iterator = subprodutos.iterator(); iterator.hasNext();)
            {
                Subproduto sub = (Subproduto)iterator.next();
                int qtdProd = sub.getQtdeUnitariaEntradaSaida().intValue();
                for(int i = 0; i < qtdProd; i++)
                    if(col < qtdCol)
                    {
                        int xAux = x;
                        int yAux = y;
                        s = (new StringBuilder(String.valueOf(s))).append("A").append(x).append(",").append(y).append(",0,3,1,1,N,\"REF ").append(sub.getSubReferencia()).append("\"\n").toString();
                        x += 160;
                        s = (new StringBuilder(String.valueOf(s))).append("A").append(x).append(",").append(y).append(",0,4,1,1,N,\"").append(sub.getTamanho().getDescricao()).append("\"\n").toString();
                        x -= 160;
                        y += 24;
                        s = (new StringBuilder(String.valueOf(s))).append("A").append(x).append(",").append(y).append(",0,3,1,1,N,\"").append(sub.getProduto().getModelo()).append("\"\n").toString();
                        y += 24;
                        s = (new StringBuilder(String.valueOf(s))).append("B").append(x).append(",").append(y).append(",0,E30,2,4,").append(alturaBarra).append(",B,\"").append(sub.getCodigoDeBarra()).append("\"\n").toString();
                        col++;
                        x = xAux + largura + entreEtq;
                        y = yAux;
                    } else
                    {
                        int yAux = y;
                        s = (new StringBuilder(String.valueOf(s))).append("A").append(x).append(",").append(y).append(",0,3,1,1,N,\"REF ").append(sub.getSubReferencia()).append("\"\n").toString();
                        x += 160;
                        s = (new StringBuilder(String.valueOf(s))).append("A").append(x).append(",").append(y).append(",0,4,1,1,N,\"").append(sub.getTamanho().getDescricao()).append("\"\n").toString();
                        x -= 160;
                        y += 24;
                        s = (new StringBuilder(String.valueOf(s))).append("A").append(x).append(",").append(y).append(",0,3,1,1,N,\"").append(sub.getProduto().getModelo()).append("\"\n").toString();
                        y += 24;
                        s = (new StringBuilder(String.valueOf(s))).append("B").append(x).append(",").append(y).append(",0,E30,2,4,").append(alturaBarra).append(",B,\"").append(sub.getCodigoDeBarra()).append("\"\n").toString();
                        col = 1;
                        x = topoX;
                        y = yAux + altura + entreEtq;
                    }

            }

            s = (new StringBuilder(String.valueOf(s))).append("P1\n").append("FE\n").toString();
            byte by[] = s.getBytes();
            DocFlavor flavor = javax.print.DocFlavor.BYTE_ARRAY.AUTOSENSE;
            javax.print.Doc doc = new SimpleDoc(by, flavor, null);
            System.out.println("Pronti alla stampa");
            job.print(doc, null);
            System.out.println("Stampa inviata");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return;
    }

Paulo Dayvson

unread,
Sep 4, 2013, 2:19:24 PM9/4/13
to ce...@googlegroups.com
Essa mesmo, tentei até mudar de porta, mas nas outras mostra um erro dando a entender que nelas não tem nenhum dispositivo.

Paulo Dayvson

unread,
Sep 4, 2013, 2:22:06 PM9/4/13
to ce...@googlegroups.com
Cambito, vou testar aqui e ver se funciona. Obrigado.
Reply all
Reply to author
Forward
0 new messages