gpt4 book ai didi

java - 在内存中创建pdf文档

转载 作者:行者123 更新时间:2023-12-02 02:37:59 25 4
gpt4 key购买 nike

我需要在内存中创建 PDF 文档,我正在使用 pdfbox。

这是我的代码,但它在磁盘上创建文档。

public PDDocument generatePDF(String name, String v1, String v2, String v3, String v4) {
PDPageContentStream contentStream = null;
PDDocument document = null;
try {
document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
contentStream = new PDPageContentStream(document, page);


fillDataInPDF(...);
corpPDF(page);
} catch (IOException err) {
LOG.error("Error occured .");
} finally {
if (contentStream != null) {
try {
contentStream.close();
} catch (IOException e) {
LOG.error("Error occured .");
}
}
}
return document;
}

最佳答案

正如 @M.Prokhorov 已经在对您的问题的评论中指出的那样,您的代码示例中没有任何内容表明它是在光盘上创建的。特别是 PDDocument 此处使用的构造函数

document = new PDDocument();

的缩写形式
document = new PDDocument(MemoryUsageSetting.setupMainMemoryOnly());

将缓冲内存使用设置为仅使用主内存(无临时文件),其大小不受限制。

因此,除非 fillDataInPDFcorpPDF 中隐藏了写入文件的内容,否则您的方法将纯粹在内存中创建 PDF 对象模型。

由于我不认为您会隐藏如此明显的文件写入,因此您声称文档是在磁盘上创建的很可能意味着方法的调用者generatePDF序列化了该文档模型作为 PDF 文件保存到磁盘, 例如像这样

PDDocument doc = generatePDF(name, v1, v2, v3, v4);
doc.save("SOME_FILE_PATH_ON_DISC");

正如 @TilmanHausherr 指出的,您可以将 PDF 保存到 ByteArrayOutputStream 中,并且可以将其转换为字节数组, 例如您应该使用

而不是上面的
PDDocument doc = generatePDF(name, v1, v2, v3, v4);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
doc.save(baos);
byte[] pdfBytes = baos.toByteArray();

因此还将序列化的 PDF 文件保留在内存中。

关于java - 在内存中创建pdf文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45960217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com