Impressão Java via Applet Integrado com PHP

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.

Você não consegue fazer isso com css ?

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.