Как закрыть PDF после использования только PDFMergerUtility? - PullRequest
0 голосов
/ 24 января 2019

Моя проблема в том, что я объединяю несколько файлов 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();
                }`

Я вызываю массив ранее для циклов, и я пытаюсь закрыть между объединением и удалением всего в папке,Выдает ту же ошибку, что и раньше

1 Ответ

0 голосов
/ 24 января 2019

Следующий код является рабочим кодом приложения. Я внес некоторые изменения. Он работает.

            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>
...