Impressão de um PDF

Olá pessoal…

estou procurando na net… mas não encontro nada sobre tal assunto…

eh o seguinte… um exemplo… tenho esse pedaço de codigo

Document document = new Document();
        try {
            
            PdfWriter.getInstance(document, new FileOutputStream("C://PDF_LinhaCodigo.pdf"));
            document.open();
            // adicionando um parágrafo ao documento
            document.add(new Paragraph("Exemplo Geração de Arquivo PDF via iText - Java"));
        } catch(DocumentException de) {
            System.err.println(de.getMessage());
        } catch(IOException ioe) {
            System.err.println(ioe.getMessage());
        }
        document.close();

se eu quizer mandar imprimir direto esse aquivo PDF… como q eu faço para imprimi-lo…???

estou utilizando o seguinte método para imprimir

public synchronized boolean imprime(String texto) {
        
           
            try {
                
                DocPrintJob dpj = impressora.createPrintJob();
                InputStream stream = new ByteArrayInputStream(texto.getBytes());
                
                DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                Doc doc = new SimpleDoc(stream, flavor, null);
                dpj.print(doc, null);
                
                return true;
                
            } catch (PrintException e) {
                
                e.printStackTrace();
                
            }
            
        
        
        return false;
        
    }

porem nesse metodo seta para impressão um InputStream, porem não encontrei nenhum metodo de objetos relacionados ao pdf q me devolva um InputStream ou coisa do tipo… : /

agradeço a ajuda desde já…

Não conheço essa API, mas como sugestão…

Ao invés de passar um FileOutputStream para PdfWriter.getInstance, passe um ByteArrayOutputstream, e pegue posteriormente o conteúdo em bytes.

Veja se funciona e posta aí pra galera.

Abraço,

Armando

não funciona… não eh aceito esse tipo de parametro no getInstance…

[]'s… estou quase resolvendo creio eu ! hehehehe…

mudei um poko o metodo de impressão… agora eu passo o caminho do arquivo pdf… e falo q o arquivo q será impresso… EH um pdf…

veja o codigo…

public synchronized boolean imprime(String caminho) throws PrintException {
        
        // se nao existir impressora, entao avisa usuario
        // senao imprime texto
        if (impressora == null) {
            
            String msg = "Nennhuma impressora foi encontrada. Instale uma impressora padrão \r\n(Generic Text Only) e reinicie o programa.";
            System.out.println(msg);
            
        } else {
            
            try {
                
                DocPrintJob dpj = impressora.createPrintJob();
                
                DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;
                FileInputStream file;
                file = new FileInputStream("C://Comprovante_20061221.pdf");
                DocAttributeSet das = new HashDocAttributeSet();
                Doc doc = new SimpleDoc(file, flavor, das);
                dpj.print(doc, null);
                
                return true;
                
            }  catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }
            
        }
        
        return false;
        
    }

mas ele apresenta outro erro:


sun.print.PrintJobFlavorException: invalid flavor
        at sun.print.Win32PrintJob.print(Win32PrintJob.java:312)
        at com.br.impressao.Impressao.imprime(Impressao.java:93)
        at ExemploBancoBrasil.main(ExemploBancoBrasil.java:91)

alguem jah viu esse erro ?!?!?

agradeço desde já…

Pelo javadoc aceita sim…

[quote]getInstance

public static PdfWriter getInstance(Document document,
OutputStream os)
throws DocumentException

Gets an instance of the PdfWriter.

Parameters:
    document - The Document that has to be written
    os - The OutputStream the writer has to write to. 
Returns:
    a new PdfWriter 
Throws:
    DocumentException - on error

[/quote]
Ou seja, o método getInstance recebe um OutputStream, que pode ser um ByteArrayOutputStream. Tenta assim:

    ByteArrayOutputStream output = new ByteArrayOutputStream();
    PdfWriter.getInstance(document, output);
    //Aqui vem a geração do seu PDF
   ...
   DocPrintJob dpj = impressora.createPrintJob();
   InputStream stream = new ByteArrayInputStream(output.getBytes());

Vê aí que bicho dá… é melhor do que gravar um arquivo inútil, que você vai ter que ficar controlando…

Abraço,

Armando

Olá… Bom di a todos…

mesmo eu fazendo isso como foi sugerido pelo Armando… o metodo ficaria assim…


 public synchronized boolean imprime(ByteArrayOutputStream output) throws PrintException {
        
        // se nao existir impressora, entao avisa usuario
        // senao imprime texto
        if (impressora == null) {
            
            String msg = "Nennhuma impressora foi encontrada. Instale uma impressora padrão \r\n(Generic Text Only) e reinicie o programa.";
            System.out.println(msg);
            
        } else {
                DocPrintJob dpj = impressora.createPrintJob();
            
                
                               
                
                DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                FileInputStream file;         
                InputStream stream = new ByteArrayInputStream(output.toByteArray());
                DocAttributeSet das = new HashDocAttributeSet();
                Doc doc = new SimpleDoc(stream, flavor, das);
                
                
                dpj.print(doc, null);
                
                return true;
                
            
            
        }
        
        return false;
        
    }

e a chamada desse metódo ficaria assim:


Document document = new Document();
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        try {
            String arquivo = "arquivo.pdf";
            
            
            PdfWriter.getInstance(document, output);
            
            document.open();
            // adicionando um parágrafo ao documento
            document.add(new Paragraph("Exemplo Geração de Arquivo PDF via iText - Java"));
        } catch(DocumentException de) {
            System.err.println(de.getMessage());
        }
        document.close();
        try {
            impressao.imprime(output);
        } catch (PrintException ex) {
            ex.printStackTrace();
        }

ele imprime… mas não imprime absolutamente nada do q tem ser impresso… imprime um monte de código… como se fosse erro da impressora…

se eu encontrar a solução estarei avisando… e fico aguardando sugestões…

Olá…

podem me ajudar como converto um arquivo pdf para um arquivo postScript em Java??? pois na internet achei q esse eh o unico meio de fazer a impressão

obrigado

agradeço desde já…