【问题标题】:how to save pdf reports automatically in database?如何将pdf报告自动保存在数据库中?
【发布时间】:2016-01-08 22:39:31
【问题描述】:

我的编程语言是java。我的应用程序是基于 Web 的应用程序。我正在使用 BIRT 生成 pdf 报告,但要求是在查看 pdf 报告后自动将它们保存到数据库中。在 BIRT 中,pdf 文档是从 rpt 模板动态生成的。当用户单击 URL 时,BIRT 查看器应用程序将显示 pdf 文档。

要求是一旦生成 pdf,我需要在 MySql 数据库中保存 pdf 文件的副本。这应该自动发生。一旦用户查看了 pdf(当 pdf 即时生成时),pdf 文件的副本应该保存在数据库中。

请告诉我,我怎样才能做到这一点?

【问题讨论】:

  • 您可以发布您的示例网址吗?您是如何生成 pdf 报告的?

标签: java mysql pdf jakarta-ee birt


【解决方案1】:

除了 malaguna 的回答之外,关键是首先将 PDF 存储在数据库中,然后 然后 将其提供给客户端。这需要 JDBC 和 Web 编程的基本知识。查看 servlet 示例应用程序的源代码(您似乎正在使用)。您只需将 PDF 输出保存为数据库中的 BLOB(如 malaguna 建议的那样),然后再将其返回给客户端。

【讨论】:

    【解决方案2】:

    这取决于你如何使用你的数据库,直接 jdbc,休眠,......但基本上你必须做以下事情:

    • 设计一个实体(和表)来保存 blob。
    • 不要在 MySQL 中使用 BLOB 很小的,LONGBLOB 更好。
    • 从文件中创建一个java.sql.Blob,通常你必须从文件中获取一个输入流。
    • 将 blob 附加到休眠实体、查询参数...
    • 坚持。

    我宁愿将文件存储在不同的实体/表中,同时存储文件名、大小、MIME 类型、日期……这些属性以后会有用。

    在拥有文件的实体和文件实体之间使用 1:1 或 1:N 的关系。

    希望对你有帮助!

    【讨论】:

    • 嗨,我正在使用 jdbc。你所描述的,我已经在做这个过程了。如果有人在 html 表单中提供 pdf 作为输入,那么这将起作用。但我的问题是如何自动保存它们。如何获取BIRT中动态生成的pdf的输入流?
    • 啊!好的,对不起。简单且不错的选择是将 PDF 报告存储为 tmp 文件,获取输入流,执行 Blob 作业并删除临时文件。这听起来可能效率低下,但与将 PDF 转换为字节数组然后获取输入流相比,它需要更少的内存。如果你不想担心临时文件被删除,你可以使用来自 apache commons 的FileCleaningTracker。
    • 不能写一个在PDF生成的onRender事件中启动的脚本吗?或者制作一个自定义发射器,也可以将 PDF 发送到某处。
    • 我认为问题不在于哪里,而在于如何。要创建 Blob,您需要一个输入流,要创建一个输入流,您需要一个源,即文件、字节数组……您可以将内存上的 PDF 对象转换为字节数组或输入流吗?
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多