我在Play Framework中發送了一封電子郵件,我想呈現一個PDF文件作爲電子郵件附件。我選擇使用Play Framework PDF模塊,因爲它使用Play常規的Groovy HTML模板系統。如何使用作業異步使用Play Framework PDF模塊呈現PDF?
我可以用下面的代碼顯示PDF文件ByteArrayOutputStream在我的控制器方法:
PDF.MultiPDFDocuments docs = new PDF.MultiPDFDocuments("myfile.pdf);
ByteArrayOutputStream os = new ByteArrayOutputStream();
MyEntity myArgument;
PDF.writePDF(os, docs, myArgument);
不過,我不喜歡這個主意的PDF渲染擋住了我的請求處理線程。我想在作業中異步渲染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());
有什麼辦法增加會話,請求,則params和Flash的信息是安全地供我PDF的工作嗎?或者我可以以某種方式阻止PDF模塊的渲染方法調用它們?我並不需要模板中的請求和參數信息。
有趣的問題。我將在本週末進行調查。 – 2012-02-24 10:36:22
任何想法@Zenklys? – skrii 2012-03-07 13:43:34