C# 4.0 .NET的iText7-合并文件时出错

C# 4.0 .NET的iText7-合并文件时出错,c#-4.0,itext,itext7,C# 4.0,Itext,Itext7,我创建了一个简单的方法,可以合并多个PDF文件。 下面是我的代码: private void Merge(List<string> src, string dest) { Stopwatch sw = new Stopwatch(); sw.Start(); PdfDocument pdfDocument1 = new PdfDocument(new PdfReader(src[0]), new PdfWriter(dest)); for (int

我创建了一个简单的方法,可以合并多个PDF文件。 下面是我的代码:

private void Merge(List<string> src, string dest)
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    PdfDocument pdfDocument1 = new PdfDocument(new PdfReader(src[0]), new PdfWriter(dest));

    for (int i = 1,max=src.Count; i < max; i++)
    {
        PdfDocument pdfDocument2 = new PdfDocument(new PdfReader(src[i]));
        var pagesCount = pdfDocument2.GetNumberOfPages();
        pdfDocument2.CopyPagesTo(1, pagesCount, pdfDocument1);
        pdfDocument2.Close();
    }
    pdfDocument1.Close();
    sw.Stop();
    Debug.WriteLine(sw.Elapsed);
}
不时(在点击该按钮后)我会听到这样的异常信息:

无法从“iText.Kernel.Pdf.PdfNumber”强制转换为 'iText.Kernel.Pdf.PdfStream'

另外,我第一次点击我的应用程序需要大约100MB的内存,下一次点击它会增加到150MB,下一次点击我会使用230MB的内存,所以看起来它不会释放内存

有没有更好的方法使用iText7将多个PDF合并为一个

根据请求,我正在添加StackTrace:

w iText.Kernel.Pdf.PdfPage.GetContentStream(Int32 index)
w iText.Kernel.Pdf.PdfPage.Flush(Boolean flushXObjects)
w iText.Kernel.Pdf.PdfPage.Flush()
w iText.Kernel.Pdf.PdfDocument.Close()
w iTextSharp7_Merge.Form1.Merge(List`1 src, String dest)
w c:\Users\Misiu\Documents\Visual Studio 2013\Projects\iTextSharp7_Merge\Form1.cs:wiersz 75
以下是例外情况的详细信息:

编辑:

我已经更改了按钮单击功能,所以现在它从目录中加载100个文件名,并使用相同的列表调用
Merge
方法10次:

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        string dest = @"E:\final.pdf";
        var files = Directory.GetFiles(@"E:\PDFS", "*.pdf").OrderBy(x => x).Skip(0).Take(100).ToList();

        Stopwatch sw = new Stopwatch();
        sw.Start();

        for (int i = 1; i <= 10; i++)
        {
            Debug.WriteLine(i);
            Merge(files, dest1);
        }
        sw.Stop();
        Debug.WriteLine(sw.Elapsed);

    }
    catch (Exception exception)
    {
        Console.WriteLine(exception);
    }
}

这个异常听起来像是你的PDF在某些条目中只包含数字,而这些数字是预期的流。这反过来又意味着无效的PDF或对iText的错误期望。为了检查,您是否可以(a)发布异常的stacktrace,以及(b)共享发生这种情况的示例PDF?我同意@mkl,如果您能够共享您的PDF文件,或者至少是stacktrace,那将是非常棒的。合并文件的方式是正确的。还请看一下
PdfMerger
class。对于与iText 7相关的问题,请使用
itext7
标记。顺便说一下,对于版本7,
iTextSharp
word不再使用。它被简单地称为
iText7 for.NET
@mkl我已经用StackTrace和异常详细信息更新了我的问题(抱歉,它是波兰语的)。也许我写得不清楚,但第一次单击“合并”按钮时,一切正常,第二次或有时第三次单击(相同的输入文件,相同的输出)时,我得到了那个错误。@AlexeySubach我已修复了问题的标题,并添加了StackTrace和异常详细信息,也许他们会在第一个
Merge
调用中帮助我记住
NullReferenceException
。你可能想试试这个解决方案,也许它对你的主要问题也有帮助。这个异常听起来像是你的PDF文件在某些条目中只包含数字,而流是需要的。这反过来又意味着无效的PDF或对iText的错误期望。为了检查,您是否可以(a)发布异常的stacktrace,以及(b)共享发生这种情况的示例PDF?我同意@mkl,如果您能够共享您的PDF文件,或者至少是stacktrace,那将是非常棒的。合并文件的方式是正确的。还请看一下
PdfMerger
class。对于与iText 7相关的问题,请使用
itext7
标记。顺便说一下,对于版本7,
iTextSharp
word不再使用。它被简单地称为
iText7 for.NET
@mkl我已经用StackTrace和异常详细信息更新了我的问题(抱歉,它是波兰语的)。也许我写得不清楚,但第一次单击“合并”按钮时,一切正常,第二次或有时第三次单击(相同的输入文件,相同的输出)时,我得到了那个错误。@AlexeySubach我已修复了问题的标题,并添加了StackTrace和异常详细信息,也许他们会在第一个
Merge
调用中帮助我记住
NullReferenceException
。你可能想试试这个解决方案,也许它对你的主要问题也有帮助。
private void button1_Click(object sender, EventArgs e)
{
    try
    {
        string dest = @"E:\final.pdf";
        var files = Directory.GetFiles(@"E:\PDFS", "*.pdf").OrderBy(x => x).Skip(0).Take(100).ToList();

        Stopwatch sw = new Stopwatch();
        sw.Start();

        for (int i = 1; i <= 10; i++)
        {
            Debug.WriteLine(i);
            Merge(files, dest1);
        }
        sw.Stop();
        Debug.WriteLine(sw.Elapsed);

    }
    catch (Exception exception)
    {
        Console.WriteLine(exception);
    }
}
'iTextSharp7_Merge.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'
1
'iTextSharp7_Merge.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Misiu\documents\visual studio 2013\Projects\iTextSharp7_Merge\bin\Debug\itext.kernel.dll'
'iTextSharp7_Merge.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Misiu\documents\visual studio 2013\Projects\iTextSharp7_Merge\bin\Debug\itext.io.dll'
A first chance exception of type 'System.NullReferenceException' occurred in itext.kernel.dll
2
3
The thread '<No Name>' (0x2dd0) has exited with code 0 (0x0).
4
5
A first chance exception of type 'System.InvalidCastException' occurred in itext.kernel.dll