从Word文档获取页码 [英] Get page number from Word document

查看:0
本文介绍了从Word文档获取页码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用GemBox.Document,我需要找出我的书签位于Word文档中的哪一页。这是可以做到的吗? 如果没有,我是否可以找到某些特定文本所在的页面?

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

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

推荐答案

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

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

不过,下面是如何使用GemBox.Document:

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

这篇关于从Word文档获取页码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆