Word文档方向丢失后使用OpenXML SDK AddAlternativeFormatImportPart

本文关键字:OpenXML SDK AddAlternativeFormatImportPart 文档 方向 Word | 更新日期: 2023-09-27 18:18:48

我正在尝试将几个Word文档合并为一个Word文档。我正在使用微软的OpenXML SDK 2.5中的AltChunk功能。最终报告需要横向显示,因此我们将每个组件文档设置为横向模式。我正在使用以下代码合并文档。

for (int i = 0; i < otherDocs.Length; i++)
{
    using (var headerDoc = WordprocessingDocument.Open(headerPath, true))
    {
        var mainPart = headerDoc.MainDocumentPart;
        string altChunkId = "AltChunkId" + i;
        var chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
        using (var fileStream = File.Open(otherDocs[i], FileMode.Open))
        {
            chunk.FeedData(fileStream);
        }
        var altChunk = new AltChunk();
        altChunk.Id = altChunkId;
        mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
        mainPart.Document.Save();
        DocumentWriter.SetPrintOrientation(headerDoc, PageOrientationValues.Landscape);
        headerDoc.Close();
    }
}

当我运行这段代码时,如果每个组件文档至少有一个分段分隔符,那么最终的输出文档将混合横向和纵向方向。

DocumentWriter.SetPrintOrientation()方法是根据MSDN的指令实现的。它似乎对文档的实际方向没有影响。我还检查了底层XML文件,所有"orient"属性都设置为横向。

是否有一些配置选项或API调用,我可以使用,以确保最终的文档将横向跨越所有部分?

Word文档方向丢失后使用OpenXML SDK AddAlternativeFormatImportPart

OpenXML Word文档是定义其内容、格式和元数据的XML文档的压缩集合。当使用AddAlternativeFormatImportPart合并Word文档时,被合并到原始文档(AltChunks)中的Word文档被复制到zip存档中,引用文档的XML元素被添加到XML文档定义中。然后,下次任何人在Microsoft Word(或任何其他兼容OpenXML的文档编辑器)中打开结果文档时,应用程序将在AltChunks中处理合并。在这种情况下,Microsoft Word 2010(我们正在使用的版本)有一个错误,导致Word忽略了Word文档部分中定义的一些格式信息。这些信息之一是方向,这使得AltChunk方法在保存方向信息方面无效。

相反,我们使用了OpenXml Power Tools项目中的DocumentBuilder。这样就产生了更简单的代码,只用两行就解决了问题:

var sourceList = documentPaths.Select(doc => new Source(new WmlDocument(doc), true)).ToList();
DocumentBuilder.BuildDocument(sourceList, outputPath);