共同工作:DisplayList 和 TextPage#

以下是如何将这些类一起使用的一些说明。

在某些情况下,当您退回到这里解释的详细级别时,可能会实现性能改进。

创建一个显示列表#

A DisplayList 表示一个解释后的文档页面。生成像素图、文本提取和文本搜索的方法——在幕后——都使用页面的显示列表来执行它们的任务。如果一个页面必须被渲染多次(例如,因缩放级别变化),或者如果文本搜索和文本提取都应该执行,则可以节省开销,如果显示列表只创建一次,然后用于所有其他任务。

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

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

请注意,对于接下来的所有内容,仅需要显示列表 - 相应的 页面 对象可能已被删除。

生成位图#

以下内容从一个 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

进一步的性能提升#

位图#

如在章节中解释的:

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

文本页面#

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

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

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

但是如果您确实需要图像,请使用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以获取更多信息。