estou pesquisando sobre como imprimir um arquivo pdf usando JPS (e vou recorrer a outra coisa
caso não tenha nenhum resultado positivo).
Fiz uns testes mas a impressão traz a codificação do pdf em várias folhas, ou seja, coisas como :
%PDF-1.4
%âãÏÓ
1 0 obj <>stream
x?ã
Dei uma fuçada na internet e achei um exemplo que imprimi um txt, estou convertendo meu pdf para txt.
Encontrei outro problema,
é o seguinte:
estou me baseando nesse exemplo para impressão
importjava.awt.*;importjava.awt.font.*;importjava.awt.print.*;importjava.io.*;importjava.text.AttributedString;importjava.util.ArrayList;importjava.util.Iterator;publicclassAdvancedTextExampleimplementsPrintable{// array de paragrafos do textoArrayListtexto;publicAdvancedTextExample()throwsIOException{// Obtem um job de impressaoPrinterJobjob=PrinterJob.getPrinterJob();// carrega o texto a ser impressoBufferedReaderre=newBufferedReader(newFileReader("texto.txt"));texto=newArrayList();Stringline=re.readLine();while(line!=null){texto.add(line);line=re.readLine();}re.close();// Define o objeto a ser impressojob.setPrintable(this);// exibe o dialogo de impressao.if(job.printDialog()){try{// imprime o objeto printablejob.print();}catch(PrinterExceptione){e.printStackTrace();}}}publicintprint(Graphicsg,PageFormatformat,intpage)throwsPrinterException{if(page!=0){returnNO_SUCH_PAGE;}Graphics2Dgr=(Graphics2D)g;// determina o ponto de inicio do texto (inicio da area util + 10 pontos)floatposX=(float)format.getImageableX()+10;floatposY=(float)format.getImageableY()+10;// determina a largura do texto como 350 pontos (dpi)floatlarguraTexto=350;// para cada paragrafo, imprime o paragrafo formatadoIteratorit=texto.iterator();while(it.hasNext()){Stringline=(String)it.next();// caso haja uma linha em branco, substituir por um espaço// para permitir formataçãoif(line.length()==0){line=" ";}// texto formatado a ser impressoAttributedStringstr=newAttributedString(line);// define a fonte do texto como arial 12 itálicostr.addAttribute(TextAttribute.FONT,newFont("Arial",Font.ITALIC,12));// instancia um line breaker para o texto formatadoLineBreakMeasurerquebrador=newLineBreakMeasurer(str.getIterator(),gr.getFontRenderContext());// cria um TextLayout para armazenar cada linha 'quebrada'TextLayoutlinha=quebrador.nextLayout(larguraTexto);while(linha!=null){// posiciona o textoposY+=linha.getAscent();linha.draw(gr,posX,posY);// soma espaço para a próxima linhaposY+=linha.getDescent()+linha.getLeading();linha=quebrador.nextLayout(larguraTexto);}}// fim dos paragrafosreturnPAGE_EXISTS;}publicstaticvoidmain(String[]args){try{newAdvancedTextExample();}catch(IOExceptione){System.out.println("Erro imprimindo: "+e.getMessage());}}}
quanto ele imprimi ele coloca uma página somente, mesmo com quebra ele não interpreta…eu tentei
excluir o trecho
if(page!=0){returnNO_SUCH_PAGE;}
mas ele fica imprimindo sem fim.
Fui depurar e a variável texto é preenchida com todo conteúdo que veio do arquivo txt, então esse não é o problema…
Alguma sugestão pessoal ?
T
thingol
O Java Print Service não consegue imprimir diretamente arquivos PDF. Uma forma de fazer isso é usar alguma biblioteca, e outra é chamar o próprio Adobe Reader e solicitar que ele imprima o arquivo .pdf para você; procure por “pdf print java” no Google.
RichardVaugh
Valeu thingol ! Obrigado !
Ótima idéia !
Encontrei bastante coisa sobre essa forma de impressão.
Consegui resvolver o problema também com a classe JRPrintServiceExporter do iReport.
Depois vou analisar as duas formas e ver qual fica melhor.
abraço .
gilberto_oliveira
RichardVaugh :
Valeu thingol ! Obrigado !
Ótima idéia !
Encontrei bastante coisa sobre essa forma de impressão.
Consegui resvolver o problema também com a classe JRPrintServiceExporter do iReport.
Depois vou analisar as duas formas e ver qual fica melhor.
abraço .
Poderia postar um código ? estou com o mesmo problema.
Certo, obrigado… mas digamos que eu queira selecionar a impressora via JPS. Seria possível?
É que preciso deixar a impressora padrão do programa configurável (pra poder ser diferente da padrão do sistema) - está confuso?