【问题标题】:Play! Framework 2.1.3 pdf problems玩!框架2.1.3 pdf问题
【发布时间】:2014-03-21 19:54:24
【问题描述】:

所以我正在开展一个学校项目,我们在其中设计了一个 Web 应用程序,该应用程序接收大量用户信息并创建一个 pdf,然后应该将该 pdf 显示给用户,以便他们可以打印或保存它。我们正在使用 Play! Framework 2.1.3 作为我们的框架和服务器,Java 用于服务器端。我使用 Apache 的 PDFbox 库创建 pdf。在开发模式下,每件事都可以正常工作,即使用 play run 命令在 localhost 上启动它。问题是当我们将它放到服务器上并使用 play start 命令启动时,我似乎拍摄了我存放 output.pdf 文件的目录(或至少是 assets/public 文件夹)的快照(我试图将文件移动到其他地方,但这似乎仍然导致 404 错误)。最初,我认为这是我们部署的 liunx 机器造成的缓存问题,并尝试了许多技巧来阻止浏览器缓存 pdf 就像使用 javascript 在文件名上附加时间戳一样,

在游戏中使用这个缓存控制指令!文件, "assets.cache./public/stylesheets/output.pdf"="max-age=0",

然后我尝试每次只将 pdf 保存为不同的文件名并传回该文件的名称并通过 HTML 中的文件结构直接调用它 这也适用于运行命令,但不适用于启动。

最后我得出的结论是,当发出启动命令时,它会整理文件,因此只有发出启动命令时存在的文件才能看到。

我在这里阅读了文档 http://www.playframework.com/documentation/2.1.x/Production

然后我注意到了这部分

当你运行 start 命令时,Play fork 一个新的 JVM 并运行 默认的 Netty HTTP 服务器。标准输出流被重定向到 Play 控制台,因此您可以监控其状态。

所以看起来它分叉了一个新的 JVM 是造成我痛苦的原因。

所以我的问题是真的可以通过某种方式让网络应用程序创建和显示 pdf 表单吗?(如果我不能让它工作我唯一的解决方案 我可以看到的是,我必须用 HTML 模拟表单并从那里填写)——我真的认为这是一种不好的方法。

这似乎应该有一个解决方案,但我似乎找不到或想出一个请帮助。

我看过这里:

http://www.playframework.com/documentation/2.1.x/JavaStream

答案可能就在那里,但我没有让它工作我对这个游戏很陌生!框架还是

【问题讨论】:

    标签: caching pdf playframework


    【解决方案1】:

    您试图通过将生成的 PDF 文件放置在 assets 目录中并在 HTML 中放置指向它的链接来将其交付给用户。这适用于开发模式,因为 Play 会在目录中找到资产。它在生产中不起作用,因为当您执行play dist 时,项目被包装到一个 jar 文件中,并且 jar 文件的内容不能被 Play 应用程序修改。 (在开发模式下,Play 有一个目录的类路径条目。在生产中,类路径指向 jar 文件。

    您对 JavaStream 的看法是正确的。前进的方向是:

    1. 在本地文件系统的某处生成 PDF(我推荐使用 temp 目录)。
    2. 在您的Application 对象中写入一个新的Action,以打开您生成的文件,并提供该文件而不是网页。

    查看 serving files 的 Play 文档。这种方法还有一个优点是您可以指定用户看到的文件名。有一个重载函数Controller.ok(File file, String filename) 用于执行此操作。 (当你生成文件时,你应该给它一个唯一的名字,否则每个请求都会覆盖之前请求的文件。但是你不希望用户看到唯一的名字)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多