我需要在内存中创建 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());
和将缓冲内存使用设置为仅使用主内存(无临时文件),其大小不受限制。
因此,除非 fillDataInPDF
或 corpPDF
中隐藏了写入文件的内容,否则您的方法将纯粹在内存中创建 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/