Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用OpenXML SDK AddAlternativeFormatImportPart后Word文档方向丢失_C#_Ms Word_Orientation_Openxml - Fatal编程技术网

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

C# 使用OpenXML SDK AddAlternativeFormatImportPart后Word文档方向丢失,c#,ms-word,orientation,openxml,C#,Ms Word,Orientation,Openxml,我正在尝试将多个Word文档合并到一个Word文档中。我使用的是微软OpenXMLSDK2.5的AltChunk功能。最终报告需要横向,因此我们将每个组件文档置于横向模式。我正在使用以下代码合并文档 for (int i = 0; i < otherDocs.Length; i++) { using (var headerDoc = WordprocessingDocument.Open(headerPath, true)) { var mainPart =

我正在尝试将多个Word文档合并到一个Word文档中。我使用的是微软OpenXMLSDK2.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();
    }
}
for(int i=0;i
当我运行这段代码时,如果每个组件文档至少有一个分节符,那么最终的输出文档将混合横向和纵向

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


是否有一些配置选项或API调用可用于确保最终文档在所有部分都具有横向方向?

OpenXML Word文档是定义其内容、格式和元数据的XML文档压缩集合。使用AddAlternativeFormatImportPart将Word文档合并在一起时,将合并到原始文档(AltChunks)中的Word文档复制到zip存档中,并将引用文档的XML元素添加到XML文档定义中。然后,下次有人在MicrosoftWord(或任何其他与OpenXML兼容的文档编辑器)中打开生成的文档时,应用程序将处理AltChunk中的合并。在本例中,Microsoft Word 2010(我们正在使用的版本)有一个。其中一个信息是方向,这使得AltChunk方法在保存方向信息方面无效

相反,我们使用了来自的DocumentBuilder。这导致了更简单的代码,用两行代码解决了我们的问题:

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

该死,我面临着完全相同的问题,但我的应用程序是.net 4,电动工具需要4.5:/