Impressão Java via Applet Integrado com PHP

2 respostas
J

Olá pessoal, eu estou passando por um grande problema aqui no meu trabalho, eu programo em PHP, e como todos sabem PHP é uma linguagem server-side, pois é, eu estou fazendo um sistema no qual preciso ‘cuspir’ etiquetas automaticamente, em uma impressora zebra. tentei integrar PHP com java no servidor, porém não consegui efetuar a instalação ai que descobri sobre os applets, e resolvi aprender java e criar um applet.

Consegui criar o Applet, no qual esta postado abaixo, e criei uma forma de utilização, e aparentemente ele funciona PORÉM, em muitas ocasiões ele não envia a etiqueta para a impressora, e em outras a etiqueta sai escrito tudo NULL, verifiquei os parametros que envio com o php, e em todas essas situações eu envio as informações normalmente mais hora funciona e hora não funciona, eu tentei de tudo, por ultimo tava procurando uma forma de imprimir o código direto da impressora sem criar arquivo temporario, mais não consegui fazer isso, preciso de ajuda caso alguém consiga ou tenha um caminho do que pode ocorrer com o meu applet, para ele sofrer esta OSCILAÇÃO agradeço a ajuda. Obrigado.

CLASSE DO APPLET ANTES DA COMPILAÇÃO

package etq_env.classes;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.swing.JOptionPane;

public class Etq_env 
{
	String base;
	String titular;
	String AC;
	String endereco;
	String endereco_comp;
	String endereco_cep;
	String cod_emp_filial;
	String peso;
	String ref;
	String volume;
	
	public String getBase() {
		return base;
	}
	public void setBase(String base) {
		this.base = base;
	}
	public String getTitular() {
		return titular;
	}
	public void setTitular(String titular) {
		this.titular = titular;
	}
	public String getAC() {
		return AC;
	}
	public void setAC(String aC) {
		AC = aC;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getEndereco_comp() {
		return endereco_comp;
	}
	public void setEndereco_comp(String endereco_comp) {
		this.endereco_comp = endereco_comp;
	}
	public String getEndereco_cep() {
		return endereco_cep;
	}
	public void setEndereco_cep(String endereco_cep) {
		this.endereco_cep = endereco_cep;
	}
	public String getCod_emp_filial() {
		return cod_emp_filial;
	}
	public void setCod_emp_filial(String cod_emp_filial) {
		this.cod_emp_filial = cod_emp_filial;
	}
	public String getPeso() {
		return peso;
	}
	public void setPeso(String peso) {
		this.peso = peso;
	}
	public String getRef() {
		return ref;
	}
	public void setRef(String ref) {
		this.ref = ref;
	}
	public String getVolume() {
		return volume;
	}
	public void setVolume(String volume) {
		this.volume = volume;
	}
	public Etq_env(String base, String titular, String aC, String endereco,
			String endereco_comp, String endereco_cep, String cod_emp_filial,
			String peso, String ref, String volume) {
		super();
		setBase(base);
		setTitular(titular);
		setAC(aC);
		setEndereco(endereco) ;
		setEndereco_comp(endereco_comp);
		setEndereco_cep(endereco_cep);
		setCod_emp_filial(cod_emp_filial);
		setPeso(peso);
		setRef(ref);
		setVolume(volume);
	}
	
	
//	public Etq_env(String base, String titular, String aC, String endereco,
//			String endereco_comp, String endereco_cep, String cod_emp_filial,
//			String peso, String ref, String volume)
	
    private static PrintService impressora;  
    

	//private Produto produtoSelecionado;  
    private ArrayList etiqueta = new ArrayList();  
    
    public String imprimeEtiquetaZebra(){  
    	
        String retorno = "";  
          
        if (!"".equals(retorno)){  
            return retorno;  
        }  
          
        //recebe o produto enviado por parametro  
        //produtoSelecionado = produto;  
          
        //escreve o nome do arquivo  
        String nomeArquivo = "Etiquetas"+File.separator+"ETIQUETA - REF .EJF";  
          
        //cria o arquivo  
        File diretorio = new File("Etiquetas");  
        diretorio.mkdir();  
        File arquivoEtiqueta = new File(nomeArquivo);  
         

        
    //==============================================================

	 preencheEtiqueta();
    
//==============================================================
        
        //cria o arquivo .txt  
        try {  
              
            BufferedWriter bw = new BufferedWriter(new FileWriter(arquivoEtiqueta));  
              
            for (int i = 0; i < etiqueta.size(); i++){  
            	
                bw.write(etiqueta.get(i).toString());  
                bw.newLine();
                System.out.println(etiqueta.get(i).toString());
            }  
              
            bw.close();  
              
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
          
        //carrega os dados do arquivo gerado  
        FileInputStream dadosEtiqueta = null;  
          
        try {  
              
            //carrega os dados do arquivo de etiqueta  
            dadosEtiqueta = new FileInputStream(arquivoEtiqueta);  
              
            //determina o tipo a ser impresso txt   
            DocFlavor docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;   
            SimpleDoc documentoTexto = new SimpleDoc(dadosEtiqueta, docFlavor, null);   
  
            //verifica quais impressoras sao compativeis com txt
            
            detectaImpressoras();
            //PrintService[] servicosImpressao = PrintServiceLookup.lookupPrintServices( docFlavor, null);                       
            //PrintService impressora = PrintServiceLookup.lookupDefaultPrintService();   
            
            //determina os atributos  
            PrintRequestAttributeSet printerAttributes = new HashPrintRequestAttributeSet();   
            //quantidades de copias ****** opcional  
            printerAttributes.add(new Copies(1));   
            //modelo do papel ****** opcional  
            //printerAttributes.add(MediaSizeName.ISO_A4);   
  
            //cria a tarefa de impressao  
            DocPrintJob printJob = impressora.createPrintJob();   
              
            //tenta imprimir  
            printJob.print(documentoTexto, (PrintRequestAttributeSet)printerAttributes);  
              
            
            //fecha o arquivo  
            dadosEtiqueta.close();  
              
        //se nao achar o arquivo      
        } catch (FileNotFoundException ex) {  
            ex.printStackTrace();  
        //se nao conseguir imprimir  
        } catch(PrintException e){   
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a impressão !!", "Erro", JOptionPane.ERROR_MESSAGE);   
        //se nao conseguir fechar  
        } catch (IOException ex) {  
            ex.printStackTrace();  
        }  
          
        return retorno;  
          
    }  
    
    public void detectaImpressoras() {  
    	  
        try {  
        	
            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;  
            PrintService[] ps = PrintServiceLookup.lookupPrintServices(df, null);  
            for (PrintService p: ps) {  
  
                //System.out.println("Impressora encontrada: " + p.getName());  
  
                if (p.getName().contains("ZDesigner") || p.getName().contains("ZDesigner"))  {    
                    impressora = p;  
                    break;  
  
                }  
  
            }  
  
        } catch (Exception e) {  
  
            e.printStackTrace();  
  
        }  
  
    }  
  
      
    private void preencheEtiqueta(){
        //cabeçalho e configuração da etiqueta          
    	char lt=34;
        
etiqueta.add("I8,A,001");
etiqueta.add("");
etiqueta.add("");
etiqueta.add("Q406,024");
etiqueta.add("q863");
etiqueta.add("rN");
etiqueta.add("S3");
etiqueta.add("D7");
etiqueta.add("ZT");
etiqueta.add("JF");
etiqueta.add("O");
etiqueta.add("R32,0");
etiqueta.add("f100");
etiqueta.add("N");
etiqueta.add("X2,0,8,784,376");


etiqueta.add("A31,142,0,4,1,1,N," + lt +  getAC().toUpperCase() + lt + "");
etiqueta.add("A28,278,0,4,1,1,N," + lt + getCod_emp_filial()+ lt + "");
etiqueta.add("A28,236,0,4,1,1,N," + lt + getEndereco_cep()+ lt + "");
etiqueta.add("A28,204,0,4,1,1,N," + lt + getEndereco_comp()+ lt + "");
etiqueta.add("A31,170,0,4,1,1,N," + lt + getEndereco() + lt + "");
etiqueta.add("A31,116,0,4,1,1,N," + lt + getTitular()+ lt + "");
etiqueta.add("A29,322,0,4,1,1,N," + lt + getPeso() + lt + "");
etiqueta.add("A28,85,0,4,1,1,N," + lt + "DESTINATÁRIO" + lt + "");
etiqueta.add("A29,33,0,4,2,2,N," + lt + getVolume() + lt + "");
etiqueta.add("B558,25,0,1,2,6,34,B," + lt + getBase() + lt + "");
etiqueta.add("B284,274,0,1,2,6,60,B," + lt + getRef() + lt + "");


etiqueta.add("P1");

}

	
}

UTILIZAÇÃO DO APPLET

<APPLET code="Et_Env.class" width="0" height="0" archive="<?php echo $DiretorioVirtualRaiz?>Java/Et_env.jar">
<PARAM name="Base" value="<?php echo $base?>">
<PARAM name="Tit" value="<?php echo $EMPRESA?>"> 
<PARAM name="AC" value="A/C: <?php echo $AC_CONTRATO_SIST?>">
<PARAM name="endereco" value="<?php echo $LOGRADOURO?>, <?php echo $NUMERO?>">
<PARAM name="endereco_comp" value="<?php if($COMPLEMENTO_DO_ENDERECO != '') echo $COMPLEMENTO_DO_ENDERECO . ' - ';?> <?php echo $BAIRRO?>">
<PARAM name="endereco_cep" value="<?php echo $CEP?> - <?php echo $CIDADE?> - <?php echo $UF?>">
<PARAM name="Cod" value="COD. <?php echo $CD_EMPRESA . '-' . $NR_FILIAL?>">
<PARAM name="Peso" value="">
<PARAM name="Ref" value="<?php echo $BASE_REF?>">
<PARAM name="Vol" value="VOLUME <?php echo $VOLUME1?>/<?php echo $VOLUME2?>">
</APPLET>

LEMBRANDO QUE O MESMO FUNCIONA, porém quando ele quer, a cada 10 impressoes, 5 saem direto, 2 não cospe etiqueta, e outras 3 ele vem a etiqueta escrito tudo null, isso só dando um f5 na página, sem mudar parametros.

2 Respostas

Flavio_machine

Você não consegue fazer isso com css ?

J

Amigo eu tenho que mandar na PORTA da impressora, com css ou de qualquer forma online, ele vai abrir um pop up para confirmar e etc. e a etiqueta sai em uma outra mesa, longe da onde esta sendo lido o programa entende. quem manipula o programa nem ve que sai uma etiqueta, eu estou usando dessa forma, se colocar um popup para clicar não vai ter processo de automoção nenhuma nisso.

Criado 27 de fevereiro de 2013
Ultima resposta 27 de fev. de 2013
Respostas 2
Participantes 2