【问题标题】:PDf file on the fly-generation动态生成 PDf 文件
【发布时间】:2019-11-15 21:33:31
【问题描述】:

我基于 thymeleaf 模板创建了一个 pdf 文件,我实际上使用模板解析器飞碟将文件写入输出流 但由于我无法访问前端以定义将在客户端需要时不时生成的摘要内容,我认为在服务器端生成 pdf 文件会更好。所以我的问题是:

有没有办法获取写入我的数据的输出流并将其转换为 即时写入,因此不会在本地存储中创建它

这是我的业务逻辑的一部分:

os = new FileOutputStream(pdf);
ITextRenderer renderer = new ITextRenderer();
renderer.layout();
renderer.createPDF(os);

我在我的控制器中使用它,我在响应实体中使用附件内容属性

除此之外,我愿意接受任何建议 提前致谢

【问题讨论】:

  • 我很难理解你的问题。您能否删除所有不相关的内容,并解释您想要做什么?是否要将 PDF 写入 HTTP 响应流而不是文件?还有什么?

标签: java spring-boot thymeleaf flying-saucer


【解决方案1】:

前段时间我在一个简单的 Java EE + JSF 项目中也有过类似的任务,我是这样做的:

byte[] asPdf = .... (your pdf data)
String filename = "demo.pdf";
HttpServletResponse response = Faces.getResponse(); // Using Omnifaces in this example, but that is irrelevant

// Details: https://stackoverflow.com/a/9394237/7598851
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
response.setContentLength(asPdf.length);
response.setCharacterEncoding("UTF-8");

try (OutputStream output = response.getOutputStream()) {
    output.write(asPdf);
} catch (IOException e) {
    // ...
}

完整的项目是here,相关代码在这个file

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2012-01-02
    • 2017-04-22
    • 2020-07-05
    • 2019-04-16
    相关资源
    最近更新 更多