使用iText合并目录中的所有Pdf文件

时间:2018-11-11 16:49:05

标签: itext7

大家好,感谢您的提前帮助。我正在尝试使用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 :(得分:3)

这两行之后:

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阵列中手动删除目标文件即可。