2016-07-11 32 views
2

Ich versuche, Microsoft Word-Headern mit VSTO und Shapes.AddTextEffect ein Wasserzeichen hinzuzufügen, scheint es korrekt hinzuzufügen, bis ich die Kontrollkästchen Erste Seite und Verschiedene ungerade & gerade Seiten in Header und überprüfen Fußzeile Design.Hinzufügen eines Wasserzeichens zu Microsoft Word Dokument

Es scheint nur zu dem ungeraden Seitenkopf hinzuzufügen, ich bin nicht sicher, warum, wie ich die verschiedenen Header-Typen übergebe, finden Sie meinen Code unten.

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

Jede Hilfe hier würde sehr geschätzt werden. –

Antwort

0

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

Ist das Enum richtig? Ich habe noch nicht kommentiert kommen =)

+0

Ja, Microsoft Word scheint -1 für True und 0 für False –

+0

versuchen ungerade und sogar seperat, mit einem Dokument, das bereits eine Überschrift für beide Fälle hat. Vielleicht ist Büro derpy. – gismo

+0

Es gibt 3 HeaderFooter-Typen, es wird auch nicht auf der ersten Seite angezeigt, es scheint nicht auf den HeaderFooter-Typ zu hören, aber es tut, wenn Sie eine tatsächliche Kopf- oder Fußzeile hinzufügen –