协同工作:DisplayList 和 TextPage#

这里是一些关于如何一起使用这些类的说明。

在某些情况下,回退到此处解释的详细级别可以实现性能提升。

创建 DisplayList#

一个 DisplayList 表示一个已解析的文档页面。用于创建像素图、文本提取和文本搜索的方法——在幕后——都使用页面的显示列表来执行其任务。如果一个页面需要多次渲染(例如因为缩放级别改变),或者如果需要同时执行文本搜索和文本提取,那么如果只创建一次显示列表并在所有其他任务中使用它,则可以节省开销。

>>> dl = page.get_displaylist()              # create the display list

您还可以“在列表中”为多个页面创建显示列表,可能在文档打开期间、空闲时间,或者在页面首次被访问时(例如在 GUI 脚本中)存储它。

请注意,对于接下来的一切,只需要显示列表即可——相应的 Page 对象可能已被删除。

生成像素图#

以下代码从 DisplayList 创建一个 Pixmap。参数与 Page.get_pixmap() 的参数相同。

>>> pix = dl.get_pixmap()                    # create the page's pixmap

此语句的执行时间可能比 Page.get_pixmap() 短至 50%。

提取文本#

使用上面的同一个 TextPage 对象,我们现在可以立即使用任意或所有 5 种文本提取方法。

注意

上面,我们在没有参数的情况下创建了文本页面。这导致默认参数为 3(保留 ligatures 和空白),因此不会提取图像——请参见下文。

>>> txt  = tp.extractText()                  # plain text format
>>> json = tp.extractJSON()                  # json format
>>> html = tp.extractHTML()                  # HTML format
>>> xml  = tp.extractXML()                   # XML format
>>> xml  = tp.extractXHTML()                 # XHTML format

进一步的性能提升#

像素图#

正如 Page 章中所解释的

如果您不需要透明度,在创建像素图时将 alpha = 0。这将节省 25% 的内存(如果是 RGB,这是最常见的情况),并可能节省 5% 的执行时间(取决于 GUI 软件)。

TextPage#

如果您不需要提取页面文本的同时提取图像,可以设置以下选项

>>> flags = pymupdf.TEXT_PRESERVE_LIGATURES | pymupdf.TEXT_PRESERVE_WHITESPACE
>>> tp = dl.get_textpage(flags)

这将为 HTML、XHTML 和 JSON 文本提取节省大约 25% 的总执行时间,并且如果文档是图形导向的,将大幅减少存储空间(内存和磁盘空间)。

但是,如果您确实需要图像,请将 flags 的值设置为 7

>>> flags = pymupdf.TEXT_PRESERVE_LIGATURES | pymupdf.TEXT_PRESERVE_WHITESPACE | pymupdf.TEXT_PRESERVE_IMAGES

本软件按“原样”提供,不提供任何明示或暗示的担保。本软件根据许可协议分发,未经许可协议明确授权,不得复制、修改或分发。请参阅 artifex.com 的许可信息或联系 Artifex Software Inc.,地址:39 Mesa Street, Suite 108A, San Francisco CA 94129, United States,以获取更多信息。