应用程序需要创建大型PDF并下载它们,从而最大限度地减少Java堆内存使用量

时间:2016-04-05 01:15:38

标签: java pdf pdf-generation itext

我们有一个用例来创建和下载pdf文件,该文件将是一堆pdf组合在一起。有时,从AWS S3存储桶中将数千个pdf文件转换为一个pdf文件。以及另一个具有数据输入表单的pdf文件。然后,这两个pdf文件将创建一个zip文件,然后由/向用户下载。

我们正在使用iText 5.5.8,Java 8,Spring。

这些是根据用户输入的标准按需完成的。我们的大部分zip / pdf文件大小超过250MB,通常在堆空间内存上进行演出。

我们考虑过晚上预先生成它们。然而,仅此一项就可能成千上万的组合,所有这些都必须每晚重新生成,因为每天数据都可能发生变化,他们希望pdf达到分钟。

我正在考虑通过我从应用程序调用的一些命令行工具将结果一次性保存到S3中的方法。但不确定这是否是一个好的解决方案

必须有一些方法来实现这一点并将文件保留在堆空间内存之外。看起来代码库的全部内容都是关于附加InputStreams的内容。

List<InputStream> inputStreams = new ArrayList<>();
String fileName = "";
for(DocumentEntity documentEntity : documentEntities){
    fileName = documentEntity.getFileName();
    if (fileName.length()> 0 && fileName.lastIndexOf(".") != -1) {
        if (".pdf".equals(fileName.substring(fileName.lastIndexOf(".")))) {
            byte[] fileAsBytes = documentFileService.getFile(documentEntity.getFilePath());
            inputStreams.add(new ByteArrayInputStream(fileAsBytes));
        }
    }
}

iText或其他产品中的任何建议或可能的其他解决方案?

0 个答案:

没有答案