Я пытаюсь добавить водяной знак в заголовки 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;
}
Любая помощь здесь была бы высоко оценена. –