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;}}
M
marcoantoniorocha
Vou testar e já retorno.
Obrigado
M
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)
D
dyorgio
Quando fiz isso usei o javacomm…
depois de aberto a porta serial correta da impressora, bastou escrever os bytes que queria.
M
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
D
dyorgio
não cara, o javacom apenas lista as portas seriais.
M
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