Это несколько необычная задача для файлов Word, вы видите, что у этих файлов нет концепции страницы, они относятся к типу потокового документа, концепция страницы указана c для приложения Word, которое ее отображает (например, Microsoft Word).
Типы потоковых документов (DO C, DOCX, RTF, HTML, et c.) определяют контент в потоковом режиме, он предназначен для более легкое редактирование.
С другой стороны, типы фиксированных документов (форматы PDF, XPS и т. д. c.) имеют концепцию страницы, поскольку содержимое является фиксированным, оно указывает, на какой странице и в каком месте указываются некоторые данные * Будет отображаться содержимое 1024 *, оно должно отображаться одинаково при просмотре в любом приложении или на любом экране.
Тем не менее, вот как вы можете получить номер страницы из некоторого ContentPosition
, используя GemBox.Document :
static int GetPageNumber(ContentPosition position)
{
DocumentModel document = position.Parent.Document;
Field pageField = new Field(document, FieldType.Page);
Field importedPageField = position.InsertRange(pageField.Content).Parent as Field;
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });
int pageNumber = int.Parse(importedPageField.Content.ToString());
importedPageField.Content.Delete();
return pageNumber;
}
Кроме того, вот как вы можете его использовать:
DocumentModel document = DocumentModel.Load("My Document.docx");
Bookmark bookmark = document.Bookmarks["My Bookmark"];
ContentRange content = document.Content.Find("My Text").First();
int bookmarkPageNumber = GetPageNumber(bookmark.Start.Content.Start);
int contentPageNumber = GetPageNumber(content.Start);
Наконец, обратите внимание, что метод GetPaginator
является довольно сложной задачей (в основном, он похож на сохранение весь документ в PDF), это может быть дорого, если у вас достаточно большой документ.
Итак, если вам нужно использовать GetPageNumber
несколько раз (например, чтобы узнать номер страницы каждой закладки, которая у вас есть), то вам следует подумать об изменении кода, чтобы сначала импортировать все необходимые поля страницы, а затем вызвать метод GetPaginator
один раз, а затем прочитать содержимое всех этих полей страницы.