Получить номер страницы из документа Word - PullRequest
0 голосов
/ 20 марта 2020

Я использую GemBox.Document , и мне нужно выяснить, на какой странице находится моя закладка, расположенная внутри документа Word. Можно ли это сделать? Если нет, то могу ли я найти страницу, на которой расположен какой-то конкретный c текст?

Я могу найти и закладку, и текст, но я не вижу никакой опции, которая позволила бы мне получить номер страницы из этого.

DocumentModel document = DocumentModel.Load("My Document.docx");
Bookmark bookmark = document.Bookmarks["My Bookmark"];
ContentRange content = document.Content.Find("My Text").First();

1 Ответ

2 голосов
/ 20 марта 2020

Это несколько необычная задача для файлов 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 один раз, а затем прочитать содержимое всех этих полей страницы.

...