当我尝试使用itextsharp在C#中合并PDF时,我使用下面的代码它工作了2到3次。但是在用0 kb创建输出文件之后,当我尝试打开文件时,它显示文件正在使用中或已经被其他人打开。如果有任何遗漏,请提供帮助。
iTextSharp.text.pdf.PdfReader reader = null;
PdfImportedPage page = null;
FileStream stream = null;
Document pdfDoc = null;
try
{
using(pdfDoc = new Document())
stream = new FileStream(targetPDF, FileMode.Create);
{
using (PdfCopy pdf = new PdfCopy(pdfDoc, stream))
{
pdfDoc.Open();
var files = Directory.GetFiles(sourceDir);
foreach (string file in files)
{
reader = new iTextSharp.text.pdf.PdfReader(file);
for (int i = 0; i < reader.NumberOfPages; i++)
{
page = pdf.GetImportedPage(reader, i + 1);
pdf.AddPage(page);
}
pdf.FreeReader(reader);
reader.Close();
}
}
}
}
catch (Exception ex)
{
if (reader != null)
{
reader.Close();
}
}
答案 0 :(得分:0)
我不知道您的代码会发生什么,但是我可以提供一个合并文件列表的功能(我在我的项目中使用的功能为100%)
private bool MergePDFs(IEnumerable<string> fileNames, string targetPdf)
{
bool merged = true;
using (FileStream stream = new FileStream(targetPdf, FileMode.Create))
{
Document document = new Document();
PdfCopy pdf = new PdfCopy(document, stream);
PdfReader reader = null;
try
{
document.Open();
foreach (string file in fileNames)
{
System.Threading.Thread.Sleep(1500);
reader = new PdfReader(file);
pdf.AddDocument(reader);
reader.Close();
}
}
catch (Exception)
{
merged = false;
if (reader != null)
{
reader.Close();
}
}
finally
{
if (document != null)
{
document.Close();
}
}
}
return merged;
}