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:
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
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???
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…
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.
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);
}