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 */publicstaticvoidprintArquivo(StringtoPrint,StringprinterName)throwsPrintException{PrintRequestAttributeSetaset=newHashPrintRequestAttributeSet();aset.add(OrientationRequested.PORTRAIT);aset.add(newJobName("Impressão Etiqueta",null));//PROCURA A IMPRESSORAPrintServiceprinter=null;PrintService[]impressoras=PrinterJob.lookupPrintServices();for(inti=0;i<impressoras.length;i++){PrintServicep=impressoras[i];if(p.getName().equalsIgnoreCase(printerName)){JOptionPane.showMessageDialog(null,"Impressora pronta para imprimir..");printer=p;break;}}//ENVIA COMO ARRAY DE BYTES PARA IMPRESSORA DESEJADADocPrintJobdocPrint=printer.createPrintJob();InputStreamstream=newByteArrayInputStream(toPrint.getBytes());DocFlavorflavor=DocFlavor.INPUT_STREAM.AUTOSENSE;Docdoc=newSimpleDoc(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 */publicstaticListgetListaDeImpressoras(){Listlist=newArrayList();if(PrinterJob.lookupPrintServices()!=null){PrintService[]impressoras=PrinterJob.lookupPrintServices();for(inti=0;i<impressoras.length;i++){PrintServicep=impressoras[i];list.add(p.getName());}}returnlist;}}
marcoantoniorocha
Vou testar e já retorno.
Obrigado
marcoantoniorocha
Infelizmente não funcionou.
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).
Estou na luta ainda… 8)
dyorgio
Quando fiz isso usei o javacomm…
depois de aberto a porta serial correta da impressora, bastou escrever os bytes que queria.
marcoantoniorocha
dyorgio,
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
P
pavei
Cara,
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
dyorgio
não cara, o javacom apenas lista as portas seriais.
marcoantoniorocha
pavei:
Cara,
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
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