我需要在Memory中创建PDF文档我正在使用pdfbox。
这是我的代码,但它会在磁盘上创建文档。
strerror
答案 0 :(得分:1)
正如@ M.Prokhorov在对你的问题的评论中已经说过的那样,你的代码示例中没有任何内容表明它是在光盘上创建的。特别是{{1你在这里使用的构造函数
PDDocument
是
的简短形式document = new PDDocument();
和设置缓冲内存使用量,仅使用不受大小限制的主内存(无临时文件)。
因此,除非document = new PDDocument(MemoryUsageSetting.setupMainMemoryOnly());
或fillDataInPDF
中隐藏有写入文件的内容,否则您的方法会在内存中创建PDF对象模型。
由于我不认为您会隐藏这样一个明显的文件写入,您声称文档在磁盘上创建的可能性很可能意味着您的方法corpPDF
的调用方序列化了该模型作为PDF文件到磁盘,,例如像这样
generatePDF
@TilmanHausherr指出你可以将你的PDF保存到PDDocument doc = generatePDF(name, v1, v2, v3, v4);
doc.save("SOME_FILE_PATH_ON_DISC");
,并且可以将其转换为字节数组,,例如而不是上面你应该使用
ByteArrayOutputStream
所以将序列化的PDF文件保存在内存中。
答案 1 :(得分:0)
我能够在内存中创建PDF并使用PDFBox在新标签页中打开。 我已经编写了此资源处理程序方法。只需编写以下代码即可。
HttpServletResponse response = PortalUtil.getHttpServletResponse(resourceResponse);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
// Your logic for adding content in PDF goes here
contentStream.close();
doc.save(baos);
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setContentLength(baos.size());
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();