C# 如何将多个文档合并为一个文档

C# 如何将多个文档合并为一个文档,c#,pdfsharp,migradoc,C#,Pdfsharp,Migradoc,有一个示例代码,介绍如何将多个Pdf文档添加到中的一个文档中。但是我想把多个文档合并成一个文档 到目前为止,我掌握的代码是: private void GeneratePdfDocument(IEnumerable<Document> parts, string fileName) { using (var outputDocument = new PdfDocument()) { foreach (var pa

有一个示例代码,介绍如何将多个Pdf文档添加到中的一个文档中。但是我想把多个文档合并成一个文档

到目前为止,我掌握的代码是:

    private void GeneratePdfDocument(IEnumerable<Document> parts, string fileName)
    {
        using (var outputDocument = new PdfDocument())
        {
            foreach (var part in parts)
            {
                var renderer = new PdfDocumentRenderer(false, PdfFontEmbedding.Always);

                renderer.Document = part;

                renderer.RenderDocument();

                var pdfPart = renderer.PdfDocument;

                for (var pageIndex = 0; pageIndex < pdfPart.PageCount; pageIndex++)
                {
                    outputDocument.AddPage(pdfPart.Pages[pageIndex]);
                }
            }

            // create the PDF
            outputDocument.Save(fileName);
        }
    }
一个解决方案是将每个文档部分创建为单独的PDF,然后将它们合并到一个PDF文件中,但并非所有部分都需要整个页面

编辑: 我还尝试了以下方法:

            var combineDocument = new Document();
            foreach (var part in parts)
            {
                //for(var styleIndex = 0; styleIndex < part.Styles.Count; styleIndex++)
                //{
                //    combineDocument.Add(part.Styles[styleIndex]);
                //}

                for(var sectionIndex = 0; sectionIndex < part.Sections.Count; sectionIndex++)
                {
                    var section = part.Sections[sectionIndex].Clone();
                    combineDocument.Add(section);
                }
            }
其想法是将每个文档的部分复制到CombinedDocument实例中,但我无法检索样式实例,结果也不符合预期

问题:
是否可以将MigraDoc文档实例合并到一个文档中?

要将一个MigraDoc文档的元素传输到另一个文档中,请尝试要传输的元素的克隆方法。这也可用于重复使用同一文档中的元素。 为此,必须遍历所有要复制的文档元素,并为每个元素调用Clone,为接收文档调用Add,将克隆对象作为参数传递

要解决原始问题中显示的PDFsharp异常,可以将PdfDocument保存到MemoryStream中,然后使用PdfDocumentOpenMode.Import再次打开它


我更喜欢的解决方案是:编写创建文档或其部分的方法。调用这些方法两次—一次创建一个大文档,一次创建几个小文档。因此,您可以避免克隆和保存/读取。

我已经准备好了首选解决方案,因此每个部分都单独创建为一个文档,但问题是:如何从它们中创建一个“PDF”?不要将每个部分创建为单独的文档,而是编写例程,将文档作为参数并添加其内容。然后,您可以很容易地获得单独的文档,每个文档有一个方面,或者一个包含所有方面的大文档,可能有一个目录。-另一个选项是遍历您拥有的小文档,并调用Clone将每个元素添加到另一个文档中。
            var combineDocument = new Document();
            foreach (var part in parts)
            {
                //for(var styleIndex = 0; styleIndex < part.Styles.Count; styleIndex++)
                //{
                //    combineDocument.Add(part.Styles[styleIndex]);
                //}

                for(var sectionIndex = 0; sectionIndex < part.Sections.Count; sectionIndex++)
                {
                    var section = part.Sections[sectionIndex].Clone();
                    combineDocument.Add(section);
                }
            }