2012-02-15 2 views
0

3 페이지 섹션이있는 "test.docx"파일이 있고 각 섹션은 이전 페이지와 연결이 끊어져 있습니다. 이제 각 섹션마다 다른 배경/워터 마크를 설정할 수 있기를 바랍니다. 나는 다른 두 섹션 (또는 첫 번째 섹션이 아닌)을 선택하는 방법을 모른다. Word 문서 여러 배경

나는 이런 식으로 시도 :

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 워터 마크 삭제합니다.

아이디어가 있으십니까?

답변

0

검색 및 토론 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

WtFudgE

그 다음 섹션이 연결되어있을 가능성이있을 수 있습니다 같은 장소에있는 모든 물 마크를 삭제됩니다. 확인하는 방법 중 하나는 Word 문서를 열고 수행하는 것

열기 머리글과 바닥 글 탭 및 옵션으로는, 헤더와 레이아웃으로 이동하여 "다른 첫 페이지"

일단 당신을 선택한 다음 이제 코드를 테스트 해 보겠습니다. :)

사용중인 MS Word 버전은 무엇입니까? 어쩌면 관련 스냅 샷을 게시 할 수 있습니까?

+0

또한 VS 버전을 확인하여 붙여 넣기 전에 코드를 테스트 할 수 있습니다. –

+0

아니요 링크되지 않았습니다. 이미 모든 페이지가 이전 페이지와의 연결이 끊어졌습니다. 나는 2007 년 및 visual studio 2010이라는 단어를 사용하고 있습니다. – WtFudgE

+0

@WtFudgE : 좋습니다. 마지막 요청이 하나 있습니다. wikisend.com에서 문서를 업로드하고 여기에 링크를 붙여서 코드를 테스트 할 수 있습니까? –