Bom dia pessoal, estou com a seguinte dúvida: Como faço para configurar o tamanho do papel para impressão(A3,A4,etc)?
Também serve algo que pegue essas informações da impressora padrão.
A classe PageFormat tem as informações que eu preciso, porém não sei como informar qual a impressora padrão que eu pego pela classe PrintService. Alguma idéia de como fazer?
Olá rapaz,
Espero que ajude, antes de mais nada, seria necessário importar alguns pacotes …
import javax.print.;
import javax.print.DocFlavor.INPUT_STREAM;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;
import java.io.;
Agora, vou colocar um método que eu utilizo para impressão, lembrando que impressões de formúlarios seria interessante vc pesquisar sobre outras alternativas, porquê essa é a forma mais simples de impressão que eu conheço, mas vamos lá …
public void imprimir(){
try{
InputStream prin = new ByteArrayInputStream(imp2.getBytes());
INPUT_STREAM docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
SimpleDoc documentoTexto = new SimpleDoc(prin, docFlavor, null);
PrintService impressora = PrintServiceLookup.lookupDefaultPrintService(); // pega a impressora padrao
PrintRequestAttributeSet printerAttributes = new HashPrintRequestAttributeSet();
printerAttributes.add(new JobName(“Impressao”, null));
printerAttributes.add(OrientationRequested.PORTRAIT);
printerAttributes.add(MediaSizeName.ISO_A4); // informa o tipo de folha
DocPrintJob printJob = impressora.createPrintJob();
try{
printJob.print(documentoTexto, (PrintRequestAttributeSet)printerAttributes); //tenta imprimir
}
catch(PrintException e){
JOptionPane.showMessageDialog(null, “Não foi possível realizar a impressão !!”,“Erro”,
JOptionPane.ERROR_MESSAGE); // mostra mensagem de erro
}
prin.close();
}
catch(Exception e){
}
}
obs: imp2 é uma String, uma variavel global …
Espero ter ajudado,
Generosamente,
[i][u]Frid[/i][/u]
Obrigado pela ajuda Frid, realmente foi muito útil. Mas ainda tenho um problema:
Quando executo esse código:
PrintService impressora = PrintServiceLookup.lookupDefaultPrintService();
PrintServiceAttributeSet printService = new HashPrintServiceAttributeSet();
printService = impressora.getAttributes();
Ele retorna os atributos todos como nulos. A única coisa que não é nulo é o atributo printer quando eu crio a impressora, o resto volta tudo como nulo. Será que o fato de a impressora estar em rede influencia nisso?
Olá Márcio,
Cara, no código que eu postei, a impressora pode estar em rede, ser local que imprime numa boa, mas tem a questão que a impressora tem que estar como padrão, ela pode estar em rede mas tem que estar definida como padrão, e olhando o trecho do seu código, parece estar faltando algo, por isso está retornando como nulo, coloque um trecho maior para que tentamos resolver isso, blz, e ah, coloca o que vc teria a intenção de imprimir, pq talvez essa não seria a melhor alternativa para seu proposito, mas vamos tentando que no final tudo dá certo …
Generosamente,
Frid
Frid obrigado pela sua ajuda e atenção até aqui.
Os atributos que digo que voltam nulos são os que a variavel impressora de PrintService recebe. Depois dessa primeira linha do código que passei, se eu usar o depurador ele vai me mostrar isso.
Pelo que entendi, ele deveria pegar todas as configurações da impressora, porém está me retornando nulo, exceto o nome.
Olá Marcio,
Cara, que polemica, rsrs, vc definiu os atributos da impressora??? tipo, o tamanho do papel, cópias, se é retrato e tals, porque olhando aqui não consigo definir o que possa ser, parece que olhando não foi adicionado os atributos para a impressora, tem esses comandos no seu código : printerAttributes.add(new JobName(“Impressao”, null)); printerAttributes.add(OrientationRequested.PORTRAIT); printerAttributes.add(MediaSizeName.ISO_A4); Pq eles que adcionam as propriedades para a impressora, vou tentar descobrir algo mais, blz, flw
Generosamente,
Frid
Pois é Frid, não adicionei. Ao pegar a impressora padrão ele não busca isso da impressora então? Puts, eu precisava das informações da impressora. Mas obrigado pelo ajuda mesmo assim.
Opa,
Cara, para fazer um teste, adiciona o atributos que vc quer antes, e depois com o getAttributes vc verifica se mudou os atributos, assim, podemos sanar nossas dúvidas, blz, depois poste o resultado, inté mais …
Generosamente,
Frid
frid, na verdade o que eu quero é pegar os atributos padrões da impressora, não quero setar valores novos. Algo do tipo impressora.getTamanhoPapel(); que me volte se a folha é A3. A4, ou qualquer outro tipo. Essas informações servirão para definir o tamanho da página que o usuário irá interagir.
Finalmente consegui fazer o que queria. Caso alguém um dia precise pegar o tamanho do papel da impressora padrão, abaixo segue o código:
PrinterData data = Printer.getDefaultPrinterData();
Printer printer = new Printer(data);
Rectangle retangulo = printer.getBounds();
double valorLargura = retangulo.width / 2;
double valorAltura = retangulo.height / 2;
valorLargura = ((valorLargura / 300) * 25.4) + 0.5D;
valorAltura = ((valorAltura / 300) * 25.4) + 0.5D;
int altura = (int) valorAltura;
int largura = (int) valorLargura;
System.out.println(largura + " " + altura);
[quote=marcio_gs]Finalmente consegui fazer o que queria. Caso alguém um dia precise pegar o tamanho do papel da impressora padrão, abaixo segue o código:
PrinterData data = Printer.getDefaultPrinterData();
Printer printer = new Printer(data);
Rectangle retangulo = printer.getBounds();
double valorLargura = retangulo.width / 2;
double valorAltura = retangulo.height / 2;
valorLargura = ((valorLargura / 300) * 25.4) + 0.5D;
valorAltura = ((valorAltura / 300) * 25.4) + 0.5D;
int altura = (int) valorAltura;
int largura = (int) valorLargura;
System.out.println(largura + " " + altura);
[/quote]
UMA DUVIDA, DE QUAL PACOTE É ESSE PrinterData???
[quote=root_]
UMA DUVIDA, DE QUAL PACOTE É ESSE PrinterData???[/quote]
São do SWT. Mas não utilizo mais esse código. Agora uso os pacotes do próprio Java. Armazeno os valores em um PrintRequestAttributeSet e depois basta pegar esses valores e utilizar para configurar o tamanho definido pelo usuário.
Usei como base um exemplo da edição número 07 da Mundo Java.
TO FAZENDO O SEGUINTE, CRIO UM RELATORIO NO IREPORT, E FAÇO A ROTINA DE EXPORTAÇAO PARA .TXT, COMO NO CÓDIGO ABAIXO:
File file = new File("./minuta.txt");
JRTextExporter exporter = new JRTextExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, file);
exporter.setParameter( JRTextExporterParameter.CHARACTER_WIDTH, new Integer( 8 ) );
exporter.setParameter( JRTextExporterParameter.CHARACTER_HEIGHT, new Integer( 13 ) );
exporter.setParameter( JRTextExporterParameter.PAGE_WIDTH, new Integer( 110 ) );
exporter.setParameter( JRTextExporterParameter.PAGE_HEIGHT, new Integer( 34 ) );
exporter.exportReport();
DEPOIS MANDO IMPRIMIR o arquivo txt.
tamo aew na luta, qualquer coisa…