【发布时间】:2022-01-04 17:07:52
【问题描述】:
我想从 PDF 文件中获取部分页面。基本上,我给函数一个文件,将其拆分为页面,然后创建一个新文件,其中仅包含起始页面和结束页面之间的页面。当用户输入从 0 开始的列表时,我需要正确的页码。这是我的代码。
public static String SplitPdf(File source, Integer startPage, Integer endPage) throws Exception {
String sourceFileName = source.getAbsolutePath().replace("\\", "/");
File file = new File(sourceFileName);
PDDocument document = PDDocument.load(file);
Splitter splitter = new Splitter();
List<PDDocument> pages = splitter.split(document);
Integer correctedStartPage = startPage < 1 ? 1 : startPage - 1;
Integer correctedEndPage = endPage < 1 ? 1 : endPage - 1;
if (pages.size() <= correctedStartPage) throw new Exception("Start page: " + startPage + " No of pages: " + pages.size());
if (pages.size() <= correctedEndPage) throw new Exception("End page: " + endPage + " No of pages: " + pages.size());
if (startPage > endPage)
throw new Exception("Start page before end page. Start page: " + startPage + " End page: " + endPage);
PDDocument newDoc = new PDDocument();
String filePath = file.getParent() + "\\" + FilenameUtils.getBaseName(file.getName()) + "-fittingPart" +
"." + FilenameUtils.getExtension(file.getName());
for (int i = correctedStartPage; i <= correctedEndPage; i++) {
PDDocument currentPage = pages.get(i);
PDPage page = currentPage.getPage(0);
newDoc.addPage(page);
currentPage.close();
}
newDoc.save(filePath);
newDoc.close();
return filePath;
}
我得到的错误是:
COSStream 已关闭,无法读取。也许其封闭的 PDDocument 已关闭?
我确实检查了文件是否存在
据我所知,我并没有过早关闭 PDDocument……有什么想法吗?
PS:我需要使用 apache PDFBox 而不是其他库????
【问题讨论】: