Объединение всех PDF-файлов в каталоге с помощью iText - PullRequest
0 голосов
/ 11 ноября 2018

Привет всем и спасибо за вашу помощь заранее. Я пытаюсь использовать iText для объединения всех файлов PDF, содержащихся в каталоге. Вот мой код:

public class MergeFiles
{
    public MergeFiles(string targetDirectory) {
        string dest = targetDirectory +  @"\Merged.pdf";
        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
        PdfMerger merger = new PdfMerger(pdfDoc);            

        string[] fileEntries = Directory.GetFiles(targetDirectory);
        foreach (string fileName in fileEntries) {                

            //PdfMerger merger = new PdfMerger(pdfDoc);
            PdfDocument newDoc = new PdfDocument(new PdfReader(fileName));
            merger.Merge(newDoc, 1, newDoc.GetNumberOfPages());

            newDoc.Close();                                

        };
        pdfDoc.Close();
    }
}

Этот код приводит к ошибке «System.IO.IOException: процесс не может получить доступ к файлу« E: \ Merged.pdf », так как он используется другим процессом». Однако я не уверен, почему. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 ноября 2018

После этих двух строк:

string dest = targetDirectory +  @"\Merged.pdf";
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));

Новый (пустой) файл с именем «Merged.pdf» создается в вашей целевой директории, и поток файлов открывается в режиме записи для записи результатапроцесс слияния.

Затем вы получаете список файлов в целевой директории с string[] fileEntries = Directory.GetFiles(targetDirectory);.Этот массив уже содержит ваш недавно созданный файл Merged.pdf.

В конце концов код пытается объединить результирующий файл с самим собой, что явно не удается.

Чтобы избежать этой ошибки, либо соберите файлы для слияния, прежде чем создавать целевой документ (но убедитесь, чтов целевом каталоге уже нет файла «Merged.pdf»):

string[] fileEntries = Directory.GetFiles(targetDirectory);

string dest = targetDirectory +  @"\Merged.pdf";
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));

// The rest of the code

Или просто вручную удалите целевой файл из массива fileEntries перед объединением файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...