繁体   English   中英

如何使用itextsharp合并两个Document对象

[英]How to Merge two Document objects using itextsharp

我有两个Document对象

如何使用itextsharp合并这两个Document对象?

根据Haas先生(在SO上某处的代码的帮助下),

“不幸的是,据我所知,无法合并两个Document对象。这些对象是帮助程序类,可以抽象出PDF文件格式的复杂性。这些抽象的“成本”之一是您的局限性到一个文档。但是,正如其他人指出的那样,您可以创建单独的PDF(甚至是内存中的PDF),然后将它们合并。”

所以我就是这样做的:

我使用了PdfCopyFields对象。

MemoryStream realfinalStream = new MemoryStream();
MemoryStream[] realstreams = { stream,new MemoryStream(finalStream.ToArray()) };

using (realfinalStream)
       {
           //Create our copy object
           PdfCopyFields copy = new PdfCopyFields(realfinalStream);

           //Loop through each MemoryStream
           foreach (MemoryStream ms in realstreams)
           {
               //Reset the position back to zero
               ms.Position = 0;
               //Add it to the copy object
               copy.AddDocument(new PdfReader(ms));
               //Clean up
               ms.Dispose();
           }
           //Close the copy object
           copy.Close();
       }
return File(new MemoryStream(realfinalStream.ToArray()), "application/pdf","hello.pdf");

费耶

new MemoryStream(realfinalStream.ToArray())

我这样做是因为MemoryString已关闭。

口感更加轻松:

您必须获取PDF Document内存流并将它们合并在一起!

这是一个可以完成此操作的简单功能!

        public MemoryStream MemoryStreamMerger(List<MemoryStream> streams)
        {

            MemoryStream OurFinalReturnedMemoryStream;
            using (OurFinalReturnedMemoryStream = new MemoryStream())
            {
                //Create our copy object
                PdfCopyFields copy = new PdfCopyFields(OurFinalReturnedMemoryStream);

                //Loop through each MemoryStream
                foreach (MemoryStream ms in streams)
                {
                    //Reset the position back to zero
                    ms.Position = 0;
                    //Add it to the copy object
                    copy.AddDocument(new PdfReader(ms));
                    //Clean up
                    ms.Dispose();
                }
                //Close the copy object
                copy.Close();

                //Get the raw bytes to save to disk
                //bytes = finalStream.ToArray();
            }
            return new MemoryStream(OurFinalReturnedMemoryStream.ToArray());

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM