这是一个非常抽象的问题。
我正在开发一个必须连续处理大量发票打印的 Spring MVC Web 应用程序。当前保存发票时,spring 控制器将发票 id 委托给准备 pdf 的 jasper pdf 生成服务。pdf下载后,用户手动打印。
我需要一种在用户保存发票时静默打印发票的方法。
有任何想法吗?
这是一个非常抽象的问题。
我正在开发一个必须连续处理大量发票打印的 Spring MVC Web 应用程序。当前保存发票时,spring 控制器将发票 id 委托给准备 pdf 的 jasper pdf 生成服务。pdf下载后,用户手动打印。
我需要一种在用户保存发票时静默打印发票的方法。
有任何想法吗?
由于您要导出为 PDF,因此这是可能的。您需要使用 value 向您的实例添加一个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 的按钮和一个包含 JavaScript 的Print
按钮。这样,希望它只打印它的用户就会这样做,而那些想要数字副本的用户也可以这样做。