我试图将几个Word文档合并成一个Word文档。我正在使用MicrosoftSDK2.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“属性都被设置为set。
我是否可以使用一些配置选项或API调用来确保最终文档在所有部分都具有横向方向?
发布于 2014-08-27 20:59:03
XML文档是定义其内容、格式和元数据的OpenXML文档的压缩集合。使用AddAlternativeFormatImportPart将Word文档合并到一起时,将合并到原始文档(AltChunks)中的Word文档被复制到zip存档中,引用文档的XML元素将被添加到XML定义中。然后,下次任何人在Microsoft (或任何其他OpenXML兼容文档编辑器)中打开结果文档时,应用程序将在AltChunks中处理合并。在这种情况下,Microsoft 2010 (我们正在使用的版本)有一个导致Word忽略Word文档部分中定义的某些格式信息的错误。这些信息之一是定位,使得AltChunk方法在保存定位信息方面无效。
相反,我们使用了来自DocumentBuilder的OpenXml电动工具项目。这导致了更简单的代码,用两行代码解决了我们的问题:
var sourceList = documentPaths.Select(doc => new Source(new WmlDocument(doc), true)).ToList();
DocumentBuilder.BuildDocument(sourceList, outputPath);https://stackoverflow.com/questions/25392481
复制相似问题