现在系统需要拆分pdf,我使用pdfbox包,进行处理。
代码如下:
File f = new File("E:1.pdf");// 这是对应文件名 PDDocument document = PDDocument.load(f); Splitter splitter = new Splitter(); List<PDDocument> pages = splitter.split(document); ListIterator<PDDocument> iterator = pages.listIterator(); int i = 1; while (iterator.hasNext()) { PDDocument pd = iterator.next(); String fileName = "E:/test/" + i++ + ".pdf"; File file = new File(fileName); if (file.exists()) { file.delete(); } pd.save(fileName); pd.close(); } document.close();
已经实现将一个大pdf按页拆分为多个pdf。
但是,现在还有两个问题:
1.在拆分时,怎么实现设置页数拆分(eg:每5页拆分为一个小pdf)
2.load时,是将整个文件加载到内存中;如果文件很大,该怎么处理
现在已经解决大文件加载问题:
document = PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly());
不把文件加载到内存。
但是如果指定页数进行拆分,还是没有找到方法
哎!问题一个回答都没有。。。
最后还是自己解决。。。。
指定页数拆分pdf:不使用splitter进行拆分,使用getPages,然后新建一个临时对象,往里边添加指定数量的页数
File file = new File(fileStr); document = PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly()); document.getPages(); PDDocument doc = new PDDocument(); for (int i = startPageNum - 1; i < endPageNum; i++) { doc.addPage(document.getPage(i)); } doc.save(outputStream);