OpenXmlSDK的文档合并问题

时间:2018-11-13 18:16:34

标签: c# openxml-sdk

我正在使用以下代码合并多个文档。但是,合并后,我在合并的文档中看到了一些问题。

public static void MergeDocuments(List<string> documentPaths, string outputFile)
    {
        if (System.IO.File.Exists(outputFile))
            System.IO.File.Delete(outputFile);

        string firstDoc = documentPaths.First();
        System.IO.File.Copy(firstDoc, outputFile);

        documentPaths.RemoveAt(0);

        using (WordprocessingDocument myDoc = WordprocessingDocument.Open(outputFile, true))
        {
            foreach (var documentPath in documentPaths)
            {
                string altChunkId = string.Format("AltChunkId{0}", Guid.NewGuid().ToString());
                MainDocumentPart mainPart = myDoc.MainDocumentPart;

                AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
                    AlternativeFormatImportPartType.WordprocessingML, altChunkId);
                using (FileStream fileStream = File.Open(documentPath, FileMode.Open))
                    chunk.FeedData(fileStream);
                AltChunk altChunk = new AltChunk();
                altChunk.Id = altChunkId;

                Paragraph para = new Paragraph(new Run((new Break() { Type = BreakValues.Page })));

                mainPart.Document.Body.InsertAfter(para, mainPart.Document.Body.LastChild);
                mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.LastChild);
                mainPart.Document.Save();
            }
        }
    }

我合并的第二个文档在合并的文档中存在一些异常的行距问题。它在每个段落之后增加了额外的空间。甚至表中的行也在它们之后留有空间。如果您仔细地查看文档,您会发现问题所在。

我已经在onedrive帐户中上传了3个文档。

文档1:https://1drv.ms/w/s!AmifSn8Lhbgbg24v61BIYPjJvTt-

文档2:https://1drv.ms/w/s!AmifSn8Lhbgbg2wv61BIYPjJvTt-

合并:https://1drv.ms/w/s!AmifSn8Lhbgbg20v61BIYPjJvTt-

我已经合并了“ Doc 1.docx”和“ Doc 2.docx”。输出为merged.docx。您可以运行以下代码来合并它们。

static void Main()
    {
        var list = new List<string>();
        list.Add(@"C:\temp\doc 1.docx");
        list.Add(@"C:\temp\doc 2.docx");

        string output = @"C:\temp\merged.docx";

        MergeDocuments(list, output);
    }

任何解决问题的帮助将不胜感激。 预先感谢。

0 个答案:

没有答案