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

Merging All Pdf Files in Directory Using iText

大家好,感谢您的提前帮助。我正在尝试使用 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: The process cannot access the file 'E:\Merged.pdf' because it is being used by another process." 但是,我不确定原因。任何帮助将不胜感激。

在这两行之后:

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 数组中手动​​删除目标文件。