使用Itextsharpdll在C#中合并PDF时出错

时间:2019-03-04 13:35:38

标签: c# pdf itext

当我尝试使用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();
    }
}

enter image description here

1 个答案:

答案 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;
    }
  • 所以对于fileNames:您提供文件列表(构造一个列表) 通过列出文件从您的文件夹中删除)
  • targetPdf是outPut文件名