[Resolvido]Configurar Tamanho do Papel para Impressão

13 respostas
M

Bom dia pessoal, estou com a seguinte dúvida: Como faço para configurar o tamanho do papel para impressão(A3,A4,etc)?

13 Respostas

M

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?

F

Olá rapaz,

Espero que ajude, antes de mais nada, seria necessário importar alguns pacotes …

import javax.print.<em>;

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 <a href="http://java.io">java.io</a>.</em>;

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]

M

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?

F

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

M

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.

F

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

M

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.

F

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

M

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.

M

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);

R

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);

UMA DUVIDA, DE QUAL PACOTE É ESSE PrinterData???

M

root_:

UMA DUVIDA, DE QUAL PACOTE É ESSE PrinterData???

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.

R

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…

Criado 9 de setembro de 2008
Ultima resposta 21 de nov. de 2008
Respostas 13
Participantes 3