从Spring MVC / Jasper应用程序静默打印

时间:2012-06-22 21:20:12

标签: spring-mvc printing jasper-reports

这是一个非常抽象的问题。

我正在开发一个Spring MVC Web应用程序,它必须不断处理大量的发票打印。当前保存发票时,spring控制器将发票ID委托给准备pdf的jasper pdf生成服务。下载pdf后,用户手动打印它。

我需要一种在用户保存发票时以静默方式打印发票的方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

由于您要导出为PDF,因此可以。您需要向JRPdfExporterParameter.PDF_JAVASCRIPT个实例添加JRPdfExporter参数,其值为"this.print({bUI: true,bSilent: false,bShrinkToFit: true});"。例如:

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();
}

这实际上是将JavaScript添加到PDF中。打开PDF时,它会运行,并将其发送给打印队列。应该注意的是,这应该谨慎使用,因为通常认为不能自动为您的用户执行此操作。当我在应用程序中使用它时,我们必须为每个报告按钮。 Export按钮,不包含JavaScript,以及Print按钮。这样那些希望它只打印它的用户会这样做,那些想要数字拷贝的用户也会这样做。