Word Document Несколько фонов - PullRequest
       27

Word Document Несколько фонов

0 голосов
/ 15 февраля 2012

У меня есть файл «test.docx» с 3 разделами страницы, и каждый раздел не связан с предыдущей страницей. Теперь я хочу иметь возможность устанавливать разные фоновые / водяные знаки для каждого раздела. Я просто не знаю, как выбрать другие 2 раздела (или ... не первый).

Я попробовал это так:

Application nWord = new Application();
object oMissing = System.Reflection.Missing.Value;
object fileName = @"E:\test.docx";
Document nDoc = nWord.Documents.Open(ref fileName, ref
oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref
oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref
oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
Shape nShape = null;

for (int i = 0; i < nDoc.Sections.Count; i++)
{
    nShape =
    nDoc.Sections[i].Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Shapes.AddTextEffect(Microsoft.Office.Core.MsoPresetTextEffect.msoTextEffect1,
    "TEXT" + i.ToString(), "Arial", (float)36, Microsoft.Office.Core.MsoTriState.msoTrue,
    Microsoft.Office.Core.MsoTriState.msoFalse, 0, 0, ref oMissing);

    nShape.Fill.Visible =
    Microsoft.Office.Core.MsoTriState.msoTrue;
    nShape.Line.Visible =
    Microsoft.Office.Core.MsoTriState.msoFalse;
    nShape.Fill.Solid();
    nShape.Fill.ForeColor.RGB = (Int32)WdColor.wdColorGray20;
    nShape.RelativeHorizontalPosition =
    WdRelativeHorizontalPosition.wdRelativeHorizontalPositionMargin;
    nShape.RelativeVerticalPosition =
    WdRelativeVerticalPosition.wdRelativeVerticalPositionMargin;
    nShape.Left = (float)WdShapePosition.wdShapeCenter;
    nShape.Top = (float)WdShapePosition.wdShapeCenter;
}
nWord.Visible = true;

, но он просто удаляет все 3 водяных знака в первом разделе.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

Я на самом деле нашел работу после 3 дней поиска и обсуждения. Вот мое решение:

//initialize
Application WordApp = new Application();
Document adoc = WordApp.Documents.Add();
Selection selection = adoc.ActiveWindow.Selection;
Shape wmShape;
object missing = System.Reflection.Missing.Value;
object linktofile = false;
object savewithdocument = true;
object CurrentPage = WdFieldType.wdFieldPage;
object TotalPages = WdFieldType.wdFieldNumPages;

//load background images
List<string> images = new List<string>();
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg");
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg");
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Hydrangeas.jpg");
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg");
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg");
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg");
images.Add(@"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg");

//create all sections
object breaktype = WdBreakType.wdSectionBreakNextPage;
for (int i = 0; i < images.Count - 1; i++)
{
    adoc.ActiveWindow.ActivePane.View.SeekView = WdSeekView.wdSeekMainDocument;
    selection.InsertBreak(ref breaktype);
    adoc.ActiveWindow.ActivePane.View.SeekView = WdSeekView.wdSeekCurrentPageHeader;
    selection.HeaderFooter.LinkToPrevious = false;
}

//set background images
for (int i = 0; i < adoc.Sections.Count; i++)
{
    //select section header
    adoc.Sections[i+1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Select();

    //insert pagenumbers
    adoc.ActiveWindow.ActivePane.Selection.Paragraphs.Alignment = WdParagraphAlignment.wdAlignParagraphRight;
    selection.TypeText("Pagina ");
    selection.Fields.Add(selection.Range, ref CurrentPage, ref missing, ref missing);
    selection.TypeText(" van ");
    selection.Fields.Add(selection.Range, ref TotalPages, ref missing, ref missing);

    //insert shape
    wmShape = selection.InlineShapes.AddPicture(images[i], ref linktofile, ref savewithdocument).ConvertToShape();

    //modify shape properties
    wmShape.Select(ref missing);
    wmShape.Name = "WordPictureWatermark862903805";
    wmShape.PictureFormat.Brightness = (float)0.5;
    wmShape.PictureFormat.Contrast = (float)0.5;
    wmShape.LockAspectRatio = Microsoft.Office.Core.MsoTriState.msoFalse;
    wmShape.Height = WordApp.InchesToPoints((float)11.7);
    wmShape.Width = WordApp.InchesToPoints((float)8.3);
    wmShape.WrapFormat.AllowOverlap = -1;
    wmShape.WrapFormat.Side = WdWrapSideType.wdWrapBoth;
    wmShape.WrapFormat.Type = WdWrapType.wdWrapBehind;
    wmShape.RelativeHorizontalPosition = WdRelativeHorizontalPosition.wdRelativeHorizontalPositionMargin;
    wmShape.RelativeVerticalPosition = WdRelativeVerticalPosition.wdRelativeVerticalPositionMargin;
    wmShape.Left = (float)WdShapePosition.wdShapeCenter;
    wmShape.Top = (float)WdShapePosition.wdShapeCenter;

}

WordApp.Visible = true;
0 голосов
/ 16 февраля 2012

WtFudgE

Если он сбрасывает все водяные знаки в одном и том же месте, то существует вероятность того, что секции связаны. Один из способов проверки - открыть документ Word и выполнить следующие действия:

Откройте вкладки «Верхние и нижние колонтитулы» и в разделе «Параметры» перейдите в «Верхние и нижние колонтитулы» и выберите «Другая первая страница»

Как только вы это сделали, теперь протестируйте свой код. :)

Какую версию MS Word вы используете? Может быть, я могу опубликовать соответствующий снимок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...