Tenho uma aplicação aonde o usuário cadastra o código a ser impressora na impressora .
Acontece que o código a ser impresso existem caracteres com acento como ‘á’, ‘é’, ‘ã’ e também o caractere de ‘ç’.
Hoje eu salvo o conteúdo num arquivo TX e mando pra impressora da seguinte forma:
try {
arqImp = new File ("arquivo.txt");
SimpleDoc sd = new SimpleDoc(new FileInputStream(arqImp), DocFlavor.INPUT_STREAM.AUTOSENSE, null);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
if (impressora != null) {;
impressora.createPrintJob().print(sd, aset);
}
} catch (Exception e) {
e.printStackTrace();
}
Deste jeito os caracteres de acentuação não são reconhecidos, viram ‘?’ na impressão.
Li em alguns lugares pra imprimir ASCII. Tentei salvar em ACSII no arquivo TXT, porém a impressão continua errada.
Li também para imprimir direto na porta, mas pra isso eu precisaria saber a porta, sendo que a impressora eu busco por:
PrinterJob.lookupPrintServices()
Existe alguma forma de eu conseguir descobrir em qual porta impressora esta?
Ou então alguma outra forma de mandar ASCII pra impressora?
Alterei minha rotina pra não ler de arquivo e sim mandar uma String, faço a conversão dos caracters para ASCII,porém alguns casos ainda não consigo, por exemplo o Ç e a letra ‘é’.
Alguém tem alguma ideia???
Meu código:
Rotina que converte meus caracteres com acento (essa é aparte que ainda não funciona direito:
for (Character c : linha.toCharArray()) {
switch (c) {
case 'á':
c = 160;
break;
case 'à':
c = 133;
break;
case 'â':
c = 131;
break;
case 'ã':
c = 134;
break;
case 'é':
c = 130;
break;
case 'è':
c = 138;
break;
case 'ê':
c = 136;
break;
case 'í':
c = 161;
break;
case 'ì':
c = 141;
break;
case 'î':
c = 140;
break;
case 'ó':
c = 162;
break;
case 'ò':
c = 149;
break;
case 'õ':
c = 235;
break;
case 'ô':
c = 147;
break;
case 'ú':
c = 163;
break;
case 'ù':
c = 151;
break;
case 'û':
c = 150;
break;
case 'Ã':
c = 199;
break;
case 'À':
c = 183;
break;
case 'Á':
c = 181;
break;
case 'Â':
c = 182;
break;
case 'É':
c = 144;
break;
case 'È':
c = 212;
break;
case 'Ê':
c = 210;
break;
case 'Í':
c = 214;
break;
case 'Ì':
c = 222;
break;
case 'Î':
c = 215;
break;
case 'Ó':
c = 224;
break;
case 'Ò':
c = 227;
break;
case 'Õ':
c = 229;
break;
case 'Ô':
c = 226;
break;
case 'Ú':
c = 233;
break;
case 'Ù':
c = 234;
break;
case 'Û':
c = 235;
break;
case 'ç':
c = 135;
break;
case 'Ç':
c = 128;
break;
case 'º':
c = 167;
break;
}
jTextArea2.setText(jTextArea2.getText() + c);
}
}[/code]
Rotina que procura a impressora e imprime o texto direto nela: