Проблема слияния документов с OpenXmlSDK - PullRequest
0 голосов
/ 13 ноября 2018

Я использую приведенный ниже код для объединения нескольких документов.Но после слияния я вижу некоторые проблемы в объединенном документе.

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();
            }
        }
    }

Во втором объединяемом документе возникают проблемы с межстрочным интервалом в объединенном документе.Это добавляет дополнительное пространство после каждого из абзацев.Даже строки в таблице также получают место после них.Если вы любезно просмотрите документы, вы заметите проблемы.

Я загрузил 3 документа в учетную запись onedrive.

Документ 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);
    }

Любая помощь по решению проблем будет высоко оценена.Заранее спасибо.

...