我在Play Framework中发送电子邮件,我想渲染一个PDF文件以用作电子邮件附件。我选择使用Play Framework PDF模块,因为它使用Play的常规Groovy HTML模板系统。
我可以使用以下代码在我的Controller方法中将PDF文件渲染为ByteArrayOutputStream:
PDF.MultiPDFDocuments docs = new PDF.MultiPDFDocuments("myfile.pdf);
ByteArrayOutputStream os = new ByteArrayOutputStream();
MyEntity myArgument;
PDF.writePDF(os, docs, myArgument);
但是,我不喜欢PDF渲染阻止我的请求处理线程的想法。我想在Job中异步呈现PDF。问题是,当我在Job中移动代码时,我开始获得NullPointerExceptions。这是因为Play PDF模块的PDF呈现方法广泛使用了Controller方法中可用的Session,Request,Params和Flash对象,但在Job中不可用。例如,方法play.modules.pdf.PDF.renderTemplateAsPDF有以下几行:
templateBinding.put("session", Scope.Session.current());
templateBinding.put("request", Http.Request.current());
templateBinding.put("flash", Scope.Flash.current());
templateBinding.put("params", Scope.Params.current());
有没有办法添加会话,请求,参数和Flash信息以安全地用于我的PDF作业?或者我可以以某种方式阻止PDF模块的渲染方法调用它们?我真的不需要模板中的Request和Params信息。