C# 从Word文档中获取页码

C# 从Word文档中获取页码,c#,docx,page-numbering,gembox-document,C#,Docx,Page Numbering,Gembox Document,我正在使用,我需要找出我的书签位于Word文档中的哪个页面。这能做到吗? 如果没有,那么我可以找出某个特定文本所在的页面吗 我可以找到书签和文本,但我看不到任何选项可以让我从中获取页码 DocumentModel document=DocumentModel.Load(“My document.docx”); Bookmark Bookmark=document.Bookmarks[“我的书签”]; ContentRange content=document.content.Find(“我的文本

我正在使用,我需要找出我的书签位于Word文档中的哪个页面。这能做到吗? 如果没有,那么我可以找出某个特定文本所在的页面吗

我可以找到书签和文本,但我看不到任何选项可以让我从中获取页码

DocumentModel document=DocumentModel.Load(“My document.docx”);
Bookmark Bookmark=document.Bookmarks[“我的书签”];
ContentRange content=document.content.Find(“我的文本”).First();

对于Word文件来说,这是一个有点不常见的任务,您可以看到这些文件本身没有页面概念,它们是流文档类型,页面概念特定于呈现它的Word应用程序(如Microsoft Word)

流文档类型(DOC、DOCX、RTF、HTML等格式)以一种可流的方式定义内容,其设计便于编辑。
另一方面,固定文档类型(PDF、XPS等格式)有一个页面概念,因为内容是固定的,它指定某些特定内容将在哪个页面和哪个位置呈现,设计为在任何应用程序或任何屏幕上查看时呈现相同的内容

然而,以下是如何使用GemBox从某些
ContentPosition
中获取页码。文档:

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
(例如,查找您拥有的每个书签的页码),然后,您应该考虑更改代码,以便首先导入所需的所有页字段,然后只调用一次代码> GETPAGIN程序> /Cult>方法,然后读取所有这些页字段的内容。