Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在数据库中自动保存pdf报告?_Java_Mysql_Pdf_Jakarta Ee_Birt - Fatal编程技术网

Java 如何在数据库中自动保存pdf报告?

Java 如何在数据库中自动保存pdf报告?,java,mysql,pdf,jakarta-ee,birt,Java,Mysql,Pdf,Jakarta Ee,Birt,我的编程语言是java。我的应用程序是基于web的应用程序。我使用BIRT生成pdf报告,但要求在查看pdf报告后自动将其保存到数据库中。在BIRT中,pdf文档是从rpt模板动态生成的。当用户单击URL时,BIRT查看器应用程序将显示pdf文档 要求是一旦生成pdf,我需要在MySql数据库中保存pdf文件的副本。这应该自动发生。一旦用户查看pdf(在动态生成pdf时),pdf文件的副本应保存在数据库中 请让我知道,我如何才能做到这一点?这取决于您如何使用数据库、direct jdbc、hib

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

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


请让我知道,我如何才能做到这一点?

这取决于您如何使用数据库、direct jdbc、hibernate等等。。。但基本上你必须做到以下几点:

  • 设计一个实体(和表)来保存blob
  • 不要在MySQL中使用BLOB,它非常小,最好是LONGBLOB
  • 从文件中创建
    java.sql.Blob
    ,通常必须从文件中获取inputstream
  • 将blob附加到hibernate实体,查询参数
  • 坚持
我更愿意将文件存储在不同的实体/表中,并存储文件名、大小、MIME类型、日期等。。。这些属性将在以后有所帮助

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


希望有帮助

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

您好,我正在使用jdbc。不管你怎么描述,我已经在做这个过程了。如果有人在html表单中输入pdf,那么这将起作用。但我的问题是如何自动保存它们。如何获取在BIRT中动态生成的pdf的输入流?啊!好的,对不起。简单且不坏的选择是将PDF报告存储为tmp文件,获取输入流,执行Blob作业并删除临时文件。这听起来可能不太有效,但与将PDF转换为bytearray然后获取输入流相比,它需要的内存更少。如果您不想担心临时文件的删除,可以使用apache commons中的
FileCleaningTracker
。您不能编写一个在PDF生成的onRender事件中启动的脚本吗?或者制作一个自定义发射器,将PDF文件发送到某个地方。我认为问题不在于在哪里,而在于如何发送。要创建Blob,您需要一个输入流;要创建输入流,您需要一个源,即文件、字节数组。。。能否将内存中的PDF对象转换为bytearray或输入流?能否发布示例url以说明生成PDF报告的方式?