Impressão em Java

Dei uma pesquisada no GUJ sobre impressão e a grande maioria fala sobre um pacote java.awt.print.*

O problema que estou tentando resolver não é nada comercial, é apenas pra facilitar um negócio que costumo fazer com frequencia hehe

Eu costumo imprimir PDF’s que baixo na internet… e-books free, etc… Então o que eu tenho que fazer todas vez? Abro o PDF, aih fico mandando imprimir de 10 em 10, primeiramente apenas os numeros impares, em seguida viro as paginas e mando imprimir as pares… e eu gostaria de fazer um programinha que automatize esse negocio… eh um saco ficar dando ctrl+P direto e colocando as paginas e marcando pra imprimir somente pares/impares… e ainda preciso manter uma logicazinha na ordem da impresso pra no final de cada pacote de 10 paginas, as folhas ja estarem ordenadas, tudo bonitinho hehhee

Esse programa que eu quero fazer nao precisa ser nada bonitinho, com GUI nem nada… soh precisa ser algo onde eu possa (mesmo se for direto na linha de comando, ja passar os parametros:

$java MeuPrograma nome_pdf paginaInicial paginaFinal apenas_impares ordem_decrescente
$java MeuPrograma nome_pdf paginaInicial paginaFinal apenas_pares ordem_crescente

Com as classes desse pacote citado acima eu conseguiria fazer isso? Caso contrário, alguém conheceria alguma API em java que consiga fazer isso?

Obrigado.

Edit.: A descrição acima que eu dei foi bem numa visão abstrata… do problema em si… mas falando no “baixo nível” o que to precisando é de uma API que consiga ler um arquivo PDF no sistema de arquivos, e que tenha métodos para imprimir podendo informar os limites inferior e superior, a ordem (crescente ou decrescente) e um boolean (ou alguma constante, enum, etc.) informando se é pra imprimir apenas as pares ou as impares.

Ola Rafael, eu axo melhor vc usa um framework chamado Jasper Ireport, é a melhor forma de fazer
Relatorios, é mtoo boa essa ferramenta… faça o download e use!!! valeu

//Documentação
http://ireport.sourceforge.net

//Download do framework
http://sourceforge.net/project/showfiles.php?group_id=64348

Leandro, a idéia do jasper não é “montar” relatórios não? eu ter vários dados em DataSources (javabeans, ou conexao jdbc), o runner do JasperReports junta o layout (*.jasper) com os dados (JRDataSource ou JDBC) e cria o PDF?

O que eu preciso é apenas o ato da impressão… o PDF já está pronto e eu quero apenas imprimir … nas condições que citei acima… o JasperReports faz isso???

Pessoal, achei um link que parece ser interessante… até onde eu li, acho que será possível fazer isso que eu preciso (e muitas coisas mais).

Pra quem tiver interese, segue o link:

http://java.sun.com/j2se/1.4.2/pdf/JPS_PDF.pdf

Se eu realmente conseguir implementar usando as informações que constam nesse PDF eu volto pra avisar.

Se, enquanto isso, alguém conhecer uma forma mais fácil de fazer, seria bom compartilhar.

[]'s

Ahhh…

Esse negócio deveria funcionar… tem vários formatos de arquivo que vc pode mandar imprimir, mas justamente PDF parece que não existe suporte… estranho… se eu tenho imprimir um PDF aí da a exception:

Exception in thread “main” sun.print.PrintJobFlavorException: invalid flavor
at sun.print.Win32PrintJob.print(Win32PrintJob.java:312)

Agora se eu tento imprimir um JPEG, aih funcionar blz… :evil:

E o pior é que esse bug parece que vem desde no minimo 2003, que foi de quando eu achei vários tópicos do pessoal reclamando do erro… pesquisei bastante na net e até agora não achei ninguém que tenha conseguido imprimir PDF usando a API JPS sem ser na gambiarra.

Alguém n tem nenhuma dica? Como pode a SUN disponibilizar o tipo PDF sendo que n ta dando suporte (e isso desde 2003???) estranho…

[]'s

voce ja verificou a propria api do jasper que imprime o relatorio ?

mas a API do jasper é pra criar o pdf… eu nao quero criar pdf… soh quero ler um pdf e imprimir (mandar direto pra impressora)

http://www.adobe.com/devnet/acrobat/

Boa tarde galera!

Rafael, estou com o mesmo problema que você, porém no meu caso preciso apenas imprimir o pdf, não peciso separá-los por por e impar.
Encontrei este código abaixo, porém na hora de sair na impressora ele imprime a primeira página com uma mensagem e entra em looping e começa a fazer a impressora cuspir várias páginas em branco.
Observe que no array de PrintServices ele tem um

DocFlavor.INPUT_STREAM.PDF

No código que peguei original esta linha é:

DocFlavor.INPUT_STREAM.AUTOSENSE

Ainda não consegui encontrar uma solução para este problema, talvez com este código que postei você consiga algo com o que você já pesquisou.
Se conseguir alguma resposta por favor poste pois ainda estou sem respostas.

Abs!

[code]import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.print.;
import javax.print.attribute.
;
import javax.print.attribute.standard.Copies;

public class PaginaBranco {

public PaginaBranco(boolean showDialog) {
	try {
		// Localiza todas as impressoras com suporte a arquivos txt
		PrintService[] printerServices =
				PrintServiceLookup.lookupPrintServices(
						DocFlavor.INPUT_STREAM.PDF, null);

		System.out.println("Impressoras com suporte: " + printerServices.length);

		// Localiza a impressora padrão
		PrintService printer = PrintServiceLookup.lookupDefaultPrintService();
		System.out.println("Impressora: " + printer.getName());

		System.out.println("Imprimindo arquivo txt");
		// Definição de atributos do conteúdo a ser impresso:
		DocFlavor docFlavor = DocFlavor.INPUT_STREAM.PDF;

		// Atributos de impressão do documento
		HashDocAttributeSet attributes = new HashDocAttributeSet();

		// InputStream apontando para o conteúdo a ser impresso
		FileInputStream fi = new FileInputStream("c:\\OS - 00001.pdf");

		// Cria um Doc para impressão a partir do arquivo exemplo.txt
		Doc textDocument = new SimpleDoc(fi, docFlavor, attributes);

		// Configura o conjunto de parametros para a impressora
		PrintRequestAttributeSet printerAttributes = new HashPrintRequestAttributeSet();

		if (showDialog) {
			// exibe um dialogo de configuracoes de impressao
			PrintService service = ServiceUI.printDialog(null, 320, 240,
					printerServices, printer, docFlavor, printerAttributes);
			if (service != null) {
				DocPrintJob printJob = service.createPrintJob();
				printJob.print(textDocument, printerAttributes);
			}
		}
		else {
			// Cria um job de impressão
			DocPrintJob printJob = printer.createPrintJob();

			// Adiciona uma propriedade de impressão: imprimir 2 cópias
			printerAttributes.add(new Copies(1));

			// Imprime o documento sem exibir uma tela de dialogo
			printJob.print(textDocument, printerAttributes);
		}
	} catch (FileNotFoundException ex) {
		System.out.println("Arquivo teste.txt não encontrado!");
	} catch (PrintException ex2) {
		System.out.println("Erro de impressão: " + ex2.getMessage());
	}
}

public static void main(String[] args) {
	new PaginaBranco(true);
}

}[/code]