【发布时间】:2021-05-12 03:03:15
【问题描述】:
我正在尝试通过org.apache.pdfbox.multipdf.Splitter拆分一个pdf文档,并且需要在这个单页PDDocument上执行某些文件操作,
如何在 java 中将PDDocument 转换为文件对象?
【问题讨论】:
-
您是否考虑过使用
save()方法将其保存到文件中?
我正在尝试通过org.apache.pdfbox.multipdf.Splitter拆分一个pdf文档,并且需要在这个单页PDDocument上执行某些文件操作,
如何在 java 中将PDDocument 转换为文件对象?
【问题讨论】:
save() 方法将其保存到文件中?
非常简单。我正在使用 1.8.16
try {
PDDocument document = PDDocument.load(new File(filename));
// do what ever you want
document.save(newfilename);
} catch (IOException | BadSecurityHandlerException | CryptographyException e) {
e.printStackTrace();
}
finally {
if(document != null )
try {
document.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return tmpFile != null ? tmpFile.getAbsolutePath() : null;
return tmpFilename;
}
【讨论】:
Splitter 类已移至 org.apache.pdfbox.multipdf 包而不是早于 2.0)。因此,1.8.16 版本的参考对他并没有真正的帮助。
与 Apache 公共资源
InputStream is = null
try {
PDDocument document = PDDocument.load(filePath);
File targetFile = new File("nameoffile.pdf");
PDStream ps = new PDStream(document);
is = ps.createInputStream();
FileUtils.copyInputStreamToFile(is, targetFile);
} catch (IOException io) {} finally {
if (is != null)
IOUtils.closeQuietly(is);
}
【讨论】:
PDStream 中没有 inputStream 方法,load() 方法在 2.0.2 中不接受字符串),它会创建一个空文件.然后你打电话给inputStream() 两次,一次没有结束。
Splitter 类已移至 org.apache.pdfbox.multipdf 包而不是早于 2.0)。因此,1.8.10 版本的参考对他并没有真正的帮助。
new PDStream(document) 表示创建一个空流,参数中包含文档的暂存文件设置。这个答案应该被删除。