从Word文档中获取页码
Get page number from Word document
我正在使用 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、DOCX、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
方法,然后读取所有这些页面字段的内容。
我正在使用 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、DOCX、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
方法,然后读取所有这些页面字段的内容。