当前位置: 首页 > 知识库问答 >
问题:

在C#中在MS Word文档的不同页面添加形状

楚博雅
2023-03-14

我目前正在Visual Studio2010中开发一个.NET应用程序。我想用C#创建一个MS Word 2010文件。我已经创建了一个新文档并插入了一些段落。现在我想在文档中插入一些形状。因此,我在Microsoft.Office.Interop.Word命名空间中使用Word.Document.Shapes.AddLine()方法。我想在某些段落之后添加形状。当这些段落出现在文档的第一页时,一切都正常工作。但如果段落在另一页上,则形状也将插入到第一页。我使用以下C#代码:

//Add paragraph
Word.Paragraph oPara2;
object oRng = NewDocument.Bookmarks.get_Item(ref oEndOfDoc).Range;
oPara2= NewDocument.Content.Paragraphs.Add(ref oRng);
oPara2.Range.Text = "Text";      
oPara2.Range.InsertParagraphAfter();

//Vertical position of the shape
float position = (float) (oPara2.Range.get_Information (Word.WdInformation.wdVerticalPositionRelativeToPage) - 16.5 );
//Add Line
Word.Shape line2 = NewDocument.Shapes.AddLine(30, position, 800, position);

/* 
*
*Some more paragraphs
*
**/
//Next Paragraph with shape
Word.Paragraph oPara13;
oRng = NewDocument.Bookmarks.get_Item(ref oEndOfDoc).Range;
oPara13 = NewDocument.Content.Paragraphs.Add(ref oRng);
oPara13.Range.Text = "Text";      
oPara13.Range.InsertParagraphAfter();

//Vertical position of the shape
position = (float) (oPara13.Range.get_Information (Word.WdInformation.wdVerticalPositionRelativeToPage) - 16.5 );
//Add Line
Word.Shape line3 = NewDocument.Shapes.AddLine(30, position, 800, position);

oPara13段在文件的第二页。计算的位置值正确,但形状将插入第一页的此位置。现在我想问一下如何使形状插入到相应段落所在的正确页面。我已经尝试设置AddLine方法的锚参数,但结果不佳。

共有1个答案

邬楚青
2023-03-14

首先,如果您只需要生成.docx文件,请使用OpenXML项目。它的工作速度会快得多,而且不会遇到与Word相关的问题(比如多线程、文件未正确关闭或许可)。使用OpenXML生成文档并不简单,但如果使用productivity工具,则会变得容易得多--它允许您打开任何文档并生成用于重新创建文档的C#代码。

关于您的问题,word会在您询问的地方准确地插入它--函数接收一个绝对的垂直坐标,您提供的坐标指向第一页。所以不是使用wdVerticalPositionRelativeToPage而是使用wdVerticalPositionRelativeToTextBoundary,在常规文本的情况下,它会给出绝对坐标。或者你可以得到最后一段的位置

absoluteY= ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Range.Information(wdVerticalPositionRelativeToTextBoundary)  

ActiveDocument.Shapes.AddLine(50, absoluteY, 150, absoluteY).Select

另一个注意事项--如果您不确定如何执行某项操作,打开Word并记录您执行该操作的宏。生成的代码很有启发性。您会注意到Word经常使用select和Selection。

 类似资料:
  • 我想使用openxml在word文档中添加一个水平形状。 我试图使用OpenXML生产力工具粘贴代码,但在打开生成的文件时出现了一些错误http://schemas.microsoft.com/office/word/2010/wordml:anchorId“属性未声明)

  • 问题内容: 我正在尝试使用适用于Python的模块在MS Word文档中添加超链接。 我到处搜索(官方文档,StackOverflow,Google),但一无所获。 我想做类似的事情: 任何人都知道如何做到这一点? 问题答案: 是的,我们可以做到。参考

  • //步骤1:创建文档-对象文档Document=new Document(); 提前道谢。

  • 我正在使用iText 5.3.5创建一个pdf文档。现在,我正试图在文档的每一页上得到一个矩形,但我不太确定如何做到这一点。我试着在代码的末尾添加这个(我是在网上找到的): 但这只是在最后一页添加了矩形,这有点意义,因为我没有在任何地方使用pgCnt。我如何指定我想要页号pgCnt上的矩形,以便我可以在每一页上添加矩形? 希望我能解释清楚。提前感谢你的帮助。:)

  • 问题内容: 我在admin.py中有一个带有以下类的django应用程序: 我想将这些文件用于添加页面,但将不同的字段用于更改页面。我怎样才能做到这一点? 问题答案: 首先看一下ModelAdmin类的源代码和位于中的方法。您可以覆盖这些方法,并使用kwargs获得所需的行为。例如:

  • 在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?