大家好,感谢您的提前帮助。我正在尝试使用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',因为它正在被另一个进程使用。”但是,我不确定为什么。任何帮助将不胜感激。
答案 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
阵列中手动删除目标文件即可。