gpt4 book ai didi

java - 将 Spring MVC 呈现为字符串或 PDF

转载 作者:搜寻专家 更新时间:2023-11-01 02:49:27 24 4
gpt4 key购买 nike

我正在尝试将 Spring MVC Controller 呈现为字符串,以使用 iText 创建一个 PDF。因为该应用程序在 Oracle Access Manager 后面,所以我无法对页面的 URL 进行 URL 请求并将输出保存到字符串,我需要在不发出另一个 HTTP 请求的情况下呈现页面。

我的目标是做如下事情:

MyMvcController controller = new MyMvcController();
ModelAndView modelAndView = new ModelAndView("TemplateName");

...
modelAndView.addObject(someObject);
etc, etc
...

String html = controller.render(modelAndView);
...
render in iText to a PDF
...

我已经可以使用 Flying Saucer + iText 呈现标记,我只是忙于将 Controller 的输出捕获到字符串。有什么想法吗?我愿意先不呈现字符串,最终结果只需要是一个 PDF,我可以将其附加到电子邮件中,并且我需要能够动态地将数据添加到我正在呈现的 JSP。

最佳答案

正如@Biju Kunjummen 所说,渲染是在 View 中完成的,而不是在 Controller 中。 Controller 只准备模型, View 将模型数据添加到静态内容中并进行渲染。

SpringMVC中默认的 View 技术是JSP。 PDF可以看作另一种 View 技术,SpringMVC已经规定 View 可以使用PDF。您不会转发到 JSP View ,而是转发到 PDF View 。

看看 Spring 的 AbstractPDFView并查看本教程:http://numberformat.wordpress.com/2009/07/20/spring-mvc-with-pdf-output/ .不幸的是,本教程在 buildPDFDocument 中手动创建 PDF,这并不是您想要的。您需要将教程扩展到

  • renderMergedOutputModel 方法中将 JSP 呈现为 HTML
  • buildPDFDocument 方法中使用Flying Saucer 将HTML + CSS 制作成PDF。

正如 renderMergedOutputModel 方法的 JavaDoc 所述

The first step will be preparing the request: In the JSP case, this would mean setting model objects as request attributes. The second step will be the actual rendering of the view, for example including the JSP via a RequestDispatcher.

代码应该是这样的:

RequestDispatcher rd = request.getRequestDispatcher("some.jsp"); request.setAttribute("anotherString", model.getValue());
rd.forward(request, response);

但是有一个窍门:我们不想渲染到 servlet 响应,而是使用包装器渲染到单独的 ByteArrayOutputStream。 ByteArrayOutputStream 可用作 Flying Saucer 的输入。在此处检查包装器的解决方案: JSP compilation to string or in memory bytearray with Tomcat/Websphere

buildPDFDocument 方法中,您现在以 ByteArrayOutputStream 的形式从 Wrapper 获取呈现的 HTML,并使用它在 Flying Saucer 中呈现 PDF。

关于java - 将 Spring MVC 呈现为字符串或 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com