【问题标题】:Return a PDF file with Spring MVC使用 Spring MVC 返回 PDF 文件
【发布时间】:2015-02-08 22:51:56
【问题描述】:

实际上,我有这个功能,我有一个框架,我在其中设置 URL (ip:port/birt/preview?__report=report.rptdesign&__format=pdf&parameters...),该框架呈现 PDF 文件。

但我想隐藏那个 URL...

我需要使用 Spring MVC 返回一个 PDF 文件,但该 PDF 是由另一个应用程序生成的。

这意味着我有另一个应用程序(Eclipse Birt 引擎),我通过 URL (ip:port/birt/preview?__report=report.rptdesign&__format=pdf&parameters...) 传递参数并生成一个 PDF 文件,我需要从我的控制器获取该 PDF 并使用 Spring MVC 返回它。有人可以帮忙吗?

【问题讨论】:

    标签: java spring spring-mvc pdf


    【解决方案1】:

    如下所示:

    @Controller
    @RequestMapping("/generateReport.do")
    public class ReportController
    
        @RequestMapping(method = RequestMethod.POST)
        public void generateReport(HttpServletResponse response) throws Exception {
    
            byte[] data = //read PDF as byte stream
    
            streamReport(response, data, "my_report.pdf"));
        }
    
        protected void streamReport(HttpServletResponse response, byte[] data, String name)
                throws IOException {
    
            response.setContentType("application/pdf");
            response.setHeader("Content-disposition", "attachment; filename=" + name);
            response.setContentLength(data.length);
    
            response.getOutputStream().write(data);
            response.getOutputStream().flush();
        }
    }
    

    【讨论】:

    • 感谢您的回答。为什么我们在这里需要flush()?请求输出流不是由 Spring 控制的,因此不应该手动刷新/关闭吗?
    • 这里很难包含如何“将 PDF 作为字节流读取”以获得完整的答案吗?
    • 是的,你是对的。我应该添加代码来展示如何从文件系统读取 PDF,从动态生成的文件中读取字节,通过网络读取,从文件系统中读取数据库....
    【解决方案2】:

    PDF 内容只是字节,因此您只需将 PDF 内容字节写入 HttpResponse 输出流。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 2013-07-15
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2016-12-21
      • 2014-10-22
      • 2011-03-29
      相关资源
      最近更新 更多