java - 在内存中创建pdf文档

标签 java pdf-generation pdfbox

我需要在内存中创建 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/

相关文章:

java - 如何使用 PDDocument.loadNonSeq,大型 pdf 剥离器/解析文本技术

java - Apache PDFBox : Can I set font other than those present in PDType1Font

java - 打开通知时如何更新 Activity

java - 作为参数传递的对象不会创建多个实例

c# - 在使用ironpdf将url转换为pdf期间打开pdf而不保存它

forms - Acrobat 的交互式 PDF 创建替代品?

java - PDFBox/Java : Printing to Paper:java. lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

java.net.UnknownHostException : Unable to resolve host "api. themoviedb.org

java - GWT 强制滚动面板在手动滚动时呈现(带有视频描述情况)

python - 在 Python 中生成 PDF 文档的 FLOSS/免费解决方案?