我有一个项目需要生成 PDF 文件。在这个 PDF 中,我必须插入一段文本以及四到五个大图像(大约 800 像素 * 1000 像素)。为了使其灵活,我选择将 FreeMarker 与 XHTMLRenderer(飞碟)结合使用。
我现在面临几个选择:
- 创建图像并将它们作为临时文件保存到磁盘。然后
.xhtml
使用 FreeMarker 处理模板(将其保存到磁盘)并将处理后的.xhtml
文件 URL 传递给 XHTMLRenderer 以生成 PDF。所有这些创建的文件(除了 PDF)都将使用File.createTempFile
. 这将允许 FreeMarker 从磁盘中提取图像(就好像它们是在 XHTML 中链接的图像一样) - 处理
.xhtml
模板并将其保存在内存中。将图像作为 base64 编码的数据 url 传递给模板。这将消除保存任何临时文件的需要,因为 FreeMarker 的输出可以直接传递给 XHTMLRenderer。
Base64 编码图像 URL 示例(一个小文件夹图标):
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExK
cppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" />
我的主要问题是哪种技术更好?创建大量临时文件是否不好(是否会产生大量开销)?创建如此大的 base64 编码字符串时,我可能会耗尽内存吗?