【发布时间】:2012-02-24 23:28:48
【问题描述】:
我正在 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 渲染方法广泛使用了 Session、Request、Params 和 Flash 对象,这些对象在 Controller 方法中可用,但在 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 信息。
【问题讨论】:
-
有趣的问题。这个周末我会调查一下。
标签: playframework