我正在尝试将 pdf 文档的特定页面的内容写入另一个文件。我正在尝试使用下面的代码
ByteArrayInputStream[] stream = pdfFileEditorObj
.splitToBulks("E:\\JavaProjects\\docs\\Latest\\Workflow_Services.pdf", numberOfPage);
OutputStream out = new FileOutputStream("E:\\JavaProjects\\docs\\Latest\\Workflow_Services1.pdf", true);
for (ByteArrayInputStream bStream : stream) {
IOUtils.copy(bStream, out);
out.flush();
out.close();
}
但它会覆盖现有文件。我只能看到最后一页内容。
任何人都可以帮忙解决这个问题吗?提前致谢
最佳答案
您不能像您所做的那样,仅通过将流的二进制内容附加到文件末尾来将页面添加到 PDF 文档。 PDF 文件包含元数据,您需要如此对待它们。不要将字节流附加到文件末尾,而是使用 concatenate :
ByteArrayInputStream[] streams = pdfFileEditorObj
.splitToBulks("E:\\JavaProjects\\docs\\Latest\\Workflow_Services.pdf", numberOfPage);
pdfFileEditorObj.concatenate(streams, new FileOutputStream("E:\\JavaProjects\\docs\\Latest\\Workflow_Services1.pdf");
上面创建了一个新文件。如果您想将页面附加到现有文件:
读取现有文件并创建流的 ArrayList。
将要附加到文件的流数组附加到该 ArrayList。
使用新数组调用连接。
关于java - java中使用FileOutputStream覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48208177/