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.