2012-11-09 20 views
6
protected static byte[] exportReportToPdf(JasperPrint jasperPrint) 
                 throws JRException { 
    JRPdfExporter exporter = new JRPdfExporter();  
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); 
    exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
       "this.print({bUI: true,bSilent: false,bShrinkToFit: true});"); 

    exporter.exportReport();   
    return baos.toByteArray(); 
} 

Stiamo utilizzando un codice come questo per esportare un documento PDF da un'applicazione Jasper.Stampa di esportazione PDF in Internet Explorer

La linea

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
      "this.print({bUI: true,bSilent: false,bShrinkToFit: true});"); 

aggiunge JavaScript per inviare il documento PDF direttamente alla stampante.

Il comportamento previsto è che una finestra di dialogo di stampa visualizzerà un'anteprima del documento PDF.

Questo funziona bene la maggior parte del tempo - eccetto che ho problemi su uno ogni 5-6 volte in Internet Explorer 8 e Firefox.

Quello che succede è che la finestra di dialogo di anteprima di stampa con il documento PDF non appare o appare con un documento vuoto nella finestra di anteprima.

-Ho provato un certo numero di diversi JavaScript (diversi params a this.print() via exporter.setParameter -Ho provato a installare diverse intestazioni di risposta come

response.setContentType("application/pdf"); 
response.setHeader("Content-disposition","inline; filename=\"" 
        + reportName 
        + "\""); 
response.setContentLength(baos.size()); 

queste non sembrano aiutare

Questo sembra essere un problema di IE e FF. Qualcuno ha mai affrontato questo problema? Ho bisogno di farlo funzionare su tutti i browser il 100% delle volte. Forse un approccio diverso per raggiungere l'obiettivo di inviare l'esportazione del documento PDF direttamente a la stampante? o una libreria di terze parti che funzionerà su tutti i browser?

+0

Si può leggere quel documento in Acrobat? –

+0

Sì, se commentiamo exporter.setParameter (JRPdfExporterParameter.PDF_JAVASCRIPT, "this.print ({bUI: true, bSilent: false, bShrinkToFit: true});"); quindi siamo in grado di scaricare il file come allegato pdf. Funziona bene in tutti i browser. – user619804

+0

Cos'è questo software rif? Funziona con i rapporti di Jasper o è un sostituto di Jasper? – user619804

risposta

4

Forse non è possibile aggiornare l'interfaccia utente. Il seguente codice ritarda la stampa forse dandole la possibilità di cui ha bisogno. Non ho provato perché non ho il tuo ambiente.

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
    "app.setTimeOut('this.print({bUI: true,bSilent: false,bShrinkToFit: true});',200);") 
+0

Ma non è questo javascript esclusivamente per il pdf? Non penso che PDF_JAVASCRIPT stia aggiungendo qualcosa al dom? – user619804

+0

@ user619804, il JS non aggiunge nulla al DOM, certo, ma non hai idea di quali siano le condizioni di gara che possono esistere tra il browser (che controlla il rendering e la stampa) e il plugin Adobe. Hai provato il suggerimento di Mike? Ha fatto alcuna differenza? – vladr

+0

Il timeout non ha aiutato. – user619804

Problemi correlati