java - 动态生成 PDf 文件
问题描述
我基于 thymeleaf 模板创建了一个 pdf 文件,我实际上正在使用模板解析器飞碟将文件写入输出流,但由于我无法访问前面以定义回顾的内容,这将当客户端需要时不时生成,我认为在服务器端生成pdf文件会更好。所以我的问题是:
有没有办法获取写入我的数据的输出流并将其转换为即时写入,这样它就不会在本地存储中创建
这是我的业务逻辑的一部分:
os = new FileOutputStream(pdf);
ITextRenderer renderer = new ITextRenderer();
renderer.layout();
renderer.createPDF(os);
我在我的控制器中使用它,我在响应实体中使用附件内容属性
除此之外,我愿意接受任何建议提前谢谢
解决方案
前段时间我有一个类似的任务,用于一个简单的 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) {
// ...
}
推荐阅读
- javascript - 如何在vue中单击更改背景颜色
- javascript - 使用从错误分支服务的 git 克隆的 ionic/angular 项目
- reactjs - 当另一个div在react js中处于活动状态时如何隐藏一个div
- javascript - JS localeCompare 行为怪异
- python - 在 Python 中计算稀疏 Gram 矩阵的最快方法是什么?
- jmeter - Jmeter - 如何将特定变量写入CSV文件到特定行/列
- .net - 将 JS 引用添加到 OrchardCore 模块
- firefox - Firefox 76 是否可以强制将 .localhost 子域视为没有 tls 的安全上下文?
- r - 使用 id 变量重复的分组重塑 data.frame
- excel - 将所有 VBA 代码从工作簿复制到另一个