使用interop c#格式化Word文档

时间:2016-06-16 08:22:41

标签: c# .net wpf ms-word office-interop

我目前正在尝试添加图片,文字和其他图片。但是,当我插入文本时,第一个图像被替换。

var footer = document.Content.InlineShapes.AddPicture(AppDomain.CurrentDomain.BaseDirectory + "Images\\footer.png").ConvertToShape();
footer.WrapFormat.Type = WdWrapType.wdWrapTopBottom;
document.Content.Text = input;
var header = document.Content.InlineShapes.AddPicture(AppDomain.CurrentDomain.BaseDirectory+"Images\\header.png").ConvertToShape();
header.WrapFormat.Type = WdWrapType.wdWrapTopBottom;

如何将两张图片保存在我的文档中?

更新 根据Rene的回答,这就是文件的呈现方式。 enter image description here

1 个答案:

答案 0 :(得分:2)

属性Content是一个覆盖整个文档的Range对象。 Range对象包含所有添加的内容。

设置Text属性会替换Range的所有内容,包括非文本对象。

要以合作的方式插入文本和图像,请使用InsertAfter方法,如下所示:

var footer = document
    .Content
    .InlineShapes
    .AddPicture(AppDomain.CurrentDomain.BaseDirectory + "Images\\footer.png")
     .ConvertToShape();
footer.WrapFormat.Type = WdWrapType.wdWrapTopBottom;

// be cooperative with what is already in the Range present
document.Content.InsertAfter(input);

var header = document
    .Content
    .InlineShapes
    .AddPicture(AppDomain.CurrentDomain.BaseDirectory+"Images\\header.png")
    .ConvertToShape();
header.WrapFormat.Type = WdWrapType.wdWrapTopBottom;

如果您希望更好地控制内容的显示位置,可以引入段落,其中每个段落都有自己的Range。在这种情况下,您的代码可能如下所示:

var footerPar = document.Paragraphs.Add();
var footerRange = footerPar.Range;
var inlineshape = footerRange.InlineShapes.AddPicture(AppDomain.CurrentDomain.BaseDirectory + "footer.png");
var footer = inlineshape.ConvertToShape();
footer.Visible = Microsoft.Office.Core.MsoTriState.msoCTrue;
footer.WrapFormat.Type = WdWrapType.wdWrapTopBottom;

var inputPar = document.Paragraphs.Add();
inputPar.Range.Text = input;
inputPar.Range.InsertParagraphAfter();

var headerPar = document.Paragraphs.Add();
var headerRange = headerPar.Range;
var headerShape = headerRange.InlineShapes.AddPicture(AppDomain.CurrentDomain.BaseDirectory + "header.png");
var header = headerShape.ConvertToShape();
header.Visible = Microsoft.Office.Core.MsoTriState.msoCTrue;
header.WrapFormat.Type = WdWrapType.wdWrapTopBottom;