Já tentei imprimir direto na porta de impressão, mas preciso que o usuário tenha a possibilidade de selecionar a impressora (no código, uso a Default apenas para facilitar os testes)
/**
* Envia como array de bytes o @param toPrint para a impressora
* desejada, através do nome.
*
* @param toPrint conteúdo a ser impresso ou comandos
* @param printerName nome da impressora
* @throws PrintException
*/
public static void printArquivo(String toPrint, String printerName) throws PrintException {
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(OrientationRequested.PORTRAIT);
aset.add(new JobName("Impressão Etiqueta", null));
//PROCURA A IMPRESSORA
PrintService printer = null;
PrintService[] impressoras = PrinterJob.lookupPrintServices();
for (int i = 0; i < impressoras.length; i++) {
PrintService p = impressoras[i];
if (p.getName().equalsIgnoreCase(printerName)) {
JOptionPane.showMessageDialog(null, "Impressora pronta para imprimir..");
printer = p;
break;
}
}
//ENVIA COMO ARRAY DE BYTES PARA IMPRESSORA DESEJADA
DocPrintJob docPrint = printer.createPrintJob();
InputStream stream = new ByteArrayInputStream(toPrint.getBytes());
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc doc = new SimpleDoc(stream, flavor, null);
docPrint.print(doc, aset);
}
/**
* Busca todas as impressoras instaladas no computador,
* inclusive impressoras de rede.
*
* @return uma lista de Strings com os nomes das impressoras
*/
public static List getListaDeImpressoras() {
List list = new ArrayList();
if (PrinterJob.lookupPrintServices() != null) {
PrintService[] impressoras = PrinterJob.lookupPrintServices();
for (int i = 0; i < impressoras.length; i++) {
PrintService p = impressoras[i];
list.add(p.getName());
}
}
return list;
}
}
Não fiz nenhum alteração no código, apenas adicionei um main na classe:
public static void main(String[] args) throws Exception {
printArquivo("Texto a ser impresso", "Texto");
}
Estou testando em uma impressora mapeada para um arquivo, usando driver Genérico de Texto (o que deveria gerar o arquivo com a String enviada para impressão).
Com JavaComm eu consigo obter uma lista de todas impressoras instaladas na máquina do usuário (incluindo impressoras compartilhadas)?
Se sim, isso ajudaria a resolver meu problema.
Já consegui imprimir diretamente na porta da impressora como citado aqui, o problema é que preciso dar opção ao usuário de escolher a impressora desejada
Seguinte, aquele método ali, lista impressoras… pega todas as impressoras disponiveis inclusive as em rede.
Para imprimir na LPT1, USB ou qualquer uma é só você passar o nome correto da impressora! Texto é nome da impressora que está instalada no seu painel de controle?
Utilizo isso para imprimir em impressoras de termo-transferencia que tem uma linguagem especifica… funciona em um applet em mais de 50 clientes… reconhecendo todas as impressoras e fazendo a impressao!
Seguinte, aquele método ali, lista impressoras… pega todas as impressoras disponiveis inclusive as em rede.
Para imprimir na LPT1, USB ou qualquer uma é só você passar o nome correto da impressora! Texto é nome da impressora que está instalada no seu painel de controle?
Utilizo isso para imprimir em impressoras de termo-transferencia que tem uma linguagem especifica… funciona em um applet em mais de 50 clientes… reconhecendo todas as impressoras e fazendo a impressao!
abraço[/quote]
pavei, Texto é sim o nome da impressora que está instalada no meu Windows. Como disse anteriormente, estou usando uma impressora em arquivo, com driver genérico/somente texto. Fiz um teste em Windows XP (Java 5) e Windows 7 (Java 6). Ambos falharam.
Até tentei deixar como impressora padrão e ao invés de procurar as impressoras disponíveis utilizar a padrão. Em ambos os casos o PrinterJob usa a impressora correta mas no Windows XP o arquivo sai vazio e no no Windows 7 é acusado um erro no gerenciador de fila de impressão.
Vou tentar fazer mais alguns testes.
Foi o que eu imaginei. Mas mesmo assim, valeu pela ajuda