2016-07-11 9 views
2

Я пытаюсь добавить водяной знак в заголовки Microsoft Word, используя VSTO и Shapes.AddTextEffect, кажется, что он правильно добавлен, пока я не проверю флажки «Различные страницы» и «Различные четные» & «Четные страницы» в заголовке и Дизайн нижнего колонтитула.Добавление водяного знака в документ Microsoft Word

Похоже, что просто добавьте его в Нечетный заголовок страницы, я не уверен, почему, поскольку я передаю разные типы заголовков, найдите мой код ниже.

private static void UpdateWatermark(ComObjectWrapper<Document> doc, string watermarkText, string watermarkName, Style style) 
    { 
     foreach (Section section in doc.Resource.Sections) 
     { 
      if (!watermarkText.IsNullOrEmpty()) 
      { 
       InsertWatermark(section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary], section, watermarkText, watermarkName + (int)WdHeaderFooterIndex.wdHeaderFooterPrimary, style); 
       if (section.PageSetup.DifferentFirstPageHeaderFooter == -1) 
        InsertWatermark(section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage], section, watermarkText, watermarkName + (int)WdHeaderFooterIndex.wdHeaderFooterFirstPage, style); 
       if (section.PageSetup.OddAndEvenPagesHeaderFooter == -1) 
        InsertWatermark(section.Headers[WdHeaderFooterIndex.wdHeaderFooterEvenPages], section, watermarkText, watermarkName + (int)WdHeaderFooterIndex.wdHeaderFooterEvenPages, style); 
      } 
     } 
    } 

private static void InsertWatermark(HeaderFooter header, Section section, string watermarkText, string watermarkName, Style style) 
    { 
     var wm = header.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, watermarkText, 
      style.WatermarkStyle.FontFamily, 
      style.WatermarkStyle.FontSize ?? 72, 
      MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, header.Range); 
     wm.Visible = MsoTriState.msoFalse; 
     wm.Name = watermarkName; 
     wm.Fill.ForeColor.RGB = (int)WdColor.wdColorGray10; 
     wm.Fill.BackColor.RGB = (int)WdColor.wdColorGray10; 
     wm.Fill.Transparency = 0.2f; 
     wm.Fill.Solid(); 
     wm.Rotation = -45; 

     wm.RelativeVerticalPosition = WdRelativeVerticalPosition.wdRelativeVerticalPositionPage; 
     wm.RelativeHorizontalPosition = WdRelativeHorizontalPosition.wdRelativeHorizontalPositionPage; 
     wm.Height = style.WatermarkStyle.Height != null 
      ? (float)style.WatermarkStyle.Height 
      : section.PageSetup.PageHeight - 400; 
     wm.Width = section.PageSetup.PageWidth - 200; 
     wm.WrapFormat.AllowOverlap = -1; 
     wm.WrapFormat.Side = WdWrapSideType.wdWrapBoth; 
     wm.WrapFormat.Type = WdWrapType.wdWrapNone; 

     wm.Left = (float)WdShapePosition.wdShapeCenter; 
     wm.Top = (float)WdShapePosition.wdShapeCenter; 
     wm.Visible = MsoTriState.msoCTrue; 
    } 
+0

Любая помощь здесь была бы высоко оценена. –

ответ

0

if (section.PageSetup.OddAndEvenPagesHeaderFooter == -1)

Является ли это перечисление правильно? Я еще не получил комментарии =)

+0

Да, у Microsoft Word есть -1 для true и 0 для false –

+0

попробуйте нечетно и даже seperatly, с документом, который уже имеет заголовок для обоих случаев. Возможно, офис держит. – gismo

+0

Существует 3 типа HeaderFooter, он также не отображается на первой странице, он, похоже, не прослушивает тип HeaderFooter, но при добавлении фактического верхнего или нижнего колонтитула таким образом –

Смежные вопросы