首页 > 解决方案 > 动态生成 PDf 文件

问题描述

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

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

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

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

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

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

标签: javaspring-bootthymeleafflying-saucer

解决方案


前段时间我有一个类似的任务,用于一个简单的 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) {
    // ...
}

完整的项目在这里,相关代码在这个文件中


推荐阅读