我的问题是,我将一堆 pdf 合并为一个,完成后,我无法删除从中创建合并文件的 pdf 文件。 以下代码示例是有问题的部分。
//combine PDF files into one
PDFMergerUtility merger = new PDFMergerUtility();
for (int i = 0; i < n; i++) {
merger.addSource(new File(outputPath[i] + ".pdf"));
}
merger.setDestinationFileName("C:\\Users\\kh\\Desktop\\work\\OCR\\images\\finalPDF\\"+ file.getName().split(Pattern.quote("."))[0] +".pdf");
merger.mergeDocuments(null);
System.out.println("Third step done.");
FileUtils.cleanDirectory(new File(pdfPath));
它编译没有错误,它运行但在
FileUtils.cleanDirectory(new File(pdfPath));
它给出了这个错误:
java.io.IOException: Unable to delete file: C:\Users\kh\Desktop\work\OCR\images\tempPDF\splitTiff9.pdf
我认为 PDFMergeUtility 不会放弃问题中的 pdf,但我不知道如何解决这个问题。顺便说一句,关闭正在运行的应用程序会释放 pdf 文件并可以删除。
更新:
PDDocument[] pdfStreams = new PDDocument[n];
PDFMergerUtility merger = new PDFMergerUtility();
for (int i = 0; i < n; i++) {
File f = new File(outputPath[i] + ".pdf");
PDDocument doc = PDDocument.load(f);
merger.addSource(f);
pdfStreams[i] = doc;
}
merger.setDestinationFileName("C:\\Users\\kh\\Desktop\\work\\OCR\\images\\finalPDF\\"+ file.getName().split(Pattern.quote("."))[0] +".pdf");
merger.mergeDocuments(null);
//close pdfmerger´s streams
for (int i = 0; i < n; i++) {
pdfStreams[i].close();
}`
我在 for 循环之前调用数组,并尝试在合并和删除文件夹中的所有内容之间关闭。给出与以前相同的错误
以下代码是工作应用程序代码。我做了一些修改。它正在工作。
File file1 = new File("D:\\Files\\a.pdf");
File file2 = new File("D:\\Files\\b.pdf");
try {
PDDocument doc1 = PDDocument.load(file1);
PDDocument doc2 = PDDocument.load(file2);
PDFMergerUtility PDFmerger = new PDFMergerUtility();
PDFmerger.setDestinationFileName("D:/merged.pdf");
PDFmerger.addSource(file1);
PDFmerger.addSource(file2);
PDFmerger.mergeDocuments();
System.out.println("Documents merged");
doc1.close();
doc2.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Third step done.");
FileUtils.cleanDirectory(new File("D:\\Files"));
POM 依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.13</version>
</dependency>
一个更简单的解决方案是在
.close()
对象上调用 PyPDF2.PdfMerger()
方法:
https://pypdf2.readthedocs.io/en/3.0.0/modules/PdfMerger.html
import os
import PyPDF2
pdf_files = ['file1.pdf', 'file2.pdf']
pdf_merger = PyPDF2.PdfMerger()
for f in pdf_files:
pdf_merger.append(f)
output_pdf = 'combined.pdf'
pdf_merger.write(output_file)
pdf_merger.close()
for f in pdf_files:
os.remove(f)