在特定单词页面上插入文本框

Insert a textbox on a specific word page

我正在遍历 word 文档中的所有故事范围,以查找不符合公司标准的形状。当我找到这样的形状时,我想在它的页面右上角添加一个文本框。到目前为止我只设法将它添加到第一页。

foreach (Word.InlineShape shape in storyRange.InlineShapes)
        {
            if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture)
            {
                if (shape.Width != CurrentWordApp.CentimetersToPoints(Constants.LogoWidth))
                {
                    anchor = shape.Range;
                    shapePageNumber = (int)shape.Range.Information[Word.WdInformation.wdActiveEndPageNumber];
                    AddMarkerToPage(shapePageNumber, anchor);
                }
            }
        }     

这是 AddMarkerToPage 方法的摘录。我发现唯一可以添加文本框的地方是 header。我唯一找到 header 的地方是通过 object 部分。但是部分不等于页面。

 Word.HeaderFooter header =  anchor.Sections.First.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
 if (!pageHasMarker)
        {
            Word.Shape tbx = header.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,
                        CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromLeft),
                        CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromTop),
                        CurrentWordApp.CentimetersToPoints(Helper.errorMarkerWidth),
                         CurrentWordApp.CentimetersToPoints(Helper.errorMarkerHeight), pageRange);
            tbx.Name = "errorBox";
            tbx.TextFrame.TextRange.Text = Resources.Strings.txtDesignCheckHeaderLogo;
        }
 }

我怎样才能到达形状所在页面上的 header,或者有另一个 object 允许我在特定页面上放置文本框(我有可用形状 object)

的数字

不要使用header,使用Document.Shapes collection。

Word.Shape tbx = <document>.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,
                 CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromLeft),
                 CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromTop),
                 CurrentWordApp.CentimetersToPoints(Helper.errorMarkerWidth),
                  CurrentWordApp.CentimetersToPoints(Helper.errorMarkerHeight), anchor);
tbx.Name = "errorBox";
tbx.TextFrame.TextRange.Text = Resources.Strings.txtDesignCheckHeaderLogo;

我想你还需要这些:

tbx.RelativeVerticalPosition = WdRelativeVerticalPosition.wdRelativeVerticalPositionPage;
tbx.RelativeHorizontalPosition = WdRelativeHorizontalPosition.wdRelativeHorizontalPositionColumn;