Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接PDF文档时出现问题_C#_Itextsharp_Itext - Fatal编程技术网

C# 连接PDF文档时出现问题

C# 连接PDF文档时出现问题,c#,itextsharp,itext,C#,Itextsharp,Itext,我正在尝试从一堆其他PDF中构建一个PDF,我正在其中填写一些表单值。基本上,我正在做一个PDF邮件合并。我的代码如下: byte[] completedDocument = null; using (MemoryStream streamCompleted = new MemoryStream()) { using (Document document = new Document()) { document.Open(); PdfCopy copy = new

我正在尝试从一堆其他PDF中构建一个PDF,我正在其中填写一些表单值。基本上,我正在做一个PDF邮件合并。我的代码如下:

byte[] completedDocument = null;
using (MemoryStream streamCompleted = new MemoryStream())
{
    using (Document document = new Document())
    {
    document.Open();
    PdfCopy copy = new PdfCopy(document, streamCompleted);
    copy.Open();

    foreach (var item in eventItems)
    {
        byte[] mergedDocument = null;
        PdfReader reader = new PdfReader(pdfTemplates[item.DataTokens[NotifyTokenType.OrganisationID]]);
        using (MemoryStream streamTemplate = new MemoryStream())
        {
            using (PdfStamper stamper = new PdfStamper(reader, streamTemplate))
            {
                foreach (var token in item.DataTokens)
                {
                    if (stamper.AcroFields.Fields.Any(fld => fld.Key == token.Key.ToString()))
                    {
                        stamper.AcroFields.SetField(token.Key.ToString(), token.Value);
                    }
                }
                stamper.FormFlattening = true;
                stamper.Writer.CloseStream = false;
            }

            mergedDocument = new byte[streamTemplate.Length];
            streamTemplate.Position = 0;
            streamTemplate.Read(mergedDocument, 0, (int)streamTemplate.Length);
        }
        reader = new PdfReader(mergedDocument);

        for (int i = 1; i <= reader.NumberOfPages; i++)
        {
            document.SetPageSize(PageSize.A4);
            copy.AddPage(copy.GetImportedPage(reader, i));
        }
    }
}
completedDocument = new byte[streamCompleted.Length];
streamCompleted.Position = 0;
streamCompleted.Read(completedDocument, 0, (int)streamCompleted.Length);

注释为null,因此会引发null ref异常。我应该做些什么来实例化它吗

您使用的是什么版本的iTextSharp?
文档
类未实现
IDisposable
,因此无法使用块将其包装在
中。

I已更改:

document.Open();
PdfCopy copy = new PdfCopy(document, streamCompleted);


它解决了这个问题。这个库需要更好的异常处理。当你做了一些轻微的错误时,它会可怕地倒下,让你不知道你做错了什么。如果我没有源代码,我不知道我怎么可能解决这个问题。

事实上,最新版本(5.1.1)确实在等待!是的,5.1.1,文档确实实现了IDiposable,因此我发布的代码可以编译;-)另一方面,你们中有人试过在32位环境中生成大于320兆的PDF吗?我还没有发现任何PDF库能够在写入流时卸载对象,因此遇到了相当大的障碍——使用64位可以解决这个问题,但我的环境需要32位。
document.Open();
PdfCopy copy = new PdfCopy(document, streamCompleted);
PdfCopy copy = new PdfCopy(document, streamCompleted);
document.Open();