I’m trying to place an image on a certain page, in word interop I would do:
document.ActiveWindow.Selection.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToFirst, PageNumber)
and then place my image.
How would I accomplish this with Aspose Words? I tried the DocumentBuilder class but this has no option to navigate to a certain page.
Thank you.
Found the answer. I used the LayoutCollector class using the GetStartPageIndex to determine on which page the node was at then just placed the image on the node which matched the page number.
But I noticed that once I call the GetStartPageIndex my Document class does not display the changes I make to it when I save it. I have to save and load the Document after I call the GetStartPageIndex and then make my changes and save it that way.
Something like this, in C#:
var doc = new Document(@"SOMEPATH");
var layoutCollector = new LayoutCollector(doc);
int index = 0;
foreach(Paragraph p in doc.SelectNodes("//Body/Paragraph"))
{
if (layoutCollector.GetStartPageIndexº == PAGENUMBER)
{
break;
}
index++;
}
using(var str = new MemoryStream())
{
doc.Save(str, SaveFormat.Docx);
doc = new Document(str);
}
var builder = new DocumentBuilder(doc);
builder.MoveTo(doc.SelectNodes("//Body/Paragraph")[index]);
builder.InsertImage(@"MYIMAGE");
Hi Isidro,
Thanks for your inquiry. Please use the following code snippet to achieve your requirements. I suggest you please read following documentation links.
https://reference.aspose.com/words/net/aspose.words.layout/layoutcollector/
https://reference.aspose.com/words/net/aspose.words.layout/layoutenumerator/
Document doc = new Document(MyDir + "Sample.docx");
LayoutCollector layoutCollector = new LayoutCollector(doc);
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);
int PAGENUMBER = 2;
int index = 0;
foreach(Paragraph p in doc.SelectNodes("//Body/Paragraph"))
{
var renderObject = layoutCollector.GetEntity(p);
layoutEnumerator.Current = renderObject;
RectangleF location = layoutEnumerator.Rectangle;
int page = layoutEnumerator.PageIndex;
Console.WriteLine(page.ToString());
if (page == PAGENUMBER)
{
break;
}
index++;
}
var builder = new DocumentBuilder(doc);
builder.MoveTo(doc.SelectNodes("//Body/Paragraph")[index]);
builder.InsertImage("http://www.aspose.com/images/aspose-logo.gif");
doc.Save(MyDir + "out.docx");
Moreover, please check DocumentLayoutHelper and EnumerateLayoutElements projects sample from the offline samples pack. This sample demonstrates how to easily work with the layout elements of a document and access the pages, lines, spans etc.
Hope this helps you. Please let us know if you have any more queries.