仅使用 PDFMergerUtility 后如何关闭 pdf?

问题描述 投票:0回答:2

我的问题是,我将一堆 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 循环之前调用数组,并尝试在合并和删除文件夹中的所有内容之间关闭。给出与以前相同的错误

java maven spring-boot pdf tesseract
2个回答
0
投票

以下代码是工作应用程序代码。我做了一些修改。它正在工作。

            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>

0
投票

一个更简单的解决方案是在

.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)
© www.soinside.com 2019 - 2024. All rights reserved.